readerfactory.h

Go to the documentation of this file.
00001 /*
00002  * MUSCLE SmartCard Development ( http://www.linuxnet.com )
00003  *
00004  * Copyright (C) 1999
00005  *  David Corcoran <corcoran@linuxnet.com>
00006  * Copyright (C) 2004
00007  *  Ludovic Rousseau <ludovic.rousseau@free.fr>
00008  *
00009  * $Id: readerfactory.h 3260 2009-01-02 15:19:59Z rousseau $
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 #include "pcscd.h"
00025 
00026 #ifdef __cplusplus
00027 extern "C"
00028 {
00029 #endif
00030 
00031     typedef struct
00032     {
00033         char *pcFriendlyname;   
00034         char *pcDevicename;     
00035         char *pcLibpath;        
00036         int dwChannelId;        
00037     } SerialReader;
00038 
00039     struct FctMap_V1
00040     {
00041         RESPONSECODE (*pvfCreateChannel)(DWORD);
00042         RESPONSECODE (*pvfCloseChannel)(void);
00043         RESPONSECODE (*pvfGetCapabilities)(DWORD, PUCHAR);
00044         RESPONSECODE (*pvfSetCapabilities)(DWORD, PUCHAR);
00045         RESPONSECODE (*pvfSetProtocolParameters)(DWORD, UCHAR, UCHAR, UCHAR,
00046             UCHAR);
00047         RESPONSECODE (*pvfPowerICC)(DWORD);
00048         RESPONSECODE (*pvfTransmitToICC)(SCARD_IO_HEADER, PUCHAR, DWORD,
00049             PUCHAR, PDWORD, PSCARD_IO_HEADER);
00050         RESPONSECODE (*pvfICCPresence)(void);
00051     };
00052 
00053     typedef struct FctMap_V1 FCT_MAP_V1, *PFCT_MAP_V1;
00054 
00055     struct FctMap_V2
00056     {
00057         /* shared with API 3.0 */
00058         RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
00059         RESPONSECODE (*pvfCloseChannel)(DWORD);
00060         RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
00061         RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
00062         RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
00063             UCHAR, UCHAR);
00064         RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
00065         RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
00066             DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
00067         RESPONSECODE (*pvfICCPresence)(DWORD);
00068 
00069         /* API v2.0 only */
00070         RESPONSECODE (*pvfControl)(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
00071     };
00072 
00073     typedef struct FctMap_V2 FCT_MAP_V2, *PFCT_MAP_V2;
00074 
00075     struct FctMap_V3
00076     {
00077         /* the common fields SHALL be in the same order as in FctMap_V2 */
00078         RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
00079         RESPONSECODE (*pvfCloseChannel)(DWORD);
00080         RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
00081         RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
00082         RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
00083                 UCHAR, UCHAR);
00084         RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
00085         RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
00086             DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
00087         RESPONSECODE (*pvfICCPresence)(DWORD);
00088 
00089         /* API V3.0 only */
00090         RESPONSECODE (*pvfControl)(DWORD, DWORD, LPCVOID, DWORD, LPVOID,
00091             DWORD, LPDWORD);
00092         RESPONSECODE (*pvfCreateChannelByName)(DWORD, LPSTR);
00093     };
00094 
00095     typedef struct FctMap_V3 FCT_MAP_V3, *PFCT_MAP_V3;
00096 
00097     struct RdrCliHandles
00098     {
00099         SCARDHANDLE hCard;      
00100         DWORD dwEventStatus;    
00101     };
00102 
00103     typedef struct RdrCliHandles RDR_CLIHANDLES, *PRDR_CLIHANDLES;
00104 
00105     struct ReaderContext
00106     {
00107         char lpcReader[MAX_READERNAME]; 
00108         char lpcLibrary[MAX_LIBNAME];   
00109         char lpcDevice[MAX_DEVICENAME]; 
00110         PCSCLITE_THREAD_T pthThread;    
00111         RESPONSECODE (*pthCardEvent)(DWORD);    
00112         PCSCLITE_MUTEX_T mMutex;    
00113         RDR_CLIHANDLES psHandles[PCSCLITE_MAX_READER_CONTEXT_CHANNELS];
00115         union
00116         {
00117             FCT_MAP_V1 psFunctions_v1;  
00118             FCT_MAP_V2 psFunctions_v2;  
00119             FCT_MAP_V3 psFunctions_v3;  
00120         } psFunctions;  
00122         LPVOID vHandle;         
00123         DWORD dwVersion;        
00124         DWORD dwPort;           
00125         DWORD dwSlot;           
00126         DWORD dwBlockStatus;    
00127         DWORD dwLockId;         
00128         int LockCount;          
00129         DWORD dwIdentity;       
00130         int32_t dwContexts;     
00131         PDWORD pdwFeeds;        
00132         PDWORD pdwMutex;        
00134         struct pubReaderStatesList *readerState; 
00135         /* we can't use PREADER_STATE here since eventhandler.h can't be
00136          * included because of circular dependencies */
00137     };
00138 
00139     typedef struct ReaderContext READER_CONTEXT, *PREADER_CONTEXT;
00140 
00141     LONG RFAllocateReaderSpace(void);
00142     LONG RFAddReader(LPSTR, DWORD, LPSTR, LPSTR);
00143     LONG RFRemoveReader(LPSTR, DWORD);
00144     LONG RFSetReaderName(PREADER_CONTEXT, LPSTR, LPSTR, DWORD, DWORD);
00145     LONG RFListReaders(LPSTR, LPDWORD);
00146     LONG RFReaderInfo(LPSTR, /*@out@*/ struct ReaderContext **);
00147     LONG RFReaderInfoNamePort(DWORD, LPSTR, /*@out@*/ struct ReaderContext **);
00148     LONG RFReaderInfoById(DWORD, /*@out@*/ struct ReaderContext **);
00149     LONG RFCheckSharing(DWORD);
00150     LONG RFLockSharing(DWORD);
00151     LONG RFUnlockSharing(DWORD);
00152     LONG RFUnblockReader(PREADER_CONTEXT);
00153     LONG RFUnblockContext(SCARDCONTEXT);
00154     LONG RFLoadReader(PREADER_CONTEXT);
00155     LONG RFBindFunctions(PREADER_CONTEXT);
00156     LONG RFUnBindFunctions(PREADER_CONTEXT);
00157     LONG RFUnloadReader(PREADER_CONTEXT);
00158     LONG RFInitializeReader(PREADER_CONTEXT);
00159     LONG RFUnInitializeReader(PREADER_CONTEXT);
00160     SCARDHANDLE RFCreateReaderHandle(PREADER_CONTEXT);
00161     LONG RFDestroyReaderHandle(SCARDHANDLE hCard);
00162     LONG RFAddReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
00163     LONG RFFindReaderHandle(SCARDHANDLE);
00164     LONG RFRemoveReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
00165     LONG RFSetReaderEventState(PREADER_CONTEXT, DWORD);
00166     LONG RFCheckReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
00167     LONG RFClearReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
00168     LONG RFCheckReaderStatus(PREADER_CONTEXT);
00169     void RFCleanupReaders(int);
00170     int RFStartSerialReaders(const char *readerconf);
00171     void RFReCheckReaderConf(void);
00172     void RFSuspendAllReaders(void);
00173     void RFAwakeAllReaders(void);
00174 
00175 #ifdef __cplusplus
00176 }
00177 #endif
00178 
00179 #endif

Generated on Mon Aug 17 01:00:11 2009 for pcsc-lite by  doxygen 1.5.9