Changeset 773
- Timestamp:
- 12/11/09 01:52:31 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/smartreader/reader-nagra.c
r764 r773 288 288 return 0; 289 289 } 290 cs_ ri_log("[nagra-reader] Session Key: %s", cs_hexdump(1, sessi, 16));290 cs_debug("[nagra-reader] session key: %s", cs_hexdump(1, sessi, 16)); 291 291 if (!CamStateRequest()) 292 292 { … … 294 294 return 0; 295 295 } 296 if SENDDATETIME DateTimeCMD(); 296 if SENDDATETIME 297 { 298 DateTimeCMD(); 299 } 300 if RENEW_SESSIONKEY 301 { 302 cs_ri_log("Negotiate sessionkey was not successfull! Please check rsa key and boxkey"); 303 return 0; 304 } 297 305 return 1; 298 306 } … … 383 391 } 384 392 385 int DumpDatatype(unsigned char dtbyte) 386 { 387 static unsigned char cmd22[] = {0x21, 0x00, 0x09, 0xA0, 0xCA, 0x00, 0x00, 0x04, 0x22, 0x01, 0x01, 0x0E}; 388 // int r; 389 unsigned char dtactualsize; 390 // ushort chid; 391 // char ds[16], de[16]; 392 // cmd22[0x0A] = dtbyte; 393 394 while(1) 395 { 396 cmd22[0x0B] = 7; 397 if( (do_cmd(0x22,0x03,0xa2,cmd22[0x0B],&cmd22[0x0A]))<=0 ) 398 { 399 cs_debug("[nagra-reader] DT read failed"); 400 return 0; 393 void addProvider(int id) 394 { 395 int i; 396 int toadd=1; 397 int res; 398 for (i=0; i<reader[ridx].nprov; i++) 399 { 400 if ((cta_res[7]==reader[ridx].prid[i][2]) && (cta_res[8]==reader[ridx].prid[i][3])) 401 { 402 toadd = 0; 401 403 } 402 dtactualsize = cta_res[2]; 403 if(!dtactualsize) break; 404 405 cmd22[0x0A] = dtbyte | 0xC0; 406 cmd22[0x0B] = dtactualsize + 3; 407 if( (do_cmd(0x22,0x03,0xa2,cmd22[0x0B],&cmd22[0x0A]))<=0 ) 408 { 409 cs_debug("[nagra-reader] DT read failed"); 410 return 0; 411 } 412 cmd22[0x0A] = dtbyte | 0x80; 413 } 414 return 1; 415 } 416 417 int DumpDatatypes(void) 418 { 419 //int r; 420 unsigned char dtbyte = 0; 421 unsigned short dtflags; 422 while(1) 423 { 424 if( (do_cmd(0xc7,0x02,0xb7,0x04,NULL))<=0) 425 { 426 cs_debug("[nagra-reader] Determine updated DTs failed"); 427 return 0; 428 } 429 memcpy(&dtflags,cta_res+2,2); 430 if(!dtflags) 431 break; 432 for(dtbyte=0; dtbyte < 16; dtbyte++) 433 if(dtflags & (0x01 << dtbyte)) 434 //if (dtbyte == 0x01 || dtbyte == 0x08 || dtbyte == 0x00) break; 435 if (!DumpDatatype(dtbyte)) break; 436 } 437 return 1; 438 } 439 404 } 405 if (toadd) 406 { 407 reader[ridx].prid[reader[ridx].nprov][0]=0; 408 reader[ridx].prid[reader[ridx].nprov][1]=0; 409 reader[ridx].prid[reader[ridx].nprov][2]=cta_res[7]; 410 reader[ridx].prid[reader[ridx].nprov][3]=cta_res[8]; 411 memcpy(reader[ridx].sa[reader[ridx].nprov], reader[ridx].sa[0], 4); 412 reader[ridx].nprov+=1; 413 } 414 } 415 440 416 int ParseDataType(unsigned char dt) 441 417 { … … 455 431 } 456 432 case TIERS: 457 if(cta_res[ 7]==0x88 || cta_res[7]==0x08 || cta_res[7]==0x0C)433 if(cta_res[4]==0x88 || cta_res[4]==0x08 || cta_res[4]==0x0C || cta_res[4]==0x8C) 458 434 { 459 int id=(cta_res[10]*256)|cta_res[11]; 460 int tLowId=(cta_res[20]*256)|cta_res[21]; 461 int tHiId=(cta_res[31]*256)|cta_res[32]; 462 char date1[15], time1[15], date2[15], time2[15]; 463 Date(cta_res+23,date1,time1); 464 Date(cta_res+27,date2,time2); 465 cs_log("|%04X|%04X|%04X|%s|%s|",id,tLowId,tHiId,date1,time1); 466 cs_log("| | | |%s|%s|",date2,time2); 435 int id=(cta_res[7]*256)|cta_res[8]; 436 int tLowId=(cta_res[17]*256)|cta_res[18]; 437 int tHiId=(cta_res[28]*256)|cta_res[29]; 438 char date1[12], time1[12], date2[12], time2[12]; 439 Date(cta_res+20,date1,time1); 440 Date(cta_res+24,date2,time2); 441 cs_ri_log("|%04X|%04X |%04X |%s|%s|",id,tLowId,tHiId,date1,time1); 442 cs_ri_log("| | | |%s|%s|",date2,time2); 443 addProvider(id); 444 445 467 446 } 468 447 case 0x08: … … 537 516 if(!GetDataType(CAMDATA,0x55,10)) return 0; 538 517 cs_debug("[nagra-reader] CAMDATA Done"); 539 /*540 //DumpDatatypes();541 518 if(!GetDataType(0x04,0x44,MAX_REC)) return 0; 542 519 cs_debug("[nagra-reader] DT04 DONE"); 520 CamStateRequest(); 521 cs_ri_log("|id |tier low|tier high| dates |"); 522 cs_ri_log("+----+--------+---------+-------------------+"); 523 if(!GetDataType(TIERS,0x57,MAX_REC)) return 0; 524 CamStateRequest(); 543 525 if(!GetDataType(DT06,0x16,MAX_REC)) return 0; 544 526 cs_debug("[nagra-reader] DT06 DONE"); 545 */546 527 CamStateRequest(); 547 528 if (!NegotiateSessionKey()) … … 550 531 return 0; 551 532 } 552 return (1);533 return 1; 553 534 } 554 535 555 536 int nagra2_card_info(void) 556 537 { 557 if(!GetDataType(TIERS,0x57,MAX_REC)) return 0; 558 cs_debug("[nagra-reader] TIERS DONE"); 559 cs_ri_log("ROM: %c %c %c %c %c %c %c %c", rom[0], rom[1], rom[2],rom[3], rom[4], rom[5], rom[6], rom[7]); 560 cs_ri_log("REV: %c %c %c %c %c %c %c", rom[8], rom[9], rom[10], rom[11], rom[12], rom[13], rom[14]); 561 cs_ri_log("SER: %s", cs_hexdump (1, reader[ridx].hexserial, 4)); 562 cs_ri_log("CAID: %04X",reader[ridx].caid[0]); 538 int i; 539 cs_ri_log("ROM: %c %c %c %c %c %c %c %c", rom[0], rom[1], rom[2],rom[3], rom[4], rom[5], rom[6], rom[7]); 540 cs_ri_log("REV: %c %c %c %c %c %c", rom[9], rom[10], rom[11], rom[12], rom[13], rom[14]); 541 cs_ri_log("SER: %s", cs_hexdump (1, reader[ridx].hexserial, 4)); 542 cs_ri_log("CAID: %04X",reader[ridx].caid[0]); 543 cs_ri_log("Prv.ID: %s(sysid)",cs_hexdump (1,reader[ridx].prid[0],4)); 544 for (i=1; i<reader[ridx].nprov; i++) 545 { 546 cs_ri_log("Prv.ID: %s",cs_hexdump (1,reader[ridx].prid[i],4)); 547 } 563 548 cs_log("ready for requests"); 564 return (1);549 return 1; 565 550 } 566 551
Note:
See TracChangeset
for help on using the changeset viewer.