Changeset 851
- Timestamp:
- 12/16/09 08:15:45 (14 years ago)
- Location:
- branches/monitor-improvement
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/monitor-improvement/csctapi/atr.c
r844 r851 42 42 unsigned atr_f_table[16] = {0, 372, 558, 744, 1116, 1488, 1860, 0, 0, 512, 768, 1024, 1536, 2048, 0, 0}; 43 43 44 double atr_d_table[16] = {0, 1, 2, 4, 8, 16, 32, 0, 12, 20, 0.5, 0.25, 125, 0.0625, 0.03125, 0.015625};44 double atr_d_table[16] = {0, 1, 2, 4, 8, 16, 32, 0, 12, 20, 0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625}; 45 45 //old table has 0 for RFU: 46 46 //double atr_d_table[16] = {0, 1, 2, 4, 8, 16, 0, 0, 0, 0, 0.5, 0.25, 125, 0.0625, 0.03125, 0.015625}; -
branches/monitor-improvement/csctapi/pps.c
r844 r851 178 178 ATR_GetParameter (atr, ATR_PARAMETER_N, &(pps->parameters.n)); 179 179 ATR_GetProtocolType(atr,2,&(pps->parameters.t)); //get protocol from TD1 180 if (( pps->icc->ifd->io->com != RTYP_SCI) && (pps->parameters.t != 14) && (numprot > 1 ||(atr->ib[0][ATR_INTERFACE_BYTE_TA].present == TRUE && atr->ib[0][ATR_INTERFACE_BYTE_TA].value != 0x11) || pps->parameters.n == 255)) {180 if ((numprot > 1) && (pps->icc->ifd->io->com != RTYP_SCI) && (pps->parameters.t != 14) && ((atr->ib[0][ATR_INTERFACE_BYTE_TA].present == TRUE && atr->ib[0][ATR_INTERFACE_BYTE_TA].value != 0x11) || pps->parameters.n == 255)) { 181 181 // PTSS PTS0 PTS1 PTS2 PTS3 PCK 182 182 // PTSS PTS0 PTS1 PCK … … 213 213 if (!PPS_success) {//last PPS not succesfull 214 214 BYTE TA1; 215 if ( ATR_GetInterfaceByte (atr, 1 , ATR_INTERFACE_BYTE_TA, &TA1) == ATR_OK && pps->parameters.t != 14) { //do not obey TA1 if T14 and no PTS215 if ((numprot > 1) && ATR_GetInterfaceByte (atr, 1 , ATR_INTERFACE_BYTE_TA, &TA1) == ATR_OK && pps->parameters.t != 14) { //do not obey TA1 if T14 and no PTS 216 216 pps->parameters.FI = TA1 >> 4; 217 217 ATR_GetParameter (atr, ATR_PARAMETER_D, &(pps->parameters.d)); -
branches/monitor-improvement/globals.h
r827 r851 193 193 //typedef unsigned char uchar; 194 194 //typedef unsigned long ulong; 195 196 // constants 197 #define CTA_RES_LEN 512 195 198 196 199 typedef struct s_classtab -
branches/monitor-improvement/reader-common.c
r818 r851 5 5 int oscam_card_detect; 6 6 7 uchar cta_cmd[272], cta_res[ 260], atr[64];7 uchar cta_cmd[272], cta_res[CTA_RES_LEN], atr[64]; 8 8 ushort cta_lr, atr_size=0; 9 9 static int cs_ptyp_orig; //reinit=1, -
branches/monitor-improvement/reader-pcsc.c
r818 r851 69 69 70 70 snprintf(pcsc_reader->pcsc_name,sizeof(pcsc_reader->pcsc_name),"%s",readers[reader_nb]); 71 cs_log("PCSC initializing reader (%s)", &pcsc_reader->pcsc_name); 72 rv = SCardConnect(pcsc_reader->hContext, &pcsc_reader->pcsc_name, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &pcsc_reader->hCard, &pcsc_reader->dwActiveProtocol); 73 cs_debug("PCSC initializing result (%lx) protocol (T=%lx)", rv, ( pcsc_reader->dwActiveProtocol == SCARD_PROTOCOL_T0 ? 0 : 1)); 74 if (rv==SCARD_S_SUCCESS) { 75 pcsc_reader->pcsc_has_card=1; 76 return 0; 77 } 78 else if (rv==SCARD_E_NO_SMARTCARD) { 79 pcsc_reader->pcsc_has_card=0; 80 return 0; 81 } 82 else { 83 pcsc_reader->pcsc_has_card=0; 84 return 2; 85 } 86 71 pcsc_reader->pcsc_has_card=0; 72 pcsc_reader->hCard=0; 87 73 } 88 74 else { … … 100 86 101 87 dwSendLength = l; 102 dwRecvLength = 512; 103 104 //cs_ddump(buf, dwSendLength, "sending %d bytes to PCSC", dwSendLength); 88 dwRecvLength = CTA_RES_LEN; 89 cs_debug("sending %d bytes to PCSC", dwSendLength); 105 90 106 91 if(pcsc_reader->dwActiveProtocol == SCARD_PROTOCOL_T0) … … 114 99 115 100 *cta_lr=dwRecvLength; 116 //cs_ddump(cta_res, *cta_lr,"received %d bytes from PCSC with rv=%lx", *cta_lr, rv);101 cs_debug("received %d bytes from PCSC with rv=%lx", *cta_lr, rv); 117 102 118 103 cs_debug("PCSC doapi (%lx ) (T=%d), %d", rv, ( pcsc_reader->dwActiveProtocol == SCARD_PROTOCOL_T0 ? 0 : 1), dwRecvLength ); … … 134 119 cs_debug("PCSC initializing card in (%s)", pcsc_reader->pcsc_name); 135 120 dwAtrLen = sizeof(pbAtr); 121 dwReaderLen=0; 136 122 137 123 cs_debug("PCSC resetting card in (%s)", pcsc_reader->pcsc_name); 138 rv = SCardReconnect(pcsc_reader->hCard, SCARD_SHARE_ SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, SCARD_RESET_CARD, &pcsc_reader->dwActiveProtocol);124 rv = SCardReconnect(pcsc_reader->hCard, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, SCARD_RESET_CARD, &pcsc_reader->dwActiveProtocol); 139 125 cs_debug("PCSC resetting done on card in (%s)", pcsc_reader->pcsc_name); 140 126 cs_debug("PCSC Protocol (T=%d)",( pcsc_reader->dwActiveProtocol == SCARD_PROTOCOL_T0 ? 0 : 1)); … … 144 130 return(0); 145 131 } 146 147 rv=SCardBeginTransaction(pcsc_reader->hCard); 148 if (rv!=SCARD_S_SUCCESS) { 149 cs_log("PCSC reader %s Failed to begin transaction", pcsc_reader->pcsc_name); 150 return 0; 151 } 152 132 133 153 134 cs_debug("PCSC getting ATR for card in (%s)", pcsc_reader->pcsc_name); 154 rv = SCardStatus(pcsc_reader->hCard, 135 rv = SCardStatus(pcsc_reader->hCard,NULL, &dwReaderLen, &dwState, &pcsc_reader->dwActiveProtocol, pbAtr, &dwAtrLen); 155 136 if ( rv == SCARD_S_SUCCESS ) { 156 137 cs_debug("PCSC Protocol (T=%d)",( pcsc_reader->dwActiveProtocol == SCARD_PROTOCOL_T0 ? 0 : 1)); … … 179 160 180 161 dwAtrLen = sizeof(pbAtr); 181 182 // this is to take care of the case of a reader being started with no card ... we need something better. 183 if (!pcsc_reader->pcsc_has_card) { 184 rv = SCardConnect(pcsc_reader->hContext, &pcsc_reader->pcsc_name, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &pcsc_reader->hCard, &pcsc_reader->dwActiveProtocol); 162 rv=0; 163 dwState=0; 164 dwReaderLen=0; 165 166 // Do we have a card ? 167 if (!pcsc_reader->pcsc_has_card && !pcsc_reader->hCard) { 168 // try connecting to the card 169 rv = SCardConnect(pcsc_reader->hContext, pcsc_reader->pcsc_name, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &pcsc_reader->hCard, &pcsc_reader->dwActiveProtocol); 185 170 if (rv==SCARD_E_NO_SMARTCARD) { 171 // no card in reader 186 172 pcsc_reader->pcsc_has_card=0; 173 if(pcsc_reader->hCard) { 174 SCardDisconnect(pcsc_reader->hCard,SCARD_RESET_CARD); 175 pcsc_reader->hCard=0; 176 } 187 177 cs_debug("PCSC card in %s removed / absent [dwstate=%lx rv=(%lx)]", pcsc_reader->pcsc_name, dwState, rv ); 188 178 return 0; 189 179 } 180 else if( rv == SCARD_W_UNRESPONSIVE_CARD ) { 181 // there is a problem with the card in the reader 182 pcsc_reader->pcsc_has_card=0; 183 pcsc_reader->hCard=0; 184 cs_log("PCSC card in %s is unresponsive. Eject and re-insert please.", pcsc_reader->pcsc_name); 185 return 0; 186 } 190 187 else if( rv == SCARD_S_SUCCESS ) { 188 // we have a card 191 189 pcsc_reader->pcsc_has_card=1; 192 190 } 191 else { 192 // if we get here we have a bigger problem -> display status and debug 193 cs_debug("PCSC reader %s status [dwstate=%lx rv=(%lx)]", pcsc_reader->pcsc_name, dwState, rv ); 194 return 0; 195 } 193 196 194 197 } 195 198 199 // if we get there the card is ready, check its status 196 200 rv = SCardStatus(pcsc_reader->hCard, NULL, &dwReaderLen, &dwState, &pcsc_reader->dwActiveProtocol, pbAtr, &dwAtrLen); 197 cs_debug("PCSC reader %s dwstate=%lx rv=(%lx)", pcsc_reader->pcsc_name, dwState, rv ); 198 199 if(rv==SCARD_E_INVALID_HANDLE){ 200 SCardEndTransaction(pcsc_reader->hCard,SCARD_LEAVE_CARD); 201 SCardDisconnect(pcsc_reader->hCard,SCARD_LEAVE_CARD); 202 } 203 else if (rv == SCARD_S_SUCCESS && (dwState & (SCARD_PRESENT | SCARD_NEGOTIABLE | SCARD_POWERED ) )) { 201 202 if (rv == SCARD_S_SUCCESS && (dwState & (SCARD_PRESENT | SCARD_NEGOTIABLE | SCARD_POWERED ) )) { 204 203 cs_debug("PCSC card IS inserted in %s card state [dwstate=%lx rv=(%lx)]", pcsc_reader->pcsc_name, dwState,rv); 205 return 3;204 return CARD_INSERTED; 206 205 } 207 206 else { 208 if ( (rv==SCARD_W_RESET_CARD) && (dwState == 0) ) { 209 cs_debug("PCSC check card reinserted in %s [dwstate=%lx rv=(%lx)]", pcsc_reader->pcsc_name, dwState, rv ); 210 SCardDisconnect(pcsc_reader->hCard,SCARD_LEAVE_CARD); 211 rv = SCardConnect(pcsc_reader->hContext, &pcsc_reader->pcsc_name, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &pcsc_reader->hCard, &pcsc_reader->dwActiveProtocol); 212 return ((rv != SCARD_S_SUCCESS) ? 2 : 0); 213 } 214 else if ( rv == SCARD_W_REMOVED_CARD && (dwState | SCARD_ABSENT) ) { 215 cs_debug("PCSC card in %s removed / absent [dwstate=%lx rv=(%lx)]", pcsc_reader->pcsc_name, dwState, rv ); 216 } 217 else { 218 cs_debug("PCSC card inserted FAILURE in %s (%lx) card state (%x) (T=%d)", pcsc_reader->pcsc_name, rv, dwState, ( pcsc_reader->dwActiveProtocol == SCARD_PROTOCOL_T0 ? 0 : 1)); 219 } 220 207 SCardDisconnect(pcsc_reader->hCard,SCARD_RESET_CARD); 208 pcsc_reader->hCard=0; 209 pcsc_reader->pcsc_has_card=0; 210 cs_debug("PCSC card in %s removed / absent [dwstate=%lx rv=(%lx)]", pcsc_reader->pcsc_name, dwState, rv ); 221 211 } 222 212
Note:
See TracChangeset
for help on using the changeset viewer.