Changeset 1224
- Timestamp:
- 01/14/10 16:41:02 (11 years ago)
- Location:
- trunk/csctapi
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/atr.c
r1193 r1224 52 52 */ 53 53 54 static bool ATR_GetNextByte ( IO_Serial * io,unsigned timeout, BYTE * b, bool invert);54 static bool ATR_GetNextByte (unsigned timeout, BYTE * b, bool invert); 55 55 56 56 /* … … 198 198 } 199 199 200 int ATR_InitFromStream (ATR * atr, IO_Serial * io,unsigned timeout)200 int ATR_InitFromStream (ATR * atr, unsigned timeout) 201 201 { 202 202 BYTE TDi; … … 207 207 208 208 /* Store T0 and TS */ 209 if (!ATR_GetNextByte ( io,timeout, &(atr->TS), invert))209 if (!ATR_GetNextByte (timeout, &(atr->TS), invert)) 210 210 return ATR_IO_ERROR; 211 211 … … 219 219 return ATR_MALFORMED; 220 220 221 if (!ATR_GetNextByte ( io,timeout, &(atr->T0), invert))221 if (!ATR_GetNextByte (timeout, &(atr->T0), invert)) 222 222 return ATR_MALFORMED; 223 223 … … 238 238 { 239 239 pointer++; 240 if (!ATR_GetNextByte( io,timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TA].value),invert))240 if (!ATR_GetNextByte(timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TA].value),invert)) 241 241 return ATR_MALFORMED; 242 242 atr->ib[pn][ATR_INTERFACE_BYTE_TA].present = TRUE; … … 251 251 { 252 252 pointer++; 253 if (!ATR_GetNextByte( io,timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TB].value),invert))253 if (!ATR_GetNextByte(timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TB].value),invert)) 254 254 return ATR_MALFORMED; 255 255 atr->ib[pn][ATR_INTERFACE_BYTE_TB].present = TRUE; … … 264 264 { 265 265 pointer++; 266 if (!ATR_GetNextByte( io,timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TC].value), invert))266 if (!ATR_GetNextByte(timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TC].value), invert)) 267 267 return ATR_MALFORMED; 268 268 atr->ib[pn][ATR_INTERFACE_BYTE_TC].present = TRUE; … … 277 277 { 278 278 pointer++; 279 if (!ATR_GetNextByte( io,timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TD].value), invert))279 if (!ATR_GetNextByte(timeout, &(atr->ib[pn][ATR_INTERFACE_BYTE_TD].value), invert)) 280 280 return ATR_MALFORMED; 281 281 TDi = atr->ib[pn][ATR_INTERFACE_BYTE_TD].value; … … 299 299 for (i = 0; i < (atr->hbn); i++) 300 300 { 301 if (!ATR_GetNextByte ( io,timeout, &(atr->hb[i]), invert))301 if (!ATR_GetNextByte (timeout, &(atr->hb[i]), invert)) 302 302 return ATR_MALFORMED; 303 303 } … … 310 310 pointer++; 311 311 312 if (!ATR_GetNextByte ( io,timeout, (&((atr->TCK).value)), invert))312 if (!ATR_GetNextByte (timeout, (&((atr->TCK).value)), invert)) 313 313 return ATR_MALFORMED; 314 314 } … … 580 580 */ 581 581 582 static bool ATR_GetNextByte ( IO_Serial * io,unsigned timeout, BYTE * byte, bool invert)582 static bool ATR_GetNextByte (unsigned timeout, BYTE * byte, bool invert) 583 583 { 584 584 bool ret; 585 ret = IO_Serial_Read ( io,timeout, 1, byte);585 ret = IO_Serial_Read (timeout, 1, byte); 586 586 /* Para tarjetas inversas quiza */ 587 587 if (invert) -
trunk/csctapi/atr.h
r1071 r1224 114 114 /* Initialization */ 115 115 extern int ATR_InitFromArray (ATR * atr, BYTE buffer[ATR_MAX_SIZE], unsigned length); 116 extern int ATR_InitFromStream (ATR * atr, IO_Serial * io,unsigned timeout);116 extern int ATR_InitFromStream (ATR * atr, unsigned timeout); 117 117 118 118 /* General smartcard characteristics */ -
trunk/csctapi/icc_async.c
r1223 r1224 71 71 72 72 #if defined(SCI_DEV) || defined(COOL) 73 if (reader[ridx].typ ==R_INTERNAL)73 if (reader[ridx].typ == R_INTERNAL) 74 74 #ifdef SH4 75 75 reader[ridx].handle = open (reader[ridx].device, O_RDWR|O_NONBLOCK|O_NOCTTY); … … 110 110 111 111 #ifdef SCI_DEV 112 if(reader[ridx].typ ==R_INTERNAL)112 if(reader[ridx].typ == R_INTERNAL) 113 113 { 114 114 if(!Sci_GetStatus(reader[ridx].handle, &in)) … … 117 117 else 118 118 #elif COOL 119 if(reader[ridx].typ ==R_INTERNAL)119 if(reader[ridx].typ == R_INTERNAL) 120 120 { 121 121 if (!Cool_GetStatus(&in)) … … 126 126 127 127 #if defined(TUXBOX) && defined(PPC) 128 if ((reader[ridx].typ ==R_DB2COM1) || (reader[ridx].typ==R_DB2COM2))128 if ((reader[ridx].typ == R_DB2COM1) || (reader[ridx].typ == R_DB2COM2)) 129 129 { 130 130 ushort msr=1; … … 132 132 IO_Serial_Ioctl_Lock(1); 133 133 ioctl(fdmc, GET_PCDAT, &msr); 134 if (reader[ridx].typ ==R_DB2COM2)134 if (reader[ridx].typ == R_DB2COM2) 135 135 in=(!(msr & 1)); 136 136 else … … 403 403 else 404 404 #endif 405 if ( IFD_Towitoko_Transmit (icc->ifd, &timings, size, sent) != IFD_TOWITOKO_OK)405 if (!Phoenix_Transmit (sent, size, &timings, size)) 406 406 return ICC_ASYNC_IFD_ERROR; 407 407 … … 426 426 else 427 427 #else 428 if ( IFD_Towitoko_Receive (icc->ifd, &timings, size, data) != IFD_TOWITOKO_OK)429 return ICC_ASYNC_IFD_ERROR; 430 #endif 431 432 if (icc->convention == ATR_CONVENTION_INVERSE && reader[ridx].typ !=R_INTERNAL)428 if (!Phoenix_Receive (data, size, &timings)) 429 return ICC_ASYNC_IFD_ERROR; 430 #endif 431 432 if (icc->convention == ATR_CONVENTION_INVERSE && reader[ridx].typ != R_INTERNAL) 433 433 ICC_Async_InvertBuffer (size, data); 434 434 … … 464 464 } 465 465 466 unsigned long ICC_Async_GetClockRate ( ICC_Async * icc)466 unsigned long ICC_Async_GetClockRate () 467 467 { 468 468 switch (reader[ridx].cardmhz) { -
trunk/csctapi/icc_async.h
r1220 r1224 82 82 extern ATR *ICC_Async_GetAtr (ICC_Async * icc); 83 83 extern IFD *ICC_Async_GetIFD (ICC_Async * icc); 84 extern unsigned long ICC_Async_GetClockRate ( ICC_Async * icc);84 extern unsigned long ICC_Async_GetClockRate (); 85 85 86 86 /* Operations */ -
trunk/csctapi/ifd_phoenix.c
r1220 r1224 10 10 #include "../globals.h" 11 11 #include "atr.h" 12 #include "ifd_towitoko.h" //FIXME 12 13 13 14 #define OK 1 14 15 #define ERROR 0 16 17 #define IFD_TOWITOKO_MAX_TRANSMIT 255 18 #define IFD_TOWITOKO_ATR_TIMEOUT 800 15 19 16 20 int Phoenix_Init () … … 41 45 42 46 int Phoenix_Reset (ATR ** atr) 47 { 48 return OK; 49 } 50 51 int Phoenix_Transmit (BYTE * buffer, unsigned size, IFD_Timings * timings) 43 52 { 53 unsigned block_delay, char_delay, sent=0, to_send = 0; 54 55 #ifdef DEBUG_IFD 56 printf ("IFD: Transmit: "); 57 for (sent = 0; sent < size; sent++) 58 printf ("%X ", buffer[sent]); 59 printf ("\n"); 60 #endif 61 62 #define IFD_TOWITOKO_DELAY 0 63 64 /* Calculate delays */ 65 char_delay = IFD_TOWITOKO_DELAY + timings->char_delay; 66 block_delay = IFD_TOWITOKO_DELAY + timings->block_delay; 67 68 #ifdef USE_GPIO 69 if (gpio_detect) set_gpio1(0); 70 #endif 71 for (sent = 0; sent < size; sent = sent + to_send) 72 { 73 /* Calculate number of bytes to send */ 74 to_send = MIN(size, IFD_TOWITOKO_MAX_TRANSMIT); 75 76 /* Send data */ 77 if ((sent == 0) && (block_delay != char_delay)) 78 { 79 if (!IO_Serial_Write (block_delay, 1, buffer)) 80 return ERROR; 81 82 if (!IO_Serial_Write (char_delay, to_send-1, buffer+1)) 83 return ERROR; 84 } 85 else 86 { 87 if (!IO_Serial_Write (char_delay, to_send, buffer+sent)) 88 return ERROR; 89 } 90 } 91 #ifdef USE_GPIO 92 if (gpio_detect) set_gpio1(1); 93 #endif 44 94 return OK; 45 95 } 46 96 47 int Phoenix_Transmit (BYTE * sent, unsigned size) 48 { 97 int Phoenix_Receive (BYTE * buffer, unsigned size, IFD_Timings * timings) 98 { 99 unsigned char_timeout, block_timeout; 100 #ifdef DEBUG_IFD 101 int i; 102 #endif 103 104 #define IFD_TOWITOKO_TIMEOUT 1000 105 106 /* Calculate timeouts */ 107 char_timeout = IFD_TOWITOKO_TIMEOUT + timings->char_timeout; 108 block_timeout = IFD_TOWITOKO_TIMEOUT + timings->block_timeout; 109 #ifdef USE_GPIO 110 if (gpio_detect) set_gpio1(0); 111 #endif 112 if (block_timeout != char_timeout) 113 { 114 /* Read first byte using block timeout */ 115 if (!IO_Serial_Read (block_timeout, 1, buffer)) 116 return ERROR; 117 118 if (size > 1) 119 { 120 /* Read remaining data bytes using char timeout */ 121 if (!IO_Serial_Read (char_timeout, size - 1, buffer + 1)) 122 return ERROR; 123 } 124 } 125 else 126 { 127 /* Read all data bytes with the same timeout */ 128 if (!IO_Serial_Read (char_timeout, size, buffer)) 129 return ERROR; 130 } 131 #ifdef USE_GPIO 132 if (gpio_detect) set_gpio1(1); 133 #endif 134 135 #ifdef DEBUG_IFD 136 printf ("IFD: Receive: "); 137 for (i = 0; i < size; i++) 138 printf ("%X ", buffer[i]); 139 printf ("\n"); 140 #endif 141 49 142 return OK; 50 143 } 51 52 int Phoenix_Receive (BYTE * data, unsigned size)53 {54 return OK;55 }56 144 57 145 int Phoenix_SetBaudrate (int mhz) -
trunk/csctapi/ifd_sci.c
r1221 r1224 109 109 } 110 110 #else 111 while(n<SCI_MAX_ATR_SIZE && IO_Serial_Read( ifd->io,IFD_TOWITOKO_ATR_TIMEOUT, 1, buf+n))111 while(n<SCI_MAX_ATR_SIZE && IO_Serial_Read(IFD_TOWITOKO_ATR_TIMEOUT, 1, buf+n)) 112 112 { 113 113 n++; -
trunk/csctapi/ifd_towitoko.c
r1221 r1224 437 437 { 438 438 parity = par[i]; 439 IO_Serial_Flush( ifd->io);439 IO_Serial_Flush(); 440 440 441 441 ret = IFD_Towitoko_SetParity (ifd, parity); … … 475 475 (*atr) = ATR_New (); 476 476 477 if(ATR_InitFromStream ((*atr), ifd->io,IFD_TOWITOKO_ATR_TIMEOUT) == ATR_OK)477 if(ATR_InitFromStream ((*atr), IFD_TOWITOKO_ATR_TIMEOUT) == ATR_OK) 478 478 ret = IFD_TOWITOKO_OK; 479 479 … … 493 493 } 494 494 495 IO_Serial_Flush( ifd->io);495 IO_Serial_Flush(); 496 496 497 497 /* … … 538 538 if ((sent == 0) && (block_delay != char_delay)) 539 539 { 540 if (!IO_Serial_Write ( ifd->io,block_delay, 1, buffer))540 if (!IO_Serial_Write (block_delay, 1, buffer)) 541 541 return IFD_TOWITOKO_IO_ERROR; 542 542 543 if (!IO_Serial_Write ( ifd->io,char_delay, to_send-1, buffer+1))543 if (!IO_Serial_Write (char_delay, to_send-1, buffer+1)) 544 544 return IFD_TOWITOKO_IO_ERROR; 545 545 } 546 546 else 547 547 { 548 if (!IO_Serial_Write ( ifd->io,char_delay, to_send, buffer+sent))548 if (!IO_Serial_Write (char_delay, to_send, buffer+sent)) 549 549 return IFD_TOWITOKO_IO_ERROR; 550 550 } … … 572 572 { 573 573 /* Read first byte using block timeout */ 574 if (!IO_Serial_Read ( ifd->io,block_timeout, 1, buffer))574 if (!IO_Serial_Read (block_timeout, 1, buffer)) 575 575 return IFD_TOWITOKO_IO_ERROR; 576 576 … … 578 578 { 579 579 /* Read remaining data bytes using char timeout */ 580 if (!IO_Serial_Read ( ifd->io,char_timeout, size - 1, buffer + 1))580 if (!IO_Serial_Read (char_timeout, size - 1, buffer + 1)) 581 581 return IFD_TOWITOKO_IO_ERROR; 582 582 } … … 585 585 { 586 586 /* Read all data bytes with the same timeout */ 587 if (!IO_Serial_Read ( ifd->io,char_timeout, size, buffer))587 if (!IO_Serial_Read (char_timeout, size, buffer)) 588 588 return IFD_TOWITOKO_IO_ERROR; 589 589 } -
trunk/csctapi/ifd_towitoko.h
r1220 r1224 139 139 /* Asynchronous ICC handling functions */ 140 140 extern int IFD_Towitoko_ResetAsyncICC (IFD * ifd, ATR ** atr); 141 extern int IFD_Towitoko_Transmit (IFD * ifd, IFD_Timings * timings, unsigned size, BYTE * buffer);142 extern int IFD_Towitoko_Receive (IFD * ifd, IFD_Timings * timings, unsigned size, BYTE * buffer);143 141 144 142 /* Atributes of the drive associated with this IFD */ -
trunk/csctapi/io_serial.c
r1222 r1224 60 60 static int IO_Serial_Bitrate(int bitrate); 61 61 62 static bool IO_Serial_WaitToRead ( int hnd,unsigned delay_ms, unsigned timeout_ms);63 64 static bool IO_Serial_WaitToWrite ( IO_Serial *io,unsigned delay_ms, unsigned timeout_ms);62 static bool IO_Serial_WaitToRead (unsigned delay_ms, unsigned timeout_ms); 63 64 static bool IO_Serial_WaitToWrite (unsigned delay_ms, unsigned timeout_ms); 65 65 66 66 static void IO_Serial_DeviceName (char * filename, unsigned length); … … 79 79 { 80 80 extern int *oscam_sem; 81 if ((reader[ridx].typ !=R_DB2COM1) && (reader[ridx].typ!=R_DB2COM2)) return;81 if ((reader[ridx].typ != R_DB2COM1) && (reader[ridx].typ != R_DB2COM2)) return; 82 82 if (!flag) 83 83 *oscam_sem=0; … … 183 183 184 184 if(io->reader_type!=R_INTERNAL) 185 IO_Serial_Flush( io);185 IO_Serial_Flush(); 186 186 187 187 return TRUE; … … 579 579 } 580 580 581 void IO_Serial_Flush ( IO_Serial * io)581 void IO_Serial_Flush () 582 582 { 583 583 BYTE b; 584 while(IO_Serial_Read( io,1000, 1, &b));584 while(IO_Serial_Read(1000, 1, &b)); 585 585 } 586 586 … … 598 598 599 599 600 bool IO_Serial_Read ( IO_Serial * io,unsigned timeout, unsigned size, BYTE * data)600 bool IO_Serial_Read (unsigned timeout, unsigned size, BYTE * data) 601 601 { 602 602 BYTE c; … … 607 607 #endif 608 608 609 if(( io->reader_type!=R_INTERNAL) && (io->wr>0))609 if((reader[ridx].typ != R_INTERNAL) && (wr>0)) 610 610 { 611 611 BYTE buf[256]; 612 int n = io->wr;613 io->wr = 0;614 615 if(!IO_Serial_Read ( io,timeout, n, buf))612 int n = wr; 613 wr = 0; 614 615 if(!IO_Serial_Read (timeout, n, buf)) 616 616 { 617 617 return FALSE; … … 631 631 while( (((tv_spent.tv_sec-tv.tv_sec)*1000) + ((tv_spent.tv_usec-tv.tv_usec)/1000L))<timeout ) 632 632 { 633 if (read ( io->fd, &c, 1) == 1)633 if (read (reader[ridx].handle, &c, 1) == 1) 634 634 { 635 635 readed=TRUE; … … 646 646 #endif 647 647 #else 648 if (IO_Serial_WaitToRead ( io->fd,0, timeout))648 if (IO_Serial_WaitToRead (0, timeout)) 649 649 { 650 if (read ( io->fd, &c, 1) != 1)650 if (read (reader[ridx].handle, &c, 1) != 1) 651 651 { 652 652 #ifdef DEBUG_IO … … 669 669 fflush (stdout); 670 670 #endif 671 tcflush ( io->fd, TCIFLUSH);671 tcflush (reader[ridx].handle, TCIFLUSH); 672 672 return FALSE; 673 673 } … … 688 688 689 689 690 bool IO_Serial_Write ( IO_Serial * io,unsigned delay, unsigned size, BYTE * data)690 bool IO_Serial_Write (unsigned delay, unsigned size, BYTE * data) 691 691 { 692 692 unsigned count, to_send, i_w; … … 708 708 to_send = (delay? 1: size); 709 709 710 if (IO_Serial_WaitToWrite ( io,delay, 1000))710 if (IO_Serial_WaitToWrite (delay, 1000)) 711 711 { 712 712 for (i_w=0; i_w < to_send; i_w++) { … … 716 716 } 717 717 } 718 unsigned int u = write ( io->fd, data_w, (1+io_serial_need_dummy_char)*to_send);718 unsigned int u = write (reader[ridx].handle, data_w, (1+io_serial_need_dummy_char)*to_send); 719 719 _in_echo_read = 1; 720 720 if (u != (1+io_serial_need_dummy_char)*to_send) … … 724 724 fflush (stdout); 725 725 #endif 726 if( io->reader_type!=R_INTERNAL)727 io->wr += u;726 if(reader[ridx].typ != R_INTERNAL) 727 wr += u; 728 728 return FALSE; 729 729 } 730 730 731 if( io->reader_type!=R_INTERNAL)732 io->wr += to_send;731 if(reader[ridx].typ != R_INTERNAL) 732 wr += to_send; 733 733 734 734 #ifdef DEBUG_IO … … 844 844 } 845 845 846 static bool IO_Serial_WaitToRead ( int hnd,unsigned delay_ms, unsigned timeout_ms)846 static bool IO_Serial_WaitToRead (unsigned delay_ms, unsigned timeout_ms) 847 847 { 848 848 fd_set rfds; … … 865 865 } 866 866 867 in_fd= hnd;867 in_fd=reader[ridx].handle; 868 868 869 869 FD_ZERO(&rfds); … … 895 895 } 896 896 897 static bool IO_Serial_WaitToWrite ( IO_Serial *io,unsigned delay_ms, unsigned timeout_ms)897 static bool IO_Serial_WaitToWrite (unsigned delay_ms, unsigned timeout_ms) 898 898 { 899 899 fd_set wfds; … … 904 904 905 905 #ifdef SCI_DEV 906 if( io->reader_type==R_INTERNAL)906 if(reader[ridx].typ == R_INTERNAL) 907 907 return TRUE; 908 908 #endif … … 921 921 } 922 922 923 out_fd= io->fd;923 out_fd=reader[ridx].handle; 924 924 925 925 FD_ZERO(&wfds); … … 960 960 memset (io->PnP_id, 0, IO_SERIAL_PNPID_SIZE); 961 961 io->PnP_id_size = 0; 962 io->wr = 0;962 wr = 0; 963 963 //modifyable properties: 964 964 io->input_bitrate = 0; … … 992 992 return FALSE; 993 993 994 while ((i < IO_SERIAL_PNPID_SIZE) && IO_Serial_Read ( io,200, 1, &(io->PnP_id[i])))994 while ((i < IO_SERIAL_PNPID_SIZE) && IO_Serial_Read (200, 1, &(io->PnP_id[i]))) 995 995 i++; 996 996 -
trunk/csctapi/io_serial.h
r1221 r1224 68 68 BYTE PnP_id[IO_SERIAL_PNPID_SIZE]; /* PnP Id of the serial device */ 69 69 unsigned PnP_id_size; /* Length of PnP Id */ 70 int wr;71 70 int mhz; /* mhz specified in config = actual reader clock speed */ 72 71 int cardmhz; /* mhz specified in config = standard (non overclocked) clock speed of card*/ 73 72 } 74 73 IO_Serial; 74 75 int wr; //FIXME should be in ifd_phoenix.c or .h 75 76 76 77 /* … … 80 81 /* IO_Serial creation and deletion */ 81 82 //extern void IO_Serial_Reopen (IO_Serial * io); 82 extern void IO_Serial_Flush ( IO_Serial * io);83 extern void IO_Serial_Flush (); 83 84 extern IO_Serial *IO_Serial_New (int mhz, int cardmhz); 84 85 extern void IO_Serial_Delete (IO_Serial * io); … … 99 100 100 101 /* Input and output */ 101 extern bool IO_Serial_Read ( IO_Serial * io,unsigned timeout, unsigned size, BYTE * data);102 extern bool IO_Serial_Write ( IO_Serial * io,unsigned delay, unsigned size, BYTE * data);102 extern bool IO_Serial_Read (unsigned timeout, unsigned size, BYTE * data); 103 extern bool IO_Serial_Write (unsigned delay, unsigned size, BYTE * data); 103 104 104 105 /* Serial port atributes */ -
trunk/csctapi/pps.c
r1209 r1224 466 466 } 467 467 #elif COOL 468 if( pps->icc->ifd->io->com==R_INTERNAL) {468 if(reader[ridx].typ == R_INTERNAL) { 469 469 int mhz = atr_fs_table[pps->parameters.FI] / 10000; 470 470 if (!Cool_SetBaudrate(mhz)) … … 482 482 baudrate = 9600; 483 483 else 484 baudrate = pps->parameters.d * ICC_Async_GetClockRate ( pps->icc) / F;484 baudrate = pps->parameters.d * ICC_Async_GetClockRate () / F; 485 485 486 486 #ifdef DEBUG_PROTOCOL -
trunk/csctapi/protocol_t0.c
r1219 r1224 121 121 /* WWT = 960 * WI * (Fi / f) * 1000 milliseconds */ 122 122 double F = (double) atr_f_table[params->FI]; 123 t0->wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ( t0->icc)) * 1000);123 t0->wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ()) * 1000); 124 124 125 125 /* Set timings */ … … 132 132 133 133 #ifdef DEBUG_PROTOCOL 134 printf ("Protocol: T=0: WWT=%d, Clockrate=%lu\n", (int)(t0->wwt),ICC_Async_GetClockRate( t0->icc));134 printf ("Protocol: T=0: WWT=%d, Clockrate=%lu\n", (int)(t0->wwt),ICC_Async_GetClockRate()); 135 135 #endif 136 136 … … 157 157 /* WWT = 960 * WI * (Fi / f) * 1000 milliseconds */ 158 158 double F = (double) atr_f_table[params->FI]; 159 t14->wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ( t14->icc)) * 1000);159 t14->wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ()) * 1000); 160 160 t14->wwt >>= 1; 161 161
Note:
See TracChangeset
for help on using the changeset viewer.