[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