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

Attachment: patch-ACS-CCID
Description: Binary data

_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle

Reply via email to