[Pcsclite-cvs-commit] Drivers/ccid/src ccid.c,1.10,1.11 ccid.h,1.11,1.12 ccid_ifdhandler.h,1.11,1.12 ccid_serial.c,1.26,1.27 ccid_serial.h,1.6,1.7 ccid_usb.c,1.35,1.36 ccid_usb.h,1.10,1.11 commands.c,1.26,1.27 commands.h,1.11,1.12

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


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

Modified Files:
	ccid.c ccid.h ccid_ifdhandler.h ccid_serial.c ccid_serial.h 
	ccid_usb.c ccid_usb.h commands.c commands.h 
Log Message:
use reader_index instead of lun as reader identification


Index: ccid.c
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- ccid.c	21 Jul 2004 09:01:11 -0000	1.10
+++ ccid.c	28 Jul 2004 08:33:17 -0000	1.11
@@ -37,9 +37,9 @@
  *					ccid_open_hack
  *
  ****************************************************************************/
-int ccid_open_hack(unsigned int lun)
+int ccid_open_hack(unsigned int reader_index)
 {
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	switch (ccid_descriptor->readerID)
 	{
@@ -62,7 +62,7 @@
 				unsigned char res[10];
 				unsigned int length_res = sizeof(res);
 
-				if (CmdEscape(lun, cmd, sizeof(cmd)-1, res, &length_res) == IFD_SUCCESS)
+				if (CmdEscape(reader_index, cmd, sizeof(cmd)-1, res, &length_res) == IFD_SUCCESS)
 				{
 					ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK;
 					ccid_descriptor->dwFeatures |= CCID_CLASS_SHORT_APDU;
@@ -85,8 +85,8 @@
 				unsigned char res[20];
 				unsigned int length_res = sizeof(res);
 
-				if ((IFD_SUCCESS == CmdEscape(lun, cmd1, sizeof(cmd1), res, &length_res))
-					&& (IFD_SUCCESS == CmdEscape(lun, cmd2, sizeof(cmd2), res, &length_res)))
+				if ((IFD_SUCCESS == CmdEscape(reader_index, cmd1, sizeof(cmd1), res, &length_res))
+					&& (IFD_SUCCESS == CmdEscape(reader_index, cmd2, sizeof(cmd2), res, &length_res)))
 				{
 					DEBUG_COMM("SCM SCR331-DI contactless detected");
 				}

Index: ccid.h
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- ccid.h	21 Jul 2004 08:56:56 -0000	1.11
+++ ccid.h	28 Jul 2004 08:33:18 -0000	1.12
@@ -113,9 +113,9 @@
 #define ESC_GEMPC_SET_APDU_MODE		2
 
 
-int ccid_open_hack(unsigned int lun);
+int ccid_open_hack(unsigned int reader_index);
 void ccid_error(int error, char *file, int line, char *function);
-_ccid_descriptor *get_ccid_descriptor(unsigned int lun);
+_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index);
 
 /* convert a 4 byte integer in USB format into an int */
 #define dw2i(a, x) ((((((a[x+3] << 8) + a[x+2]) << 8) + a[x+1]) << 8) + a[x])

Index: ccid_ifdhandler.h
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid_ifdhandler.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- ccid_ifdhandler.h	16 Jul 2004 06:53:25 -0000	1.11
+++ ccid_ifdhandler.h	28 Jul 2004 08:33:18 -0000	1.12
@@ -48,7 +48,7 @@
 /*
  * CCID driver specific functions
  */
-CcidDesc *get_ccid_slot(unsigned int lun);
+CcidDesc *get_ccid_slot(unsigned int reader_index);
 
 #endif
 

Index: ccid_serial.c
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid_serial.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- ccid_serial.c	26 Jul 2004 09:16:16 -0000	1.26
+++ ccid_serial.c	28 Jul 2004 08:33:18 -0000	1.27
@@ -138,10 +138,11 @@
 static _serialDevice serialDevice[CCID_DRIVER_MAX_READERS];
 
 /* unexported functions */
-static int ReadChunk(unsigned int lun, unsigned char *buffer, int buffer_length,
-	int min_length);
+static int ReadChunk(unsigned int reader_index, unsigned char *buffer,
+	int buffer_length, int min_length);
 
-static int get_bytes(unsigned int lun, unsigned char *buffer, int length);
+static int get_bytes(unsigned int reader_index, unsigned char *buffer,
+	int length);
 
 
 /*****************************************************************************
@@ -149,7 +150,8 @@
  *				WriteSerial: Send bytes to the card reader
  *
  *****************************************************************************/
-status_t WriteSerial(unsigned int lun, unsigned int length, unsigned char *buffer)
+status_t WriteSerial(unsigned int reader_index, unsigned int length,
+	unsigned char *buffer)
 {
 	int i;
 	unsigned char lrc;
@@ -158,7 +160,7 @@
 #ifdef DEBUG_LEVEL_COMM
 	char debug_header[] = "-> 123456 ";
 
-	sprintf(debug_header, "-> %06X ", lun);
+	sprintf(debug_header, "-> %06X ", reader_index);
 #endif
 
 	if (length > GEMPCTWIN_MAXBUF-3)
@@ -185,7 +187,7 @@
 	DEBUG_XXD(debug_header, low_level_buffer, length+3);
 #endif
 
-	if (write(serialDevice[LunToReaderIndex(lun)].fd, low_level_buffer,
+	if (write(serialDevice[reader_index].fd, low_level_buffer,
 		length+3) != length+3)
 	{
 		DEBUG_CRITICAL2("write error: %s", strerror(errno));
@@ -201,8 +203,8 @@
  *				ReadSerial: Receive bytes from the card reader
  *
  *****************************************************************************/
-status_t ReadSerial(unsigned int lun, /*@unused@*/ unsigned int *length,
-	unsigned char *buffer)
+status_t ReadSerial(unsigned int reader_index,
+	/*@unused@*/ unsigned int *length, unsigned char *buffer)
 {
 	unsigned char c;
 	int rv;
@@ -215,7 +217,7 @@
 
 start:
 	DEBUG_COMM("start");
-	if ((rv = get_bytes(lun, &c, 1)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS)
 		return rv;
 
 	if (c == RDR_to_PC_NotifySlotChange)
@@ -235,7 +237,7 @@
 
 slot_change:
 	DEBUG_COMM("slot change");
-	if ((rv = get_bytes(lun, &c, 1)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS)
 		return rv;
 
 	if (c == CARD_ABSENT)
@@ -255,7 +257,7 @@
 
 sync:
 	DEBUG_COMM("sync");
-	if ((rv = get_bytes(lun, &c, 1)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS)
 		return rv;
 
 	if (c == CTRL_ACK)
@@ -269,7 +271,7 @@
 
 nak:
 	DEBUG_COMM("nak");
-	if ((rv = get_bytes(lun, &c, 1)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS)
 		return rv;
 
 	if (c != (SYNC ^ CTRL_NAK))
@@ -283,14 +285,14 @@
 ack:
 	DEBUG_COMM("ack");
 	/* normal CCID frame */
-	if ((rv = get_bytes(lun, buffer, 5)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, buffer, 5)) != STATUS_SUCCESS)
 		return rv;
 
 	/* total frame size */
 	to_read = 10+dw2i(buffer, 1);
 
 	DEBUG_COMM2("frame size: %d", to_read);
-	if ((rv = get_bytes(lun, buffer+5, to_read-5)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, buffer+5, to_read-5)) != STATUS_SUCCESS)
 		return rv;
 
 #ifdef DEBUG_LEVEL_COMM
@@ -299,7 +301,7 @@
 
 	/* lrc */
 	DEBUG_COMM("lrc");
-	if ((rv = get_bytes(lun, &c, 1)) != STATUS_SUCCESS)
+	if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS)
 		return rv;
 
 	DEBUG_COMM2("lrc: 0x%02X", c);
@@ -324,10 +326,10 @@
  *				get_bytes: get n bytes
  *
  *****************************************************************************/
-int get_bytes(unsigned int lun, unsigned char *buffer, int length)
+int get_bytes(unsigned int reader_index, unsigned char *buffer, int length)
 {
-	int offset = serialDevice[LunToReaderIndex(lun)].buffer_offset;
-	int offset_last = serialDevice[LunToReaderIndex(lun)].buffer_offset_last;
+	int offset = serialDevice[reader_index].buffer_offset;
+	int offset_last = serialDevice[reader_index].buffer_offset_last;
 
 	DEBUG_COMM3("available: %d, needed: %d", offset_last-offset,
 		length);
@@ -335,8 +337,8 @@
 	if (offset + length <= offset_last)
 	{
 		DEBUG_COMM("data available");
-		memcpy(buffer, serialDevice[LunToReaderIndex(lun)].buffer + offset, length);
-		serialDevice[LunToReaderIndex(lun)].buffer_offset += length;
+		memcpy(buffer, serialDevice[reader_index].buffer + offset, length);
+		serialDevice[reader_index].buffer_offset += length;
 	}
 	else
 	{
@@ -348,24 +350,25 @@
 		if (present > 0)
 		{
 			DEBUG_COMM2("some data available: %d", present);
-			memcpy(buffer, serialDevice[LunToReaderIndex(lun)].buffer + offset,
+			memcpy(buffer, serialDevice[reader_index].buffer + offset,
 				present);
 		}
 
 		/* get fresh data */
 		DEBUG_COMM2("get more data: %d", length - present);
-		rv = ReadChunk(lun, serialDevice[LunToReaderIndex(lun)].buffer, sizeof(serialDevice[LunToReaderIndex(lun)].buffer), length - present);
+		rv = ReadChunk(reader_index, serialDevice[reader_index].buffer,
+			sizeof(serialDevice[reader_index].buffer), length - present);
 		if (rv < 0)
 			return STATUS_COMM_ERROR;
 
 		/* fill the buffer */
-		memcpy(buffer + present, serialDevice[LunToReaderIndex(lun)].buffer,
+		memcpy(buffer + present, serialDevice[reader_index].buffer,
 			length - present);
-		serialDevice[LunToReaderIndex(lun)].buffer_offset = length - present;
-		serialDevice[LunToReaderIndex(lun)].buffer_offset_last = rv;
+		serialDevice[reader_index].buffer_offset = length - present;
+		serialDevice[reader_index].buffer_offset_last = rv;
 		DEBUG_COMM3("offset: %d, last_offset: %d",
-			serialDevice[LunToReaderIndex(lun)].buffer_offset,
-			serialDevice[LunToReaderIndex(lun)].buffer_offset_last);
+			serialDevice[reader_index].buffer_offset,
+			serialDevice[reader_index].buffer_offset_last);
 	}
 
 	return STATUS_SUCCESS;
@@ -377,10 +380,10 @@
  *				ReadChunk: read a minimum number of bytes
  *
  *****************************************************************************/
-static int ReadChunk(unsigned int lun, unsigned char *buffer,
+static int ReadChunk(unsigned int reader_index, unsigned char *buffer,
 	int buffer_length, int min_length)
 {
-	int fd = serialDevice[LunToReaderIndex(lun)].fd;
+	int fd = serialDevice[reader_index].fd;
 # ifndef S_SPLINT_S
 	fd_set fdset;
 # endif
@@ -390,7 +393,7 @@
 #ifdef DEBUG_LEVEL_COMM
 	char debug_header[] = "<- 123456 ";
 
-	sprintf(debug_header, "<- %06X ", lun);
+	sprintf(debug_header, "<- %06X ", reader_index);
 #endif
 
 	already_read = 0;
@@ -440,11 +443,11 @@
  *				OpenSerial: open the port
  *
  *****************************************************************************/
-status_t OpenSerial(unsigned int lun, int channel)
+status_t OpenSerial(unsigned int reader_index, int channel)
 {
 	char dev_name[FILENAME_MAX];
 
-	DEBUG_COMM3("Lun: %X, Channel: %d", lun, channel);
+	DEBUG_COMM3("Reader index: %X, Channel: %d", reader_index, channel);
 
 	/*
 	 * Conversion of old-style ifd-hanler 1.0 CHANNELID 
@@ -469,7 +472,7 @@
 
 	sprintf(dev_name, "/dev/pcsc/%d", (int) channel);
 
-	return OpenSerialByName(lun, dev_name);
+	return OpenSerialByName(reader_index, dev_name);
 } /* OpenSerial */
 
 /*****************************************************************************
@@ -477,13 +480,13 @@
  *				OpenSerialByName: open the port
  *
  *****************************************************************************/
-status_t OpenSerialByName(unsigned int lun, char *dev_name)
+status_t OpenSerialByName(unsigned int reader_index, char *dev_name)
 {
 	struct termios current_termios;
 	int i;
-	unsigned int reader = LunToReaderIndex(lun);
+	unsigned int reader = reader_index;
 
-	DEBUG_COMM3("Lun: %X, Device: %d", lun, dev_name);
+	DEBUG_COMM3("Reader index: %X, Device: %d", reader_index, dev_name);
 
 	/* check if the same channel is not already used */
 	for (i=0; i<CCID_DRIVER_MAX_READERS; i++)
@@ -570,7 +573,7 @@
 		unsigned char rx_buffer[50];
 		unsigned int rx_length = sizeof(rx_buffer);
 
-		if (IFD_SUCCESS != CmdEscape(lun, tx_buffer, sizeof(tx_buffer),
+		if (IFD_SUCCESS != CmdEscape(reader_index, tx_buffer, sizeof(tx_buffer),
 			rx_buffer, &rx_length))
 		{
 			DEBUG_CRITICAL("Get firmware failed. Maybe the reader is not co,,ected");
@@ -590,9 +593,9 @@
  *				CloseSerial: close the port
  *
  *****************************************************************************/
-status_t CloseSerial(unsigned int lun)
+status_t CloseSerial(unsigned int reader_index)
 {
-	unsigned int reader = LunToReaderIndex(lun);
+	unsigned int reader = reader_index;
 
 	close(serialDevice[reader].fd);
 	serialDevice[reader].fd = -1;
@@ -609,9 +612,9 @@
  *					get_ccid_descriptor
  *
  ****************************************************************************/
-_ccid_descriptor *get_ccid_descriptor(unsigned int lun)
+_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index)
 {
-	return &serialDevice[LunToReaderIndex(lun)].ccid;
+	return &serialDevice[reader_index].ccid;
 } /* get_ccid_descriptor */
 
 

Index: ccid_serial.h
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid_serial.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- ccid_serial.h	9 Jul 2004 08:40:15 -0000	1.6
+++ ccid_serial.h	28 Jul 2004 08:33:18 -0000	1.7
@@ -21,15 +21,15 @@
  * $Id$
  */
 
-status_t OpenSerial(unsigned int lun, int channel);
+status_t OpenSerial(unsigned int reader_index, int channel);
 
-status_t OpenSerialByName(unsigned int lun, char *dev_name);
+status_t OpenSerialByName(unsigned int reader_index, char *dev_name);
 
-status_t WriteSerial(unsigned int lun, unsigned int length, unsigned char
-	*Buffer);
+status_t WriteSerial(unsigned int reader_index, unsigned int length,
+	unsigned char *Buffer);
 
-status_t ReadSerial(unsigned int lun, unsigned int *length, unsigned char
-	*Buffer);
+status_t ReadSerial(unsigned int reader_index, unsigned int *length,
+	unsigned char *Buffer);
 
-status_t CloseSerial(unsigned int lun);
+status_t CloseSerial(unsigned int reader_index);
 

Index: ccid_usb.c
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid_usb.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- ccid_usb.c	26 Jul 2004 09:16:16 -0000	1.35
+++ ccid_usb.c	28 Jul 2004 08:33:18 -0000	1.36
@@ -96,9 +96,9 @@
  *					OpenUSB
  *
  ****************************************************************************/
-status_t OpenUSB(unsigned int lun, /*@unused@*/ int Channel)
+status_t OpenUSB(unsigned int reader_index, /*@unused@*/ int Channel)
 {
-	return OpenUSBByName(lun, NULL);
+	return OpenUSBByName(reader_index, NULL);
 } /* OpenUSB */
 
 
@@ -107,10 +107,9 @@
  *					OpenUSBByName
  *
  ****************************************************************************/
-status_t OpenUSBByName(unsigned int lun, /*@null@*/ char *device)
+status_t OpenUSBByName(unsigned int reader_index, /*@null@*/ char *device)
 {
 	static struct usb_bus *busses = NULL;
-	unsigned int reader = LunToReaderIndex(lun);
 	int alias = 0;
 	struct usb_bus *bus;
 	struct usb_dev_handle *dev_handle;
@@ -120,7 +119,7 @@
 	unsigned int device_vendor, device_product;
 	char *dirname = NULL, *filename = NULL;
 
-	DEBUG_COMM3("Lun: %X, Device: %s", lun, device);
+	DEBUG_COMM3("Reader index: %X, Device: %s", reader_index, device);
 
 	/* device name specified */
 	if (device)
@@ -181,10 +180,11 @@
 		return STATUS_UNSUCCESSFUL;
 	}
 
-	/* is the lun already used? */
-	if (usbDevice[reader].handle != NULL)
+	/* is the reader_index already used? */
+	if (usbDevice[reader_index].handle != NULL)
 	{
-		DEBUG_CRITICAL2("USB driver with lun %X already in use", lun);
+		DEBUG_CRITICAL2("USB driver with index %X already in use",
+			reader_index);
 		return STATUS_UNSUCCESSFUL;
 	}
 
@@ -333,33 +333,33 @@
 						 bus->dirname, dev->filename);
 
 					/* Get Endpoints values*/
-					get_end_points(dev, &usbDevice[reader]);
+					get_end_points(dev, &usbDevice[reader_index]);
 
 					/* store device information */
-					usbDevice[reader].handle = dev_handle;
-					usbDevice[reader].dev = dev;
+					usbDevice[reader_index].handle = dev_handle;
+					usbDevice[reader_index].dev = dev;
 
 					/* CCID common informations */
-					usbDevice[reader].ccid.bSeq = 0;
-					usbDevice[reader].ccid.readerID =
+					usbDevice[reader_index].ccid.bSeq = 0;
+					usbDevice[reader_index].ccid.readerID =
 						(dev->descriptor.idVendor << 16) +
 						dev->descriptor.idProduct;
-					usbDevice[reader].ccid.dwFeatures = dw2i(usb_interface->altsetting->extra, 40);
-					usbDevice[reader].ccid.bPINSupport = usb_interface->altsetting->extra[52];
-					usbDevice[reader].ccid.dwMaxCCIDMessageLength = dw2i(usb_interface->altsetting->extra, 44);
-					usbDevice[reader].ccid.dwMaxIFSD = dw2i(usb_interface->altsetting->extra, 28);
-					usbDevice[reader].ccid.dwDefaultClock = dw2i(usb_interface->altsetting->extra, 10);
-					usbDevice[reader].ccid.dwMaxDataRate = dw2i(usb_interface->altsetting->extra, 23);
-					usbDevice[reader].ccid.bMaxSlotIndex = usb_interface->altsetting->extra[4];
-					usbDevice[reader].ccid.bCurrentSlotIndex = 0;
-					usbDevice[reader].ccid.defaultFeatures = usbDevice[reader].ccid.dwFeatures;
+					usbDevice[reader_index].ccid.dwFeatures = dw2i(usb_interface->altsetting->extra, 40);
+					usbDevice[reader_index].ccid.bPINSupport = usb_interface->altsetting->extra[52];
+					usbDevice[reader_index].ccid.dwMaxCCIDMessageLength = dw2i(usb_interface->altsetting->extra, 44);
+					usbDevice[reader_index].ccid.dwMaxIFSD = dw2i(usb_interface->altsetting->extra, 28);
+					usbDevice[reader_index].ccid.dwDefaultClock = dw2i(usb_interface->altsetting->extra, 10);
+					usbDevice[reader_index].ccid.dwMaxDataRate = dw2i(usb_interface->altsetting->extra, 23);
+					usbDevice[reader_index].ccid.bMaxSlotIndex = usb_interface->altsetting->extra[4];
+					usbDevice[reader_index].ccid.bCurrentSlotIndex = 0;
+					usbDevice[reader_index].ccid.defaultFeatures = usbDevice[reader_index].ccid.dwFeatures;
 					goto end;
 				}
 			}
 		}
 	}
 end:
-	if (usbDevice[reader].handle == NULL)
+	if (usbDevice[reader_index].handle == NULL)
 		return STATUS_UNSUCCESSFUL;
 
 	return STATUS_SUCCESS;
@@ -371,28 +371,29 @@
  *					WriteUSB
  *
  ****************************************************************************/
-status_t WriteUSB(unsigned int lun, unsigned int length, unsigned char *buffer)
+status_t WriteUSB(unsigned int reader_index, unsigned int length,
+	unsigned char *buffer)
 {
 	int rv;
-	unsigned int reader = LunToReaderIndex(lun);
 #ifdef DEBUG_LEVEL_COMM
 	char debug_header[] = "-> 121234 ";
 
-	sprintf(debug_header, "-> %06X ", (int)lun);
+	sprintf(debug_header, "-> %06X ", (int)reader_index);
 #endif
 
 #ifdef DEBUG_LEVEL_COMM
 	DEBUG_XXD(debug_header, buffer, length);
 #endif
 
-	rv = usb_bulk_write(usbDevice[reader].handle, usbDevice[reader].bulk_out,
-		(char *)buffer, length, USB_WRITE_TIMEOUT);
+	rv = usb_bulk_write(usbDevice[reader_index].handle,
+		usbDevice[reader_index].bulk_out, (char *)buffer, length,
+		USB_WRITE_TIMEOUT);
 
 	if (rv < 0)
 	{
 		DEBUG_CRITICAL4("usb_bulk_write(%s/%s): %s",
-			usbDevice[reader].dev->bus->dirname,
-			usbDevice[reader].dev->filename, strerror(errno));
+			usbDevice[reader_index].dev->bus->dirname,
+			usbDevice[reader_index].dev->filename, strerror(errno));
 		return STATUS_UNSUCCESSFUL;
 	}
 
@@ -405,25 +406,26 @@
  *					ReadUSB
  *
  ****************************************************************************/
-status_t ReadUSB(unsigned int lun, unsigned int * length, unsigned char *buffer)
+status_t ReadUSB(unsigned int reader_index, unsigned int * length,
+	unsigned char *buffer)
 {
 	int rv;
-	unsigned int reader = LunToReaderIndex(lun);
 #ifdef DEBUG_LEVEL_COMM
 	char debug_header[] = "<- 121234 ";
 
-	sprintf(debug_header, "<- %06X ", (int)lun);
+	sprintf(debug_header, "<- %06X ", (int)reader_index);
 #endif
 
-	rv = usb_bulk_read(usbDevice[reader].handle, usbDevice[reader].bulk_in,
-		(char *)buffer, *length, USB_READ_TIMEOUT);
+	rv = usb_bulk_read(usbDevice[reader_index].handle,
+		usbDevice[reader_index].bulk_in, (char *)buffer, *length,
+		USB_READ_TIMEOUT);
 
 	if (rv < 0)
 	{
 		*length = 0;
 		DEBUG_CRITICAL4("usb_bulk_read(%s/%s): %s",
-			usbDevice[reader].dev->bus->dirname,
-			usbDevice[reader].dev->filename, strerror(errno));
+			usbDevice[reader_index].dev->bus->dirname,
+			usbDevice[reader_index].dev->filename, strerror(errno));
 		return STATUS_UNSUCCESSFUL;
 	}
 
@@ -442,33 +444,33 @@
  *					CloseUSB
  *
  ****************************************************************************/
-status_t CloseUSB(unsigned int lun)
+status_t CloseUSB(unsigned int reader_index)
 {
 	struct usb_interface *usb_interface;
 	int interface;
-	unsigned int reader = LunToReaderIndex(lun);
 
 	/* device not opened */
-	if (usbDevice[reader].dev == NULL)
+	if (usbDevice[reader_index].dev == NULL)
 		return STATUS_UNSUCCESSFUL;
 
 	DEBUG_COMM3("Closing USB device: %s/%s",
-		usbDevice[reader].dev->bus->dirname, usbDevice[reader].dev->filename);
+		usbDevice[reader_index].dev->bus->dirname,
+		usbDevice[reader_index].dev->filename);
 
-  	usb_interface = get_ccid_usb_interface(usbDevice[reader].dev);
+  	usb_interface = get_ccid_usb_interface(usbDevice[reader_index].dev);
 	interface = usb_interface ?
 		usb_interface->altsetting->bInterfaceNumber :
-		usbDevice[reader].dev->config->interface->altsetting->bInterfaceNumber;
+		usbDevice[reader_index].dev->config->interface->altsetting->bInterfaceNumber;
 	
 	/* reset so that bSeq starts at 0 again */
-	usb_reset(usbDevice[reader].handle);
+	usb_reset(usbDevice[reader_index].handle);
 
-	usb_release_interface(usbDevice[reader].handle, interface);
-	usb_close(usbDevice[reader].handle);
+	usb_release_interface(usbDevice[reader_index].handle, interface);
+	usb_close(usbDevice[reader_index].handle);
 
 	/* mark the resource unused */
-	usbDevice[reader].handle = NULL;
-	usbDevice[reader].dev = NULL;
+	usbDevice[reader_index].handle = NULL;
+	usbDevice[reader_index].dev = NULL;
 
 	return STATUS_SUCCESS;
 } /* CloseUSB */
@@ -479,9 +481,9 @@
  *					get_ccid_descriptor
  *
  ****************************************************************************/
-_ccid_descriptor *get_ccid_descriptor(unsigned int lun)
+_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index)
 {
-	return &usbDevice[LunToReaderIndex(lun)].ccid;
+	return &usbDevice[reader_index].ccid;
 } /* get_ccid_descriptor */
 
 

Index: ccid_usb.h
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid_usb.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- ccid_usb.h	9 Jul 2004 13:23:37 -0000	1.10
+++ ccid_usb.h	28 Jul 2004 08:33:18 -0000	1.11
@@ -21,15 +21,17 @@
  * $Id$
  */
 
-status_t OpenUSB(unsigned int lun, int channel);
+status_t OpenUSB(unsigned int reader_index, int channel);
 
-status_t OpenUSBByName(unsigned int lun, /*@null@*/ char *device);
+status_t OpenUSBByName(unsigned int reader_index, /*@null@*/ char *device);
 
-status_t WriteUSB(unsigned int lun, unsigned int length, unsigned char *Buffer);
+status_t WriteUSB(unsigned int reader_index, unsigned int length,
+	unsigned char *Buffer);
 
-status_t ReadUSB(unsigned int lun, unsigned int *length, unsigned char *Buffer);
+status_t ReadUSB(unsigned int reader_index, unsigned int *length,
+	unsigned char *Buffer);
 
-status_t CloseUSB(unsigned int lun);
+status_t CloseUSB(unsigned int reader_index);
 
 #ifdef __USB_H__
 int get_desc(int channel, usb_dev_handle **handle, struct usb_device **dev);

Index: commands.c
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/commands.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- commands.c	21 Jul 2004 09:00:09 -0000	1.26
+++ commands.c	28 Jul 2004 08:33:18 -0000	1.27
@@ -48,12 +48,12 @@
 #define DEFAULT_VOLTAGE 1 /* start with 5 volts */
 
 /* internal functions */
-static RESPONSECODE CmdXfrBlockTPDU_T0(unsigned int lun, unsigned int tx_length,
-	unsigned char tx_buffer[], unsigned int *rx_length,
+static RESPONSECODE CmdXfrBlockTPDU_T0(unsigned int reader_index,
+	unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
 	unsigned char rx_buffer[]);
 
-static RESPONSECODE CmdXfrBlockTPDU_T1(unsigned int lun, unsigned int tx_length,
-	unsigned char tx_buffer[], unsigned int *rx_length,
+static RESPONSECODE CmdXfrBlockTPDU_T1(unsigned int reader_index,
+	unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
 	unsigned char rx_buffer[]);
 
 static void i2dw(int value, unsigned char *buffer);
@@ -64,14 +64,14 @@
  *					CmdPowerOn
  *
  ****************************************************************************/
-RESPONSECODE CmdPowerOn(unsigned int lun, unsigned int * nlength,
+RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
 	unsigned char buffer[])
 {
 	unsigned char cmd[10];
 	status_t res;
 	int atr_len, length, count = 1;
 	RESPONSECODE return_value = IFD_SUCCESS;
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 	char voltage;
 
 	/* store length of buffer[] */
@@ -90,7 +90,7 @@
 	cmd[7] = voltage;
 	cmd[8] = cmd[9] = 0; /* RFU */
 
-	res = WritePort(lun, sizeof(cmd), cmd);
+	res = WritePort(reader_index, sizeof(cmd), cmd);
 	if (res != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
@@ -98,7 +98,7 @@
 	/* needed if we go back after a switch to ISO mode */
 	*nlength = length;
 
-	res = ReadPort(lun, nlength, buffer);
+	res = ReadPort(reader_index, nlength, buffer);
 	if (res != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
@@ -114,7 +114,7 @@
 			unsigned char res[1];
 			unsigned int res_length = sizeof(res);
 
-			if ((return_value = CmdEscape(lun, cmd, sizeof(cmd)-1, res,
+			if ((return_value = CmdEscape(reader_index, cmd, sizeof(cmd)-1, res,
 				&res_length)) != IFD_SUCCESS)
 				return return_value;
 
@@ -153,11 +153,13 @@
  *					SecurePIN
  *
  ****************************************************************************/
-RESPONSECODE SecurePIN(unsigned int lun, const unsigned char TxBuffer[],
-	unsigned int TxLength, unsigned char RxBuffer[], unsigned int *RxLength)
+RESPONSECODE SecurePIN(unsigned int reader_index,
+	const unsigned char TxBuffer[], unsigned int TxLength,
+	unsigned char RxBuffer[], unsigned int *RxLength)
+
 {
 	unsigned char cmd[11+14+CMD_BUF_SIZE];
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 	int length = 0;
 
 	/* PIN verification data structure WITHOUT TeoPrologue */
@@ -207,10 +209,10 @@
 	cmd[9] = 0;
 	cmd[10] = 0;	/* bPINOperation: PIN Verification */
 
-	if (WritePort(lun, length, cmd) != STATUS_SUCCESS)
+	if (WritePort(reader_index, length, cmd) != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
-	return CCID_Receive(lun, RxLength, RxBuffer);
+	return CCID_Receive(reader_index, RxLength, RxBuffer);
 } /* SecurePIN */
 
 
@@ -219,14 +221,15 @@
  *					Escape
  *
  ****************************************************************************/
-RESPONSECODE CmdEscape(unsigned int lun, const unsigned char TxBuffer[],
-	unsigned int TxLength, unsigned char RxBuffer[], unsigned int *RxLength)
+RESPONSECODE CmdEscape(unsigned int reader_index,
+	const unsigned char TxBuffer[], unsigned int TxLength,
+	unsigned char RxBuffer[], unsigned int *RxLength)
 {
 	unsigned char *cmd_in, *cmd_out;
 	status_t res;
 	unsigned int length_in, length_out;
 	RESPONSECODE return_value = IFD_SUCCESS;
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	/* allocate buffers */
 	length_in = 10 + TxLength;
@@ -249,7 +252,7 @@
 	/* copy the command */
 	memcpy(&cmd_in[10], TxBuffer, TxLength);
 
-	res = WritePort(lun, length_in, cmd_in);
+	res = WritePort(reader_index, length_in, cmd_in);
 	free(cmd_in);
 	if (res != STATUS_SUCCESS)
 	{
@@ -257,7 +260,7 @@
 		return IFD_COMMUNICATION_ERROR;
 	}
 
-	res = ReadPort(lun, &length_out, cmd_out);
+	res = ReadPort(reader_index, &length_out, cmd_out);
 	if (res != STATUS_SUCCESS)
 	{
 		free(cmd_out);
@@ -288,13 +291,13 @@
  *					CmdPowerOff
  *
  ****************************************************************************/
-RESPONSECODE CmdPowerOff(unsigned int lun)
+RESPONSECODE CmdPowerOff(unsigned int reader_index)
 {
 	unsigned char cmd[10];
 	status_t res;
 	unsigned int length;
 	RESPONSECODE return_value = IFD_SUCCESS;
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	cmd[0] = 0x63; /* IccPowerOff */
 	cmd[1] = cmd[2] = cmd[3] = cmd[4] = 0;	/* dwLength */
@@ -302,12 +305,12 @@
 	cmd[6] = ccid_descriptor->bSeq++;
 	cmd[7] = cmd[8] = cmd[9] = 0; /* RFU */
 
-	res = WritePort(lun, sizeof(cmd), cmd);
+	res = WritePort(reader_index, sizeof(cmd), cmd);
 	if (res != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
 	length = sizeof(cmd);
-	res = ReadPort(lun, &length, cmd);
+	res = ReadPort(reader_index, &length, cmd);
 	if (res != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
@@ -326,13 +329,13 @@
  *					CmdGetSlotStatus
  *
  ****************************************************************************/
-RESPONSECODE CmdGetSlotStatus(unsigned int lun, unsigned char buffer[])
+RESPONSECODE CmdGetSlotStatus(unsigned int reader_index, unsigned char buffer[])
 {
 	unsigned char cmd[10];
 	status_t res;
 	unsigned int length;
 	RESPONSECODE return_value = IFD_SUCCESS;
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	cmd[0] = 0x65; /* GetSlotStatus */
 	cmd[1] = cmd[2] = cmd[3] = cmd[4] = 0;	/* dwLength */
@@ -340,12 +343,12 @@
 	cmd[6] = ccid_descriptor->bSeq++;
 	cmd[7] = cmd[8] = cmd[9] = 0; /* RFU */
 
-	res = WritePort(lun, sizeof(cmd), cmd);
+	res = WritePort(reader_index, sizeof(cmd), cmd);
 	if (res != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
 	length = SIZE_GET_SLOT_STATUS;
-	res = ReadPort(lun, &length, buffer);
+	res = ReadPort(reader_index, &length, buffer);
 	if (res != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
@@ -364,12 +367,12 @@
  *					CmdXfrBlock
  *
  ****************************************************************************/
-RESPONSECODE CmdXfrBlock(unsigned int lun, unsigned int tx_length,
+RESPONSECODE CmdXfrBlock(unsigned int reader_index, unsigned int tx_length,
 	unsigned char tx_buffer[], unsigned int *rx_length,
 	unsigned char rx_buffer[], int protocol)
 {
 	RESPONSECODE return_value = IFD_SUCCESS;
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	/* command length too big for CCID reader? */
 	if (tx_length > ccid_descriptor->dwMaxCCIDMessageLength)
@@ -394,11 +397,11 @@
 	{
 		case CCID_CLASS_TPDU:
 			if (protocol == T_0)
-				return_value = CmdXfrBlockTPDU_T0(lun, tx_length, tx_buffer,
-					rx_length, rx_buffer);
+				return_value = CmdXfrBlockTPDU_T0(reader_index,
+					tx_length, tx_buffer, rx_length, rx_buffer);
 			else
 				if (protocol == T_1)
-					return_value = CmdXfrBlockTPDU_T1(lun, tx_length,
+					return_value = CmdXfrBlockTPDU_T1(reader_index, tx_length,
 						tx_buffer, rx_length, rx_buffer);
 				else
 					return_value = IFD_PROTOCOL_NOT_SUPPORTED;
@@ -408,8 +411,8 @@
 		case CCID_CLASS_EXTENDED_APDU:
 			/* We only support extended APDU if the reader can support the
 			 * command length. See test above */
-			return_value = CmdXfrBlockTPDU_T0(lun, tx_length, tx_buffer,
-				rx_length, rx_buffer);
+			return_value = CmdXfrBlockTPDU_T0(reader_index,
+				tx_length, tx_buffer, rx_length, rx_buffer);
 			break;
 
 		default:
@@ -427,11 +430,11 @@
  *					CCID_Transmit
  *
  ****************************************************************************/
-RESPONSECODE CCID_Transmit(unsigned int lun, unsigned int tx_length,
+RESPONSECODE CCID_Transmit(unsigned int reader_index, unsigned int tx_length,
 	const unsigned char tx_buffer[], unsigned char bBWI)
 {
 	unsigned char cmd[10+CMD_BUF_SIZE];	/* CCID + APDU buffer */
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	cmd[0] = 0x6F; /* XfrBlock */
 	i2dw(tx_length, cmd+1);	/* APDU length */
@@ -441,7 +444,7 @@
 	cmd[8] = cmd[9] = 0; /* RFU */
 	memcpy(cmd+10, tx_buffer, tx_length);
 
-	if (WritePort(lun, 10+tx_length, cmd) != STATUS_SUCCESS)
+	if (WritePort(reader_index, 10+tx_length, cmd) != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
 	return IFD_SUCCESS;
@@ -453,7 +456,7 @@
  *					CCID_Receive
  *
  ****************************************************************************/
-RESPONSECODE CCID_Receive(unsigned int lun, unsigned int *rx_length,
+RESPONSECODE CCID_Receive(unsigned int reader_index, unsigned int *rx_length,
 	unsigned char rx_buffer[])
 {
 	unsigned char cmd[10+CMD_BUF_SIZE];	/* CCID + APDU buffer */
@@ -461,7 +464,7 @@
 
 time_request:
 	length = sizeof(cmd);
-	if (ReadPort(lun, &length, cmd) != STATUS_SUCCESS)
+	if (ReadPort(reader_index, &length, cmd) != STATUS_SUCCESS)
 	{
 		*rx_length = 0;
 		return IFD_COMMUNICATION_ERROR;
@@ -499,19 +502,19 @@
  *					CmdXfrBlockTPDU_T0
  *
  ****************************************************************************/
-static RESPONSECODE CmdXfrBlockTPDU_T0(unsigned int lun, unsigned int tx_length,
-	unsigned char tx_buffer[], unsigned int *rx_length,
+static RESPONSECODE CmdXfrBlockTPDU_T0(unsigned int reader_index,
+	unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
 	unsigned char rx_buffer[])
 {
 	RESPONSECODE return_value = IFD_SUCCESS;
 
 	DEBUG_COMM2("T=0: %d bytes", tx_length);
 
-	return_value = CCID_Transmit(lun, tx_length, tx_buffer, 0);
+	return_value = CCID_Transmit(reader_index, tx_length, tx_buffer, 0);
 	if (return_value != IFD_SUCCESS)
 		return return_value;
 	
-	return CCID_Receive(lun, rx_length, rx_buffer);
+	return CCID_Receive(reader_index, rx_length, rx_buffer);
 } /* CmdXfrBlockTPDU_T0 */
 
 
@@ -520,8 +523,8 @@
  *					CmdXfrBlockTPDU_T1
  *
  ****************************************************************************/
-static RESPONSECODE CmdXfrBlockTPDU_T1(unsigned int lun, unsigned int tx_length,
-	unsigned char tx_buffer[], unsigned int *rx_length,
+static RESPONSECODE CmdXfrBlockTPDU_T1(unsigned int reader_index,
+	unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
 	unsigned char rx_buffer[])
 {
 	RESPONSECODE return_value = IFD_SUCCESS;
@@ -529,7 +532,8 @@
 
 	DEBUG_COMM2("T=1: %d bytes", tx_length);
 
-	ret = t1_transceive(&((get_ccid_slot(lun)) -> t1), 0, tx_buffer, tx_length, rx_buffer, *rx_length);
+	ret = t1_transceive(&((get_ccid_slot(reader_index)) -> t1), 0,
+		tx_buffer, tx_length, rx_buffer, *rx_length);
 
 	if (ret < 0)
 	{
@@ -548,11 +552,11 @@
  *					SetParameters
  *
  ****************************************************************************/
-RESPONSECODE SetParameters(unsigned int lun, char protocol, unsigned int length,
-	unsigned char buffer[])
+RESPONSECODE SetParameters(unsigned int reader_index, char protocol,
+	unsigned int length, unsigned char buffer[])
 {
 	unsigned char cmd[10+CMD_BUF_SIZE];	/* CCID + APDU buffer */
-	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(lun);
+	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
 
 	DEBUG_COMM2("length: %d bytes", length);
 
@@ -564,11 +568,11 @@
 	cmd[8] = cmd[9] = 0; /* RFU */
 	memcpy(cmd+10, buffer, length);
 
-	if (WritePort(lun, 10+length, cmd) != STATUS_SUCCESS)
+	if (WritePort(reader_index, 10+length, cmd) != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
 	length = sizeof(cmd);
-	if (ReadPort(lun, &length, cmd) != STATUS_SUCCESS)
+	if (ReadPort(reader_index, &length, cmd) != STATUS_SUCCESS)
 		return IFD_COMMUNICATION_ERROR;
 
 	if (cmd[STATUS_OFFSET] & CCID_COMMAND_FAILED)

Index: commands.h
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/commands.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- commands.h	15 Jul 2004 08:48:59 -0000	1.11
+++ commands.h	28 Jul 2004 08:33:18 -0000	1.12
@@ -25,29 +25,32 @@
 #define STATUS_OFFSET 7
 #define ERROR_OFFSET 8
 
-RESPONSECODE CmdPowerOn(unsigned int lun, unsigned int * nlength,
+RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
 	unsigned char buffer[]);
 
-RESPONSECODE SecurePIN(unsigned int lun, const unsigned char TxBuffer[],
-	unsigned int TxLength, unsigned char RxBuffer[], unsigned int *RxLength);
+RESPONSECODE SecurePIN(unsigned int reader_index,
+	const unsigned char TxBuffer[], unsigned int TxLength,
+	unsigned char RxBuffer[], unsigned int *RxLength);
 
-RESPONSECODE CmdEscape(unsigned int lun, const unsigned char TxBuffer[],
-	unsigned int TxLength, unsigned char RxBuffer[], unsigned int *RxLength);
+RESPONSECODE CmdEscape(unsigned int reader_index,
+	const unsigned char TxBuffer[], unsigned int TxLength,
+	unsigned char RxBuffer[], unsigned int *RxLength);
 
-RESPONSECODE CmdPowerOff(unsigned int lun);
+RESPONSECODE CmdPowerOff(unsigned int reader_index);
 
-RESPONSECODE CmdGetSlotStatus(unsigned int lun, unsigned char buffer[]);
+RESPONSECODE CmdGetSlotStatus(unsigned int reader_index,
+	unsigned char buffer[]);
 
-RESPONSECODE CmdXfrBlock(unsigned int lun, unsigned int tx_length,
+RESPONSECODE CmdXfrBlock(unsigned int reader_index, unsigned int tx_length,
 	unsigned char tx_buffer[], unsigned int *rx_length,
 	unsigned char rx_buffer[], int protoccol);
 
-RESPONSECODE CCID_Transmit(unsigned int lun, unsigned int tx_length,
+RESPONSECODE CCID_Transmit(unsigned int reader_index, unsigned int tx_length,
 	const unsigned char tx_buffer[], unsigned char bBWI);
 
-RESPONSECODE CCID_Receive(unsigned int lun, unsigned int *rx_length,
+RESPONSECODE CCID_Receive(unsigned int reader_index, unsigned int *rx_length,
 	unsigned char rx_buffer[]);
 
-RESPONSECODE SetParameters(unsigned int lun, char protocol, unsigned int length,
-	unsigned char buffer[]);
+RESPONSECODE SetParameters(unsigned int reader_index, char protocol,
+	unsigned int length, unsigned char buffer[]);