pcsc-lite  1.8.3
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 6156 2012-01-01 21:02:08Z 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 
464 RESPONSECODE IFDHCreateChannelByName(DWORD Lun, LPSTR DeviceName);
465 
497 RESPONSECODE IFDHControl(DWORD Lun, DWORD dwControlCode, PUCHAR
498  TxBuffer, DWORD TxLength, PUCHAR RxBuffer, DWORD RxLength,
499  LPDWORD pdwBytesReturned);
500 
501 #else
502 
509 RESPONSECODE IFDHControl(DWORD Lun, PUCHAR TxBuffer, DWORD TxLength,
510  PUCHAR RxBuffer, PDWORD RxLength);
511 
512 #endif
513 
514  /*
515  * common functions in IFD_Handler 2.0 and 3.0
516  */
558 RESPONSECODE IFDHCreateChannel(DWORD Lun, DWORD Channel);
559 
574 RESPONSECODE IFDHCloseChannel(DWORD Lun);
575 
633 RESPONSECODE IFDHGetCapabilities(DWORD Lun, DWORD Tag, PDWORD Length,
634  PUCHAR Value);
635 
657 RESPONSECODE IFDHSetCapabilities(DWORD Lun, DWORD Tag, DWORD Length, PUCHAR Value);
658 
688 RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol, UCHAR Flags,
689  UCHAR PTS1, UCHAR PTS2, UCHAR PTS3);
722 RESPONSECODE IFDHPowerICC(DWORD Lun, DWORD Action, PUCHAR Atr, PDWORD
723  AtrLength);
724 
776 RESPONSECODE IFDHTransmitToICC(DWORD Lun, SCARD_IO_HEADER SendPci,
777  PUCHAR TxBuffer, DWORD TxLength, PUCHAR RxBuffer, PDWORD
778  RxLength, PSCARD_IO_HEADER RecvPci);
779 
796 RESPONSECODE IFDHICCPresence(DWORD Lun);
797 
798 #endif