[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);