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->lpcDevice[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;
273 #ifndef PCSCLITE_STATIC_DRIVER
278 (void)pthread_mutex_lock(rContext->
mMutex);
280 #ifndef PCSCLITE_STATIC_DRIVER
281 rv = (*IFDH_power_icc) (rContext->
slot, dwAction, pucAtr, pdwAtrLen);
287 (void)pthread_mutex_unlock(rContext->
mMutex);
297 (void)SendHotplugSignal();
314 DWORD dwCardStatus = 0;
316 #ifndef PCSCLITE_STATIC_DRIVER
317 RESPONSECODE(*IFDH_icc_presence) (DWORD) = NULL;
323 (void)pthread_mutex_lock(rContext->
mMutex);
325 #ifndef PCSCLITE_STATIC_DRIVER
326 rv = (*IFDH_icc_presence) (rContext->
slot);
332 (void)pthread_mutex_unlock(rContext->
mMutex);
341 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
346 (void)SendHotplugSignal();
353 *pdwStatus = dwCardStatus;
369 DWORD TxLength, PUCHAR RxBuffer, PDWORD RxLength)
373 #ifndef PCSCLITE_STATIC_DRIVER
374 RESPONSECODE(*IFDH_control_v2) (DWORD, PUCHAR, DWORD, PUCHAR,
378 if (rContext->
version != IFD_HVERSION_2_0)
381 #ifndef PCSCLITE_STATIC_DRIVER
386 (void)pthread_mutex_lock(rContext->
mMutex);
388 #ifndef PCSCLITE_STATIC_DRIVER
389 rv = (*IFDH_control_v2) (rContext->
slot, TxBuffer, TxLength,
391 #elif defined(IFDHANDLERv2)
397 (void)pthread_mutex_unlock(rContext->
mMutex);
403 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
404 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
405 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *RxLength);
420 LPCVOID TxBuffer, DWORD TxLength, LPVOID RxBuffer, DWORD RxLength,
421 LPDWORD BytesReturned)
425 #ifndef PCSCLITE_STATIC_DRIVER
426 RESPONSECODE(*IFDH_control) (DWORD, DWORD, LPCVOID, DWORD, LPVOID, DWORD, LPDWORD);
429 if (rContext->
version < IFD_HVERSION_3_0)
432 #ifndef PCSCLITE_STATIC_DRIVER
437 (void)pthread_mutex_lock(rContext->
mMutex);
439 #ifndef PCSCLITE_STATIC_DRIVER
440 rv = (*IFDH_control) (rContext->
slot, ControlCode, TxBuffer,
441 TxLength, RxBuffer, RxLength, BytesReturned);
442 #elif defined(IFDHANDLERv3)
444 TxLength, RxBuffer, RxLength, BytesReturned);
448 (void)pthread_mutex_unlock(rContext->
mMutex);
454 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
455 Log3(PCSC_LOG_DEBUG,
"ControlCode: 0x%.8lX BytesReturned: %ld",
456 ControlCode, *BytesReturned);
457 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
458 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *BytesReturned);
462 (void)SendHotplugSignal();
480 PUCHAR pucTxBuffer, DWORD dwTxLength, PUCHAR pucRxBuffer,
485 #ifndef PCSCLITE_STATIC_DRIVER
491 DebugLogCategory(DEBUG_CATEGORY_APDU, pucTxBuffer, dwTxLength);
493 #ifndef PCSCLITE_STATIC_DRIVER
494 IFDH_transmit_to_icc =
499 (void)pthread_mutex_lock(rContext->
mMutex);
501 #ifndef PCSCLITE_STATIC_DRIVER
502 rv = (*IFDH_transmit_to_icc) (rContext->
slot, pioTxPci, (LPBYTE)
503 pucTxBuffer, dwTxLength, pucRxBuffer, pdwRxLength, pioRxPci);
506 (LPBYTE) pucTxBuffer, dwTxLength,
507 pucRxBuffer, pdwRxLength, pioRxPci);
511 (void)pthread_mutex_unlock(rContext->
mMutex);
514 DebugLogCategory(DEBUG_CATEGORY_SW, pucRxBuffer, *pdwRxLength);
520 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
524 (void)SendHotplugSignal();