pcsc-lite  1.8.3
readerfactory.h
Go to the documentation of this file.
1 /*
2  * MUSCLE SmartCard Development ( http://www.linuxnet.com )
3  *
4  * Copyright (C) 1999
5  * David Corcoran <corcoran@linuxnet.com>
6  * Copyright (C) 2002-2011
7  * Ludovic Rousseau <ludovic.rousseau@free.fr>
8  *
9  * $Id: readerfactory.h 5900 2011-08-21 13:53:33Z rousseau $
10  */
11 
17 #ifndef __readerfactory_h__
18 #define __readerfactory_h__
19 
20 #include <inttypes.h>
21 #include <pthread.h>
22 
23 #include "ifdhandler.h"
24 #include "pcscd.h"
25 #include "simclist.h"
26 
27  typedef struct
28  {
30  char *pcDevicename;
31  char *pcLibpath;
32  int channelId;
33  } SerialReader;
34 
35  struct FctMap_V2
36  {
37  /* shared with API 3.0 */
38  RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
39  RESPONSECODE (*pvfCloseChannel)(DWORD);
40  RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
41  RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
42  RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
43  UCHAR, UCHAR);
44  RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
45  RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
46  DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
47  RESPONSECODE (*pvfICCPresence)(DWORD);
48 
49  /* API v2.0 only */
50  RESPONSECODE (*pvfControl)(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
51  };
52 
53  typedef struct FctMap_V2 FCT_MAP_V2;
54 
55  struct FctMap_V3
56  {
57  /* the common fields SHALL be in the same order as in FctMap_V2 */
58  RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
59  RESPONSECODE (*pvfCloseChannel)(DWORD);
60  RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
61  RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
62  RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
63  UCHAR, UCHAR);
64  RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
65  RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
66  DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
67  RESPONSECODE (*pvfICCPresence)(DWORD);
68 
69  /* API V3.0 only */
70  RESPONSECODE (*pvfControl)(DWORD, DWORD, LPCVOID, DWORD, LPVOID,
71  DWORD, LPDWORD);
72  RESPONSECODE (*pvfCreateChannelByName)(DWORD, LPSTR);
73  };
74 
75  typedef struct FctMap_V3 FCT_MAP_V3;
76 
78  {
80  DWORD dwEventStatus;
81  };
82 
83  typedef struct RdrCliHandles RDR_CLIHANDLES;
84 
86  {
87  char *library;
88  char *device;
89  pthread_t pthThread;
90  RESPONSECODE (*pthCardEvent)(DWORD, int);
91  pthread_mutex_t *mMutex;
92  list_t handlesList;
93  pthread_mutex_t handlesList_lock;
95  union
96  {
99  } psFunctions;
101  LPVOID vHandle;
102  int version;
103  int port;
104  int slot;
106  DWORD dwIdentity;
107  int LockCount;
108  int32_t contexts;
109  int * pFeeds;
110  int * pMutex;
112  pthread_mutex_t powerState_lock;
115  /* we can't use READER_CONTEXT * here since eventhandler.h can't be
116  * included because of circular dependencies */
117  };
118 
119  typedef struct ReaderContext READER_CONTEXT;
120 
121  LONG RFAllocateReaderSpace(unsigned int);
122  LONG RFAddReader(const char *, int, const char *, const char *);
123  LONG RFRemoveReader(const char *, int);
124  LONG RFSetReaderName(READER_CONTEXT *, const char *, const char *, int);
125  LONG RFReaderInfo(const char *, /*@out@*/ struct ReaderContext **);
126  LONG RFReaderInfoNamePort(int, const char *, /*@out@*/ struct ReaderContext **);
127  LONG RFReaderInfoById(DWORD, /*@out@*/ struct ReaderContext **);
128  LONG RFCheckSharing(SCARDHANDLE, READER_CONTEXT *);
129  LONG RFLockSharing(SCARDHANDLE, READER_CONTEXT *);
130  LONG RFUnlockSharing(SCARDHANDLE, READER_CONTEXT *);
131  LONG RFUnlockAllSharing(SCARDHANDLE, READER_CONTEXT *);
132  LONG RFLoadReader(READER_CONTEXT *);
133  LONG RFBindFunctions(READER_CONTEXT *);
134  LONG RFUnBindFunctions(READER_CONTEXT *);
135  LONG RFUnloadReader(READER_CONTEXT *);
136  LONG RFInitializeReader(READER_CONTEXT *);
137  LONG RFUnInitializeReader(READER_CONTEXT *);
138  SCARDHANDLE RFCreateReaderHandle(READER_CONTEXT *);
139  LONG RFDestroyReaderHandle(SCARDHANDLE hCard);
140  LONG RFAddReaderHandle(READER_CONTEXT *, SCARDHANDLE);
141  LONG RFFindReaderHandle(SCARDHANDLE);
142  LONG RFRemoveReaderHandle(READER_CONTEXT *, SCARDHANDLE);
143  LONG RFSetReaderEventState(READER_CONTEXT *, DWORD);
144  LONG RFCheckReaderEventState(READER_CONTEXT *, SCARDHANDLE);
145  LONG RFClearReaderEventState(READER_CONTEXT *, SCARDHANDLE);
146  LONG RFCheckReaderStatus(READER_CONTEXT *);
147  void RFCleanupReaders(void);
148  void RFWaitForReaderInit(void);
149  int RFStartSerialReaders(const char *readerconf);
150  void RFReCheckReaderConf(void);
151 
152 #endif