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