pcsc-lite 1.5.5
|
00001 /* 00002 * MUSCLE SmartCard Development ( http://www.linuxnet.com ) 00003 * 00004 * Copyright (C) 1999-2004 00005 * David Corcoran <corcoran@linuxnet.com> 00006 * Damien Sauveron <damien.sauveron@labri.fr> 00007 * 00008 * $Id: ifdhandler.h 3029 2008-06-26 13:58:52Z rousseau $ 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 * List of data structures available to ifdhandler 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 * End of structure list 00087 */ 00088 00089 /* 00090 * The list of tags should be alot more but this is all I use in the 00091 * meantime 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 * End of tag list 00105 */ 00106 00107 /* 00108 * IFD Handler version number enummerations 00109 */ 00110 #define IFD_HVERSION_1_0 0x00010000 00111 #define IFD_HVERSION_2_0 0x00020000 00112 #define IFD_HVERSION_3_0 0x00030000 00113 /* 00114 * End of version number enummerations 00115 */ 00116 00117 /* 00118 * List of defines available to ifdhandler 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 * If you want to compile a V2.0 IFDHandler, define IFDHANDLERv2 before you 00153 * include this file. 00154 * 00155 * By default it is setup for for most recent version of the API (V3.0) 00156 */ 00157 00158 #ifndef IFDHANDLERv2 00159 00160 /* 00161 * List of Defined Functions Available to IFD_Handler 3.0 00162 * 00163 * All the functions of IFD_Handler 2.0 are available 00164 * IFDHCreateChannelByName() is new 00165 * IFDHControl() API changed 00166 */ 00167 00168 RESPONSECODE IFDHCreateChannelByName(DWORD, LPSTR); 00169 RESPONSECODE IFDHControl(DWORD, DWORD, PUCHAR, DWORD, PUCHAR, 00170 DWORD, LPDWORD); 00171 #else 00172 00173 /* 00174 * List of Defined Functions Available to IFD_Handler 2.0 00175 */ 00176 00177 RESPONSECODE IFDHControl(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD); 00178 00179 #endif 00180 00181 /* 00182 * common functions in IFD_Handler 2.0 and 3.0 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 * List of Defined Functions Available to IFD_Handler 1.0 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