Changeset 7230
- Timestamp:
- 08/03/12 17:16:14 (12 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/icc_async.c
r7217 r7230 427 427 //try to resync 428 428 unsigned char resync[] = { 0x21, 0xC0, 0x00, 0xE1 }; 429 Protocol_T1_Command (reader, resync, sizeof(resync), rsp, lr); 430 reader->ifsc = DEFAULT_IFSC; 429 ret = Protocol_T1_Command (reader, resync, sizeof(resync), rsp, lr); 430 if (ret == OK) { 431 reader->ifsc = DEFAULT_IFSC; 432 rdr_log(reader, "T1 Resync command succesfull new ifsc = %i", reader->ifsc); 433 } 434 else { 435 rdr_log(reader, "T1 Resync command error, trying to reactivate!"); 436 ATR atr; 437 ICC_Async_Activate(reader, &atr, reader->deprecated); 438 return ERROR; 439 } 431 440 } 432 441 break; … … 463 472 int32_t ICC_Async_Transmit (struct s_reader *reader, uint32_t size, BYTE * data) 464 473 { 474 int32_t ret; 465 475 rdr_ddump_mask(reader, D_IFD, data, size, "Transmit:"); 466 476 BYTE *buffer = NULL, *sent; … … 497 507 case R_SC8in1: 498 508 case R_MOUSE: 499 call (Phoenix_Transmit (reader, sent, size, reader->block_delay, reader->char_delay));509 ret = Phoenix_Transmit (reader, sent, size, reader->block_delay, reader->char_delay); 500 510 break; 501 511 #if defined(WITH_LIBUSB) 502 512 case R_SMART: 503 call (SR_Transmit(reader, sent, size));513 ret = SR_Transmit(reader, sent, size); 504 514 break; 505 515 #endif 506 516 case R_INTERNAL: 507 517 #if defined(WITH_COOLAPI) 508 call (Cool_Transmit(reader, sent, size));518 ret = Cool_Transmit(reader, sent, size); 509 519 #elif defined(WITH_AZBOX) 510 call (Azbox_Transmit(reader, sent, size));520 ret = Azbox_Transmit(reader, sent, size); 511 521 #else 512 call (Phoenix_Transmit (reader, sent, size, 0, 0)); //the internal reader will provide the delay522 ret = Phoenix_Transmit (reader, sent, size, 0, 0); //the internal reader will provide the delay 513 523 #endif 514 524 break; … … 518 528 } 519 529 520 if ( buffer)521 free (buffer);522 rdr_debug_mask(reader, D_IFD, "Transmit succesful");523 return OK;530 if (ret) rdr_debug_mask(reader, D_IFD, "Transmit error!"); 531 else rdr_debug_mask(reader, D_IFD, "Transmit succesful"); 532 if (buffer) free (buffer); 533 return ret; 524 534 } 525 535 … … 527 537 { 528 538 539 int32_t ret; 529 540 if (reader->crdr.active==1) { 530 541 call(reader->crdr.receive(reader, data, size)); … … 543 554 case R_SC8in1: 544 555 case R_MOUSE: 545 call (Phoenix_Receive (reader, data, size, reader->read_timeout));556 ret = Phoenix_Receive (reader, data, size, reader->read_timeout); 546 557 break; 547 558 #if defined(WITH_LIBUSB) 548 559 case R_SMART: 549 call (SR_Receive(reader, data, size));560 ret = SR_Receive(reader, data, size); 550 561 break; 551 562 #endif 552 563 case R_INTERNAL: 553 564 #if defined(WITH_COOLAPI) 554 call (Cool_Receive(reader, data, size));565 ret = Cool_Receive(reader, data, size); 555 566 #elif defined(WITH_AZBOX) 556 call (Azbox_Receive(reader, data, size));567 ret = Azbox_Receive(reader, data, size); 557 568 #else 558 call (Phoenix_Receive (reader, data, size, reader->read_timeout));569 ret = Phoenix_Receive (reader, data, size, reader->read_timeout); 559 570 #endif 560 571 break; … … 566 577 if (reader->convention == ATR_CONVENTION_INVERSE && reader->typ <= R_MOUSE) 567 578 ICC_Async_InvertBuffer (size, data); 568 569 rdr_ddump_mask(reader, D_IFD, data, size, "Received:"); 570 return OK; 579 580 if (ret) rdr_debug_mask(reader, D_IFD, "Receive error!"); 581 else rdr_ddump_mask(reader, D_IFD, data, size, "Received:"); 582 return ret; 571 583 } 572 584 -
trunk/csctapi/ifd_phoenix.c
r7175 r7230 57 57 int32_t Phoenix_Init (struct s_reader * reader) 58 58 { 59 call (IO_Serial_InitPnP (reader));59 if (IO_Serial_InitPnP (reader)) return ERROR; 60 60 IO_Serial_Flush(reader); 61 61 … … 75 75 /* Default serial port settings */ 76 76 if (reader->atr[0] == 0) { 77 call (IO_Serial_SetParams (reader, DEFAULT_BAUDRATE, 8, PARITY_EVEN, 2, IO_SERIAL_HIGH, IO_SERIAL_LOW));77 if(IO_Serial_SetParams (reader, DEFAULT_BAUDRATE, 8, PARITY_EVEN, 2, IO_SERIAL_HIGH, IO_SERIAL_LOW)) return ERROR; 78 78 IO_Serial_Flush(reader); 79 79 } … … 199 199 if ((sent == 0) && (block_delay != char_delay)) 200 200 { 201 call (IO_Serial_Write (reader, block_delay, 1, buffer));202 call (IO_Serial_Write (reader, char_delay, to_send-1, buffer+1));201 if(IO_Serial_Write (reader, block_delay, 1, buffer)) return ERROR; 202 if(IO_Serial_Write (reader, char_delay, to_send-1, buffer+1)) return ERROR; 203 203 } 204 204 else 205 call (IO_Serial_Write (reader, char_delay, to_send, buffer+sent));205 if (IO_Serial_Write (reader, char_delay, to_send, buffer+sent)) return ERROR; 206 206 } 207 207 return OK; … … 214 214 /* Read all data bytes with the same timeout */ 215 215 if (reader->mhz >2000){ 216 call (IO_Serial_Read (reader, timeout + reader->read_timeout, size, buffer));216 if(IO_Serial_Read (reader, timeout + reader->read_timeout, size, buffer)) return ERROR; 217 217 } 218 218 else{ 219 call (IO_Serial_Read (reader, timeout + IFD_TOWITOKO_TIMEOUT, size, buffer));219 if(IO_Serial_Read (reader, timeout + IFD_TOWITOKO_TIMEOUT, size, buffer)) return ERROR; 220 220 } 221 221 return OK; -
trunk/csctapi/io_serial.c
r7182 r7230 311 311 { 312 312 if(reader->typ == R_INTERNAL) 313 return ERROR;313 return OK; 314 314 315 315 if (tcsetattr (reader->handle, TCSANOW, &newtio) < 0) … … 456 456 readed = read (reader->handle, &c, 1); 457 457 if (readed < 0) { 458 //if (errno == EAGAIN || errno == EINTR) continue;458 if (errno == EAGAIN || errno == EINTR) continue; 459 459 rdr_log(reader, "ERROR: %s (errno=%d %s)", __func__, errno, strerror(errno)); 460 460 errorcount++; … … 505 505 int32_t u = write (reader->handle, data_w+(to_send-to_do), to_do); 506 506 if (u < 1) { 507 //if (errno==EINTR || errno==EAGAIN) continue; //try again in case of Interrupted system call or if read was blocked507 if (errno==EINTR || errno==EAGAIN) continue; //try again in case of Interrupted system call or if read was blocked 508 508 errorcount++; 509 509 //tcflush (reader->handle, TCIFLUSH); -
trunk/globals.h
r7210 r7230 1113 1113 uint16_t b_nano; 1114 1114 uint16_t s_nano; 1115 int8_t ecmcommand; // used for filtering nagra bad ecm commands 1116 uchar ecmcommandcache[4]; // cachebuff for ecm commands 1115 1117 int32_t blockemm; 1116 1118 int32_t saveemm; -
trunk/reader-nagra.c
r7175 r7230 988 988 } 989 989 else { 990 if (reader->ecmcommand < 5 ){ // cache ecm commands until ecmcommand cache is full 991 reader->ecmcommandcache[reader->ecmcommand] = er->ecm[3]; 992 reader->ecmcommand++; 993 if (reader->ecmcommand == 5){ // cache is full, comparing! 994 int32_t t = 0; 995 int32_t matchfound = 0; 996 reader->ecmcommand++; // No more caching of ecm commands, next ecms will be compared! 997 while (t < 5){ 998 if (reader->ecmcommandcache[t] == er->ecm[3]) matchfound++; 999 t++; 1000 } 1001 if (matchfound != 5){ 1002 reader->ecmcommand = 0; // reset ecm filter, start a new auto filter attempt 1003 rdr_debug_mask(reader, D_READER, "Auto ecm command filter caid %04X failed!", reader->caid); 1004 } 1005 else { 1006 reader->ecmcommandcache[0] = er->ecm[3]; // Passed the filter, store the normal ecm command for this reader! 1007 rdr_debug_mask(reader, D_READER, "Auto ecm command filter caid %04X set to command %02X", reader->caid, er->ecm[3]); 1008 } 1009 } 1010 } 1011 else if (reader->ecmcommandcache[0] != er->ecm[3]){ 1012 rdr_debug_mask(reader, D_READER, "Warning: received an abnominal ecm command %02X for caid: %04X, ignoring!", er->ecm[3], reader->caid); 1013 memset(ea, 0, sizeof(ea)); // give it back 00000000 to not disturb the loadbalancer for valid ecm requests on this channel. 1014 return OK; 1015 } 1016 990 1017 while (!do_cmd(reader, er->ecm[3],er->ecm[4]+2,0x87,0x02, er->ecm+3+2,cta_res,&cta_lr)) 991 1018 {
Note:
See TracChangeset
for help on using the changeset viewer.