[Pcsclite-cvs-commit] CVS Drivers/ccid/src

CVS User rousseau ludovic.rousseau@free.fr
Mon, 02 May 2005 09:55:33 +0000


Update of /cvsroot/pcsclite/Drivers/ccid/src
In directory haydn:/tmp/cvs-serv26726

Modified Files:
	parse.c 
Log Message:
display the clock frequencies supported by the reader


--- /cvsroot/pcsclite/Drivers/ccid/src/parse.c	2005/05/02 09:53:24	1.28
+++ /cvsroot/pcsclite/Drivers/ccid/src/parse.c	2005/05/02 09:55:31	1.29
@@ -18,7 +18,7 @@
 */
 
 /*
- * $Id: parse.c,v 1.28 2005/05/02 09:53:24 rousseau Exp $
+ * $Id: parse.c,v 1.29 2005/05/02 09:55:31 rousseau Exp $
  */
 
 #include <stdio.h>
@@ -206,6 +206,34 @@
 	printf("  dwDefaultClock: %.3f MHz\n", dw2i(extra, 10)/1000.0);
 	printf("  dwMaximumClock: %.3f MHz\n", dw2i(extra, 14)/1000.0);
 	printf("  bNumClockSupported: 0x%02X\n", extra[18]);
+	{
+		unsigned char buffer[256*sizeof(int)];  /* maximum is 256 records */
+		int n;
+
+		/* See CCID 3.7.2 page 25 */
+		n = usb_control_msg(handle,
+			0xA1, /* request type */
+			0x02, /* GET CLOCK FREQUENCIES */
+			0x00, /* value */
+			usb_interface->bInterfaceNumber, /* interface */
+			(char *)buffer,
+			sizeof(buffer),
+			2 * 1000);
+
+		/* we got an error? */
+		if (n <= 0)
+			printf("   IFD does not support GET CLOCK FREQUENCIES request\n");
+		else
+			if (n % 4) 	/* not a multiple of 4 */
+				printf("   wrong size for GET CLOCK FREQUENCIES: %d\n", n);
+			else
+			{
+				int i;
+
+				for (i=0; i<n; i+=4)
+					printf("   Support %d kHz\n", dw2i(buffer, i));
+			}
+	}
 	printf("  dwDataRate: %d bps\n", dw2i(extra, 19));
 	printf("  dwMaxDataRate: %d bps\n", dw2i(extra, 23));
 	printf("  bNumDataRatesSupported: %d\n", extra[27]);