ifdhandler.h

Go to the documentation of this file.
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 2474 2007-03-12 10:39:29Z 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;      /* Tag 0x0100 */
00033         LPSTR IFD_Type;         /* Tag 0x0101 */
00034         DWORD IFD_Version;      /* Tag 0x0102 */
00035         LPSTR IFD_Serial;       /* Tag 0x0103 */
00036         DWORD IFD_Channel_ID;   /* Tag 0x0110 */
00037 
00038         DWORD Asynch_Supported; /* Tag 0x0120 */
00039         DWORD Default_Clock;    /* Tag 0x0121 */
00040         DWORD Max_Clock;        /* Tag 0x0122 */
00041         DWORD Default_Data_Rate;    /* Tag 0x0123 */
00042         DWORD Max_Data_Rate;    /* Tag 0x0124 */
00043         DWORD Max_IFSD;         /* Tag 0x0125 */
00044         DWORD Synch_Supported;  /* Tag 0x0126 */
00045         DWORD Power_Mgmt;       /* Tag 0x0131 */
00046         DWORD Card_Auth_Devices;    /* Tag 0x0140 */
00047         DWORD User_Auth_Device; /* Tag 0x0142 */
00048         DWORD Mechanics_Supported;  /* Tag 0x0150 */
00049         DWORD Vendor_Features;  /* Tag 0x0180 - 0x01F0 User Defined. */
00050     }
00051     DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
00052 
00053     typedef struct _ICC_STATE
00054     {
00055         UCHAR ICC_Presence;     /* Tag 0x0300 */
00056         UCHAR ICC_Interface_Status; /* Tag 0x0301 */
00057         UCHAR ATR[MAX_ATR_SIZE];    /* Tag 0x0303 */
00058         UCHAR ICC_Type;         /* Tag 0x0304 */
00059     }
00060     ICC_STATE, *PICC_STATE;
00061 
00062     typedef struct _PROTOCOL_OPTIONS
00063     {
00064         DWORD Protocol_Type;    /* Tag 0x0201 */
00065         DWORD Current_Clock;    /* Tag 0x0202 */
00066         DWORD Current_F;        /* Tag 0x0203 */
00067         DWORD Current_D;        /* Tag 0x0204 */
00068         DWORD Current_N;        /* Tag 0x0205 */
00069         DWORD Current_W;        /* Tag 0x0206 */
00070         DWORD Current_IFSC;     /* Tag 0x0207 */
00071         DWORD Current_IFSD;     /* Tag 0x0208 */
00072         DWORD Current_BWT;      /* Tag 0x0209 */
00073         DWORD Current_CWT;      /* Tag 0x020A */
00074         DWORD Current_EBC;      /* Tag 0x020B */
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 
00101     /*
00102      * End of tag list
00103      */
00104 
00105     /*
00106      * IFD Handler version number enummerations
00107      */
00108 #define IFD_HVERSION_1_0               0x00010000
00109 #define IFD_HVERSION_2_0               0x00020000
00110 #define IFD_HVERSION_3_0               0x00030000
00111     /*
00112      * End of version number enummerations
00113      */
00114 
00115     /*
00116      * List of defines available to ifdhandler
00117      */
00118 
00119 #define IFD_POWER_UP            500
00120 #define IFD_POWER_DOWN          501
00121 #define IFD_RESET           502
00122 
00123 #define IFD_NEGOTIATE_PTS1      1
00124 #define IFD_NEGOTIATE_PTS2      2
00125 #define IFD_NEGOTIATE_PTS3              4
00126 
00127 #define IFD_SUCCESS         0
00128 #define IFD_ERROR_TAG           600
00129 #define IFD_ERROR_SET_FAILURE       601
00130 #define IFD_ERROR_VALUE_READ_ONLY   602
00131 #define IFD_ERROR_PTS_FAILURE       605
00132 #define IFD_ERROR_NOT_SUPPORTED     606
00133 #define IFD_PROTOCOL_NOT_SUPPORTED  607
00134 #define IFD_ERROR_POWER_ACTION      608
00135 #define IFD_ERROR_SWALLOW       609
00136 #define IFD_ERROR_EJECT         610
00137 #define IFD_ERROR_CONFISCATE        611
00138 #define IFD_COMMUNICATION_ERROR     612
00139 #define IFD_RESPONSE_TIMEOUT        613
00140 #define IFD_NOT_SUPPORTED       614
00141 #define IFD_ICC_PRESENT         615
00142 #define IFD_ICC_NOT_PRESENT     616
00143 #define IFD_NO_SUCH_DEVICE      617
00144 
00145 #ifndef RESPONSECODE_DEFINED_IN_WINTYPES_H
00146     typedef long RESPONSECODE;
00147 #endif
00148 
00149     /*
00150      * If you want to compile a V2.0 IFDHandler, define IFDHANDLERv2 before you
00151      * include this file.
00152      *
00153      * By default it is setup for for most recent version of the API (V3.0)
00154      */
00155 
00156 #ifndef IFDHANDLERv2
00157 
00158     /*
00159      * List of Defined Functions Available to IFD_Handler 3.0
00160      *
00161      * All the functions of IFD_Handler 2.0 are available
00162      * IFDHCreateChannelByName() is new
00163      * IFDHControl() API changed
00164      */
00165 
00166     RESPONSECODE IFDHCreateChannelByName(DWORD, LPSTR);
00167     RESPONSECODE IFDHControl(DWORD, DWORD, PUCHAR, DWORD, PUCHAR,
00168         DWORD, LPDWORD);
00169 #else
00170 
00171     /*
00172      * List of Defined Functions Available to IFD_Handler 2.0
00173      */
00174 
00175     RESPONSECODE IFDHControl(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
00176 
00177 #endif
00178 
00179     /*
00180      * common functions in IFD_Handler 2.0 and 3.0
00181      */
00182     RESPONSECODE IFDHCreateChannel(DWORD, DWORD);
00183     RESPONSECODE IFDHCloseChannel(DWORD);
00184     RESPONSECODE IFDHGetCapabilities(DWORD, DWORD, PDWORD, PUCHAR);
00185     RESPONSECODE IFDHSetCapabilities(DWORD, DWORD, DWORD, PUCHAR);
00186     RESPONSECODE IFDHSetProtocolParameters(DWORD, DWORD, UCHAR,
00187         UCHAR, UCHAR, UCHAR);
00188     RESPONSECODE IFDHPowerICC(DWORD, DWORD, PUCHAR, PDWORD);
00189     RESPONSECODE IFDHTransmitToICC(DWORD, SCARD_IO_HEADER, PUCHAR,
00190         DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
00191     RESPONSECODE IFDHICCPresence(DWORD);
00192 
00193     /*
00194      * List of Defined Functions Available to IFD_Handler 1.0
00195      */
00196 
00197     RESPONSECODE IO_Create_Channel(DWORD);
00198     RESPONSECODE IO_Close_Channel();
00199     RESPONSECODE IFD_Get_Capabilities(DWORD, PUCHAR);
00200     RESPONSECODE IFD_Set_Capabilities(DWORD, PUCHAR);
00201     RESPONSECODE IFD_Set_Protocol_Parameters(DWORD, UCHAR, UCHAR,
00202         UCHAR, UCHAR);
00203     RESPONSECODE IFD_Power_ICC(DWORD);
00204     RESPONSECODE IFD_Swallow_ICC();
00205     RESPONSECODE IFD_Eject_ICC();
00206     RESPONSECODE IFD_Confiscate_ICC();
00207     RESPONSECODE IFD_Transmit_to_ICC(SCARD_IO_HEADER, PUCHAR, DWORD,
00208         PUCHAR, PDWORD, PSCARD_IO_HEADER);
00209     RESPONSECODE IFD_Is_ICC_Present();
00210     RESPONSECODE IFD_Is_ICC_Absent();
00211 
00212 #ifdef __cplusplus
00213 }
00214 #endif
00215 
00216 #endif

Generated on Sat Jun 28 00:39:23 2008 for pcsc-lite by  doxygen 1.4.7