# SCardTransmit returns 80100016 error code

## skamalakumar

Hi all,

I am developing one module that interacts with PIV smartcard. All the APDUs are working well and returning response. But when i send Get Response APDU to retrieve data more than 255 bytes I am getting error. SCardTransmit function return 80100016 error code. I have also attached the PCSCD log also with this. This error is occuring only in Gentoo 2006.1 Linux distribution I installed. It is working correctly in other Linux distributions I used.

My doubt is whether i have installed the Gentoo system correctly. I have installed the Gentoo system in vmware 5.5. The Host OS is Windows 2000 Professional with single Pentium 4 CPU. I installed Gentoo sytem using live cd ISO.  And choose -j2 for the MAKEOPTS and default value for CFLAGS  for building kernel. I installed pcsc-lite and ccid using following command.

ACCEPT_KEYWORDS=~x86 MAKEOPTS=-j1 emerge sys-apps/pcsc-lite

ACCEPT_KEYWORDS=~x86 emerge app-crypt/ccid 

And working with SCR 331 reader. I have given the code that send the Get Response APDU here.

=================================================================

LONG SCardHookExchangeAPDU( SCARDHANDLE hCard, DWORD dwActiveProtocol, PCSCLPTransmitBuffer transmitBuffer ) {

  LONG rv;

  unsigned long originalLength;

	if (dwActiveProtocol == SCARD_PROTOCOL_T0)

    {

        transmitBuffer->ioType = (LPSCARD_IO_REQUEST)SCARD_PCI_T0;

    }

    else if (dwActiveProtocol == SCARD_PROTOCOL_T1)

    {

        transmitBuffer->ioType = (LPSCARD_IO_REQUEST)SCARD_PCI_T1;

    }

    else

    {

        throw SCardException(SCARD_E_UNSUPPORTED_FEATURE);

    }

  originalLength = transmitBuffer->apduResponseSize;

  rv = SCardTransmit(hCard, 

	      transmitBuffer->ioType,

		  transmitBuffer->buffer, 

		  transmitBuffer->bufferSize,

		  0,

		  transmitBuffer->apduResponse, 

		  &transmitBuffer->apduResponseSize );

	  if (rv != SCARD_S_SUCCESS) {  

		  printf("SCardTransmit exited with error code = %d",rv);

		  throw SCardException(rv);

	  }

  return rv;

}

StatusWord GetResponse (SCARDHANDLE cardHandle, PIV_Byte le, DWORD dwActiveProtocol, PIV_Byte *buffer, PIV_ULong32 *pBufferLength) {

	LONG rv;

	PCSCTransmitBuffer transmitBuffer;

	StatusWord sw=0;

	transmitBuffer.apduResponseSize = 260;

	/* Select Applet APDU */

	transmitBuffer.buffer[APDU_CLA] = 0x00;

	transmitBuffer.buffer[APDU_INS] = 0xC0;

	transmitBuffer.buffer[APDU_P1]  = 0x00;

	transmitBuffer.buffer[APDU_P2]  = 0x00;

	transmitBuffer.buffer[APDU_P3]  = le;

	transmitBuffer.bufferSize = 5;

	SCardHookExchangeAPDU(cardHandle,dwActiveProtocol, &transmitBuffer);

	sw = ReadStatusWord(&transmitBuffer);

	if (sw != 0x9000 && (sw & 0xFF00) != 0x6100) throw APDUException(sw);

    memcpy (buffer, &(transmitBuffer.apduResponse[0]), transmitBuffer.apduResponseSize-2);

	return sw;

}

=============================================================

pcscd log

=============================================================

pcscdaemon.c:259:main() pcscd set to foreground with debug send to stderr

pcscdaemon.c:464:main() pcsc-lite 1.3.1 daemon ready.

hotplug_libusb.c:407:HPAddHotPluggable() Adding USB device: 001:003

readerfactory.c:1095:RFInitializeReader() Attempting startup of SCM SCR 331 (2000012F) 00 00.

readerfactory.c:967:RFBindFunctions() Loading IFD Handler 3.0

ifdhandler.c:1155:init_driver() LogLevel: 0x0003

