00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 #ifndef __readerfactory_h__
00018 #define __readerfactory_h__
00019
00020 #include "thread_generic.h"
00021 #include "ifdhandler.h"
00022
00023 #ifdef __cplusplus
00024 extern "C"
00025 {
00026 #endif
00027
00028 typedef struct
00029 {
00030 char *pcFriendlyname;
00031 char *pcDevicename;
00032 char *pcLibpath;
00033 int dwChannelId;
00034 } SerialReader;
00035
00036 struct FctMap_V1
00037 {
00038 RESPONSECODE (*pvfCreateChannel)(DWORD);
00039 RESPONSECODE (*pvfCloseChannel)(void);
00040 RESPONSECODE (*pvfGetCapabilities)(DWORD, PUCHAR);
00041 RESPONSECODE (*pvfSetCapabilities)(DWORD, PUCHAR);
00042 RESPONSECODE (*pvfSetProtocolParameters)(DWORD, UCHAR, UCHAR, UCHAR,
00043 UCHAR);
00044 RESPONSECODE (*pvfPowerICC)(DWORD);
00045 RESPONSECODE (*pvfTransmitToICC)(SCARD_IO_HEADER, PUCHAR, DWORD,
00046 PUCHAR, PDWORD, PSCARD_IO_HEADER);
00047 RESPONSECODE (*pvfICCPresence)(void);
00048 };
00049
00050 typedef struct FctMap_V1 FCT_MAP_V1, *PFCT_MAP_V1;
00051
00052 struct FctMap_V2
00053 {
00054
00055 RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
00056 RESPONSECODE (*pvfCloseChannel)(DWORD);
00057 RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
00058 RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
00059 RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
00060 UCHAR, UCHAR);
00061 RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
00062 RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
00063 DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
00064 RESPONSECODE (*pvfICCPresence)(DWORD);
00065
00066
00067 RESPONSECODE (*pvfControl)(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
00068 };
00069
00070 typedef struct FctMap_V2 FCT_MAP_V2, *PFCT_MAP_V2;
00071
00072 struct FctMap_V3
00073 {
00074
00075 RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
00076 RESPONSECODE (*pvfCloseChannel)(DWORD);
00077 RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
00078 RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
00079 RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
00080 UCHAR, UCHAR);
00081 RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
00082 RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
00083 DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
00084 RESPONSECODE (*pvfICCPresence)(DWORD);
00085
00086
00087 RESPONSECODE (*pvfControl)(DWORD, DWORD, LPCVOID, DWORD, LPVOID,
00088 DWORD, LPDWORD);
00089 RESPONSECODE (*pvfCreateChannelByName)(DWORD, LPTSTR);
00090 };
00091
00092 typedef struct FctMap_V3 FCT_MAP_V3, *PFCT_MAP_V3;
00093
00094
00095
00096
00097
00098 struct RdrCapabilities
00099 {
00100 DWORD dwAsynch_Supported;
00101 DWORD dwDefault_Clock;
00102 DWORD dwMax_Clock;
00103 DWORD dwDefault_Data_Rate;
00104 DWORD dwMax_Data_Rate;
00105 DWORD dwMax_IFSD;
00106 DWORD dwSynch_Supported;
00107 DWORD dwPower_Mgmt;
00108 DWORD dwCard_Auth_Devices;
00109 DWORD dwUser_Auth_Device;
00110 DWORD dwMechanics_Supported;
00111 DWORD dwVendor_Features;
00112 };
00113
00114 typedef struct RdrCapabilities RDR_CAPABILITIES, *PRDR_CAPABILITIES;
00115
00116 struct ProtOptions
00117 {
00118 DWORD dwProtocol_Type;
00119 DWORD dwCurrent_Clock;
00120 DWORD dwCurrent_F;
00121 DWORD dwCurrent_D;
00122 DWORD dwCurrent_N;
00123 DWORD dwCurrent_W;
00124 DWORD dwCurrent_IFSC;
00125 DWORD dwCurrent_IFSD;
00126 DWORD dwCurrent_BWT;
00127 DWORD dwCurrent_CWT;
00128 DWORD dwCurrent_EBC;
00129 };
00130
00131 typedef struct ProtOptions PROT_OPTIONS, *PPROT_OPTIONS;
00132
00133 struct RdrCliHandles
00134 {
00135 SCARDHANDLE hCard;
00136 DWORD dwEventStatus;
00137 };
00138
00139 typedef struct RdrCliHandles RDR_CLIHANDLES, *PRDR_CLIHANDLES;
00140
00141 struct ReaderContext
00142 {
00143 char lpcReader[MAX_READERNAME];
00144 char lpcLibrary[MAX_LIBNAME];
00145 char lpcDevice[MAX_DEVICENAME];
00146 PCSCLITE_THREAD_T pthThread;
00147 PCSCLITE_MUTEX_T mMutex;
00148 RDR_CLIHANDLES psHandles[PCSCLITE_MAX_READER_CONTEXT_CHANNELS];
00149
00150 union
00151 {
00152 FCT_MAP_V1 psFunctions_v1;
00153 FCT_MAP_V2 psFunctions_v2;
00154 FCT_MAP_V3 psFunctions_v3;
00155 } psFunctions;
00156
00157 LPVOID vHandle;
00158 DWORD dwVersion;
00159 DWORD dwPort;
00160 DWORD dwSlot;
00161 DWORD dwBlockStatus;
00162 DWORD dwLockId;
00163 DWORD dwIdentity;
00164 DWORD dwContexts;
00165 PDWORD pdwFeeds;
00166 PDWORD pdwMutex;
00167
00168 struct pubReaderStatesList *readerState;
00169
00170
00171
00172
00173 #if 0
00174 RDR_CAPABILITIES psCapabilites;
00175
00176 PROT_OPTIONS psProtOptions;
00177 #endif
00178 };
00179
00180 typedef struct ReaderContext READER_CONTEXT, *PREADER_CONTEXT;
00181
00182 LONG RFAllocateReaderSpace(void);
00183 LONG RFAddReader(LPTSTR, DWORD, LPTSTR, LPTSTR);
00184 LONG RFRemoveReader(LPTSTR, DWORD);
00185 LONG RFSetReaderName(PREADER_CONTEXT, LPTSTR, LPTSTR, DWORD, DWORD);
00186 LONG RFListReaders(LPTSTR, LPDWORD);
00187 LONG RFReaderInfo(LPTSTR, struct ReaderContext **);
00188 LONG RFReaderInfoNamePort(DWORD, LPTSTR, struct ReaderContext **);
00189 LONG RFReaderInfoById(DWORD, struct ReaderContext **);
00190 LONG RFCheckSharing(DWORD);
00191 LONG RFLockSharing(DWORD);
00192 LONG RFUnlockSharing(DWORD);
00193 LONG RFUnblockReader(PREADER_CONTEXT);
00194 LONG RFUnblockContext(SCARDCONTEXT);
00195 LONG RFLoadReader(PREADER_CONTEXT);
00196 LONG RFBindFunctions(PREADER_CONTEXT);
00197 LONG RFUnBindFunctions(PREADER_CONTEXT);
00198 LONG RFUnloadReader(PREADER_CONTEXT);
00199 LONG RFInitializeReader(PREADER_CONTEXT);
00200 LONG RFUnInitializeReader(PREADER_CONTEXT);
00201 SCARDHANDLE RFCreateReaderHandle(PREADER_CONTEXT);
00202 LONG RFDestroyReaderHandle(SCARDHANDLE hCard);
00203 LONG RFAddReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
00204 LONG RFFindReaderHandle(SCARDHANDLE);
00205 LONG RFRemoveReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
00206 LONG RFSetReaderEventState(PREADER_CONTEXT, DWORD);
00207 LONG RFCheckReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
00208 LONG RFClearReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
00209 LONG RFCheckReaderStatus(PREADER_CONTEXT);
00210 void RFCleanupReaders(int);
00211 int RFStartSerialReaders(char *readerconf);
00212 void RFReCheckReaderConf(void);
00213 void RFSuspendAllReaders(void);
00214 void RFAwakeAllReaders(void);
00215
00216 #ifdef __cplusplus
00217 }
00218 #endif
00219
00220 #endif