pcsc-lite  1.8.8
ifdhandler.h
Go to the documentation of this file.
1 /*
2  * MUSCLE SmartCard Development ( http://www.linuxnet.com )
3  *
4  * Copyright (C) 1999-2004
5  * David Corcoran <corcoran@linuxnet.com>
6  * Copyright (C) 2003-2004
7  * Damien Sauveron <damien.sauveron@labri.fr>
8  * Copyright (C) 2002-2011
9  * Ludovic Rousseau <ludovic.rousseau@free.fr>
10  *
11  * $Id: ifdhandler.h 6413 2012-08-08 09:35:18Z rousseau $
12  */
13 
229 #ifndef _ifd_handler_h_
230 #define _ifd_handler_h_
231 
232 #include <pcsclite.h>
233 
234  /*
235  * List of data structures available to ifdhandler
236  */
237  typedef struct _DEVICE_CAPABILITIES
238  {
239  LPSTR Vendor_Name;
240  LPSTR IFD_Type;
241  DWORD IFD_Version;
242  LPSTR IFD_Serial;
247  DWORD Max_Clock;
250  DWORD Max_IFSD;
252  DWORD Power_Mgmt;
257  }
259 
260  typedef struct _ICC_STATE
261  {
262  UCHAR ICC_Presence;
264  UCHAR ATR[MAX_ATR_SIZE];
265  UCHAR ICC_Type;
266  }
268 
269  typedef struct _PROTOCOL_OPTIONS
270  {
273  DWORD Current_F;
274  DWORD Current_D;
275  DWORD Current_N;
276  DWORD Current_W;
277  DWORD Current_IFSC;
278  DWORD Current_IFSD;
279  DWORD Current_BWT;
280  DWORD Current_CWT;
281  DWORD Current_EBC;
282  }
284 
288  typedef struct _SCARD_IO_HEADER
289  {
290  DWORD Protocol;
291  DWORD Length;
292  }
294 
295  /*
296  * The list of tags should be alot more but this is all I use in the
297  * meantime
298  */
299 #define TAG_IFD_ATR 0x0303
300 #define TAG_IFD_SLOTNUM 0x0180
301 #define TAG_IFD_SLOT_THREAD_SAFE 0x0FAC
302 #define TAG_IFD_THREAD_SAFE 0x0FAD
303 #define TAG_IFD_SLOTS_NUMBER 0x0FAE
304 #define TAG_IFD_SIMULTANEOUS_ACCESS 0x0FAF
305 #define TAG_IFD_POLLING_THREAD 0x0FB0
306 #define TAG_IFD_POLLING_THREAD_KILLABLE 0x0FB1
307 #define TAG_IFD_STOP_POLLING_THREAD 0x0FB2
308 #define TAG_IFD_POLLING_THREAD_WITH_TIMEOUT 0x0FB3
310  /*
311  * IFD Handler version number enummerations
312  */
313 #define IFD_HVERSION_1_0 0x00010000
314 #define IFD_HVERSION_2_0 0x00020000
315 #define IFD_HVERSION_3_0 0x00030000
316 
317  /*
318  * List of defines available to ifdhandler
319  */
320 #define IFD_POWER_UP 500
321 #define IFD_POWER_DOWN 501
322 #define IFD_RESET 502
324 #define IFD_NEGOTIATE_PTS1 1
325 #define IFD_NEGOTIATE_PTS2 2
326 #define IFD_NEGOTIATE_PTS3 4
328 #define IFD_SUCCESS 0
329 #define IFD_ERROR_TAG 600
330 #define IFD_ERROR_SET_FAILURE 601
331 #define IFD_ERROR_VALUE_READ_ONLY 602
332 #define IFD_ERROR_PTS_FAILURE 605
333 #define IFD_ERROR_NOT_SUPPORTED 606
334 #define IFD_PROTOCOL_NOT_SUPPORTED 607
335 #define IFD_ERROR_POWER_ACTION 608
336 #define IFD_ERROR_SWALLOW 609
337 #define IFD_ERROR_EJECT 610
338 #define IFD_ERROR_CONFISCATE 611
339 #define IFD_COMMUNICATION_ERROR 612
340 #define IFD_RESPONSE_TIMEOUT 613
341 #define IFD_NOT_SUPPORTED 614
342 #define IFD_ICC_PRESENT 615
343 #define IFD_ICC_NOT_PRESENT 616
349 #define IFD_NO_SUCH_DEVICE 617
350 #define IFD_ERROR_INSUFFICIENT_BUFFER 618
352 #ifndef RESPONSECODE_DEFINED_IN_WINTYPES_H
353  typedef long RESPONSECODE;
354 #endif
355 
356  /*
357  * If you want to compile a V2.0 IFDHandler, define IFDHANDLERv2
358  * before you include this file.
359  *
360  * By default it is setup for for most recent version of the API (V3.0)
361  */
362 
363 #ifndef IFDHANDLERv2
364 
365  /*
366  * List of Defined Functions Available to IFD_Handler 3.0
367  *
368  * All the functions of IFD_Handler 2.0 are available
369  * IFDHCreateChannelByName() is new
370  * IFDHControl() API changed
371  */
372 
463 RESPONSECODE IFDHCreateChannelByName(DWORD Lun, LPSTR DeviceName);
464 
496 RESPONSECODE IFDHControl(DWORD Lun, DWORD dwControlCode, PUCHAR
497  TxBuffer, DWORD TxLength, PUCHAR RxBuffer, DWORD RxLength,
498  LPDWORD pdwBytesReturned);
499 
500 #else
501 
508 RESPONSECODE IFDHControl(DWORD Lun, PUCHAR TxBuffer, DWORD TxLength,
509  PUCHAR RxBuffer, PDWORD RxLength);
510 
511 #endif
512 
513  /*
514  * common functions in IFD_Handler 2.0 and 3.0
515  */
557 RESPONSECODE IFDHCreateChannel(DWORD Lun, DWORD Channel);
558 
573 RESPONSECODE IFDHCloseChannel(DWORD Lun);
574 
632 RESPONSECODE IFDHGetCapabilities(DWORD Lun, DWORD Tag, PDWORD Length,
633  PUCHAR Value);
634 
656 RESPONSECODE IFDHSetCapabilities(DWORD Lun, DWORD Tag, DWORD Length, PUCHAR Value);
657 
687 RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol, UCHAR Flags,
688  UCHAR PTS1, UCHAR PTS2, UCHAR PTS3);
721 RESPONSECODE IFDHPowerICC(DWORD Lun, DWORD Action, PUCHAR Atr, PDWORD
722  AtrLength);
723 
775 RESPONSECODE IFDHTransmitToICC(DWORD Lun, SCARD_IO_HEADER SendPci,
776  PUCHAR TxBuffer, DWORD TxLength, PUCHAR RxBuffer, PDWORD
777  RxLength, PSCARD_IO_HEADER RecvPci);
778 
795 RESPONSECODE IFDHICCPresence(DWORD Lun);
796 
797 #endif
DWORD Card_Auth_Devices
Tag 0x0140.
Definition: ifdhandler.h:253
RESPONSECODE IFDHTransmitToICC(DWORD Lun, SCARD_IO_HEADER SendPci, PUCHAR TxBuffer, DWORD TxLength, PUCHAR RxBuffer, PDWORD RxLength, PSCARD_IO_HEADER RecvPci)
This function performs an APDU exchange with the card/slot specified by Lun.
DWORD Default_Data_Rate
Tag 0x0123.
Definition: ifdhandler.h:248
DWORD Max_Data_Rate
Tag 0x0124.
Definition: ifdhandler.h:249
UCHAR ATR[MAX_ATR_SIZE]
Tag 0x0303.
Definition: ifdhandler.h:264
UCHAR ICC_Interface_Status
Tag 0x0301.
Definition: ifdhandler.h:263
DWORD Max_Clock
Tag 0x0122.
Definition: ifdhandler.h:247
DWORD Default_Clock
Tag 0x0121.
Definition: ifdhandler.h:246
DWORD Current_D
Tag 0x0204.
Definition: ifdhandler.h:274
DWORD Current_BWT
Tag 0x0209.
Definition: ifdhandler.h:279
RESPONSECODE IFDHCloseChannel(DWORD Lun)
This function should close the reader communication channel for the particular reader.
RESPONSECODE IFDHCreateChannel(DWORD Lun, DWORD Channel)
This function is required to open a communications channel to the port listed by Channel.
DWORD Current_CWT
Tag 0x020A.
Definition: ifdhandler.h:280
RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol, UCHAR Flags, UCHAR PTS1, UCHAR PTS2, UCHAR PTS3)
This function should set the Protocol Type Selection (PTS) of a particular card/slot using the three ...
DWORD Protocol_Type
Tag 0x0201.
Definition: ifdhandler.h:271
UCHAR ICC_Presence
Tag 0x0300.
Definition: ifdhandler.h:262
RESPONSECODE IFDHPowerICC(DWORD Lun, DWORD Action, PUCHAR Atr, PDWORD AtrLength)
This function controls the power and reset signals of the smart card reader at the particular reader/...
struct _SCARD_IO_HEADER SCARD_IO_HEADER
Use by SCardTransmit()
DWORD Current_IFSC
Tag 0x0207.
Definition: ifdhandler.h:277
RESPONSECODE IFDHGetCapabilities(DWORD Lun, DWORD Tag, PDWORD Length, PUCHAR Value)
This function should get the slot/card capabilities for a particular slot/card specified by Lun...
DWORD Current_IFSD
Tag 0x0208.
Definition: ifdhandler.h:278
DWORD User_Auth_Device
Tag 0x0142.
Definition: ifdhandler.h:254
DWORD Mechanics_Supported
Tag 0x0150.
Definition: ifdhandler.h:255
RESPONSECODE IFDHCreateChannelByName(DWORD Lun, LPSTR DeviceName)
This function is required to open a communications channel to the port listed by DeviceName.
LPSTR IFD_Type
Tag 0x0101.
Definition: ifdhandler.h:240
RESPONSECODE IFDHControl(DWORD Lun, DWORD dwControlCode, PUCHAR TxBuffer, DWORD TxLength, PUCHAR RxBuffer, DWORD RxLength, LPDWORD pdwBytesReturned)
This function performs a data exchange with the reader (not the card) specified by Lun...
DWORD IFD_Version
Tag 0x0102.
Definition: ifdhandler.h:241
DWORD Power_Mgmt
Tag 0x0131.
Definition: ifdhandler.h:252
DWORD IFD_Channel_ID
Tag 0x0110.
Definition: ifdhandler.h:243
DWORD Synch_Supported
Tag 0x0126.
Definition: ifdhandler.h:251
This keeps a list of defines for pcsc-lite.
DWORD Max_IFSD
Tag 0x0125.
Definition: ifdhandler.h:250
DWORD Vendor_Features
Tag 0x0180 - 0x01F0 User Defined.
Definition: ifdhandler.h:256
LPSTR Vendor_Name
Tag 0x0100.
Definition: ifdhandler.h:239
DWORD Current_N
Tag 0x0205.
Definition: ifdhandler.h:275
DWORD Current_F
Tag 0x0203.
Definition: ifdhandler.h:273
DWORD Current_Clock
Tag 0x0202.
Definition: ifdhandler.h:272
RESPONSECODE IFDHICCPresence(DWORD Lun)
This function returns the status of the card inserted in the reader/slot specified by Lun...
#define MAX_ATR_SIZE
Maximum ATR size.
Definition: pcsclite.h:38
DWORD Current_W
Tag 0x0206.
Definition: ifdhandler.h:276
RESPONSECODE IFDHSetCapabilities(DWORD Lun, DWORD Tag, DWORD Length, PUCHAR Value)
This function should set the slot/card capabilities for a particular slot/card specified by Lun...
Use by SCardTransmit()
Definition: ifdhandler.h:288
DWORD Current_EBC
Tag 0x020B.
Definition: ifdhandler.h:281
DWORD Asynch_Supported
Tag 0x0120.
Definition: ifdhandler.h:245
UCHAR ICC_Type
Tag 0x0304.
Definition: ifdhandler.h:265
LPSTR IFD_Serial
Tag 0x0103.
Definition: ifdhandler.h:242