[Pcsclite-cvs-commit] r5301 - /trunk/PCSC/src/winscard.c
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Tue Oct 12 09:51:56 UTC 2010
Author: rousseau
Date: Tue Oct 12 09:51:55 2010
New Revision: 5301
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5301
Log:
SCardReconnect(): Reorganize the code to manage ATR and readerState
after a power up. Remove a call to IFDStatusICC() to know if a card is
present or not since IFDPowerICC() already gives us this information.
SCardDisconnect(): Use the same code as above
Modified:
trunk/PCSC/src/winscard.c
Modified: trunk/PCSC/src/winscard.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard.c?rev=5301&op=diff
==============================================================================
--- trunk/PCSC/src/winscard.c (original)
+++ trunk/PCSC/src/winscard.c Tue Oct 12 09:51:55 2010
@@ -597,28 +597,10 @@
*/
if (rv == SCARD_S_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_SWALLOWED;
- rContext->readerState->readerState &= ~SCARD_UNKNOWN;
- }
- 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->cardAtrLength = 0;
- }
-
- if (rContext->readerState->cardAtrLength > 0)
- {
+ rContext->readerState->cardAtrLength = dwAtrLen;
+ rContext->readerState->readerState =
+ SCARD_PRESENT | SCARD_POWERED | SCARD_NEGOTIABLE;
+
Log1(PCSC_LOG_DEBUG, "Reset complete.");
LogXxd(PCSC_LOG_DEBUG, "Card ATR: ",
rContext->readerState->cardAtr,
@@ -626,15 +608,20 @@
}
else
{
- DWORD dwStatus, dwAtrLen2;
- UCHAR ucAtr[MAX_ATR_SIZE];
-
+ rContext->readerState->cardAtrLength = 0;
Log1(PCSC_LOG_ERROR, "Error resetting card.");
- (void)IFDStatusICC(rContext, &dwStatus, ucAtr, &dwAtrLen2);
- if (dwStatus & SCARD_PRESENT)
+
+ if (rv == SCARD_W_REMOVED_CARD)
+ {
+ rContext->readerState->readerState = SCARD_ABSENT;
+ return SCARD_E_NO_SMARTCARD;
+ }
+ else
+ {
+ rContext->readerState->readerState =
+ SCARD_PRESENT | SCARD_SWALLOWED;
return SCARD_W_UNRESPONSIVE_CARD;
- else
- return SCARD_E_NO_SMARTCARD;
+ }
}
}
else
@@ -871,7 +858,6 @@
rContext->readerState->cardAtr,
&dwAtrLen);
}
- rContext->readerState->cardAtrLength = dwAtrLen;
/* the protocol is unset after a power on */
rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNDEFINED;
@@ -881,33 +867,26 @@
*/
if (rv == SCARD_S_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_SWALLOWED;
- rContext->readerState->readerState &= ~SCARD_UNKNOWN;
- }
- else
- {
- if (rContext->readerState->readerState & SCARD_ABSENT)
- rContext->readerState->readerState &= ~SCARD_PRESENT;
+ rContext->readerState->cardAtrLength = dwAtrLen;
+ rContext->readerState->readerState =
+ SCARD_PRESENT | SCARD_POWERED | SCARD_NEGOTIABLE;
+
+ Log1(PCSC_LOG_DEBUG, "Reset complete.");
+ LogXxd(PCSC_LOG_DEBUG, "Card ATR: ",
+ rContext->readerState->cardAtr,
+ rContext->readerState->cardAtrLength);
+ }
+ else
+ {
+ rContext->readerState->cardAtrLength = 0;
+ Log1(PCSC_LOG_ERROR, "Error resetting card.");
+
+ if (rv == SCARD_W_REMOVED_CARD)
+ rContext->readerState->readerState = SCARD_ABSENT;
else
- rContext->readerState->readerState |= SCARD_PRESENT;
- /* SCARD_ABSENT flag is already set */
- 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->cardAtrLength = 0;
- }
-
- if (rContext->readerState->cardAtrLength > 0)
- Log1(PCSC_LOG_DEBUG, "Reset complete.");
- else
- Log1(PCSC_LOG_ERROR, "Error resetting card.");
+ rContext->readerState->readerState =
+ SCARD_PRESENT | SCARD_SWALLOWED;
+ }
}
else if (dwDisposition == SCARD_EJECT_CARD)
{
More information about the Pcsclite-cvs-commit
mailing list