Hi, First, let me say that I have been using pcsc-lite and ccid for a while now and have found both to be excellent programs.
Now I am trying to use a Precise Biometrics Precise MC 200 reader to access a PIV card using a proprietary PIV middleware. The PIV card works fine using a different reader, but I am having problems with the MC 200: * The pivConnect call fails (I assume because the SCardConnect call has failed). * The reader blinks its red and green lights a few times and then seems to go offline -- I get USB errors with "Resource temporarily unavailable". I am using pcsc-lite and ccid on Ubuntu Lucid. Here are the package versions as reported by APT: pcsc-lite: 1.5.3-1ubuntu4.1 ccid: 1.3.11-1 Here is the output from pcscd (obtained using the instructions from http://pcsclite.alioth.debian.org/ccid.html#support). I tried to connect to the card twice. You can see the USB errors on the second attempt. -------------------------------------------------------------------------------- debuglog.c:224:DebugLogSetLevel() debug level=debug debuglog.c:253:DebugLogSetCategory() Debug options: APDU pcscdaemon.c:505:main() pcsc-lite 1.5.3 daemon ready. hotplug_libusb.c:403:HPEstablishUSBNotifications() Driver ifd-ccid.bundle does not support IFD_GENERATE_HOTPLUG. Using active polling instead. hotplug_libusb.c:412:HPEstablishUSBNotifications() Polling forced every 1 second(s) hotplug_libusb.c:477:HPAddHotPluggable() Adding USB device: 005:070 readerfactory.c:1024:RFInitializeReader() Attempting startup of Precise 200 MC (0016787745) 00 00 using /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so readerfactory.c:877:RFBindFunctions() Loading IFD Handler 3.0 ifdhandler.c:1532:init_driver() Driver version: 1.3.11 ifdhandler.c:1545:init_driver() LogLevel: 0x0003 ifdhandler.c:1555:init_driver() LogLevel from LIBCCID_ifdLogLevel: 0x0007 ifdhandler.c:1565:init_driver() DriverOptions: 0x0000 ifdhandler.c:82:IFDHCreateChannelByName() lun: 0, device: usb:08c3/0402:libusb:005:070 ccid_usb.c:162:OpenUSBByName() Reader index: 0, Device: usb:08c3/0402:libusb:005:070 ccid_usb.c:285:OpenUSBByName() Manufacturer: Ludovic Rousseau ([email protected]) ccid_usb.c:295:OpenUSBByName() ProductString: Generic CCID driver ccid_usb.c:301:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version. ccid_usb.c:383:OpenUSBByName() Checking device: 005/070 ccid_usb.c:437:OpenUSBByName() Trying to open USB bus/device: 005/070 ccid_usb.c:501:OpenUSBByName() Found Vendor/Product: 08C3/0402 (Precise 200 MC) ccid_usb.c:503:OpenUSBByName() Using USB bus/device: 005/070 ccid_usb.c:949:ControlUSB() request: 0x03 receive: ccid_usb.c:893:get_data_rates() IFD does not support GET_DATA_RATES request: Broken pipe ifdhandler.c:364:IFDHGetCapabilities() tag: 0xFB0, usb:08c3/0402:libusb:005:070 (lun: 0) readerfactory.c:249:RFAddReader() Using the pcscd polling thread ifdhandler.c:364:IFDHGetCapabilities() tag: 0xFAE, usb:08c3/0402:libusb:005:070 (lun: 0) ifdhandler.c:418:IFDHGetCapabilities() Reader supports 1 slot(s) ifdhandler.c:1043:IFDHPowerICC() action: PowerUp, usb:08c3/0402:libusb:005:070 (lun: 0) -> 000000 62 00 00 00 00 00 04 00 00 00 <- 000000 80 16 00 00 00 00 04 00 00 00 3B DB 96 00 81 B1 FE 45 1F 03 80 F9 A0 00 00 03 08 00 00 10 00 18 Card ATR: 3B DB 96 00 81 B1 FE 45 1F 03 80 F9 A0 00 00 03 08 00 00 10 00 18 winscard_msg_srv.c:239:SHMProcessEventsServer() Common channel packet arrival winscard_msg_srv.c:248:SHMProcessEventsServer() SHMProcessCommonChannelRequest detects: 6 pcscdaemon.c:147:SVCServiceRunLoop() A new context thread creation is requested: 6 winscard_svc.c:133:ContextThread() Thread is started: 6 winscard_msg_srv.c:317:SHMProcessEventsContext() command CMD_VERSION received by client 6 winscard_svc.c:189:ContextThread() Client is protocol version 3:0 winscard_msg_srv.c:317:SHMProcessEventsContext() command ESTABLISH_CONTEXT received by client 6 winscard.c:242:SCardEstablishContext() Establishing Context: 16999491 winscard_msg_srv.c:317:SHMProcessEventsContext() command RELEASE_CONTEXT received by client 6 winscard.c:253:SCardReleaseContext() Releasing Context: 16999491 winscard_msg_srv.c:306:SHMProcessEventsContext() Client has disappeared: 6 winscard_svc.c:146:ContextThread() Client die: 6 winscard_msg_srv.c:239:SHMProcessEventsServer() Common channel packet arrival winscard_msg_srv.c:248:SHMProcessEventsServer() SHMProcessCommonChannelRequest detects: 6 pcscdaemon.c:147:SVCServiceRunLoop() A new context thread creation is requested: 6 winscard_svc.c:133:ContextThread() Thread is started: 6 winscard_msg_srv.c:317:SHMProcessEventsContext() command CMD_VERSION received by client 6 winscard_svc.c:189:ContextThread() Client is protocol version 3:0 winscard_msg_srv.c:317:SHMProcessEventsContext() command ESTABLISH_CONTEXT received by client 6 winscard.c:242:SCardEstablishContext() Establishing Context: 16994464 winscard_msg_srv.c:317:SHMProcessEventsContext() command CONNECT received by client 6 winscard.c:303:SCardConnect() Attempting Connect to Precise 200 MC (0016787745) 00 00 using protocol: 3 prothandler.c:128:PHSetProtocol() Attempting PTS to T=1 ifdhandler.c:581:IFDHSetProtocolParameters() protocol T=1, usb:08c3/0402:libusb:005:070 (lun: 0) ifdhandler.c:1660:extra_egt() Extra EGT patch applied ifdhandler.c:858:IFDHSetProtocolParameters() BWI/CWI (TB3) present: 0x45 ifdhandler.c:894:IFDHSetProtocolParameters() IFSC (TA3) present: 254 ifdhandler.c:901:IFDHSetProtocolParameters() Timeout: 2 seconds commands.c:2015:SetParameters() length: 7 bytes -> 000000 61 07 00 00 00 00 13 01 00 00 11 10 02 45 00 FE 00 <- 000000 83 07 00 00 00 00 13 00 00 01 11 10 02 45 00 FE 00 ifdhandler.c:961:IFDHSetProtocolParameters() IFSC (TA3) present: 254 ifdhandler.c:972:IFDHSetProtocolParameters() Negociate IFSD at 254 sending: 00 C1 01 FE 3E -> 000000 6F 05 00 00 00 00 14 00 00 00 00 C1 01 FE 3E <- 000000 80 00 00 00 00 00 14 40 FB 00 commands.c:1301:CCID_Receive Hardware error openct/proto-t1.c:766:t1_negotiate_ifsd() fatal: transmit/receive failed prothandler.c:144:PHSetProtocol() PTS failed (612), using T=1 winscard_msg_srv.c:317:SHMProcessEventsContext() command RELEASE_CONTEXT received by client 6 winscard.c:253:SCardReleaseContext() Releasing Context: 16994464 winscard_msg_srv.c:306:SHMProcessEventsContext() Client has disappeared: 6 winscard_svc.c:146:ContextThread() Client die: 6 winscard_msg_srv.c:239:SHMProcessEventsServer() Common channel packet arrival winscard_msg_srv.c:248:SHMProcessEventsServer() SHMProcessCommonChannelRequest detects: 6 pcscdaemon.c:147:SVCServiceRunLoop() A new context thread creation is requested: 6 winscard_svc.c:133:ContextThread() Thread is started: 6 winscard_msg_srv.c:317:SHMProcessEventsContext() command CMD_VERSION received by client 6 winscard_svc.c:189:ContextThread() Client is protocol version 3:0 winscard_msg_srv.c:317:SHMProcessEventsContext() command ESTABLISH_CONTEXT received by client 6 winscard.c:242:SCardEstablishContext() Establishing Context: 17035710 winscard_msg_srv.c:317:SHMProcessEventsContext() command RELEASE_CONTEXT received by client 6 winscard.c:253:SCardReleaseContext() Releasing Context: 17035710 winscard_msg_srv.c:306:SHMProcessEventsContext() Client has disappeared: 6 winscard_svc.c:146:ContextThread() Client die: 6 winscard_msg_srv.c:239:SHMProcessEventsServer() Common channel packet arrival winscard_msg_srv.c:248:SHMProcessEventsServer() SHMProcessCommonChannelRequest detects: 6 pcscdaemon.c:147:SVCServiceRunLoop() A new context thread creation is requested: 6 winscard_svc.c:133:ContextThread() Thread is started: 6 winscard_msg_srv.c:317:SHMProcessEventsContext() command CMD_VERSION received by client 6 winscard_svc.c:189:ContextThread() Client is protocol version 3:0 winscard_msg_srv.c:317:SHMProcessEventsContext() command ESTABLISH_CONTEXT received by client 6 winscard.c:242:SCardEstablishContext() Establishing Context: 17018086 winscard_msg_srv.c:317:SHMProcessEventsContext() command CONNECT received by client 6 winscard.c:303:SCardConnect() Attempting Connect to Precise 200 MC (0016787745) 00 00 using protocol: 3 prothandler.c:128:PHSetProtocol() Attempting PTS to T=1 ifdhandler.c:581:IFDHSetProtocolParameters() protocol T=1, usb:08c3/0402:libusb:005:070 (lun: 0) ifdhandler.c:1660:extra_egt() Extra EGT patch applied ifdhandler.c:858:IFDHSetProtocolParameters() BWI/CWI (TB3) present: 0x45 ifdhandler.c:894:IFDHSetProtocolParameters() IFSC (TA3) present: 254 ifdhandler.c:901:IFDHSetProtocolParameters() Timeout: 2 seconds commands.c:2015:SetParameters() length: 7 bytes -> 000000 61 07 00 00 00 00 40 01 00 00 11 10 02 45 00 FE 00 <- 000000 83 07 00 00 00 00 40 00 00 01 11 10 02 45 00 FE 00 ifdhandler.c:961:IFDHSetProtocolParameters() IFSC (TA3) present: 254 ifdhandler.c:972:IFDHSetProtocolParameters() Negociate IFSD at 254 sending: 00 C1 01 FE 3E -> 000000 6F 05 00 00 00 00 41 00 00 00 00 C1 01 FE 3E ccid_usb.c:634:ReadUSB() usb_bulk_read(005/070): Resource temporarily unavailable openct/proto-t1.c:766:t1_negotiate_ifsd() fatal: transmit/receive failed prothandler.c:144:PHSetProtocol() PTS failed (612), using T=1 winscard_msg_srv.c:317:SHMProcessEventsContext() command RELEASE_CONTEXT received by client 6 winscard.c:253:SCardReleaseContext() Releasing Context: 17018086 winscard_msg_srv.c:306:SHMProcessEventsContext() Client has disappeared: 6 winscard_svc.c:146:ContextThread() Client die: 6 ccid_usb.c:634:ReadUSB() usb_bulk_read(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:656:ReadUSB() Duplicate frame detected ccid_usb.c:634:ReadUSB() usb_bulk_read(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:634:ReadUSB() usb_bulk_read(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:634:ReadUSB() usb_bulk_read(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:596:WriteUSB() usb_bulk_write(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:596:WriteUSB() usb_bulk_write(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:596:WriteUSB() usb_bulk_write(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ccid_usb.c:596:WriteUSB() usb_bulk_write(005/070): Resource temporarily unavailable ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 ^Cpcscdaemon.c:580:signal_trap() Preparing for suicide hotplug_libusb.c:377:HPRescanUsbBus() Hotplug stopped readerfactory.c:1267:RFCleanupReaders() entering cleaning function readerfactory.c:1276:RFCleanupReaders() Stopping reader: Precise 200 MC (0016787745) 00 00 eventhandler.c:126:EHDestroyEventHandler() Stomping thread. ccid_usb.c:596:WriteUSB() usb_bulk_write(005/070): Resource temporarily unavailable ifdhandler.c:364:IFDHGetCapabilities() tag: 0xFB1, usb:08c3/0402:libusb:005:070 (lun: 0) eventhandler.c:139:EHDestroyEventHandler() Waiting polling thread ifdwrapper.c:469:IFDStatusICC() Card not transacted: 612 eventhandler.c:333:EHStatusHandlerThread() Error communicating to: Precise 200 MC (0016787745) 00 00 eventhandler.c:474:EHStatusHandlerThread() Die eventhandler.c:163:EHDestroyEventHandler() Thread stomped. readerfactory.c:1062:RFUnInitializeReader() Attempting shutdown of Precise 200 MC (0016787745) 00 00. ifdhandler.c:266:IFDHCloseChannel() usb:08c3/0402:libusb:005:070 (lun: 0) -> 000000 63 00 00 00 00 00 4B 00 00 00 ccid_usb.c:596:WriteUSB() usb_bulk_write(005/070): Resource temporarily unavailable ccid_usb.c:677:CloseUSB() Closing USB device: 005/070 ccid_usb.c:692:CloseUSB() Last slot closed. Release resources readerfactory.c:914:RFUnloadReader() Unloading reader driver. pcscdaemon.c:530:at_exit() cleaning /var/run/pcscd -------------------------------------------------------------------------------- The interesting thing is that I can get the reader to work properly (albeit slowly) by forcing pcscd to use the T=0 protocol with the following patch: -------------------------------------------------------------------------------- --- pcsc-lite-1.5.3.orig/src/prothandler.c +++ pcsc-lite-1.5.3/src/prothandler.c @@ -124,6 +124,9 @@ /* App wants unsupported protocol */ return SET_PROTOCOL_WRONG_ARGUMENT; + /* XXX */ + ucChosen = SCARD_PROTOCOL_T0; + Log2(PCSC_LOG_INFO, "Attempting PTS to T=%d", (SCARD_PROTOCOL_T0 == ucChosen ? 0 : 1)); rv = IFDSetPTS(rContext, ucChosen, 0x00, 0x00, 0x00, 0x00); -------------------------------------------------------------------------------- I have contacted Precise Biometrics and they have said that their reader has no problems with the T=1 protocol and that it passes the PC/SC test suites v1.0 and v2.0. Any ideas where the problem might be? Thanks, Forest -- Forest Bond http://www.alittletooquiet.net http://www.pytagsfs.org
signature.asc
Description: Digital signature
_______________________________________________ Muscle mailing list [email protected] http://lists.drizzle.com/mailman/listinfo/muscle