ifdhandler.c:1165:init_driver() DriverOptions: 0x0000

ifdhandler.c:76:IFDHCreateChannelByName() lun: 0, device: usb:04e6/e001:libusb:001:003

ccid_usb.c:231:OpenUSBByName() Manufacturer: Ludovic Rousseau (ludovic.rousseau@free.fr)

ccid_usb.c:241:OpenUSBByName() ProductString: Generic CCID driver v1.0.1

ccid_usb.c:247:OpenUSBByName() Copyright: This driver is protected by terms of the GNU General Public License version 2, or (at your option) any later version.

ccid_usb.c:395:OpenUSBByName() Found Vendor/Product: 04E6/E001 (SCM SCR 331)

ccid_usb.c:397:OpenUSBByName() Using USB bus/device: 001/003

ccid_usb.c:747:get_data_rates() IFD does not support GET_DATA_RATES request: Broken pipe

ifdhandler.c:252:IFDHGetCapabilities() lun: 0, tag: 0xFAE

ifdhandler.c:294:IFDHGetCapabilities() Reader supports 1 slots

ifdhandler.c:787:IFDHPowerICC() lun: 0

Card ATR: 3B DB 96 00 81 B1 FE 45 1F 03 80 F9 A0 00 00 03 08 00 00 10 00 18 

prothandler.c:130:PHSetProtocol() Attempting PTS to T=1

ifdhandler.c:377:IFDHSetProtocolParameters() lun: 0, protocol T=1

ifdhandler.c:1260:extra_egt() Extra EGT patch applied

ifdhandler.c:894:IFDHTransmitToICC() lun: 0

ifdhandler.c:894:IFDHTransmitToICC() lun: 0

ccid_usb.c:508:ReadUSB() usb_bulk_read(001/003): Resource temporarily unavailable

openct/proto-t1.c:218:t1_transceive() fatal: transmit/receive failed

ifdwrapper.c:735:IFDTransmit() Card not transacted: 612

winscard.c:1491:SCardTransmit() Card not transacted: 0x80100016

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): Resource temporarily unavailable

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): Resource temporarily unavailable

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

ifdhandler.c:787:IFDHPowerICC() lun: 0

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): Resource temporarily unavailable

ifdhandler.c:823:IFDHPowerICC() PowerUp failed

winscard.c:771:SCardDisconnect() Error resetting card.

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): Resource temporarily unavailable

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): Resource temporarily unavailable

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): Resource temporarily unavailable

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): No such device

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): No such device

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

hotplug_libusb.c:469:HPRemoveHotPluggable() Removing USB device[0]: 001:003

eventhandler.c:121:EHDestroyEventHandler() Stomping thread.

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): No such device

ifdwrapper.c:484:IFDStatusICC() Card not transacted: 612

eventhandler.c:301:EHStatusHandlerThread() Error communicating to: SCM SCR 331 (2000012F) 00 00

eventhandler.c:150:EHDestroyEventHandler() Thread stomped.

readerfactory.c:1142:RFUnInitializeReader() Attempting shutdown of SCM SCR 331 (2000012F) 00 00.

ifdhandler.c:203:IFDHCloseChannel() lun: 0

ccid_usb.c:474:WriteUSB() usb_bulk_write(001/003): No such device

readerfactory.c:1012:RFUnloadReader() Unloading reader driver.

pcscdaemon.c:529:signal_trap() Preparing for suicide

hotplug_libusb.c:361:HPEstablishUSBNotifications() Hotplug stopped

readerfactory.c:1350:RFCleanupReaders() entering cleaning function

pcscdaemon.c:489:at_exit() cleaning /var/run

==============================================================

I have to remove and reinsert the card for the smartcard to start functioning.

I have tried with different version of pcsc-lite and ccid driver. If anybody can point out what is wrong, it will be very helpful.

Thanks and Regards,

Kamal.

----------

## skamalakumar

Hi All,

I am having trouble in using scr331 smartcard reader in Gentoo Linux distribution. I am getting error as described in the previous post. Is anybody successfully using scr331 smartcard reader in gentoo Linux distribution.  

Regards,

Kamal.

----------

