[Pcsclite-cvs-commit] r6964 - in trunk/Drivers/ccid/src: . towitoko
ludovic.rousseau at free.fr
ludovic.rousseau at free.fr
Tue Aug 26 09:21:53 UTC 2014
Author: rousseau
Date: 2014-08-26 09:21:53 +0000 (Tue, 26 Aug 2014)
New Revision: 6964
Modified:
trunk/Drivers/ccid/src/ifdhandler.c
trunk/Drivers/ccid/src/towitoko/atr.c
trunk/Drivers/ccid/src/towitoko/atr.h
Log:
ATR_GetDefaultProtocol() also returns the available protocols
Add a new parameter int *availableProtocols to return the available
protocols as defined in the ATR.
This is needed for the UEFI driver. Getting the available protocols is
done by pcsc-lite but pcsc-lite is not used on UEFI.
Modified: trunk/Drivers/ccid/src/ifdhandler.c
===================================================================
--- trunk/Drivers/ccid/src/ifdhandler.c 2014-08-26 09:16:51 UTC (rev 6963)
+++ trunk/Drivers/ccid/src/ifdhandler.c 2014-08-26 09:21:53 UTC (rev 6964)
@@ -884,7 +884,7 @@
{
int default_protocol;
- ATR_GetDefaultProtocol(&atr, &default_protocol);
+ ATR_GetDefaultProtocol(&atr, &default_protocol, NULL);
/* if the requested protocol is not the default one
* or a TA1/PPS1 is present */
Modified: trunk/Drivers/ccid/src/towitoko/atr.c
===================================================================
--- trunk/Drivers/ccid/src/towitoko/atr.c 2014-08-26 09:16:51 UTC (rev 6963)
+++ trunk/Drivers/ccid/src/towitoko/atr.c 2014-08-26 09:21:53 UTC (rev 6964)
@@ -317,25 +317,38 @@
* It was rewritten by Ludovic Rousseau, 2004
*/
#define PROTOCOL_UNSET -1
-int ATR_GetDefaultProtocol(ATR_t * atr, int *protocol)
+int ATR_GetDefaultProtocol(ATR_t * atr, int *protocol, int *availableProtocols)
{
int i;
/* default value */
*protocol = PROTOCOL_UNSET;
+ if (availableProtocols)
+ *availableProtocols = 0;
for (i=0; i<ATR_MAX_PROTOCOLS; i++)
- if (atr->ib[i][ATR_INTERFACE_BYTE_TD].present && (PROTOCOL_UNSET == *protocol))
+ if (atr->ib[i][ATR_INTERFACE_BYTE_TD].present)
{
- /* set to the first protocol byte found */
- *protocol = atr->ib[i][ATR_INTERFACE_BYTE_TD].value & 0x0F;
- DEBUG_COMM2("default protocol: T=%d", *protocol);
+ int T = atr->ib[i][ATR_INTERFACE_BYTE_TD].value & 0x0F;
+
+ DEBUG_COMM2("T=%d Protocol Found", T);
+ if (availableProtocols)
+ *availableProtocols |= 1 << T;
+
+ if (PROTOCOL_UNSET == *protocol)
+ {
+ /* set to the first protocol byte found */
+ *protocol = T;
+ DEBUG_COMM2("default protocol: T=%d", *protocol);
+ }
}
/* specific mode if TA2 present */
if (atr->ib[1][ATR_INTERFACE_BYTE_TA].present)
{
*protocol = atr->ib[1][ATR_INTERFACE_BYTE_TA].value & 0x0F;
+ if (availableProtocols)
+ *availableProtocols = 1 << *protocol;
DEBUG_COMM2("specific mode found: T=%d", *protocol);
}
@@ -343,6 +356,8 @@
{
DEBUG_INFO1("no default protocol found in ATR. Using T=0");
*protocol = ATR_PROTOCOL_TYPE_T0;
+ if (availableProtocols)
+ *availableProtocols = 1 << *protocol;
}
return ATR_OK;
Modified: trunk/Drivers/ccid/src/towitoko/atr.h
===================================================================
--- trunk/Drivers/ccid/src/towitoko/atr.h 2014-08-26 09:16:51 UTC (rev 6963)
+++ trunk/Drivers/ccid/src/towitoko/atr.h 2014-08-26 09:21:53 UTC (rev 6964)
@@ -101,7 +101,7 @@
/* General smartcard characteristics */
extern int ATR_GetConvention(ATR_t * atr, /*@out@*/ int *convention);
-extern int ATR_GetDefaultProtocol(ATR_t * atr, /*@out@*/ int *protocol);
+extern int ATR_GetDefaultProtocol(ATR_t * atr, /*@out@*/ int *protocol, int *availableProtocols);
/* ATR parameters and integer values */
extern int ATR_GetIntegerValue(ATR_t * atr, int name, BYTE * value);
More information about the Pcsclite-cvs-commit
mailing list