[Pcsclite-cvs-commit] PCSC/src readerfactory.h,1.19,1.20

rousseau@haydn.debian.org rousseau@haydn.debian.org


Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv4979

Modified Files:
	readerfactory.h 
Log Message:
psFunctions field is now a C union with three structures for the 3 API.
- each structure has complete functions prototypes
- only the needed functions are in each structure (some bytes saved :-)


Index: readerfactory.h
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/src/readerfactory.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- readerfactory.h	22 Jul 2004 13:28:47 -0000	1.19
+++ readerfactory.h	13 Aug 2004 20:27:29 -0000	1.20
@@ -15,31 +15,73 @@
 #define __readerfactory_h__
 
 #include "thread_generic.h"
+#include "ifdhandler.h"
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
-	struct FctMap
+	struct FctMap_V1
 	{
-		LPVOID pvfCreateChannel;
-		LPVOID pvfCreateChannelByName;	/* MUSCLE IFD 3.0 Compliance */
-		LPVOID pvfCloseChannel;
-		LPVOID pvfGetCapabilities;
-		LPVOID pvfSetCapabilities;
-		LPVOID pvfSetProtocolParameters;
-		LPVOID pvfPowerICC;
+		RESPONSECODE (*pvfCreateChannel)(DWORD);
+		RESPONSECODE (*pvfCloseChannel)(void);
+		RESPONSECODE (*pvfGetCapabilities)(DWORD, PUCHAR);
+		RESPONSECODE (*pvfSetCapabilities)(DWORD, PUCHAR);
+		RESPONSECODE (*pvfSetProtocolParameters)(DWORD, UCHAR, UCHAR, UCHAR,
+			UCHAR);
+		RESPONSECODE (*pvfPowerICC)(DWORD);
 		LPVOID pvfSwallowICC;		/* Deprecated in 2.0 */
 		LPVOID pvfEjectICC;		/* Deprecated in 2.0 */
 		LPVOID pvfConfiscateICC;	/* Deprecated in 2.0 */
-		LPVOID pvfTransmitToICC;
-		LPVOID pvfICCPresence;
+		RESPONSECODE (*pvfTransmitToICC)(SCARD_IO_HEADER, PUCHAR, DWORD,
+			PUCHAR, PDWORD, PSCARD_IO_HEADER);
+		RESPONSECODE (*pvfICCPresence)(void);
 		LPVOID pvfICCAbsent;		/* Deprecated in 2.0 */
-		LPVOID pvfControl;		/* MUSCLE IFD 2.0 Compliance */
 	};
 
-	typedef struct FctMap FCT_MAP, *PFCT_MAP;
+	typedef struct FctMap_V1 FCT_MAP_V1, *PFCT_MAP_V1;
+
+	struct FctMap_V2
+	{
+		RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
+		RESPONSECODE (*pvfCloseChannel)(DWORD);
+		RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
+		RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
+		RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
+			UCHAR, UCHAR);
+		RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
+		RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
+			DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
+		RESPONSECODE (*pvfICCPresence)(DWORD);
+
+		/* API v2.0 only */
+		RESPONSECODE (*pvfControl)(DWORD, PUCHAR, DWORD, PUCHAR, PDWORD);
+	};
+
+	typedef struct FctMap_V2 FCT_MAP_V2, *PFCT_MAP_V2;
+
+	struct FctMap_V3
+	{
+		/* the common fields SHALL be in the same order as in FctMap_V2 */
+		RESPONSECODE (*pvfCreateChannel)(DWORD, DWORD);
+		RESPONSECODE (*pvfCloseChannel)(DWORD);
+		RESPONSECODE (*pvfGetCapabilities)(DWORD, DWORD, PDWORD, PUCHAR);
+		RESPONSECODE (*pvfSetCapabilities)(DWORD, DWORD, DWORD, PUCHAR);
+		RESPONSECODE (*pvfSetProtocolParameters)(DWORD, DWORD, UCHAR, UCHAR,
+				UCHAR, UCHAR);
+		RESPONSECODE (*pvfPowerICC)(DWORD, DWORD, PUCHAR, PDWORD);
+		RESPONSECODE (*pvfTransmitToICC)(DWORD, SCARD_IO_HEADER, PUCHAR,
+			DWORD, PUCHAR, PDWORD, PSCARD_IO_HEADER);
+		RESPONSECODE (*pvfICCPresence)(DWORD);
+
+		/* API V3.0 only */
+		RESPONSECODE (*pvfControl)(DWORD, DWORD, LPCVOID, DWORD, LPVOID,
+			DWORD, LPDWORD);
+		RESPONSECODE (*pvfCreateChannelByName)(DWORD, LPTSTR);
+	};
+
+	typedef struct FctMap_V3 FCT_MAP_V3, *PFCT_MAP_V3;
 
 	/*
 	 * The following is not currently used but in place if needed 
@@ -97,7 +139,13 @@
 		PCSCLITE_MUTEX_T mMutex;	/* Mutex for this connection */
 		RDR_CLIHANDLES psHandles[PCSCLITE_MAX_READER_CONTEXT_CHANNELS];	
                                          /* Structure of connected handles */
-		FCT_MAP psFunctions;	/* Structure of function pointers */
+		union
+		{
+			FCT_MAP_V1 psFunctions_v1;	/* API V1.0 */
+			FCT_MAP_V2 psFunctions_v2;	/* API V2.0 */
+			FCT_MAP_V3 psFunctions_v3;	/* API V3.0 */
+		} psFunctions;
+
 		LPVOID vHandle;			/* Dlopen handle */
 		DWORD dwVersion;		/* IFD Handler version number */
 		DWORD dwPort;			/* Port ID */