/** * Open a communication channel to the IFD. */ LONG IFDOpenIFD(READER_CONTEXT * rContext) { RESPONSECODE rv = 0; #ifndef PCSCLITE_STATIC_DRIVER RESPONSECODE(*IFDH_create_channel) (DWORD, DWORD) = NULL; RESPONSECODE(*IFDH_create_channel_by_name) (DWORD, LPSTR) = NULL; if (rContext->version == IFD_HVERSION_2_0) IFDH_create_channel = rContext->psFunctions.psFunctions_v2.pvfCreateChannel; else { IFDH_create_channel = rContext->psFunctions.psFunctions_v3.pvfCreateChannel; IFDH_create_channel_by_name = rContext->psFunctions.psFunctions_v3.pvfCreateChannelByName; } #endif /* LOCK THIS CODE REGION */ (void)pthread_mutex_lock(rContext->mMutex); #ifndef PCSCLITE_STATIC_DRIVER if (rContext->version == IFD_HVERSION_2_0) { rv = (*IFDH_create_channel) (rContext->slot, rContext->port); } else { /* use device name only if defined */ if (rContext->device[0] != '\0') rv = (*IFDH_create_channel_by_name) (rContext->slot, rContext->device); else rv = (*IFDH_create_channel) (rContext->slot, rContext->port); } #else #if defined(IFDHANDLERv2) rv = IFDHCreateChannel(rContext->slot, rContext->port); #else { /* Use device name only if defined */ if (rContext->device[0] != '\0') rv = IFDHCreateChannelByName(rContext->slot, rContext->device); else rv = IFDHCreateChannel(rContext->slot, rContext->port); } #endif #endif /* END OF LOCKED REGION */ (void)pthread_mutex_unlock(rContext->mMutex); return rv; }
/** * Open a communication channel to the IFD. */ LONG IFDOpenIFD(PREADER_CONTEXT rContext) { RESPONSECODE rv = 0; #ifndef PCSCLITE_STATIC_DRIVER RESPONSECODE(*IO_create_channel) (DWORD) = NULL; RESPONSECODE(*IFDH_create_channel) (DWORD, DWORD) = NULL; RESPONSECODE(*IFDH_create_channel_by_name) (DWORD, LPSTR) = NULL; if (rContext->dwVersion == IFD_HVERSION_1_0) IO_create_channel = rContext->psFunctions.psFunctions_v1.pvfCreateChannel; else if (rContext->dwVersion == IFD_HVERSION_2_0) IFDH_create_channel = rContext->psFunctions.psFunctions_v2.pvfCreateChannel; else { IFDH_create_channel = rContext->psFunctions.psFunctions_v3.pvfCreateChannel; IFDH_create_channel_by_name = rContext->psFunctions.psFunctions_v3.pvfCreateChannelByName; } #endif /* LOCK THIS CODE REGION */ (void)SYS_MutexLock(rContext->mMutex); #ifndef PCSCLITE_STATIC_DRIVER if (rContext->dwVersion == IFD_HVERSION_1_0) { rv = (*IO_create_channel) (rContext->dwPort); } else if (rContext->dwVersion == IFD_HVERSION_2_0) { rv = (*IFDH_create_channel) (rContext->dwSlot, rContext->dwPort); } else { /* use device name only if defined */ if (rContext->lpcDevice[0] != '\0') rv = (*IFDH_create_channel_by_name) (rContext->dwSlot, rContext->lpcDevice); else rv = (*IFDH_create_channel) (rContext->dwSlot, rContext->dwPort); } #else if (rContext->dwVersion == IFD_HVERSION_1_0) { rv = IO_Create_Channel(rContext->dwPort); } else if (rContext->dwVersion == IFD_HVERSION_2_0) { rv = IFDHCreateChannel(rContext->dwSlot, rContext->dwPort); } else { /* Use device name only if defined */ if (rContext->lpcDevice[0] != '\0') rv = IFDHCreateChannelByName(rContext->dwSlot, rContext->lpcDevice); else rv = IFDHCreateChannel(rContext->dwSlot, rContext->dwPort); } #endif /* END OF LOCKED REGION */ (void)SYS_MutexUnLock(rContext->mMutex); return rv; }