[Pcsclite-cvs-commit] r5290 - in /trunk/PCSC/src: eventhandler.c eventhandler.h winscard_clnt.c

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Sun Oct 10 14:16:24 UTC 2010


Author: rousseau
Date: Sun Oct 10 14:16:17 2010
New Revision: 5290

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5290
Log:
Split the card event counter out of the card event state on the pcscd
side to simplify the code in EHStatusHandlerThread()

The two information are combined on the client side in
SCardGetStatusChange() and SCardStatus()

Modified:
    trunk/PCSC/src/eventhandler.c
    trunk/PCSC/src/eventhandler.h
    trunk/PCSC/src/winscard_clnt.c

Modified: trunk/PCSC/src/eventhandler.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/eventhandler.c?rev=5290&op=diff
==============================================================================
--- trunk/PCSC/src/eventhandler.c (original)
+++ trunk/PCSC/src/eventhandler.c Sun Oct 10 14:16:17 2010
@@ -232,16 +232,6 @@
 		return SCARD_S_SUCCESS;
 }
 
-static void incrementEventCounter(struct pubReaderStatesList *readerState)
-{
-	int counter;
-
-	counter = (readerState -> readerState >> 16) & 0xFFFF;
-	counter++;
-	readerState -> readerState = (readerState -> readerState & 0xFFFF)
-		+ (counter << 16);
-}
-
 static void EHStatusHandlerThread(READER_CONTEXT * rContext)
 {
 	LONG rv;
@@ -277,13 +267,7 @@
 
 		if (rv == IFD_SUCCESS)
 		{
-			dwStatus |= SCARD_PRESENT;
-			dwStatus &= ~SCARD_ABSENT;
-			dwStatus |= SCARD_POWERED;
-			dwStatus |= SCARD_NEGOTIABLE;
-			dwStatus &= ~SCARD_SPECIFIC;
-			dwStatus &= ~SCARD_SWALLOWED;
-			dwStatus &= ~SCARD_UNKNOWN;
+			dwStatus = SCARD_PRESENT | SCARD_POWERED | SCARD_NEGOTIABLE;
 
 			if (rContext->readerState->cardAtrLength > 0)
 			{
@@ -296,13 +280,7 @@
 		}
 		else
 		{
-			dwStatus |= SCARD_PRESENT;
-			dwStatus &= ~SCARD_ABSENT;
-			dwStatus |= SCARD_SWALLOWED;
-			dwStatus &= ~SCARD_POWERED;
-			dwStatus &= ~SCARD_NEGOTIABLE;
-			dwStatus &= ~SCARD_SPECIFIC;
-			dwStatus &= ~SCARD_UNKNOWN;
+			dwStatus = SCARD_PRESENT | SCARD_SWALLOWED;
 			Log3(PCSC_LOG_ERROR, "Error powering up card: %d 0x%04X", rv, rv);
 		}
 
@@ -310,13 +288,7 @@
 	}
 	else
 	{
-		dwStatus |= SCARD_ABSENT;
-		dwStatus &= ~SCARD_PRESENT;
-		dwStatus &= ~SCARD_POWERED;
-		dwStatus &= ~SCARD_NEGOTIABLE;
-		dwStatus &= ~SCARD_SPECIFIC;
-		dwStatus &= ~SCARD_SWALLOWED;
-		dwStatus &= ~SCARD_UNKNOWN;
+		dwStatus = SCARD_ABSENT;
 		rContext->readerState->cardAtrLength = 0;
 		rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNDEFINED;
 
@@ -347,13 +319,7 @@
 			/*
 			 * Set error status on this reader while errors occur
 			 */
-			rContext->readerState->readerState &= ~SCARD_ABSENT;
-			rContext->readerState->readerState &= ~SCARD_PRESENT;
-			rContext->readerState->readerState &= ~SCARD_POWERED;
-			rContext->readerState->readerState &= ~SCARD_NEGOTIABLE;
-			rContext->readerState->readerState &= ~SCARD_SPECIFIC;
-			rContext->readerState->readerState &= ~SCARD_SWALLOWED;
-			rContext->readerState->readerState |= SCARD_UNKNOWN;
+			rContext->readerState->readerState = SCARD_UNKNOWN;
 			rContext->readerState->cardAtrLength = 0;
 			rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNDEFINED;
 
@@ -378,16 +344,10 @@
 
 				rContext->readerState->cardAtrLength = 0;
 				rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNDEFINED;
-				rContext->readerState->readerState |= SCARD_ABSENT;
-				rContext->readerState->readerState &= ~SCARD_UNKNOWN;
-				rContext->readerState->readerState &= ~SCARD_PRESENT;
-				rContext->readerState->readerState &= ~SCARD_POWERED;
-				rContext->readerState->readerState &= ~SCARD_NEGOTIABLE;
-				rContext->readerState->readerState &= ~SCARD_SWALLOWED;
-				rContext->readerState->readerState &= ~SCARD_SPECIFIC;
+				rContext->readerState->readerState = SCARD_ABSENT;
 				dwCurrentState = SCARD_ABSENT;
 
-				incrementEventCounter(rContext->readerState);
+				rContext->readerState->eventCounter++;
 
 				(void)EHSignalEventToClients();
 			}
@@ -411,29 +371,17 @@
 
 				if (rv == IFD_SUCCESS)
 				{
-					rContext->readerState->readerState |= SCARD_PRESENT;
-					rContext->readerState->readerState &= ~SCARD_ABSENT;
-					rContext->readerState->readerState |= SCARD_POWERED;
-					rContext->readerState->readerState |= SCARD_NEGOTIABLE;
-					rContext->readerState->readerState &= ~SCARD_SPECIFIC;
-					rContext->readerState->readerState &= ~SCARD_UNKNOWN;
-					rContext->readerState->readerState &= ~SCARD_SWALLOWED;
+					rContext->readerState->readerState = SCARD_PRESENT | SCARD_POWERED | SCARD_NEGOTIABLE;
 				}
 				else
 				{
-					rContext->readerState->readerState |= SCARD_PRESENT;
-					rContext->readerState->readerState &= ~SCARD_ABSENT;
-					rContext->readerState->readerState |= SCARD_SWALLOWED;
-					rContext->readerState->readerState &= ~SCARD_POWERED;
-					rContext->readerState->readerState &= ~SCARD_NEGOTIABLE;
-					rContext->readerState->readerState &= ~SCARD_SPECIFIC;
-					rContext->readerState->readerState &= ~SCARD_UNKNOWN;
+					rContext->readerState->readerState = SCARD_PRESENT | SCARD_SWALLOWED;
 					rContext->readerState->cardAtrLength = 0;
 				}
 
 				dwCurrentState = SCARD_PRESENT;
 
-				incrementEventCounter(rContext->readerState);
+				rContext->readerState->eventCounter++;
 
 				Log2(PCSC_LOG_INFO, "Card inserted into %s", readerName);
 

Modified: trunk/PCSC/src/eventhandler.h
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/eventhandler.h?rev=5290&op=diff
==============================================================================
--- trunk/PCSC/src/eventhandler.h (original)
+++ trunk/PCSC/src/eventhandler.h Sun Oct 10 14:16:17 2010
@@ -32,6 +32,7 @@
 	typedef struct pubReaderStatesList
 	{
 		char readerName[MAX_READERNAME];
+		uint32_t eventCounter;
 		uint32_t readerState;
 		int32_t readerSharing;
 

Modified: trunk/PCSC/src/winscard_clnt.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard_clnt.c?rev=5290&op=diff
==============================================================================
--- trunk/PCSC/src/winscard_clnt.c (original)
+++ trunk/PCSC/src/winscard_clnt.c Sun Oct 10 14:16:17 2010
@@ -1693,7 +1693,7 @@
 	*pcbAtrLen = readerStates[i].cardAtrLength;
 
 	if (pdwState)
-		*pdwState = readerStates[i].readerState;
+		*pdwState = (readerStates[i].eventCounter << 16) + readerStates[i].readerState;
 
 	if (pdwProtocol)
 		*pdwProtocol = readerStates[i].cardProtocol;
@@ -2001,8 +2001,6 @@
 			}
 			else
 			{
-				int stateCounter;
-
 				/* The reader has come back after being away */
 				if (currReader->dwCurrentState & SCARD_STATE_UNKNOWN)
 				{
@@ -2019,7 +2017,6 @@
 
 				/* Now we check all the Reader States */
 				dwState = rContext->readerState;
-				stateCounter = (dwState >> 16) & 0xFFFF;
 
 				/* only if current state has an non null event counter */
 				if (currReader->dwCurrentState & 0xFFFF0000)
@@ -2029,7 +2026,7 @@
 					currentCounter = (currReader->dwCurrentState >> 16) & 0xFFFF;
 
 					/* has the event counter changed since the last call? */
-					if (stateCounter != currentCounter)
+					if (rContext->eventCounter != currentCounter)
 					{
 						currReader->dwEventState |= SCARD_STATE_CHANGED;
 						Log0(PCSC_LOG_DEBUG);
@@ -2039,7 +2036,7 @@
 
 				/* add an event counter in the upper word of dwEventState */
 				currReader->dwEventState = ((currReader->dwEventState & 0xffff )
-					| (stateCounter << 16));
+					| (rContext->eventCounter << 16));
 
 	/*********** Check if the reader is in the correct state ********/
 				if (dwState & SCARD_UNKNOWN)




More information about the Pcsclite-cvs-commit mailing list