Skip to content

Commit

Permalink
better support of PCSCLITE_STATIC_DRIVER.
Browse files Browse the repository at this point in the history
This is used to statically link the reader driver to pcscd. Since the
link is static you must define the IFDHandler API version at compilation
time.  Either define IFDHANDLERv1, IFDHANDLERv2 or IFDHANDLERv3


git-svn-id: svn:https://anonscm.debian.org/svn/pcsclite/trunk/PCSC@4645 0ce88b0d-b2fd-0310-8134-9614164e65ea
  • Loading branch information
LudovicRousseau committed Jan 8, 2010
1 parent 7f23eb8 commit 7e631ed
Showing 1 changed file with 51 additions and 42 deletions.
93 changes: 51 additions & 42 deletions src/ifdwrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,18 +88,17 @@ LONG IFDSetPTS(PREADER_CONTEXT rContext, DWORD dwProtocol, UCHAR ucFlags,
dwProtocol, ucFlags, ucPTS1, ucPTS2, ucPTS3);
}
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
#ifdef IFDHANDLERv1
{
ucValue[0] = rContext->dwSlot;
(void)IFDSetCapabilities(rContext, TAG_IFD_SLOTNUM, 1, ucValue);
rv = IFD_Set_Protocol_Parameters(dwProtocol, ucFlags, ucPTS1,
ucPTS2, ucPTS3);
}
else
{
rv = IFDHSetProtocolParameters(rContext->dwSlot, dwProtocol,
ucFlags, ucPTS1, ucPTS2, ucPTS3);
}
#else
rv = IFDHSetProtocolParameters(rContext->dwSlot, dwProtocol, ucFlags,
ucPTS1, ucPTS2, ucPTS3);
#endif
#endif

return rv;
Expand Down Expand Up @@ -152,20 +151,19 @@ LONG IFDOpenIFD(PREADER_CONTEXT rContext)
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
#ifdef IFDHANDLERv1
rv = IO_Create_Channel(rContext->dwPort);
#elif IFDHANDLERv2
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
#endif

/* END OF LOCKED REGION */
Expand Down Expand Up @@ -214,10 +212,11 @@ LONG IFDCloseIFD(PREADER_CONTEXT rContext)
else
rv = (*IFDH_close_channel) (rContext->dwSlot);
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
rv = IO_Close_Channel();
else
rv = IFDHCloseChannel(rContext->dwSlot);
#ifdef IFDHANDLERv1
rv = IO_Close_Channel();
#else
rv = IFDHCloseChannel(rContext->dwSlot);
#endif
#endif

