2
* MUSCLE SmartCard Development ( http://www.linuxnet.com )
5
* David Corcoran <corcoran@linuxnet.com>
7
* Ludovic Rousseau <ludovic.rousseau@free.fr>
9
* $Id: readerfactory.h 1530 2005-05-26 12:52:07Z rousseau $
14
* @brief This keeps track of a list of currently available reader structures.
17
#ifndef __readerfactory_h__
18
#define __readerfactory_h__
20
#include "thread_generic.h"
21
#include "ifdhandler.h"
38
RESPONSECODE (*pvfCreateChannel)(DWORD);
39
RESPONSECODE (*pvfCloseChannel)(void);
40
RESPONSECODE (*pvfGetCapabilities)(DWORD, PUCHAR);
41
RESPONSECODE (*pvfSetCapabilities)(DWORD, PUCHAR);
42
RESPONSECODE (*pvfSetProtocolParameters)(DWORD, UCHAR, UCHAR, UCHAR,
44
RESPONSECODE (*pvfPowerICC)(DWORD);
45
RESPONSECODE (*pvfTransmitToICC)(SCARD_IO_HEADER, PUCHAR, DWORD,
46
PUCHAR, PDWORD, PSCARD_IO_HEADER);
47
RESPONSECODE (*pvfICCPresence)(void);
50
typedef struct FctMap_V1 FCT_MAP_V1, *PFCT_MAP_V1;
54
/* shared with API 3.0 */
55
RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
56
RESPONSECODE (*pvfCloseChannel)(DWORD);
57
RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
58
RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
59
RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
61
RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
62
RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
63
DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
64
RESPONSECODE (*pvfICCPresence)(DWORD);
67
RESPONSECODE (*pvfControl)(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
70
typedef struct FctMap_V2 FCT_MAP_V2, *PFCT_MAP_V2;
74
/* the common fields SHALL be in the same order as in FctMap_V2 */
75
RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
76
RESPONSECODE (*pvfCloseChannel)(DWORD);
77
RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
78
RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
79
RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
81
RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
82
RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
83
DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
84
RESPONSECODE (*pvfICCPresence)(DWORD);
87
RESPONSECODE (*pvfControl)(DWORD, DWORD, LPCVOID, DWORD, LPVOID,
89
RESPONSECODE (*pvfCreateChannelByName)(DWORD, LPTSTR);
92
typedef struct FctMap_V3 FCT_MAP_V3, *PFCT_MAP_V3;
95
* The following is not currently used but in place if needed
98
struct RdrCapabilities
100
DWORD dwAsynch_Supported; /* Asynchronous Support */
101
DWORD dwDefault_Clock; /* Default Clock Rate */
102
DWORD dwMax_Clock; /* Max Clock Rate */
103
DWORD dwDefault_Data_Rate; /* Default Data Rate */
104
DWORD dwMax_Data_Rate; /* Max Data Rate */
105
DWORD dwMax_IFSD; /* Maximum IFSD Size */
106
DWORD dwSynch_Supported; /* Synchronous Support */
107
DWORD dwPower_Mgmt; /* Power Mgmt Features */
108
DWORD dwCard_Auth_Devices; /* Card Auth Devices */
109
DWORD dwUser_Auth_Device; /* User Auth Devices */
110
DWORD dwMechanics_Supported; /* Machanics Supported */
111
DWORD dwVendor_Features; /* User Defined. */
114
typedef struct RdrCapabilities RDR_CAPABILITIES, *PRDR_CAPABILITIES;
118
DWORD dwProtocol_Type; /* Protocol Type */
119
DWORD dwCurrent_Clock; /* Current Clock */
120
DWORD dwCurrent_F; /* Current F */
121
DWORD dwCurrent_D; /* Current D */
122
DWORD dwCurrent_N; /* Current N */
123
DWORD dwCurrent_W; /* Current W */
124
DWORD dwCurrent_IFSC; /* Current IFSC */
125
DWORD dwCurrent_IFSD; /* Current IFSD */
126
DWORD dwCurrent_BWT; /* Current BWT */
127
DWORD dwCurrent_CWT; /* Current CWT */
128
DWORD dwCurrent_EBC; /* Current EBC */
131
typedef struct ProtOptions PROT_OPTIONS, *PPROT_OPTIONS;
135
SCARDHANDLE hCard; /* hCard for this connection */
136
DWORD dwEventStatus; /* Recent event that must be sent */
139
typedef struct RdrCliHandles RDR_CLIHANDLES, *PRDR_CLIHANDLES;
143
char lpcReader[MAX_READERNAME]; /* Reader Name */
144
char lpcLibrary[MAX_LIBNAME]; /* Library Path */
145
char lpcDevice[MAX_DEVICENAME]; /* Device Name */
146
PCSCLITE_THREAD_T pthThread; /* Event polling thread */
147
PCSCLITE_MUTEX_T mMutex; /* Mutex for this connection */
148
RDR_CLIHANDLES psHandles[PCSCLITE_MAX_READER_CONTEXT_CHANNELS];
149
/* Structure of connected handles */
152
FCT_MAP_V1 psFunctions_v1; /* API V1.0 */
153
FCT_MAP_V2 psFunctions_v2; /* API V2.0 */
154
FCT_MAP_V3 psFunctions_v3; /* API V3.0 */
157
LPVOID vHandle; /* Dlopen handle */
158
DWORD dwVersion; /* IFD Handler version number */
159
DWORD dwPort; /* Port ID */
160
DWORD dwSlot; /* Current Reader Slot */
161
DWORD dwBlockStatus; /* Current blocking status */
162
DWORD dwLockId; /* Lock Id */
163
DWORD dwIdentity; /* Shared ID High Nibble */
164
DWORD dwContexts; /* Number of open contexts */
165
PDWORD pdwFeeds; /* Number of shared client to lib */
166
PDWORD pdwMutex; /* Number of client to mutex */
168
struct pubReaderStatesList *readerState; /* link to the reader state */
169
/* we can't use PREADER_STATE here since eventhandler.h can't be
170
* included because of circular dependencies */
172
/* these structures are unused */
174
RDR_CAPABILITIES psCapabilites; /* Structure of reader
176
PROT_OPTIONS psProtOptions; /* Structure of protocol options */
180
typedef struct ReaderContext READER_CONTEXT, *PREADER_CONTEXT;
182
LONG RFAllocateReaderSpace(void);
183
LONG RFAddReader(LPTSTR, DWORD, LPTSTR, LPTSTR);
184
LONG RFRemoveReader(LPTSTR, DWORD);
185
LONG RFSetReaderName(PREADER_CONTEXT, LPTSTR, LPTSTR, DWORD, DWORD);
186
LONG RFListReaders(LPTSTR, LPDWORD);
187
LONG RFReaderInfo(LPTSTR, struct ReaderContext **);
188
LONG RFReaderInfoNamePort(DWORD, LPTSTR, struct ReaderContext **);
189
LONG RFReaderInfoById(DWORD, struct ReaderContext **);
190
LONG RFCheckSharing(DWORD);
191
LONG RFLockSharing(DWORD);
192
LONG RFUnlockSharing(DWORD);
193
LONG RFUnblockReader(PREADER_CONTEXT);
194
LONG RFUnblockContext(SCARDCONTEXT);
195
LONG RFLoadReader(PREADER_CONTEXT);
196
LONG RFBindFunctions(PREADER_CONTEXT);
197
LONG RFUnBindFunctions(PREADER_CONTEXT);
198
LONG RFUnloadReader(PREADER_CONTEXT);
199
LONG RFInitializeReader(PREADER_CONTEXT);
200
LONG RFUnInitializeReader(PREADER_CONTEXT);
201
SCARDHANDLE RFCreateReaderHandle(PREADER_CONTEXT);
202
LONG RFDestroyReaderHandle(SCARDHANDLE hCard);
203
LONG RFAddReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
204
LONG RFFindReaderHandle(SCARDHANDLE);
205
LONG RFRemoveReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
206
LONG RFSetReaderEventState(PREADER_CONTEXT, DWORD);
207
LONG RFCheckReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
208
LONG RFClearReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
209
LONG RFCheckReaderStatus(PREADER_CONTEXT);
210
void RFCleanupReaders(int);
211
int RFStartSerialReaders(char *readerconf);
212
void RFReCheckReaderConf(void);
213
void RFSuspendAllReaders(void);
214
void RFAwakeAllReaders(void);