[Pcsclite-cvs-commit] r6812 - trunk/Drivers/ccid/examples

ludovic.rousseau at free.fr ludovic.rousseau at free.fr
Mon Jan 6 15:32:55 UTC 2014


Author: rousseau
Date: 2014-01-06 15:32:55 +0000 (Mon, 06 Jan 2014)
New Revision: 6812

Modified:
   trunk/Drivers/ccid/examples/scardcontrol.c
Log:
Parse codes returned by a pinpad (as SW1/SW2).

Known codes for now are:
0x9000: Success
0x6400: Timeout
0x6401: Cancelled by user
0x6402: PIN mismatch
0x6403: Too short or too long PIN


Modified: trunk/Drivers/ccid/examples/scardcontrol.c
===================================================================
--- trunk/Drivers/ccid/examples/scardcontrol.c	2014-01-06 14:18:30 UTC (rev 6811)
+++ trunk/Drivers/ccid/examples/scardcontrol.c	2014-01-06 15:32:55 UTC (rev 6812)
@@ -167,6 +167,39 @@
 	}
 } /* parse_properties */
 
+
+static const char *pinpad_return_codes(unsigned char bRecvBuffer[])
+{
+	const char * ret = "UNKNOWN";
+
+	if ((0x90 == bRecvBuffer[0]) && (0x00 == bRecvBuffer[1]))
+		ret = "Success";
+
+	if (0x64 == bRecvBuffer[0])
+	{
+		switch (bRecvBuffer[1])
+		{
+			case 0x00:
+				ret = "Timeout";
+				break;
+
+			case 0x01:
+				ret = "Cancelled by user";
+				break;
+
+			case 0x02:
+				ret = "PIN mismatch";
+				break;
+
+			case 0x03:
+				ret = "Too short or too long PIN";
+				break;
+		}
+	}
+
+	return ret;
+}
+
 int main(int argc, char *argv[])
 {
 	LONG rv;
@@ -608,7 +641,7 @@
 	printf(" card response:");
 	for (i=0; i<length; i++)
 		printf(" %02X", bRecvBuffer[i]);
-	printf("\n");
+	printf(": %s\n", pinpad_return_codes(bRecvBuffer));
 	PCSC_ERROR_CONT(rv, "SCardControl")
 
 	/* verify PIN dump */




More information about the Pcsclite-cvs-commit mailing list