/* END OF LOCKED REGION */
Expand Down Expand Up @@ -256,11 +255,11 @@ LONG IFDSetCapabilities(PREADER_CONTEXT rContext, DWORD dwTag,
rv = (*IFDH_set_capabilities) (rContext->dwSlot, dwTag,
dwLength, pucValue);
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
rv = IFD_Set_Capabilities(dwTag, pucValue);
else
rv = IFDHSetCapabilities(rContext->dwSlot, dwTag, dwLength,
pucValue);
#ifdef IFDHANDLERv1
rv = IFD_Set_Capabilities(dwTag, pucValue);
#else
rv = IFDHSetCapabilities(rContext->dwSlot, dwTag, dwLength, pucValue);
#endif
#endif

return rv;
Expand Down Expand Up @@ -298,11 +297,11 @@ LONG IFDGetCapabilities(PREADER_CONTEXT rContext, DWORD dwTag,
rv = (*IFDH_get_capabilities) (rContext->dwSlot, dwTag,
pdwLength, pucValue);
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
rv = IFD_Get_Capabilities(dwTag, pucValue);
else
rv = IFDHGetCapabilities(rContext->dwSlot, dwTag, pdwLength,
pucValue);
#ifdef IFDHANDLERv1
rv = IFD_Get_Capabilities(dwTag, pucValue);
#else
rv = IFDHGetCapabilities(rContext->dwSlot, dwTag, pdwLength, pucValue);
#endif
#endif

/* END OF LOCKED REGION */
Expand All @@ -318,8 +317,10 @@ LONG IFDPowerICC(PREADER_CONTEXT rContext, DWORD dwAction,
PUCHAR pucAtr, PDWORD pdwAtrLen)
{
RESPONSECODE rv;
#ifndef PCSCLITE_STATIC_DRIVER
short ret;
SMARTCARD_EXTENSION sSmartCard;
#endif
DWORD dwStatus;
UCHAR ucValue[1];

Expand Down Expand Up @@ -367,14 +368,15 @@ LONG IFDPowerICC(PREADER_CONTEXT rContext, DWORD dwAction,
ret = ATRDecodeAtr(&sSmartCard, pucAtr, *pdwAtrLen);
}
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
#ifdef IFDHANDLERv1
{
ucValue[0] = rContext->dwSlot;
(void)IFDSetCapabilities(rContext, TAG_IFD_SLOTNUM, 1, ucValue);
rv = IFD_Power_ICC(dwAction);
}
else
rv = IFDHPowerICC(rContext->dwSlot, dwAction, pucAtr, pdwAtrLen);
#else
rv = IFDHPowerICC(rContext->dwSlot, dwAction, pucAtr, pdwAtrLen);
#endif
#endif

/* END OF LOCKED REGION */
Expand Down Expand Up @@ -445,14 +447,15 @@ LONG IFDStatusICC(PREADER_CONTEXT rContext, PDWORD pdwStatus,
else
rv = (*IFDH_icc_presence) (rContext->dwSlot);
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
#ifdef IFDHANDLERv1
{
ucValue[0] = rContext->dwSlot;
(void)IFDSetCapabilities(rContext, TAG_IFD_SLOTNUM, 1, ucValue);
rv = IFD_Is_ICC_Present();
}
else
rv = IFDHICCPresence(rContext->dwSlot);
#else
rv = IFDHICCPresence(rContext->dwSlot);
#endif
#endif

/* END OF LOCKED REGION */
Expand Down Expand Up @@ -500,7 +503,9 @@ LONG IFDStatusICC(PREADER_CONTEXT rContext, PDWORD pdwStatus,
#ifndef PCSCLITE_STATIC_DRIVER
rv = (*IFD_get_capabilities) (dwTag, pucAtr);
#else
#ifdef IFDHANDLERv1
rv = IFD_Get_Capabilities(dwTag, pucAtr);
#endif
#endif

/* END OF LOCKED REGION */
Expand Down Expand Up @@ -571,8 +576,8 @@ LONG IFDControl_v2(PREADER_CONTEXT rContext, PUCHAR TxBuffer,
#ifndef PCSCLITE_STATIC_DRIVER
rv = (*IFDH_control_v2) (rContext->dwSlot, TxBuffer, TxLength,
RxBuffer, RxLength);
#else
rv = IFDHControl_v2(rContext->dwSlot, TxBuffer, TxLength,
#elif IFDHANDLERv2
rv = IFDHControl(rContext->dwSlot, TxBuffer, TxLength,
RxBuffer, RxLength);
#endif

Expand Down Expand Up @@ -622,7 +627,7 @@ LONG IFDControl(PREADER_CONTEXT rContext, DWORD ControlCode,
#ifndef PCSCLITE_STATIC_DRIVER
rv = (*IFDH_control) (rContext->dwSlot, ControlCode, TxBuffer,
TxLength, RxBuffer, RxLength, BytesReturned);
#else
#elif IFDHANDLERv3
rv = IFDHControl(rContext->dwSlot, ControlCode, TxBuffer,
TxLength, RxBuffer, RxLength, BytesReturned);
#endif
Expand Down Expand Up @@ -664,7 +669,6 @@ LONG IFDTransmit(PREADER_CONTEXT rContext, SCARD_IO_HEADER pioTxPci,
PDWORD pdwRxLength, PSCARD_IO_HEADER pioRxPci)
{
RESPONSECODE rv = IFD_SUCCESS;
UCHAR ucValue[1] = "\x00";

#ifndef PCSCLITE_STATIC_DRIVER
RESPONSECODE(*IFD_transmit_to_icc) (SCARD_IO_HEADER, PUCHAR, DWORD,
Expand All @@ -691,6 +695,8 @@ LONG IFDTransmit(PREADER_CONTEXT rContext, SCARD_IO_HEADER pioTxPci,
#ifndef PCSCLITE_STATIC_DRIVER
if (rContext->dwVersion == IFD_HVERSION_1_0)
{
UCHAR ucValue[1];

ucValue[0] = rContext->dwSlot;
(void)IFDSetCapabilities(rContext, TAG_IFD_SLOTNUM, 1, ucValue);
rv = (*IFD_transmit_to_icc) (pioTxPci, (LPBYTE) pucTxBuffer,
Expand All @@ -701,17 +707,20 @@ LONG IFDTransmit(PREADER_CONTEXT rContext, SCARD_IO_HEADER pioTxPci,
(LPBYTE) pucTxBuffer, dwTxLength,
pucRxBuffer, pdwRxLength, pioRxPci);
#else
if (rContext->dwVersion == IFD_HVERSION_1_0)
#ifdef IFDHANDLERv1
{
UCHAR ucValue[1];

ucValue[0] = rContext->dwSlot;
(void)IFDSetCapabilities(rContext, TAG_IFD_SLOTNUM, 1, ucValue);
rv = IFD_Transmit_to_ICC(pioTxPci, (LPBYTE) pucTxBuffer,
dwTxLength, pucRxBuffer, pdwRxLength, pioRxPci);
}
else
rv = IFDHTransmitToICC(rContext->dwSlot, pioTxPci,
(LPBYTE) pucTxBuffer, dwTxLength,
pucRxBuffer, pdwRxLength, pioRxPci);
#else
rv = IFDHTransmitToICC(rContext->dwSlot, pioTxPci,
(LPBYTE) pucTxBuffer, dwTxLength,
pucRxBuffer, pdwRxLength, pioRxPci);
#endif
#endif

/* END OF LOCKED REGION */
Expand Down

0 comments on commit 7e631ed

Please sign in to comment.