Logo Search packages:      
Sourcecode: pcsc-lite version File versions  Download package

ifdhandler.h

Go to the documentation of this file.
/*
 * MUSCLE SmartCard Development ( http://www.linuxnet.com )
 *
 * Copyright (C) 1999-2004
 *  David Corcoran <corcoran@linuxnet.com>
 *  Damien Sauveron <damien.sauveron@labri.fr>
 *
 * $Id: ifdhandler.h 3029 2008-06-26 13:58:52Z rousseau $
 */

/**
 * @file
 * @brief This provides reader specific low-level calls.
 */

#ifndef _ifd_handler_h_
#define _ifd_handler_h_

#include <pcsclite.h>

#ifdef __cplusplus
extern "C"
{
#endif

      /*
       * List of data structures available to ifdhandler
       */

00030       typedef struct _DEVICE_CAPABILITIES
      {
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 */

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. */
      }
      DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;

00053       typedef struct _ICC_STATE
      {
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 */
      }
      ICC_STATE, *PICC_STATE;

00062       typedef struct _PROTOCOL_OPTIONS
      {
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 */
      }
      PROTOCOL_OPTIONS, *PPROTOCOL_OPTIONS;

00078       typedef struct _SCARD_IO_HEADER
      {
            DWORD Protocol;
            DWORD Length;
      }
      SCARD_IO_HEADER, *PSCARD_IO_HEADER;

      /*
       * End of structure list
       */

      /*
       * The list of tags should be alot more but this is all I use in the
       * meantime
       */

#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

      /*
       * End of tag list
       */

      /*
       * IFD Handler version number enummerations
       */
#define IFD_HVERSION_1_0               0x00010000
#define IFD_HVERSION_2_0               0x00020000
#define IFD_HVERSION_3_0               0x00030000
      /*
       * End of version number enummerations
       */

      /*
       * List of defines available to ifdhandler
       */

#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

      /*
       * If you want to compile a V2.0 IFDHandler, define IFDHANDLERv2 before you
       * include this file.
       *
       * By default it is setup for for most recent version of the API (V3.0)
       */

#ifndef IFDHANDLERv2

      /*
       * List of Defined Functions Available to IFD_Handler 3.0
       *
       * All the functions of IFD_Handler 2.0 are available
       * IFDHCreateChannelByName() is new
       * IFDHControl() API changed
       */

      RESPONSECODE IFDHCreateChannelByName(DWORD, LPSTR);
      RESPONSECODE IFDHControl(DWORD, DWORD, PUCHAR, DWORD, PUCHAR,
            DWORD, LPDWORD);
#else

      /*
       * List of Defined Functions Available to IFD_Handler 2.0
       */

      RESPONSECODE IFDHControl(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);

#endif

      /*
       * common functions in IFD_Handler 2.0 and 3.0
       */
      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);

      /*
       * List of Defined Functions Available to IFD_Handler 1.0
       */

      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

Generated by  Doxygen 1.6.0   Back to index