34 #ifdef PCSCLITE_STATIC_DRIVER
37 #if ! (defined(IFDHANDLERv2) || defined(IFDHANDLERv3))
38 #error IFDHANDLER version not defined
47 UCHAR ucPTS1, UCHAR ucPTS2, UCHAR ucPTS3)
51 #ifndef PCSCLITE_STATIC_DRIVER
52 RESPONSECODE(*IFDH_set_protocol_parameters) (DWORD, DWORD, UCHAR,
53 UCHAR, UCHAR, UCHAR) = NULL;
55 IFDH_set_protocol_parameters = (RESPONSECODE(*)(DWORD, DWORD, UCHAR,
59 if (NULL == IFDH_set_protocol_parameters)
70 #ifndef PCSCLITE_STATIC_DRIVER
71 rv = (*IFDH_set_protocol_parameters) (rContext->
slot,
72 dwProtocol, ucFlags, ucPTS1, ucPTS2, ucPTS3);
75 ucPTS1, ucPTS2, ucPTS3);
88 #ifndef PCSCLITE_STATIC_DRIVER
89 RESPONSECODE(*IFDH_create_channel) (DWORD, DWORD) = NULL;
90 RESPONSECODE(*IFDH_create_channel_by_name) (DWORD, LPSTR) = NULL;
92 if (rContext->
version == IFD_HVERSION_2_0)
99 IFDH_create_channel_by_name =
105 (void)pthread_mutex_lock(rContext->
mMutex);
107 #ifndef PCSCLITE_STATIC_DRIVER
108 if (rContext->
version == IFD_HVERSION_2_0)
110 rv = (*IFDH_create_channel) (rContext->
slot, rContext->
port);
114 if (rContext->
device[0] !=
'\0')
115 rv = (*IFDH_create_channel_by_name) (rContext->
slot, rContext->
device);
117 rv = (*IFDH_create_channel) (rContext->
slot, rContext->
port);
120 #if defined(IFDHANDLERv2)
125 if (rContext->
device[0] !=
'\0')
134 (void)pthread_mutex_unlock(rContext->
mMutex);
147 #ifndef PCSCLITE_STATIC_DRIVER
148 RESPONSECODE(*IFDH_close_channel) (DWORD) = NULL;
156 rv = pthread_mutex_trylock(rContext->
mMutex);
159 Log1(PCSC_LOG_ERROR,
"Locking failed");
168 #ifndef PCSCLITE_STATIC_DRIVER
169 rv = (*IFDH_close_channel) (rContext->
slot);
175 (void)pthread_mutex_unlock(rContext->
mMutex);
184 DWORD dwLength, PUCHAR pucValue)
188 #ifndef PCSCLITE_STATIC_DRIVER
189 RESPONSECODE(*IFDH_set_capabilities) (DWORD, DWORD, DWORD, PUCHAR) = NULL;
199 #ifndef PCSCLITE_STATIC_DRIVER
200 rv = (*IFDH_set_capabilities) (rContext->
slot, dwTag,
215 PDWORD pdwLength, PUCHAR pucValue)
219 #ifndef PCSCLITE_STATIC_DRIVER
220 RESPONSECODE(*IFDH_get_capabilities) (DWORD, DWORD, PDWORD, PUCHAR) = NULL;
222 IFDH_get_capabilities =
227 (void)pthread_mutex_lock(rContext->
mMutex);
229 #ifndef PCSCLITE_STATIC_DRIVER
230 rv = (*IFDH_get_capabilities) (rContext->
slot, dwTag, pdwLength, pucValue);
236 (void)pthread_mutex_unlock(rContext->
mMutex);
245 PUCHAR pucAtr, PDWORD pdwAtrLen)
250 DWORD dummyAtrLen =
sizeof(dummyAtr);
252 #ifndef PCSCLITE_STATIC_DRIVER
253 RESPONSECODE(*IFDH_power_icc) (DWORD, DWORD, PUCHAR, PDWORD) = NULL;
263 if (NULL == pdwAtrLen)
264 pdwAtrLen = &dummyAtrLen;
280 #ifndef PCSCLITE_STATIC_DRIVER
285 (void)pthread_mutex_lock(rContext->
mMutex);
287 #ifndef PCSCLITE_STATIC_DRIVER
288 rv = (*IFDH_power_icc) (rContext->
slot, dwAction, pucAtr, pdwAtrLen);
294 (void)pthread_mutex_unlock(rContext->
mMutex);
304 (void)SendHotplugSignal();
321 DWORD dwCardStatus = 0;
323 #ifndef PCSCLITE_STATIC_DRIVER
324 RESPONSECODE(*IFDH_icc_presence) (DWORD) = NULL;
330 (void)pthread_mutex_lock(rContext->
mMutex);
332 #ifndef PCSCLITE_STATIC_DRIVER
333 rv = (*IFDH_icc_presence) (rContext->
slot);
339 (void)pthread_mutex_unlock(rContext->
mMutex);
348 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
353 (void)SendHotplugSignal();
360 *pdwStatus = dwCardStatus;
376 DWORD TxLength, PUCHAR RxBuffer, PDWORD RxLength)
380 #ifndef PCSCLITE_STATIC_DRIVER
381 RESPONSECODE(*IFDH_control_v2) (DWORD, PUCHAR, DWORD, PUCHAR,
385 if (rContext->
version != IFD_HVERSION_2_0)
388 #ifndef PCSCLITE_STATIC_DRIVER
393 (void)pthread_mutex_lock(rContext->
mMutex);
395 #ifndef PCSCLITE_STATIC_DRIVER
396 rv = (*IFDH_control_v2) (rContext->
slot, TxBuffer, TxLength,
398 #elif defined(IFDHANDLERv2)
404 (void)pthread_mutex_unlock(rContext->
mMutex);
410 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
411 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
412 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *RxLength);
427 LPCVOID TxBuffer, DWORD TxLength, LPVOID RxBuffer, DWORD RxLength,
428 LPDWORD BytesReturned)
432 #ifndef PCSCLITE_STATIC_DRIVER
433 RESPONSECODE(*IFDH_control) (DWORD, DWORD, LPCVOID, DWORD, LPVOID, DWORD, LPDWORD);
436 if (rContext->
version < IFD_HVERSION_3_0)
439 #ifndef PCSCLITE_STATIC_DRIVER
444 (void)pthread_mutex_lock(rContext->
mMutex);
446 #ifndef PCSCLITE_STATIC_DRIVER
447 rv = (*IFDH_control) (rContext->
slot, ControlCode, TxBuffer,
448 TxLength, RxBuffer, RxLength, BytesReturned);
449 #elif defined(IFDHANDLERv3)
451 TxLength, RxBuffer, RxLength, BytesReturned);
455 (void)pthread_mutex_unlock(rContext->
mMutex);
461 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
462 Log3(PCSC_LOG_DEBUG,
"ControlCode: 0x%.8lX BytesReturned: %ld",
463 ControlCode, *BytesReturned);
464 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
465 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *BytesReturned);
469 (void)SendHotplugSignal();
487 PUCHAR pucTxBuffer, DWORD dwTxLength, PUCHAR pucRxBuffer,
492 #ifndef PCSCLITE_STATIC_DRIVER
498 DebugLogCategory(DEBUG_CATEGORY_APDU, pucTxBuffer, dwTxLength);
500 #ifndef PCSCLITE_STATIC_DRIVER
501 IFDH_transmit_to_icc =
506 (void)pthread_mutex_lock(rContext->
mMutex);
508 #ifndef PCSCLITE_STATIC_DRIVER
509 rv = (*IFDH_transmit_to_icc) (rContext->
slot, pioTxPci, (LPBYTE)
510 pucTxBuffer, dwTxLength, pucRxBuffer, pdwRxLength, pioRxPci);
513 (LPBYTE) pucTxBuffer, dwTxLength,
514 pucRxBuffer, pdwRxLength, pioRxPci);
518 (void)pthread_mutex_unlock(rContext->
mMutex);
521 DebugLogCategory(DEBUG_CATEGORY_SW, pucRxBuffer, *pdwRxLength);
527 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
531 (void)SendHotplugSignal();