Changeset 7777
- Timestamp:
- 10/21/12 17:36:55 (11 years ago)
- Location:
- trunk/csctapi
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/ifd_cool.c
r7741 r7777 61 61 } 62 62 63 64 int32_t Cool_GetStatus (struct s_reader *reader, int32_t * in) 65 { 66 if (cool_kal_opened) { 67 int32_t state; 68 int32_t ret = cnxt_smc_get_state(specdev()->handle, &state); 69 if (ret) { 70 coolapi_check_error("cnxt_smc_get_state", ret); 71 return ERROR; 72 } 73 //state = 0 no card, 1 = not ready, 2 = ready 74 if (state) 75 *in = 1; //CARD, even if not ready report card is in, or it will never get activated 76 else 77 *in = 0; //NOCARD 78 } else { 79 *in = 0; 80 } 81 return OK; 82 } 83 84 int32_t Cool_Reset (struct s_reader *reader, ATR * atr) 85 { 86 //set freq to reader->cardmhz if necessary 87 uint32_t clk; 88 int32_t ret; 89 90 ret = cnxt_smc_get_clock_freq (specdev()->handle, &clk); 91 coolapi_check_error("cnxt_smc_get_clock_freq", ret); 92 if (clk/10000 != (uint32_t)reader->cardmhz) { 93 rdr_debug_mask(reader, D_DEVICE, "COOL: clock freq: %i, scheduling change to %i for card reset", 94 clk, reader->cardmhz*10000); 95 call (Cool_SetClockrate(reader, reader->cardmhz)); 96 } 97 98 //reset card 99 ret = cnxt_smc_reset_card (specdev()->handle, ATR_TIMEOUT, NULL, NULL); 100 coolapi_check_error("cnxt_smc_reset_card", ret); 101 cs_sleepms(50); 102 int32_t n = 40; 103 unsigned char buf[40]; 104 ret = cnxt_smc_get_atr (specdev()->handle, buf, &n); 105 coolapi_check_error("cnxt_smc_get_atr", ret); 106 107 call (!ATR_InitFromArray (atr, buf, n) != ERROR); 108 { 109 cs_sleepms(50); 110 return OK; 111 } 112 } 113 114 int32_t Cool_Transmit (struct s_reader *reader, unsigned char * sent, uint32_t size) 115 { 116 specdev()->cardbuflen = 256;//it needs to know max buffer size to respond? 117 118 int32_t ret = cnxt_smc_read_write(specdev()->handle, 0, sent, size, specdev()->cardbuffer, &specdev()->cardbuflen, specdev()->read_write_transmit_timeout, 0); 119 coolapi_check_error("cnxt_smc_read_write", ret); 120 121 rdr_ddump_mask(reader, D_DEVICE, sent, size, "COOL Transmit:"); 122 return OK; 63 static int32_t Cool_FastReset (struct s_reader *reader) 64 { 65 int32_t n = 40, ret; 66 unsigned char buf[40]; 67 68 //reset card 69 ret = cnxt_smc_reset_card (specdev()->handle, ATR_TIMEOUT, NULL, NULL); 70 coolapi_check_error("cnxt_smc_reset_card", ret); 71 cs_sleepms(50); 72 ret = cnxt_smc_get_atr (specdev()->handle, buf, &n); 73 coolapi_check_error("cnxt_smc_get_atr", ret); 74 75 return 0; 76 } 77 78 static int32_t Cool_SetClockrate (struct s_reader *reader, int32_t mhz) 79 { 80 uint32_t clk; 81 clk = mhz * 10000; 82 int32_t ret = cnxt_smc_set_clock_freq (specdev()->handle, clk); 83 coolapi_check_error("cnxt_smc_set_clock_freq", ret); 84 call (Cool_FastReset(reader)); 85 rdr_debug_mask(reader, D_DEVICE, "COOL: clock succesfully set to %i", clk); 86 return OK; 123 87 } 124 88 … … 150 114 } 151 115 116 int32_t Cool_GetStatus (struct s_reader *reader, int32_t * in) 117 { 118 if (cool_kal_opened) { 119 int32_t state; 120 int32_t ret = cnxt_smc_get_state(specdev()->handle, &state); 121 if (ret) { 122 coolapi_check_error("cnxt_smc_get_state", ret); 123 return ERROR; 124 } 125 //state = 0 no card, 1 = not ready, 2 = ready 126 if (state) 127 *in = 1; //CARD, even if not ready report card is in, or it will never get activated 128 else 129 *in = 0; //NOCARD 130 } else { 131 *in = 0; 132 } 133 return OK; 134 } 135 136 int32_t Cool_Reset (struct s_reader *reader, ATR * atr) 137 { 138 //set freq to reader->cardmhz if necessary 139 uint32_t clk; 140 int32_t ret; 141 142 ret = cnxt_smc_get_clock_freq (specdev()->handle, &clk); 143 coolapi_check_error("cnxt_smc_get_clock_freq", ret); 144 if (clk/10000 != (uint32_t)reader->cardmhz) { 145 rdr_debug_mask(reader, D_DEVICE, "COOL: clock freq: %i, scheduling change to %i for card reset", 146 clk, reader->cardmhz*10000); 147 call (Cool_SetClockrate(reader, reader->cardmhz)); 148 } 149 150 //reset card 151 ret = cnxt_smc_reset_card (specdev()->handle, ATR_TIMEOUT, NULL, NULL); 152 coolapi_check_error("cnxt_smc_reset_card", ret); 153 cs_sleepms(50); 154 int32_t n = 40; 155 unsigned char buf[40]; 156 ret = cnxt_smc_get_atr (specdev()->handle, buf, &n); 157 coolapi_check_error("cnxt_smc_get_atr", ret); 158 159 call (!ATR_InitFromArray (atr, buf, n) != ERROR); 160 { 161 cs_sleepms(50); 162 return OK; 163 } 164 } 165 166 int32_t Cool_Transmit (struct s_reader *reader, unsigned char * sent, uint32_t size) 167 { 168 specdev()->cardbuflen = 256;//it needs to know max buffer size to respond? 169 170 int32_t ret = cnxt_smc_read_write(specdev()->handle, 0, sent, size, specdev()->cardbuffer, &specdev()->cardbuflen, specdev()->read_write_transmit_timeout, 0); 171 coolapi_check_error("cnxt_smc_read_write", ret); 172 173 rdr_ddump_mask(reader, D_DEVICE, sent, size, "COOL Transmit:"); 174 return OK; 175 } 176 152 177 int32_t Cool_Receive (struct s_reader *reader, unsigned char * data, uint32_t size) 153 178 { … … 158 183 memmove(specdev()->cardbuffer, specdev()->cardbuffer+size, specdev()->cardbuflen); 159 184 rdr_ddump_mask(reader, D_DEVICE, data, size, "COOL Receive:"); 160 return OK;161 }162 163 int32_t Cool_SetClockrate (struct s_reader *reader, int32_t mhz)164 {165 uint32_t clk;166 clk = mhz * 10000;167 int32_t ret = cnxt_smc_set_clock_freq (specdev()->handle, clk);168 coolapi_check_error("cnxt_smc_set_clock_freq", ret);169 call (Cool_FastReset(reader));170 rdr_debug_mask(reader, D_DEVICE, "COOL: clock succesfully set to %i", clk);171 185 return OK; 172 186 } … … 205 219 } 206 220 207 int32_t Cool_FastReset (struct s_reader *reader)221 int32_t Cool_FastReset_With_ATR (struct s_reader *reader, ATR * atr) 208 222 { 209 223 int32_t n = 40, ret; … … 217 231 coolapi_check_error("cnxt_smc_get_atr", ret); 218 232 219 return 0;220 }221 222 int32_t Cool_FastReset_With_ATR (struct s_reader *reader, ATR * atr)223 {224 int32_t n = 40, ret;225 unsigned char buf[40];226 227 //reset card228 ret = cnxt_smc_reset_card (specdev()->handle, ATR_TIMEOUT, NULL, NULL);229 coolapi_check_error("cnxt_smc_reset_card", ret);230 cs_sleepms(50);231 ret = cnxt_smc_get_atr (specdev()->handle, buf, &n);232 coolapi_check_error("cnxt_smc_get_atr", ret);233 234 233 call (!ATR_InitFromArray (atr, buf, n) == ATR_OK); 235 234 { … … 248 247 return OK; 249 248 } 250 251 249 #endif -
trunk/csctapi/ifd_cool.h
r7687 r7777 11 11 int32_t Cool_Set_Transmit_Timeout(struct s_reader *reader, uint32_t set); 12 12 int32_t Cool_Receive (struct s_reader *reader, unsigned char * buffer, uint32_t size); 13 int32_t Cool_SetClockrate (struct s_reader *reader, int32_t mhz);14 int32_t Cool_FastReset (struct s_reader *reader);15 13 int32_t Cool_FastReset_With_ATR (struct s_reader *reader, ATR * atr); 16 14 int32_t Cool_GetStatus (struct s_reader *reader, int32_t * in);
Note:
See TracChangeset
for help on using the changeset viewer.