00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00016 #ifndef _ifd_handler_h_
00017 #define _ifd_handler_h_
00018
00019 #include <pcsclite.h>
00020
00021 #ifdef __cplusplus
00022 extern "C"
00023 {
00024 #endif
00025
00026
00027
00028
00029
00030 typedef struct _DEVICE_CAPABILITIES
00031 {
00032 LPSTR Vendor_Name;
00033 LPSTR IFD_Type;
00034 DWORD IFD_Version;
00035 LPSTR IFD_Serial;
00036 DWORD IFD_Channel_ID;
00038 DWORD Asynch_Supported;
00039 DWORD Default_Clock;
00040 DWORD Max_Clock;
00041 DWORD Default_Data_Rate;
00042 DWORD Max_Data_Rate;
00043 DWORD Max_IFSD;
00044 DWORD Synch_Supported;
00045 DWORD Power_Mgmt;
00046 DWORD Card_Auth_Devices;
00047 DWORD User_Auth_Device;
00048 DWORD Mechanics_Supported;
00049 DWORD Vendor_Features;
00050 }
00051 DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
00052
00053 typedef struct _ICC_STATE
00054 {
00055 UCHAR ICC_Presence;
00056 UCHAR ICC_Interface_Status;
00057 UCHAR ATR[MAX_ATR_SIZE];
00058 UCHAR ICC_Type;
00059 }
00060 ICC_STATE, *PICC_STATE;
00061
00062 typedef struct _PROTOCOL_OPTIONS
00063 {
00064 DWORD Protocol_Type;
00065 DWORD Current_Clock;
00066 DWORD Current_F;
00067 DWORD Current_D;
00068 DWORD Current_N;
00069 DWORD Current_W;
00070 DWORD Current_IFSC;
00071 DWORD Current_IFSD;
00072 DWORD Current_BWT;
00073 DWORD Current_CWT;
00074 DWORD Current_EBC;
00075 }
00076 PROTOCOL_OPTIONS, *PPROTOCOL_OPTIONS;
00077
00078 typedef struct _SCARD_IO_HEADER
00079 {
00080 DWORD Protocol;
00081 DWORD Length;
00082 }
00083 SCARD_IO_HEADER, *PSCARD_IO_HEADER;
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 #define TAG_IFD_ATR 0x0303
00095 #define TAG_IFD_SLOTNUM 0x0180
00096 #define TAG_IFD_SLOT_THREAD_SAFE 0x0FAC
00097 #define TAG_IFD_THREAD_SAFE 0x0FAD
00098 #define TAG_IFD_SLOTS_NUMBER 0x0FAE
00099 #define TAG_IFD_SIMULTANEOUS_ACCESS 0x0FAF
00100 #define TAG_IFD_POLLING_THREAD 0x0FB0
00101 #define TAG_IFD_POLLING_THREAD_KILLABLE 0x0FB1
00102
00103
00104
00105
00106
00107
00108
00109
00110 #define IFD_HVERSION_1_0 0x00010000
00111 #define IFD_HVERSION_2_0 0x00020000
00112 #define IFD_HVERSION_3_0 0x00030000
00113
00114
00115
00116
00117
00118
00119
00120
00121 #define IFD_POWER_UP 500
00122 #define IFD_POWER_DOWN 501
00123 #define IFD_RESET 502
00124
00125 #define IFD_NEGOTIATE_PTS1 1
00126 #define IFD_NEGOTIATE_PTS2 2
00127 #define IFD_NEGOTIATE_PTS3 4
00128
00129 #define IFD_SUCCESS 0
00130 #define IFD_ERROR_TAG 600
00131 #define IFD_ERROR_SET_FAILURE 601
00132 #define IFD_ERROR_VALUE_READ_ONLY 602
00133 #define IFD_ERROR_PTS_FAILURE 605
00134 #define IFD_ERROR_NOT_SUPPORTED 606
00135 #define IFD_PROTOCOL_NOT_SUPPORTED 607
00136 #define IFD_ERROR_POWER_ACTION 608
00137 #define IFD_ERROR_SWALLOW 609
00138 #define IFD_ERROR_EJECT 610
00139 #define IFD_ERROR_CONFISCATE 611
00140 #define IFD_COMMUNICATION_ERROR 612
00141 #define IFD_RESPONSE_TIMEOUT 613
00142 #define IFD_NOT_SUPPORTED 614
00143 #define IFD_ICC_PRESENT 615
00144 #define IFD_ICC_NOT_PRESENT 616
00145 #define IFD_NO_SUCH_DEVICE 617
00146
00147 #ifndef RESPONSECODE_DEFINED_IN_WINTYPES_H
00148 typedef long RESPONSECODE;
00149 #endif
00150
00151
00152
00153
00154
00155
00156
00157
00158 #ifndef IFDHANDLERv2
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168 RESPONSECODE IFDHCreateChannelByName(DWORD, LPSTR);
00169 RESPONSECODE IFDHControl(DWORD, DWORD, PUCHAR, DWORD, PUCHAR,
00170 DWORD, LPDWORD);
00171 #else
00172
00173
00174
00175
00176
00177 RESPONSECODE IFDHControl(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
00178
00179 #endif
00180
00181
00182
00183
00184 RESPONSECODE IFDHCreateChannel(DWORD, DWORD);
00185 RESPONSECODE IFDHCloseChannel(DWORD);
00186 RESPONSECODE IFDHGetCapabilities(DWORD, DWORD, PDWORD, PUCHAR);
00187 RESPONSECODE IFDHSetCapabilities(DWORD, DWORD, DWORD, PUCHAR);
00188 RESPONSECODE IFDHSetProtocolParameters(DWORD, DWORD, UCHAR,
00189 UCHAR, UCHAR, UCHAR);
00190 RESPONSECODE IFDHPowerICC(DWORD, DWORD, PUCHAR, PDWORD);
00191 RESPONSECODE IFDHTransmitToICC(DWORD, SCARD_IO_HEADER, PUCHAR,
00192 DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
00193 RESPONSECODE IFDHICCPresence(DWORD);
00194
00195
00196
00197
00198
00199 RESPONSECODE IO_Create_Channel(DWORD);
00200 RESPONSECODE IO_Close_Channel(void);
00201 RESPONSECODE IFD_Get_Capabilities(DWORD, PUCHAR);
00202 RESPONSECODE IFD_Set_Capabilities(DWORD, PUCHAR);
00203 RESPONSECODE IFD_Set_Protocol_Parameters(DWORD, UCHAR, UCHAR,
00204 UCHAR, UCHAR);
00205 RESPONSECODE IFD_Power_ICC(DWORD);
00206 RESPONSECODE IFD_Swallow_ICC(void);
00207 RESPONSECODE IFD_Eject_ICC(void);
00208 RESPONSECODE IFD_Confiscate_ICC(void);
00209 RESPONSECODE IFD_Transmit_to_ICC(SCARD_IO_HEADER, PUCHAR, DWORD,
00210 PUCHAR, PDWORD, PSCARD_IO_HEADER);
00211 RESPONSECODE IFD_Is_ICC_Present(void);
00212 RESPONSECODE IFD_Is_ICC_Absent(void);
00213
00214 #ifdef __cplusplus
00215 }
00216 #endif
00217
00218 #endif