#ifndef _ifd_handler_h_
#define _ifd_handler_h_
#include <pcsclite.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct _DEVICE_CAPABILITIES
{
LPSTR Vendor_Name;
LPSTR IFD_Type;
DWORD IFD_Version;
LPSTR IFD_Serial;
DWORD IFD_Channel_ID;
DWORD Asynch_Supported;
DWORD Default_Clock;
DWORD Max_Clock;
DWORD Default_Data_Rate;
DWORD Max_Data_Rate;
DWORD Max_IFSD;
DWORD Synch_Supported;
DWORD Power_Mgmt;
DWORD Card_Auth_Devices;
DWORD User_Auth_Device;
DWORD Mechanics_Supported;
DWORD Vendor_Features;
}
DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
typedef struct _ICC_STATE
{
UCHAR ICC_Presence;
UCHAR ICC_Interface_Status;
UCHAR ATR[MAX_ATR_SIZE];
UCHAR ICC_Type;
}
ICC_STATE, *PICC_STATE;
typedef struct _PROTOCOL_OPTIONS
{
DWORD Protocol_Type;
DWORD Current_Clock;
DWORD Current_F;
DWORD Current_D;
DWORD Current_N;
DWORD Current_W;
DWORD Current_IFSC;
DWORD Current_IFSD;
DWORD Current_BWT;
DWORD Current_CWT;
DWORD Current_EBC;
}
PROTOCOL_OPTIONS, *PPROTOCOL_OPTIONS;
typedef struct _SCARD_IO_HEADER
{
DWORD Protocol;
DWORD Length;
}
SCARD_IO_HEADER, *PSCARD_IO_HEADER;
#define TAG_IFD_ATR 0x0303
#define TAG_IFD_SLOTNUM 0x0180
#define TAG_IFD_SLOT_THREAD_SAFE 0x0FAC
#define TAG_IFD_THREAD_SAFE 0x0FAD
#define TAG_IFD_SLOTS_NUMBER 0x0FAE
#define TAG_IFD_SIMULTANEOUS_ACCESS 0x0FAF
#define TAG_IFD_POLLING_THREAD 0x0FB0
#define TAG_IFD_POLLING_THREAD_KILLABLE 0x0FB1
#define IFD_HVERSION_1_0 0x00010000
#define IFD_HVERSION_2_0 0x00020000
#define IFD_HVERSION_3_0 0x00030000
#define IFD_POWER_UP 500
#define IFD_POWER_DOWN 501
#define IFD_RESET 502
#define IFD_NEGOTIATE_PTS1 1
#define IFD_NEGOTIATE_PTS2 2
#define IFD_NEGOTIATE_PTS3 4
#define IFD_SUCCESS 0
#define IFD_ERROR_TAG 600
#define IFD_ERROR_SET_FAILURE 601
#define IFD_ERROR_VALUE_READ_ONLY 602
#define IFD_ERROR_PTS_FAILURE 605
#define IFD_ERROR_NOT_SUPPORTED 606
#define IFD_PROTOCOL_NOT_SUPPORTED 607
#define IFD_ERROR_POWER_ACTION 608
#define IFD_ERROR_SWALLOW 609
#define IFD_ERROR_EJECT 610
#define IFD_ERROR_CONFISCATE 611
#define IFD_COMMUNICATION_ERROR 612
#define IFD_RESPONSE_TIMEOUT 613
#define IFD_NOT_SUPPORTED 614
#define IFD_ICC_PRESENT 615
#define IFD_ICC_NOT_PRESENT 616
#define IFD_NO_SUCH_DEVICE 617
#ifndef RESPONSECODE_DEFINED_IN_WINTYPES_H
typedef long RESPONSECODE;
#endif
#ifndef IFDHANDLERv2
RESPONSECODE IFDHCreateChannelByName(DWORD, LPSTR);
RESPONSECODE IFDHControl(DWORD, DWORD, PUCHAR, DWORD, PUCHAR,
DWORD, LPDWORD);
#else
RESPONSECODE IFDHControl(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
#endif
RESPONSECODE IFDHCreateChannel(DWORD, DWORD);
RESPONSECODE IFDHCloseChannel(DWORD);
RESPONSECODE IFDHGetCapabilities(DWORD, DWORD, PDWORD, PUCHAR);
RESPONSECODE IFDHSetCapabilities(DWORD, DWORD, DWORD, PUCHAR);
RESPONSECODE IFDHSetProtocolParameters(DWORD, DWORD, UCHAR,
UCHAR, UCHAR, UCHAR);
RESPONSECODE IFDHPowerICC(DWORD, DWORD, PUCHAR, PDWORD);
RESPONSECODE IFDHTransmitToICC(DWORD, SCARD_IO_HEADER, PUCHAR,
DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
RESPONSECODE IFDHICCPresence(DWORD);
RESPONSECODE IO_Create_Channel(DWORD);
RESPONSECODE IO_Close_Channel(void);
RESPONSECODE IFD_Get_Capabilities(DWORD, PUCHAR);
RESPONSECODE IFD_Set_Capabilities(DWORD, PUCHAR);
RESPONSECODE IFD_Set_Protocol_Parameters(DWORD, UCHAR, UCHAR,
UCHAR, UCHAR);
RESPONSECODE IFD_Power_ICC(DWORD);
RESPONSECODE IFD_Swallow_ICC(void);
RESPONSECODE IFD_Eject_ICC(void);
RESPONSECODE IFD_Confiscate_ICC(void);
RESPONSECODE IFD_Transmit_to_ICC(SCARD_IO_HEADER, PUCHAR, DWORD,
PUCHAR, PDWORD, PSCARD_IO_HEADER);
RESPONSECODE IFD_Is_ICC_Present(void);
RESPONSECODE IFD_Is_ICC_Absent(void);
#ifdef __cplusplus
}
#endif
#endif