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 2900 2008-04-22 13:12:50Z 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 
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         /* shared with API 3.0 */
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         /* API v2.0 only */
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         /* the common fields SHALL be in the same order as in FctMap_V2 */
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         /* API V3.0 only */
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     struct RdrCliHandles
00097     {
00098         SCARDHANDLE hCard;      
00099         DWORD dwEventStatus;    
00100     };
00101 
00102     typedef struct RdrCliHandles RDR_CLIHANDLES, *PRDR_CLIHANDLES;
00103 
00104     struct ReaderContext
00105     {
00106         char lpcReader[MAX_READERNAME]; 
00107         char lpcLibrary[MAX_LIBNAME];   
00108         char lpcDevice[MAX_DEVICENAME]; 
00109         PCSCLITE_THREAD_T pthThread;    
00110         RESPONSECODE (*pthCardEvent)(DWORD);    
00111         PCSCLITE_MUTEX_T mMutex;    
00112         RDR_CLIHANDLES psHandles[PCSCLITE_MAX_READER_CONTEXT_CHANNELS];
00114         union
00115         {
00116             FCT_MAP_V1 psFunctions_v1;  
00117             FCT_MAP_V2 psFunctions_v2;  
00118             FCT_MAP_V3 psFunctions_v3;  
00119         } psFunctions;  
00121         LPVOID vHandle;         
00122         DWORD dwVersion;        
00123         DWORD dwPort;           
00124         DWORD dwSlot;           
00125         DWORD dwBlockStatus;    
00126         DWORD dwLockId;         
00127         int LockCount;          
00128         DWORD dwIdentity;       
00129         int32_t dwContexts;     
00130         PDWORD pdwFeeds;        
00131         PDWORD pdwMutex;        
00133         struct pubReaderStatesList *readerState; 
00134         /* we can't use PREADER_STATE here since eventhandler.h can't be
00135          * included because of circular dependencies */
00136     };
00137 
00138     typedef struct ReaderContext READER_CONTEXT, *PREADER_CONTEXT;
00139 
00140     LONG RFAllocateReaderSpace(void);
00141     LONG RFAddReader(LPSTR, DWORD, LPSTR, LPSTR);
00142     LONG RFRemoveReader(LPSTR, DWORD);
00143     LONG RFSetReaderName(PREADER_CONTEXT, LPSTR, LPSTR, DWORD, DWORD);
00144     LONG RFListReaders(LPSTR, LPDWORD);
00145     LONG RFReaderInfo(LPSTR, struct ReaderContext **);
00146     LONG RFReaderInfoNamePort(DWORD, LPSTR, struct ReaderContext **);
00147     LONG RFReaderInfoById(DWORD, struct ReaderContext **);
00148     LONG RFCheckSharing(DWORD);
00149     LONG RFLockSharing(DWORD);
00150     LONG RFUnlockSharing(DWORD);
00151     LONG RFUnblockReader(PREADER_CONTEXT);
00152     LONG RFUnblockContext(SCARDCONTEXT);
00153     LONG RFLoadReader(PREADER_CONTEXT);
00154     LONG RFBindFunctions(PREADER_CONTEXT);
00155     LONG RFUnBindFunctions(PREADER_CONTEXT);
00156     LONG RFUnloadReader(PREADER_CONTEXT);
00157     LONG RFInitializeReader(PREADER_CONTEXT);
00158     LONG RFUnInitializeReader(PREADER_CONTEXT);
00159     SCARDHANDLE RFCreateReaderHandle(PREADER_CONTEXT);
00160     LONG RFDestroyReaderHandle(SCARDHANDLE hCard);
00161     LONG RFAddReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
00162     LONG RFFindReaderHandle(SCARDHANDLE);
00163     LONG RFRemoveReaderHandle(PREADER_CONTEXT, SCARDHANDLE);
00164     LONG RFSetReaderEventState(PREADER_CONTEXT, DWORD);
00165     LONG RFCheckReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
00166     LONG RFClearReaderEventState(PREADER_CONTEXT, SCARDHANDLE);
00167     LONG RFCheckReaderStatus(PREADER_CONTEXT);
00168     void RFCleanupReaders(int);
00169     int RFStartSerialReaders(const char *readerconf);
00170     void RFReCheckReaderConf(void);
00171     void RFSuspendAllReaders(void);
00172     void RFAwakeAllReaders(void);
00173 
00174 #ifdef __cplusplus
00175 }
00176 #endif
00177 
00178 #endif

Generated on Thu Aug 28 20:14:41 2008 for pcsc-lite by  doxygen 1.5.6