[Pcsclite-cvs-commit] r6021 - in /trunk/Drivers/ccid/src: ccid.h ccid_serial.c ccid_usb.c ifdhandler.c

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Mon Oct 10 13:00:24 UTC 2011


Author: rousseau
Date: Mon Oct 10 13:00:23 2011
New Revision: 6021

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=6021
Log:
SCARD_ATTR_VENDOR_NAME and SCARD_ATTR_VENDOR_IFD_VERSION are not the
vendor name and version of the driver but of the IFD: InterFace Device
i.e.  the smart card reader.

We then return the USB iManufacturer string as SCARD_ATTR_VENDOR_NAME
and USB bcdDevice as SCARD_ATTR_VENDOR_IFD_VERSION

Modified:
    trunk/Drivers/ccid/src/ccid.h
    trunk/Drivers/ccid/src/ccid_serial.c
    trunk/Drivers/ccid/src/ccid_usb.c
    trunk/Drivers/ccid/src/ifdhandler.c

Modified: trunk/Drivers/ccid/src/ccid.h
URL: http://svn.debian.org/wsvn/pcsclite/trunk/Drivers/ccid/src/ccid.h?rev=6021&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ccid.h (original)
+++ trunk/Drivers/ccid/src/ccid.h Mon Oct 10 13:00:23 2011
@@ -126,6 +126,16 @@
 	 * USB serial number of the device (if any)
 	 */
 	char *sIFD_serial_number;
+
+	/*
+	 * USB iManufacturer string
+	 */
+	const char *sIFD_iManufacturer;
+
+	/*
+	 * USB bcdDevice
+	 */
+	int IFD_bcdDevice;
 } _ccid_descriptor;
 
 /* Features from dwFeatures */

Modified: trunk/Drivers/ccid/src/ccid_serial.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/Drivers/ccid/src/ccid_serial.c?rev=6021&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ccid_serial.c (original)
+++ trunk/Drivers/ccid/src/ccid_serial.c Mon Oct 10 13:00:23 2011
@@ -793,6 +793,8 @@
 	}
 
 	serialDevice[reader_index].ccid.sIFD_serial_number = NULL;
+	serialDevice[reader_index].ccid.sIFD_iManufacturer = NULL;
+	serialDevice[reader_index].ccid.IFD_bcdDevice = 0;
 
 	return STATUS_SUCCESS;
 } /* OpenSerialByName */

Modified: trunk/Drivers/ccid/src/ccid_usb.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/Drivers/ccid/src/ccid_usb.c?rev=6021&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ccid_usb.c (original)
+++ trunk/Drivers/ccid/src/ccid_usb.c Mon Oct 10 13:00:23 2011
@@ -569,6 +569,23 @@
 						usbDevice[reader_index].ccid.sIFD_serial_number
 							= strdup((char *)serial);
 				}
+
+				usbDevice[reader_index].ccid.sIFD_iManufacturer = NULL;
+				if (desc.iManufacturer)
+				{
+					unsigned char iManufacturer[128];
+					int ret;
+
+					ret = libusb_get_string_descriptor_ascii(dev_handle,
+							desc.iManufacturer, iManufacturer,
+							sizeof(iManufacturer));
+					DEBUG_CRITICAL2("%s\n", iManufacturer);
+					if (ret > 0)
+						usbDevice[reader_index].ccid.sIFD_iManufacturer
+							= strdup((char *)iManufacturer);
+				}
+
+				usbDevice[reader_index].ccid.IFD_bcdDevice = desc.bcdDevice;
 				goto end;
 			}
 		}

Modified: trunk/Drivers/ccid/src/ifdhandler.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/Drivers/ccid/src/ifdhandler.c?rev=6021&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ifdhandler.c (original)
+++ trunk/Drivers/ccid/src/ifdhandler.c Mon Oct 10 13:00:23 2011
@@ -504,24 +504,34 @@
 			break;
 
 		case SCARD_ATTR_VENDOR_IFD_VERSION:
-			/* Vendor-supplied interface device version (DWORD in the form
-			 * 0xMMmmbbbb where MM = major version, mm = minor version, and
-			 * bbbb = build number). */
-			*Length = sizeof(DWORD);
-			if (Value)
-				*(DWORD *)Value = CCID_VERSION;
+			{
+				int IFD_bcdDevice = get_ccid_descriptor(reader_index)->IFD_bcdDevice;
+
+				/* Vendor-supplied interface device version (DWORD in the form
+				 * 0xMMmmbbbb where MM = major version, mm = minor version, and
+				 * bbbb = build number). */
+				*Length = 4;
+				if (Value)
+					*(uint32_t *)Value = IFD_bcdDevice << 16;
+			}
 			break;
 
 		case SCARD_ATTR_VENDOR_NAME:
-#define VENDOR_NAME "Ludovic Rousseau"
-			if (*Length >= sizeof(VENDOR_NAME))
-			{
-				*Length = sizeof(VENDOR_NAME);
-				if (Value)
-					memcpy(Value, VENDOR_NAME, sizeof(VENDOR_NAME));
-			}
-			else
-				return_value = IFD_ERROR_INSUFFICIENT_BUFFER;
+			{
+				const char *sIFD_iManufacturer = get_ccid_descriptor(reader_index) -> sIFD_iManufacturer;
+
+				if (sIFD_iManufacturer)
+				{
+					strlcpy((char *)Value, sIFD_iManufacturer, *Length);
+					*Length = strlen((char *)Value) +1;
+					DEBUG_CRITICAL2("%d", *Length);
+				}
+				else
+				{
+					/* not supported */
+					*Length = 0;
+				}
+			}
 			break;
 
 		case SCARD_ATTR_MAXINPUT:




More information about the Pcsclite-cvs-commit mailing list