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