Parent Directory
|
Revision Log
| Links to HEAD: | (view) (download) (annotate) |
| Sticky Revision: |
OpenUSBByName(): use log level INFO instead of CRITICAL to display copyright information
release the allocated ressources only when the last slot of a multi-slot reader is closed
OpenUSBByName(): do not (re)set the usbDevice[].ccid.pbSeq field since we just copied the complete structure just before
remove #ifdef DEBUG_LEVEL_COMM since DEBUG_LEVEL_COMM is a numeric value and not a compilation flag anymore. Debug is always active and filtered by pcscd.
get_data_rates(): check the response size only if bNumDataRatesSupported is non zero
CloseUSB(): call usb_reset() only if DRIVER_OPTION_RESET_ON_CLOSE is set. The problem was that a device reset also disconnects the keyboard on a keyboard + reader device.
get_data_rates(): check that we do not get more data rates than the reader supports
OpenUSBByName(): call usb_close() if the device can't be used
OpenUSBByName(): vendorID, productID are unsigned avoids a "comparison between signed and unsigned" warning
WriteUSB(): do not parse usbDevice[reader_index].dev->bus if it is a NULL pointer (the device has been removed for example)
get_data_rates(): if the reader do not support GET DATA RATES we return NULL instead of a manually constructed/fake list
Open*ByName(): initialise dwMaxDataRate field
get_data_rates(): check that the reader sends a DATA RATES list size multiple of 4 othewise it is an error
Open*ByName: do not initialise the now disappeared .dwMaxDataRate field
get_data_rates(): if the CCID command GET DATA RATES is nto supported the array of supported rates contains only the default and max data rates
get_data_rates(): test if int_array is NULL (and not buffer)
get_data_rates(): use the real interface number instead of 0
get_data_rates(): buffer argument of usb_control_msg is (char *) and not (unsigned char *)
get_data_rates() returns an unsigned int [] (not just int [])
use the calculated read timeout instead of a fixed value
OpenUSBByName(): get the list of data rates the reader supports See 3.7.3 Get Data Rates (page 25) from CCID spec 1.00
change licence from GNU GPL to GNU LGPL
add an "interface field" in _usbDevice. This value is set in OpenUSB() and used in CloseUSB(). The struct usb_device structure is half "corrupted" after the USB device is removed and we wanted to use it when when closing the driver after a reader removal. This caused a crash with libusb 0.1.10.
Bogus_firmwares[]: add Kobil KAAN Base & KAAN Advanced readers
Bogus_firmwares[]: the 3 SMC readers had the same (cut-n-paste) USB identification
SPR 532 firmware previous to 5.04 is bogus regarding min/max pin lengths
check firmware version to avoid firmwares with bugs. You can still use a bigus firmware by setting DRIVER_OPTION_USE_BOGUS_FIRMWARE in Info.plist
the first argument of get_desc() is lun instead of channel and the function uses LunToReaderIndex() to get the reader index
get_ccid_usb_interface(): the O2Micro OZ776S reader has a wrong USB descriptor. The extra[] field is associated with the last endpoint instead of the main USB descriptor.
for multi-slots readers IFDHCreateChannel*()/OpenUSB is called for each slot. If we are opening a new slot of an already opened reader we reuse the same data (same libusb structures) and share the same pbSeq.
use pbSeq instead of bSeq
remove defaultFeatures management (was used for SCR331-DI hack)
use reader_index instead of lun as reader identification
initialise ccid.defaultFeatures field
initialise bMaxSlotIndex and ccid.bCurrentSlotIndex fields
OpenUSBByName(): use base 0 instead of 16 in strtoul() so that you can express the decimal value 15 as: 15 (decimal), 0xF (hex) or 017 (octal). It is not really needed since the reader descriptions in Info.plist are all in hex.
rename PCSCLITE_MAX_READERS in CCID_DRIVER_MAX_READERS This value is not defined by pcsc-lite but is internal to the CCID driver. By default pcsc-lite supports the same number of readers (16).
mark potentially null values as /*@null@*/ for splint
mark unused arguments as /*@unused@*/ for splint
include <sys/types.h> so splint can parse the file
lun is (unsigned int) so reader = LunToReaderIndex(lun) is also (unsigned int)
lun is (unsigned int) instead of (int) Avoid a warning by splint in #define LunToReaderIndex(Lun) (Lun>>16) Left operand of >> may be negative (int): lun >> 16
add support for SCardGetAttrib(.., IOCTL_SMARTCARD_VENDOR_VERIFY_PIN, ..) to know if the reader supports SCardControl(.., IOCTL_SMARTCARD_VENDOR_VERIFY_PIN, ..)
set length to 0 when a usb_bulk_read() error is returned
recompile using gcc -pedantic and correct: - some C++ syntax comments - many signedness "problems"
do not export get_end_points() declaration and make the function static
add support for the libusb naming scheme: usb:%04x/%04x:libusb:%s
add { } to avoid ambiguities now that DEBUG_* are "if (x) y" constructions
define ALLOW_PROPRIETARY_CLASS by default Proprietary USB Class (0xFF) are (or are not) accepted A proprietary class is used for devices released before the final CCID specifications were ready. We should not have problems with non CCID devices becasue the Manufacturer and Product ID are also used to identify the device */
allow proprietary CCID Class byte but only if ALLOW_PROPRIETARY_CLASS is defined. You should know what you do. Only useful for pre-CCID devices.
fill dwDefaultClock and dwMaxDataRate according to the reader descriptor
first bSeq is 0 (even if 1 works ok)
usb_reset() the device before usb_close()
add dwMaxIFSD field
- remove device_name[] from struct _usbDevice - use naming scheme usb:vendor/product - simplify (a bit) the code
use DEBUG_CRITICAL2() instead of DEBUG_CRITICAL()
add support of USB devices with multiple interfaces (like the Silitek SK-3105 keyboard)
add support of IFDHCreateChannelByName
call ccid_open_hack() in IFDHCreateChannel() instead of in each OpenPort()
remove function name from debug message since __FUNCTION__ is now used in DEBUG_* macro definition
the USB extra field length shall be exactly 54 bytes to be CCID.
add a test on the USB extra field length to avoid a crash and print an error message. This occurs when the reader is _not_ CCID and the CCID driver is used (wrong Info.plist for example).
read and write timeouts are not symmetric. write timout can be shorter since the reader and card is not supposed to do anything before receiving (write) a command.
correctly use the device name in a debug message instead of a not yet initialised field.
redesign to separate communication media and CCID protocol. call ccid_open_hack() upon open to do some reader dependent magic.
do not duplicate the Info.plist filename but "calculate" it once
use a 1 minute USB timeout instead of the 1 second used for debug
Initial revision
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.
| ViewVC Help | |
| Powered by ViewVC 1.1.5 |