Hello, I got a mail from Dan Lukes with a patch for the ACR128U reader. The reader is not really CCID but not very far. I do not plan to integrate his patch in my CCID driver. But his patch may be useful for some people with a ACR128U reader.
His mail bellow: ----------------------------------------------------------- Hi. The story: I have ACS ACR128U reader http://www.acs.com.hk/index.php?pid=product&prod_sections=0&id=ACR128 This reader is NOT declared as CCID compatible device (it's older than first CCID standard). The vendor offer the ifd driver in source form. Unfortunately, those sources are rather old, so tied to old versions of supporting libraries (libusb) so it's harder and harder to compile it in current environment. I'm using it for nothing serious, it's my playtool, so instead of trashing it and buying something more current and CCID-compatible I decided to spent some time to it. I looked into vendor's driver sources - and - voila - its slightly modified libccid (1.3.11). So I created trivial patch into current version of libccid (1.4.2) and got working driver. My wishes have been fulfilled by it, but it's possible someone else may be interested also. ------------------ Such hardware is "almost CCID" device. It has been created before CCID become standard and despite it's still manufactured and sold, it has not been converted into true CCID even after protocol become standardized. Device has CCID-like descriptor (see attached output of 'param", note that 'param' has been slightly modified to show content of CCID descriptor despite of suchh device class) The deviations from standard are: 1. device class is 0x00, but 2. CCID descriptor has bogus bMaxSlotIndex and wLcdLayout The vendor's driver solve the problem by: 1. accepting device despite of it's class (based on vid/did) 2. ignore device supplied values in CCID descriptor and hardwire bMaxSlotIndex=2, wLcdLayout=0 in own sources ---------------------- I attached the patch containing required changes. It a) main change is related to src/ccid_usb.c, we need aa) correct improper values in CCID ab) accept device despite it's class b) add device description into readers/supported_readers.txt src/Info.plist c) slight change in parse.c, it will dump CCID descriptor not only for 0xFF class devices but for 0x00 also I assume you will reject the [ab] change and replace it with something less general. It's rather trivial change, but it require a decision - and I'm not sure what's the best way here. So it's up to your decision. -------------------------- I'm using modified driver just now. It's not so heavily tested, but I can read MF from the card, for example. With the knowledge of vendor sources I expect no problem (at least we should have no more issues than original vendor driver). Teh only feature I did not backported into your driver is vendor support for SAM slots. The vendor driver ======================================== Well, I know nothing about common practices and policies related to libccid notification, nor about your opinion about incorporating support for non-CCID devices into CCID driver. I'm not active member of relevant discussion list also. Please discard this email and ignore my offer/patches if not welcomed. It's entirely up to you. Best regards Dan P.S. vendor's driver contain the support for ACS ACR88U (072F:2011) also - it seems we need change few bogus items in supplied CCID descriptor, e.g. almost same correction as for ACR128U. But I have no such hardware, so I can't test it, so patches for such device are not included in attached patchset. -- Dr. Ludovic Rousseau
idVendor: 0x072F
iManufacturer: ACS
idProduct: 0x2100
iProduct: ACR128U
bcdDevice: 1.00 (firmware release?)
bLength: 9
bDescriptorType: 4
bInterfaceNumber: 0
bAlternateSetting: 0
bNumEndpoints: 3
bulk-IN, bulk-OUT and Interrupt-IN
bInterfaceClass: 0x00
NOT A CCID DEVICE
Class is 0x00 (proprietary)
bInterfaceSubClass: 0
bInterfaceProtocol: 0
bulk transfer, optional interrupt-IN (CCID)
iInterface:
CCID Class Descriptor
bLength: 0x36
bDescriptorType: 0x21
bcdCCID: 1.00
bMaxSlotIndex: 0x06
bVoltageSupport: 0x03
5.0V
3.0V
dwProtocols: 0x0000 0x0003
T=0
T=1
dwDefaultClock: 3.600 MHz
dwMaximumClock: 7.200 MHz
bNumClockSupported: 0 (will use whatever is returned)
Support 1800 kHz
Support 3600 kHz
Support 7200 kHz
dwDataRate: 9600 bps
dwMaxDataRate: 115200 bps
bNumDataRatesSupported: 0 (will use whatever is returned)
Support 9600 bps
Support 14400 bps
Support 19200 bps
Support 28800 bps
Support 38400 bps
Support 57600 bps
Support 115200 bps
dwMaxIFSD: 254
dwSynchProtocols: 0x00000000
dwMechanical: 0x00000000
No special characteristics
dwFeatures: 0x000200BA
....02 Automatic parameter configuration based on ATR data
....08 Automatic ICC voltage selection
....10 Automatic ICC clock frequency change according to parameters
....20 Automatic baud rate change according to frequency and Fi, Di params
....80 Automatic PPS made by the CCID
02.... Short APDU level exchange
dwMaxCCIDMessageLength: 271 bytes
bClassGetResponse: 0xFF
echoes the APDU class
bClassEnveloppe: 0xFF
echoes the APDU class
wLcdLayout: 0x0815
8 lines
21 characters per line
bPINSupport: 0x01
PIN Verification supported
bMaxCCIDBusySlots: 1
patch-ACS-CCID
Description: Binary data
_______________________________________________ Muscle mailing list [email protected] http://lists.drizzle.com/mailman/listinfo/muscle
