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);
168 #ifndef PCSCLITE_STATIC_DRIVER
169 RESPONSECODE(*IFDH_close_channel) (DWORD) = NULL;
177 rv = pthread_mutex_trylock(rContext->
mMutex);
180 Log1(PCSC_LOG_ERROR,
"Locking failed");
189 #ifndef PCSCLITE_STATIC_DRIVER
190 rv = (*IFDH_close_channel) (rContext->
slot);
196 (void)pthread_mutex_unlock(rContext->
mMutex);
205 DWORD dwLength, PUCHAR pucValue)
209 #ifndef PCSCLITE_STATIC_DRIVER
210 RESPONSECODE(*IFDH_set_capabilities) (DWORD, DWORD, DWORD, PUCHAR) = NULL;
220 #ifndef PCSCLITE_STATIC_DRIVER
221 rv = (*IFDH_set_capabilities) (rContext->
slot, dwTag,
236 PDWORD pdwLength, PUCHAR pucValue)
240 #ifndef PCSCLITE_STATIC_DRIVER
241 RESPONSECODE(*IFDH_get_capabilities) (DWORD, DWORD, PDWORD, PUCHAR) = NULL;
243 IFDH_get_capabilities =
248 (void)pthread_mutex_lock(rContext->
mMutex);
250 #ifndef PCSCLITE_STATIC_DRIVER
251 rv = (*IFDH_get_capabilities) (rContext->
slot, dwTag, pdwLength, pucValue);
257 (void)pthread_mutex_unlock(rContext->
mMutex);
266 PUCHAR pucAtr, PDWORD pdwAtrLen)
271 DWORD dummyAtrLen =
sizeof(dummyAtr);
273 #ifndef PCSCLITE_STATIC_DRIVER
274 RESPONSECODE(*IFDH_power_icc) (DWORD, DWORD, PUCHAR, PDWORD) = NULL;
284 if (NULL == pdwAtrLen)
285 pdwAtrLen = &dummyAtrLen;
296 #ifndef PCSCLITE_STATIC_DRIVER
301 (void)pthread_mutex_lock(rContext->
mMutex);
303 #ifndef PCSCLITE_STATIC_DRIVER
304 rv = (*IFDH_power_icc) (rContext->
slot, dwAction, pucAtr, pdwAtrLen);
310 (void)pthread_mutex_unlock(rContext->
mMutex);
320 (void)SendHotplugSignal();
337 DWORD dwCardStatus = 0;
339 #ifndef PCSCLITE_STATIC_DRIVER
340 RESPONSECODE(*IFDH_icc_presence) (DWORD) = NULL;
346 (void)pthread_mutex_lock(rContext->
mMutex);
348 #ifndef PCSCLITE_STATIC_DRIVER
349 rv = (*IFDH_icc_presence) (rContext->
slot);
355 (void)pthread_mutex_unlock(rContext->
mMutex);
364 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
369 (void)SendHotplugSignal();
376 *pdwStatus = dwCardStatus;
392 DWORD TxLength, PUCHAR RxBuffer, PDWORD RxLength)
396 #ifndef PCSCLITE_STATIC_DRIVER
397 RESPONSECODE(*IFDH_control_v2) (DWORD, PUCHAR, DWORD, PUCHAR,
401 if (rContext->
version != IFD_HVERSION_2_0)
404 #ifndef PCSCLITE_STATIC_DRIVER
409 (void)pthread_mutex_lock(rContext->
mMutex);
411 #ifndef PCSCLITE_STATIC_DRIVER
412 rv = (*IFDH_control_v2) (rContext->
slot, TxBuffer, TxLength,
414 #elif defined(IFDHANDLERv2)
420 (void)pthread_mutex_unlock(rContext->
mMutex);
426 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
427 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
428 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *RxLength);
443 LPCVOID TxBuffer, DWORD TxLength, LPVOID RxBuffer, DWORD RxLength,
444 LPDWORD BytesReturned)
448 #ifndef PCSCLITE_STATIC_DRIVER
449 RESPONSECODE(*IFDH_control) (DWORD, DWORD, LPCVOID, DWORD, LPVOID, DWORD, LPDWORD);
452 if (rContext->
version < IFD_HVERSION_3_0)
455 #ifndef PCSCLITE_STATIC_DRIVER
460 (void)pthread_mutex_lock(rContext->
mMutex);
462 #ifndef PCSCLITE_STATIC_DRIVER
463 rv = (*IFDH_control) (rContext->
slot, ControlCode, TxBuffer,
464 TxLength, RxBuffer, RxLength, BytesReturned);
465 #elif defined(IFDHANDLERv3)
467 TxLength, RxBuffer, RxLength, BytesReturned);
471 (void)pthread_mutex_unlock(rContext->
mMutex);
477 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
478 Log3(PCSC_LOG_DEBUG,
"ControlCode: 0x%.8lX BytesReturned: %ld",
479 ControlCode, *BytesReturned);
480 LogXxd(PCSC_LOG_DEBUG,
"TxBuffer ", TxBuffer, TxLength);
481 LogXxd(PCSC_LOG_DEBUG,
"RxBuffer ", RxBuffer, *BytesReturned);
485 (void)SendHotplugSignal();
503 PUCHAR pucTxBuffer, DWORD dwTxLength, PUCHAR pucRxBuffer,
508 #ifndef PCSCLITE_STATIC_DRIVER
514 DebugLogCategory(DEBUG_CATEGORY_APDU, pucTxBuffer, dwTxLength);
516 #ifndef PCSCLITE_STATIC_DRIVER
517 IFDH_transmit_to_icc =
522 (void)pthread_mutex_lock(rContext->
mMutex);
524 #ifndef PCSCLITE_STATIC_DRIVER
525 rv = (*IFDH_transmit_to_icc) (rContext->
slot, pioTxPci, (LPBYTE)
526 pucTxBuffer, dwTxLength, pucRxBuffer, pdwRxLength, pioRxPci);
529 (LPBYTE) pucTxBuffer, dwTxLength,
530 pucRxBuffer, pdwRxLength, pioRxPci);
534 (void)pthread_mutex_unlock(rContext->
mMutex);
537 DebugLogCategory(DEBUG_CATEGORY_SW, pucRxBuffer, *pdwRxLength);
543 Log2(PCSC_LOG_ERROR,
"Card not transacted: %ld", rv);
547 (void)SendHotplugSignal();