[Pcsclite-cvs-commit] r4956 - 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
Thu May 20 15:06:55 UTC 2010


Author: rousseau
Date: Thu May 20 15:06:48 2010
New Revision: 4956

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=4956
Log:
Add support of SCARD_ATTR_VENDOR_IFD_SERIAL_NO

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=4956&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ccid.h (original)
+++ trunk/Drivers/ccid/src/ccid.h Thu May 20 15:06:48 2010
@@ -121,6 +121,11 @@
 	 * 4 = 1.8V
 	 */
 	int bVoltageSupport;
+
+	/*
+	 * USB serial number of the device (if any)
+	 */
+	char *sIFD_serial_number;
 } _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=4956&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ccid_serial.c (original)
+++ trunk/Drivers/ccid/src/ccid_serial.c Thu May 20 15:06:48 2010
@@ -784,6 +784,8 @@
 		}
 	}
 
+	serialDevice[reader_index].ccid.sIFD_serial_number = NULL;
+
 	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=4956&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ccid_usb.c (original)
+++ trunk/Drivers/ccid/src/ccid_usb.c Thu May 20 15:06:48 2010
@@ -551,6 +551,19 @@
 					usbDevice[reader_index].ccid.bNumEndpoints = usb_interface->altsetting->bNumEndpoints;
 					usbDevice[reader_index].ccid.dwSlotStatus = IFD_ICC_PRESENT;
 					usbDevice[reader_index].ccid.bVoltageSupport = usb_interface->altsetting->extra[5];
+					usbDevice[reader_index].ccid.sIFD_serial_number = NULL;
+					if (dev->descriptor.iSerialNumber)
+					{
+						char serial[128];
+						int ret;
+
+						ret = usb_get_string_simple(dev_handle,
+							dev->descriptor.iSerialNumber, serial,
+							sizeof(serial));
+						if (ret > 0)
+							usbDevice[reader_index].ccid.sIFD_serial_number
+								= strdup(serial);
+					}
 					goto end;
 				}
 			}
@@ -707,6 +720,9 @@
 	usbDevice[reader_index].dirname = NULL;
 	usbDevice[reader_index].filename = NULL;
 	usbDevice[reader_index].interface = 0;
+
+	if (usbDevice[reader_index].ccid.sIFD_serial_number)
+		free(usbDevice[reader_index].ccid.sIFD_serial_number);
 
 	return STATUS_SUCCESS;
 } /* CloseUSB */

Modified: trunk/Drivers/ccid/src/ifdhandler.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/Drivers/ccid/src/ifdhandler.c?rev=4956&op=diff
==============================================================================
--- trunk/Drivers/ccid/src/ifdhandler.c (original)
+++ trunk/Drivers/ccid/src/ifdhandler.c Thu May 20 15:06:48 2010
@@ -571,6 +571,22 @@
 			break;
 #endif
 
+		case SCARD_ATTR_VENDOR_IFD_SERIAL_NO:
+			{
+				_ccid_descriptor *ccid_desc;
+
+				/* default value: not supported */
+				*Length = 0;
+
+				ccid_desc = get_ccid_descriptor(reader_index);
+				if (ccid_desc->sIFD_serial_number)
+				{
+					strcpy((char *)Value, ccid_desc->sIFD_serial_number);
+					*Length = strlen((char *)Value);
+				}
+			}
+			break;
+
 		default:
 			return_value = IFD_ERROR_TAG;
 	}




More information about the Pcsclite-cvs-commit mailing list