[Pcsclite-cvs-commit] PCSC/doc/example pcsc_demo.c,1.7,1.8

rousseau@haydn.debian.org rousseau@haydn.debian.org


Update of /cvsroot/pcsclite/PCSC/doc/example
In directory haydn:/tmp/cvs-serv10251

Modified Files:
	pcsc_demo.c 
Log Message:
- add SCardReconnect() sample code
- allow to select the reader number instead of selecting always the first
  one


Index: pcsc_demo.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/doc/example/pcsc_demo.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- pcsc_demo.c	9 Nov 2003 14:39:11 -0000	1.7
+++ pcsc_demo.c	18 Mar 2004 07:40:47 -0000	1.8
@@ -3,7 +3,7 @@
  *
  * MUSCLE SmartCard Development ( http://www.linuxnet.com )
  *
- * Copyright (C) 2003
+ * Copyright (C) 2003-2004
  *  Ludovic Rousseau <ludovic.rousseau@free.fr>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -64,10 +64,11 @@
 	DWORD dwActiveProtocol, dwReaderLen, dwState, dwProt, dwAtrLen;
 	BYTE pbAtr[MAX_ATR_SIZE] = "";
 	BYTE pbReader[MAX_READERNAME] = "";
+	int reader_nb;
 	int i;
 
 	printf("PC/SC sample code\n");
-	printf("V 1.0 2003, Ludovic Rousseau <ludovic.rousseau@free.fr>\n");
+	printf("V 1.1 2003-2004, Ludovic Rousseau <ludovic.rousseau@free.fr>\n");
 
 	rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
 	if (rv != SCARD_S_SUCCESS)
@@ -118,11 +119,43 @@
 		goto end;
 	}
 
+	if (argc > 1)
+	{
+		reader_nb = atoi(argv[1]);
+		if (reader_nb < 0 || reader_nb >= nbReaders)
+		{
+			printf("Wrong reader index: %d\n", reader_nb);
+			goto end;
+		}
+	}
+	else
+		reader_nb = 0;
+
 	/* connect to a card */
-	rv = SCardConnect(hContext, readers[0], SCARD_SHARE_SHARED,
-		SCARD_PROTOCOL_T0, &hCard, &dwActiveProtocol);
+	dwActiveProtocol = -1;
+	rv = SCardConnect(hContext, readers[reader_nb], SCARD_SHARE_EXCLUSIVE,
+		SCARD_PROTOCOL_ANY, &hCard, &dwActiveProtocol);
 	printf(" Protocol: %ld\n", dwActiveProtocol);
 	PCSC_ERROR(rv, "SCardConnect")
+
+	/* get card status */
+	dwAtrLen = sizeof(pbAtr);
+	dwReaderLen = sizeof(pbReader);
+	rv = SCardStatus(hCard, /*NULL*/ pbReader, &dwReaderLen, &dwState, &dwProt,
+		pbAtr, &dwAtrLen);
+	printf(" Reader: %s (length %ld bytes)\n", pbReader, dwReaderLen);
+	printf(" State: 0x%lX\n", dwState);
+	printf(" Prot: %ld\n", dwProt);
+	printf(" ATR (length %ld bytes):", dwAtrLen);
+	for (i=0; i<dwAtrLen; i++)
+		printf(" %02X", pbAtr[i]);
+	printf("\n");
+	PCSC_ERROR(rv, "SCardStatus")
+
+	/* card reconnect */
+	rv = SCardReconnect(hCard, SCARD_SHARE_EXCLUSIVE,
+		SCARD_PROTOCOL_ANY, SCARD_UNPOWER_CARD, &dwActiveProtocol);
+	PCSC_ERROR(rv, "SCardReconnect")
 
 	/* get card status */
 	dwAtrLen = sizeof(pbAtr);