55 #ifdef PCSCLITE_STATIC_DRIVER
58 #if ! (defined(IFDHANDLERv2) || defined(IFDHANDLERv3))
59 #error IFDHANDLER version not defined
68 UCHAR ucFlags, UCHAR ucPTS1, UCHAR ucPTS2, UCHAR ucPTS3)
72 #ifndef PCSCLITE_STATIC_DRIVER
73 RESPONSECODE(*IFDH_set_protocol_parameters) (DWORD, DWORD, UCHAR,
74 UCHAR, UCHAR, UCHAR) = NULL;
76 IFDH_set_protocol_parameters = (RESPONSECODE(*)(DWORD, DWORD, UCHAR,
80 if (NULL == IFDH_set_protocol_parameters)
91 #ifndef PCSCLITE_STATIC_DRIVER
92 rv = (*IFDH_set_protocol_parameters) (rContext->
slot,
93 dwProtocol, ucFlags, ucPTS1, ucPTS2, ucPTS3);
96 ucPTS1, ucPTS2, ucPTS3);
109 #ifndef PCSCLITE_STATIC_DRIVER
110 RESPONSECODE(*IFDH_create_channel) (DWORD, DWORD) = NULL;
111 RESPONSECODE(*IFDH_create_channel_by_name) (DWORD, LPSTR) = NULL;
113 if (rContext->
version == IFD_HVERSION_2_0)
114 IFDH_create_channel =
118 IFDH_create_channel =
120 IFDH_create_channel_by_name =
126 (void)pthread_mutex_lock(rContext->
mMutex);
128 #ifndef PCSCLITE_STATIC_DRIVER
129 if (rContext->
version == IFD_HVERSION_2_0)
131 rv = (*IFDH_create_channel) (rContext->
slot, rContext->
port);
135 if (rContext->
device[0] !=
'\0')
136 rv = (*IFDH_create_channel_by_name) (rContext->
slot, rContext->
device);
138 rv = (*IFDH_create_channel) (rContext->
slot, rContext->
port);
141 #if defined(IFDHANDLERv2)
146 if (rContext->
device[0] !=
'\0')
155 (void)pthread_mutex_unlock(rContext->
mMutex);
167 bool do_unlock =
true;
169 #ifndef PCSCLITE_STATIC_DRIVER
170 RESPONSECODE(*IFDH_close_channel) (DWORD) = NULL;
178 rv = pthread_mutex_trylock(rContext->
mMutex);
181 Log1(PCSC_LOG_ERROR,
"Locking failed");
193 #ifndef PCSCLITE_STATIC_DRIVER
194 rv = (*IFDH_close_channel) (rContext->
slot);
201 (void)pthread_mutex_unlock(rContext->
mMutex);
210 DWORD dwLength, PUCHAR pucValue)
214 #ifndef PCSCLITE_STATIC_DRIVER
215 RESPONSECODE(*IFDH_set_capabilities) (DWORD, DWORD, DWORD, PUCHAR) = NULL;
225 #ifndef PCSCLITE_STATIC_DRIVER
226 rv = (*IFDH_set_capabilities) (rContext->
slot, dwTag,
241 PDWORD pdwLength, PUCHAR pucValue)
245 #ifndef PCSCLITE_STATIC_DRIVER
246 RESPONSECODE(*IFDH_get_capabilities) (DWORD, DWORD, PDWORD, PUCHAR) = NULL;
248 IFDH_get_capabilities =
253 (void)pthread_mutex_lock(rContext->
mMutex);
255 #ifndef PCSCLITE_STATIC_DRIVER
256 rv = (*IFDH_get_capabilities) (rContext->
slot, dwTag, pdwLength, pucValue);
262 (void)pthread_mutex_unlock(rContext->
mMutex);
271 PUCHAR pucAtr, PDWORD pdwAtrLen)
276 DWORD dummyAtrLen =
sizeof(dummyAtr);
278 #ifndef PCSCLITE_STATIC_DRIVER
279 RESPONSECODE(*IFDH_power_icc) (DWORD, DWORD, PUCHAR, PDWORD) = NULL;
289 if (NULL == pdwAtrLen)
290 pdwAtrLen = &dummyAtrLen;
301 #ifndef PCSCLITE_STATIC_DRIVER
306 (void)pthread_mutex_lock(rContext->
mMutex);
308 #ifndef PCSCLITE_STATIC_DRIVER
309 rv = (*IFDH_power_icc) (rContext->
slot, dwAction, pucAtr, pdwAtrLen);
315 (void)pthread_mutex_unlock(rContext->
mMutex);
325 (void)SendHotplugSignal();
342 DWORD dwCardStatus = 0;
344 #ifndef PCSCLITE_STATIC_DRIVER
345 RESPONSECODE(*IFDH_icc_presence) (DWORD) = NULL;
351 (void)pthread_mutex_lock(rContext->
mMutex);
353 #ifndef PCSCLITE_STATIC_DRIVER
354 rv = (*IFDH_icc_presence) (rContext->
slot);
360 (void)pthread_mutex_unlock(rContext->
mMutex);
369 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
374 (void)SendHotplugSignal();
381 *pdwStatus = dwCardStatus;
397 DWORD TxLength, PUCHAR RxBuffer, PDWORD RxLength)
401 #ifndef PCSCLITE_STATIC_DRIVER
402 RESPONSECODE(*IFDH_control_v2) (DWORD, PUCHAR, DWORD, PUCHAR,
406 if (rContext->
version != IFD_HVERSION_2_0)
409 #ifndef PCSCLITE_STATIC_DRIVER
414 (void)pthread_mutex_lock(rContext->
mMutex);
416 #ifndef PCSCLITE_STATIC_DRIVER
417 rv = (*IFDH_control_v2) (rContext->
slot, TxBuffer, TxLength,
419 #elif defined(IFDHANDLERv2)
425 (void)pthread_mutex_unlock(rContext->
mMutex);
431 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
432 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
433 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *RxLength);
448 LPCVOID TxBuffer, DWORD TxLength, LPVOID RxBuffer, DWORD RxLength,
449 LPDWORD BytesReturned)
453 #ifndef PCSCLITE_STATIC_DRIVER
454 RESPONSECODE(*IFDH_control) (DWORD, DWORD, LPCVOID, DWORD, LPVOID, DWORD, LPDWORD);
457 if (rContext->
version < IFD_HVERSION_3_0)
460 #ifndef PCSCLITE_STATIC_DRIVER
465 (void)pthread_mutex_lock(rContext->
mMutex);
467 #ifndef PCSCLITE_STATIC_DRIVER
468 rv = (*IFDH_control) (rContext->
slot, ControlCode, TxBuffer,
469 TxLength, RxBuffer, RxLength, BytesReturned);
470 #elif defined(IFDHANDLERv3)
472 TxLength, RxBuffer, RxLength, BytesReturned);
476 (void)pthread_mutex_unlock(rContext->
mMutex);
482 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
483 Log3(PCSC_LOG_DEBUG,
"ControlCode: 0x%.8lX BytesReturned: %ld",
484 ControlCode, *BytesReturned);
485 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
486 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *BytesReturned);
490 (void)SendHotplugSignal();
508 PUCHAR pucTxBuffer, DWORD dwTxLength, PUCHAR pucRxBuffer,
513 #ifndef PCSCLITE_STATIC_DRIVER
519 DebugLogCategory(DEBUG_CATEGORY_APDU, pucTxBuffer, dwTxLength);
521 #ifndef PCSCLITE_STATIC_DRIVER
522 IFDH_transmit_to_icc =
527 (void)pthread_mutex_lock(rContext->
mMutex);
529 #ifndef PCSCLITE_STATIC_DRIVER
530 rv = (*IFDH_transmit_to_icc) (rContext->
slot, pioTxPci, (LPBYTE)
531 pucTxBuffer, dwTxLength, pucRxBuffer, pdwRxLength, pioRxPci);
534 (LPBYTE) pucTxBuffer, dwTxLength,
535 pucRxBuffer, pdwRxLength, pioRxPci);
539 (void)pthread_mutex_unlock(rContext->
mMutex);
542 DebugLogCategory(DEBUG_CATEGORY_SW, pucRxBuffer, *pdwRxLength);
548 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
552 (void)SendHotplugSignal();