Package: libacr38u
Version: 1.7.10-1
Severity: normal
Tags: upstream patch

Hello,

The driver resets the card using RESET_WITH_5_VOLTS_DEFAULT.
Some low voltage smart cards (Ex: Atmel AT88SC**CA family) will fail:
pcscd: eventhandler.c:443:EHStatusHandlerThread() Error powering up card.

If the card is reset with RESET_WITH_SPECIFIC_VOLTAGE - 0x00 (automatic voltage
detection), the card resets properly and the ATR can be read with any card.

This still applies to the new driver (1.7.11).
It is probably a good idea to forward this to upstream.

Regards,

Michael De Backer

-- System Information:
Debian Release: 6.0.1
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores)
Locale: LANG=fr_BE.utf8, LC_CTYPE=fr_BE.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libacr38u depends on:
ii  libc6                        2.11.2-10   Embedded GNU C Library: Shared lib
ii  libpcsclite1                 1.5.5-4     Middleware to access a smart card
ii  libusb-0.1-4                 2:0.1.12-16 userspace USB programming library

Versions of packages libacr38u recommends:
ii  pcscd                         1.5.5-4    Middleware to access a smart card

libacr38u suggests no packages.
--- ./AdmHndlr.c	2009-08-10 04:18:26.000000000 +0200
+++ ./AdmHndlr.c	2011-07-14 13:44:47.000000000 +0200
@@ -128,7 +128,7 @@
 	ULONG			rv;
 	UCHAR			emvOption[5];
 	UCHAR			selectCardType[20];
-	UCHAR			powerReset[4];
+	UCHAR			powerReset[5];
 	UCHAR			resetCardType[20];
 	UCHAR			ucResponse[MAX_BUFFER_SIZE];
 	ULONG			ulSize;
@@ -182,8 +182,9 @@
 		powerReset[0] = 0x01;
 		powerReset[1] = 0x80;
 		powerReset[2] = 0x00;
-		powerReset[3] = 0x00;
-		rv = Adm_Transmit(Lun, powerReset, 4, pucAtr, pulAtrLen);
+		powerReset[3] = 0x01;
+		powerReset[4] = 0x00;
+		rv = Adm_Transmit(Lun, powerReset, 5, pucAtr, pulAtrLen);
 	}
 	else
 	{	/* Memory Card */
@@ -221,8 +222,9 @@
 		powerReset[0] = 0x01;
 		powerReset[1] = 0x80;
 		powerReset[2] = 0x00;
-		powerReset[3] = 0x00;
-		rv = Adm_Transmit(Lun, powerReset, 4, pucAtr, pulAtrLen);
+		powerReset[3] = 0x01;
+		powerReset[4] = 0x00;
+		rv = Adm_Transmit(Lun, powerReset, 5, pucAtr, pulAtrLen);
 		if (rv != STATUS_SUCCESS)
 		{
 			return rv;
@@ -522,7 +524,7 @@
   ULONG rv;
   ULONG ulSize = 0;
   UCHAR selectCardType[20];
-  UCHAR	powerReset[4];
+  UCHAR	powerReset[5];
   UCHAR uc4428[20];
   UCHAR ucResponse[MAX_BUFFER_SIZE];
 #ifdef PCSC_DEBUG
@@ -541,8 +543,9 @@
   powerReset[0] = 0x01;
   powerReset[1] = 0x80;
   powerReset[2] = 0x00;
-  powerReset[3] = 0x00;
-  rv = Adm_Transmit( Lun, powerReset, 4, ucResponse, &ulSize );
+  powerReset[3] = 0x01;
+  powerReset[4] = 0x00;
+  rv = Adm_Transmit( Lun, powerReset, 5, ucResponse, &ulSize );
   if (rv != STATUS_SUCCESS) {
     return rv;
   }

Reply via email to