Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pcsc-acsccid for openSUSE:Factory checked in at 2023-08-04 15:04:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pcsc-acsccid (Old) and /work/SRC/openSUSE:Factory/.pcsc-acsccid.new.22712 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pcsc-acsccid" Fri Aug 4 15:04:27 2023 rev:31 rq:1102285 version:1.1.10 Changes: -------- --- /work/SRC/openSUSE:Factory/pcsc-acsccid/pcsc-acsccid.changes 2023-03-24 15:21:47.823318408 +0100 +++ /work/SRC/openSUSE:Factory/.pcsc-acsccid.new.22712/pcsc-acsccid.changes 2023-08-04 15:04:40.232746984 +0200 @@ -1,0 +2,27 @@ +Fri Aug 4 04:25:01 UTC 2023 - Godfrey Chung <godfrey.ch...@acs.com.hk> + +- Updated to version 1.1.10. + * Add the following readers support: + ACR40U ICC Reader + SCR FW_Upgrade + ACR1552 1S CL Reader + ACR1552 CL Reader + ACR1552 USB FW_Upgrade + * Enable ACR1552U-M1 (composite device) as multi-slot reader. + * Enable the 2nd interface of ACR1552U-M1 as SAM slot. + * Fix missing initialization in get_end_points(). + * Update _usbDevice.has_interrupt in get_end_points(). + * Initialize multislot for interrupt endpoint only in OpenUSBByName(). + * Simplify the code for delaying the write operation. + * Allow ACR38 or the reader which needs write delay in WriteUSB(). + * Check the packet size to avoid infinite loop in WriteUSB(). + * Use #pragma pack(1) for all platforms in src/ifdhandler.c. +- Replaced acsccid-1.1.9-libhal.patch with acsccid-1.1.10-libhal.patch. +- Replaced acsccid-1.1.9-polling-thread.patch with + acsccid-1.1.10-polling-thread.patch. +- Replaced acsccid-1.1.9-polling-unplug.patch with + acsccid-1.1.10-polling-unplug.patch. +- Replaced acsccid-1.1.9-libusb-1.0.8.patch with + acsccid-1.1.10-libusb-1.0.8.patch. + +------------------------------------------------------------------- Old: ---- acsccid-1.1.9-libhal.patch acsccid-1.1.9-libusb-1.0.8.patch acsccid-1.1.9-polling-thread.patch acsccid-1.1.9-polling-unplug.patch acsccid-1.1.9.tar.bz2 New: ---- acsccid-1.1.10-libhal.patch acsccid-1.1.10-libusb-1.0.8.patch acsccid-1.1.10-polling-thread.patch acsccid-1.1.10-polling-unplug.patch acsccid-1.1.10.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pcsc-acsccid.spec ++++++ --- /var/tmp/diff_new_pack.XjGWre/_old 2023-08-04 15:04:41.116752494 +0200 +++ /var/tmp/diff_new_pack.XjGWre/_new 2023-08-04 15:04:41.124752544 +0200 @@ -1,7 +1,7 @@ # # spec file for package pcsc-acsccid # -# Copyright (c) 2023 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2023 SUSE LLC # Copyright (c) 2023 Advanced Card Systems Ltd. # # All modifications and additions to the file contributed by third parties @@ -42,7 +42,7 @@ %if 0%{?suse_version} >= 1140 BuildRequires: pkgconfig(udev) %endif -Version: 1.1.9 +Version: 1.1.10 Release: 0 URL: http://acsccid.sourceforge.net/ Summary: PCSC Driver for ACS CCID Based Smart Card Readers @@ -51,14 +51,14 @@ Source: http://downloads.sourceforge.net/%{_name}/%{_name}-%{version}.tar.bz2 Source1: %{name}-rpmlintrc %if 0%{?sles_version} == 11 -# PATCH-FIX-SLE acsccid-1.1.9-libhal.patch godfrey.ch...@acs.com.hk -- Fix the compatibility with libhal. -Patch0: %{_name}-1.1.9-libhal.patch -# PATCH-FIX-SLE acsccid-1.1.9-polling-thread.patch godfrey.ch...@acs.com.hk -- Add polling thread support for slot status. -Patch1: %{_name}-1.1.9-polling-thread.patch -# PATCH-FIX-SLE acsccid-1.1.9-polling-unplug.patch godfrey.ch...@acs.com.hk -- Let pcsc-lite delay the polling if the reader is unplugged. -Patch2: %{_name}-1.1.9-polling-unplug.patch -# PATCH-FIX-SLE acsccid-1.1.9-libusb-1.0.8.patch godfrey.ch...@acs.com.hk -- Fix the compatibility with libusb 1.0.8. -Patch3: %{_name}-1.1.9-libusb-1.0.8.patch +# PATCH-FIX-SLE acsccid-1.1.10-libhal.patch godfrey.ch...@acs.com.hk -- Fix the compatibility with libhal. +Patch0: %{_name}-1.1.10-libhal.patch +# PATCH-FIX-SLE acsccid-1.1.10-polling-thread.patch godfrey.ch...@acs.com.hk -- Add polling thread support for slot status. +Patch1: %{_name}-1.1.10-polling-thread.patch +# PATCH-FIX-SLE acsccid-1.1.10-polling-unplug.patch godfrey.ch...@acs.com.hk -- Let pcsc-lite delay the polling if the reader is unplugged. +Patch2: %{_name}-1.1.10-polling-unplug.patch +# PATCH-FIX-SLE acsccid-1.1.10-libusb-1.0.8.patch godfrey.ch...@acs.com.hk -- Fix the compatibility with libusb 1.0.8. +Patch3: %{_name}-1.1.10-libusb-1.0.8.patch %endif BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: pcsc-lite >= %{pcsc_lite_ver} @@ -87,6 +87,8 @@ Enhances: modalias(usb:v072FpB000d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072FpB501d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072FpB504d*dc*dsc*dp*ic*isc*ip*) +Enhances: modalias(usb:v072FpB506d*dc*dsc*dp*ic*isc*ip*) +Enhances: modalias(usb:v072FpB505d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp90D2d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp8306d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp2011d*dc*dsc*dp*ic*isc*ip*) @@ -147,6 +149,9 @@ Enhances: modalias(usb:v072Fp222Cd*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp220Cd*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp2258d*dc*dsc*dp*ic*isc*ip*) +Enhances: modalias(usb:v072Fp2303d*dc*dsc*dp*ic*isc*ip*) +Enhances: modalias(usb:v072Fp2308d*dc*dsc*dp*ic*isc*ip*) +Enhances: modalias(usb:v072Fp2302d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp2301d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp2300d*dc*dsc*dp*ic*isc*ip*) Enhances: modalias(usb:v072Fp0102d*dc*dsc*dp*ic*isc*ip*) ++++++ acsccid-1.1.9-libhal.patch -> acsccid-1.1.10-libhal.patch ++++++ --- /work/SRC/openSUSE:Factory/pcsc-acsccid/acsccid-1.1.9-libhal.patch 2023-03-24 15:21:47.751318033 +0100 +++ /work/SRC/openSUSE:Factory/.pcsc-acsccid.new.22712/acsccid-1.1.10-libhal.patch 2023-08-04 15:04:39.952745239 +0200 @@ -1,8 +1,8 @@ -Index: acsccid-1.1.9/src/ccid_usb.c +Index: acsccid-1.1.10/src/ccid_usb.c =================================================================== ---- acsccid-1.1.9.orig/src/ccid_usb.c -+++ acsccid-1.1.9/src/ccid_usb.c -@@ -283,13 +283,48 @@ status_t OpenUSBByName(unsigned int read +--- acsccid-1.1.10.orig/src/ccid_usb.c ++++ acsccid-1.1.10/src/ccid_usb.c +@@ -284,13 +284,48 @@ status_t OpenUSBByName(unsigned int read return STATUS_UNSUCCESSFUL; } ++++++ acsccid-1.1.9-libusb-1.0.8.patch -> acsccid-1.1.10-libusb-1.0.8.patch ++++++ --- /work/SRC/openSUSE:Factory/pcsc-acsccid/acsccid-1.1.9-libusb-1.0.8.patch 2023-03-24 15:21:47.759318075 +0100 +++ /work/SRC/openSUSE:Factory/.pcsc-acsccid.new.22712/acsccid-1.1.10-libusb-1.0.8.patch 2023-08-04 15:04:39.980745413 +0200 @@ -1,8 +1,8 @@ -Index: acsccid-1.1.9/src/ccid_usb.c +Index: acsccid-1.1.10/src/ccid_usb.c =================================================================== ---- acsccid-1.1.9.orig/src/ccid_usb.c -+++ acsccid-1.1.9/src/ccid_usb.c -@@ -192,6 +192,59 @@ static struct _bogus_firmware Bogus_firm +--- acsccid-1.1.10.orig/src/ccid_usb.c ++++ acsccid-1.1.10/src/ccid_usb.c +@@ -193,6 +193,59 @@ static struct _bogus_firmware Bogus_firm /* data rates supported by the secondary slots on the GemCore Pos Pro & SIM Pro */ unsigned int SerialCustomDataRates[] = { GEMPLUS_CUSTOM_DATA_RATES, 0 }; ++++++ acsccid-1.1.9-polling-thread.patch -> acsccid-1.1.10-polling-thread.patch ++++++ --- /work/SRC/openSUSE:Factory/pcsc-acsccid/acsccid-1.1.9-polling-thread.patch 2023-03-24 15:21:47.771318138 +0100 +++ /work/SRC/openSUSE:Factory/.pcsc-acsccid.new.22712/acsccid-1.1.10-polling-thread.patch 2023-08-04 15:04:40.040745787 +0200 @@ -1,8 +1,8 @@ -Index: acsccid-1.1.9/src/ifdhandler.c +Index: acsccid-1.1.10/src/ifdhandler.c =================================================================== ---- acsccid-1.1.9.orig/src/ifdhandler.c -+++ acsccid-1.1.9/src/ifdhandler.c -@@ -441,7 +441,7 @@ EXTERNAL RESPONSECODE IFDHCloseChannel(D +--- acsccid-1.1.10.orig/src/ifdhandler.c ++++ acsccid-1.1.10/src/ifdhandler.c +@@ -433,7 +433,7 @@ EXTERNAL RESPONSECODE IFDHCloseChannel(D #if !defined(TWIN_SERIAL) @@ -11,7 +11,7 @@ { int reader_index; -@@ -458,7 +458,7 @@ static RESPONSECODE IFDHPolling(DWORD Lu +@@ -450,7 +450,7 @@ static RESPONSECODE IFDHPolling(DWORD Lu /* on an ICCD device the card is always inserted * so no card movement will ever happen: just do nothing */ @@ -20,7 +20,7 @@ { int reader_index; -@@ -492,6 +492,16 @@ static RESPONSECODE IFDHStopPolling(DWOR +@@ -484,6 +484,16 @@ static RESPONSECODE IFDHStopPolling(DWOR (void)InterruptStop(reader_index); return IFD_SUCCESS; } @@ -37,7 +37,7 @@ #endif -@@ -708,7 +718,7 @@ EXTERNAL RESPONSECODE IFDHGetCapabilitie +@@ -701,7 +711,7 @@ EXTERNAL RESPONSECODE IFDHGetCapabilitie { *Length = sizeof(void *); if (Value) @@ -46,7 +46,7 @@ } if ((PROTOCOL_ICCD_A == ccid_desc->bInterfaceProtocol) -@@ -716,7 +726,7 @@ EXTERNAL RESPONSECODE IFDHGetCapabilitie +@@ -709,7 +719,7 @@ EXTERNAL RESPONSECODE IFDHGetCapabilitie { *Length = sizeof(void *); if (Value) @@ -55,7 +55,7 @@ } } break; -@@ -768,6 +778,44 @@ EXTERNAL RESPONSECODE IFDHGetCapabilitie +@@ -761,6 +771,44 @@ EXTERNAL RESPONSECODE IFDHGetCapabilitie } } break; ++++++ acsccid-1.1.9-polling-unplug.patch -> acsccid-1.1.10-polling-unplug.patch ++++++ --- /work/SRC/openSUSE:Factory/pcsc-acsccid/acsccid-1.1.9-polling-unplug.patch 2023-03-24 15:21:47.779318179 +0100 +++ /work/SRC/openSUSE:Factory/.pcsc-acsccid.new.22712/acsccid-1.1.10-polling-unplug.patch 2023-08-04 15:04:40.080746036 +0200 @@ -1,8 +1,8 @@ -Index: acsccid-1.1.9/src/ccid_usb.c +Index: acsccid-1.1.10/src/ccid_usb.c =================================================================== ---- acsccid-1.1.9.orig/src/ccid_usb.c -+++ acsccid-1.1.9/src/ccid_usb.c -@@ -1874,6 +1874,8 @@ int InterruptRead(int reader_index, int +--- acsccid-1.1.10.orig/src/ccid_usb.c ++++ acsccid-1.1.10/src/ccid_usb.c +@@ -1923,6 +1923,8 @@ int InterruptRead(int reader_index, int libusb_free_transfer(transfer); DEBUG_CRITICAL2("libusb_submit_transfer failed: %s", libusb_error_name(ret)); @@ -11,7 +11,7 @@ return IFD_COMMUNICATION_ERROR; } -@@ -1893,6 +1895,8 @@ int InterruptRead(int reader_index, int +@@ -1942,6 +1944,8 @@ int InterruptRead(int reader_index, int libusb_free_transfer(transfer); DEBUG_CRITICAL2("libusb_handle_events failed: %s", libusb_error_name(ret)); @@ -20,7 +20,7 @@ return IFD_COMMUNICATION_ERROR; } } -@@ -1947,7 +1951,10 @@ int InterruptRead(int reader_index, int +@@ -1996,7 +2000,10 @@ int InterruptRead(int reader_index, int DEBUG_COMM4("InterruptRead (%d/%d): %d", usbDevice[reader_index].bus_number, usbDevice[reader_index].device_address, ret); ++++++ acsccid-1.1.9.tar.bz2 -> acsccid-1.1.10.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/ChangeLog new/acsccid-1.1.10/ChangeLog --- old/acsccid-1.1.9/ChangeLog 2023-03-15 09:49:50.000000000 +0100 +++ new/acsccid-1.1.10/ChangeLog 2023-08-01 10:01:24.000000000 +0200 @@ -1,3 +1,70 @@ +2023-08-01 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * README: Update README for v1.1.10. + +2023-08-01 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * configure.ac: Update the version to 1.1.10 in configure.ac. + +2023-08-01 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ifdhandler.c: Use #pragma pack(1) for all platforms in + src/ifdhandler.c. + +2023-07-31 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Check the packet size to avoid infinite loop in + WriteUSB(). + +2023-07-31 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Allow ACR38 or the reader which needs write delay + in WriteUSB(). Other readers do single write in order to improve the efficiency. + +2023-07-28 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid.c, src/ccid.h, src/ccid_usb.c: Simplify the code for + delaying the write operation. + +2023-07-27 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Detect a card on macOS for interrupt endpoint only + in OpenUSBByName(). + +2023-07-27 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Initialize multislot for interrupt endpoint only + in OpenUSBByName(). + +2023-07-27 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Update _usbDevice.has_interrupt in + get_end_points(). Set _usbDevice.has_interrupt to TRUE if the reader has interrupt + endpoint, otherwise FALSE. + +2023-07-27 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Fix missing initialization in get_end_points(). Some readers may not have interrupt endpoint and this endpoint + address from last reader will be used. + +2023-07-25 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/supported_readers.txt: Add supported readers. ACR40U ICC Reader SCR FW_Upgrade + +2023-07-24 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid_usb.c: Enable the 2nd interface of ACR1552U-M1 as SAM + slot. + +2023-07-24 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/ccid.h, src/ccid_usb.c, src/ifdhandler.c: Enable ACR1552U-M1 + (composite device) as multi-slot reader. + +2023-07-24 Godfrey Chung <godfrey.ch...@acs.com.hk> + + * src/supported_readers.txt: Add supported readers. ACR1552 1S CL Reader ACR1552 CL Reader ACR1552 USB FW_Upgrade + 2023-03-15 Godfrey Chung <godfrey.ch...@acs.com.hk> * README: Update README for v1.1.9. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/README new/acsccid-1.1.10/README --- old/acsccid-1.1.9/README 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/README 2023-08-01 09:58:22.000000000 +0200 @@ -70,7 +70,9 @@ 072F B117 ACR39U-W1 Z_ACS ACR39U-W1 Edge Reader 072F B000 ACR3901U ACS ACR3901 ICC Reader 072F B501 ACR40T ACS ACR40T ICC Reader -072F B504 ACR40 BL ACS ACR40 FW_Upgrade +072F B504 ACR40T BL ACS ACR40 FW_Upgrade +072F B506 ACR40U ACS ACR40U ICC Reader +072F B505 ACR40U BL ACS SCR FW_Upgrade 072F 90D2 ACR83U-A1 ACS ACR83U 072F 8306 ACR85 ACS ACR85 PINPad Reader 072F 2011 ACR88U ACS ACR88U @@ -134,6 +136,9 @@ 072F 222C ACR1283L-D2 ACS ACR1283 CL Reader 072F 220C ACR1283 Bootloader ACS ACR1283U FW Upgrade 072F 2258 ACR1311U-N1 ACS ACR1311 PICC Reader +072F 2303 ACR1552U-M1 ACS ACR1552 1S CL Reader +072F 2308 ACR1552U-M2 ACS ACR1552 CL Reader +072F 2302 ACR1552U BL ACS ACR1552 USB FW_Upgrade 072F 2301 ACR1581U-C1 ACS ACR1581 1S Dual Reader 072F 2300 ACR1581U-C1 BL ACS ACR1581 USB FW_Upgrade 072F 0102 AET62 ACS AET62 PICC Reader @@ -165,6 +170,24 @@ History ------- +v1.1.10 (1/8/2023) +- Add the following readers support: + ACR40U ICC Reader + SCR FW_Upgrade + ACR1552 1S CL Reader + ACR1552 CL Reader + ACR1552 USB FW_Upgrade +- Enable ACR1552U-M1 (composite device) as multi-slot reader. +- Enable the 2nd interface of ACR1552U-M1 as SAM slot. +- Fix missing initialization in get_end_points(). +- Update _usbDevice.has_interrupt in get_end_points(). +- Initialize multislot for interrupt endpoint only in OpenUSBByName(). +- Detect a card on macOS for interrupt endpoint only in OpenUSBByName(). +- Simplify the code for delaying the write operation. +- Allow ACR38 or the reader which needs write delay in WriteUSB(). +- Check the packet size to avoid infinite loop in WriteUSB(). +- Use #pragma pack(1) for all platforms in src/ifdhandler.c. + v1.1.9 (15/3/2023) - Add the following readers support: APG8201-B2RO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/configure new/acsccid-1.1.10/configure --- old/acsccid-1.1.9/configure 2023-03-15 09:49:07.000000000 +0100 +++ new/acsccid-1.1.10/configure 2023-08-01 10:00:25.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for acsccid 1.1.9. +# Generated by GNU Autoconf 2.71 for acsccid 1.1.10. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -618,8 +618,8 @@ # Identity of this package. PACKAGE_NAME='acsccid' PACKAGE_TARNAME='acsccid' -PACKAGE_VERSION='1.1.9' -PACKAGE_STRING='acsccid 1.1.9' +PACKAGE_VERSION='1.1.10' +PACKAGE_STRING='acsccid 1.1.10' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1401,7 +1401,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures acsccid 1.1.9 to adapt to many kinds of systems. +\`configure' configures acsccid 1.1.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1472,7 +1472,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of acsccid 1.1.9:";; + short | recursive ) echo "Configuration of acsccid 1.1.10:";; esac cat <<\_ACEOF @@ -1613,7 +1613,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -acsccid configure 1.1.9 +acsccid configure 1.1.10 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1969,7 +1969,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by acsccid $as_me 1.1.9, which was +It was created by acsccid $as_me 1.1.10, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3240,7 +3240,7 @@ # Define the identity of the package. PACKAGE='acsccid' - VERSION='1.1.9' + VERSION='1.1.10' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -17204,7 +17204,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by acsccid $as_me 1.1.9, which was +This file was extended by acsccid $as_me 1.1.10, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17272,7 +17272,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -acsccid config.status 1.1.9 +acsccid config.status 1.1.10 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/configure.ac new/acsccid-1.1.10/configure.ac --- old/acsccid-1.1.9/configure.ac 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/configure.ac 2023-08-01 09:58:22.000000000 +0200 @@ -4,7 +4,7 @@ # Require autoconf 2.61 AC_PREREQ([2.69]) -AC_INIT([acsccid], [1.1.9]) +AC_INIT([acsccid], [1.1.10]) AC_CONFIG_SRCDIR(src/ifdhandler.c) AC_CONFIG_AUX_DIR([config]) AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip foreign subdir-objects) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/src/ccid.c new/acsccid-1.1.10/src/ccid.c --- old/acsccid-1.1.9/src/ccid.c 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/src/ccid.c 2023-08-01 09:58:22.000000000 +0200 @@ -644,6 +644,12 @@ ccid_descriptor->dwMaxCCIDMessageLength = 320; } } + + /* + * Fix APG8201 which cannot receive the command properly. + * Set write delay to 10 ms. + */ + ccid_descriptor->writeDelay = 10; } case ACS_APG8201Z: ccid_descriptor->wLcdLayout = 0x0210; @@ -697,6 +703,12 @@ ccid_descriptor->firmwareFixEnabled = (firmwareVersion == 0x0001); DEBUG_INFO2("Firmware fix enabled: %d", ccid_descriptor->firmwareFixEnabled); } + + /* + * Fix ACR85 ICC which cannot receive the command properly. + * Set write delay to 10 ms. + */ + ccid_descriptor->writeDelay = 10; } break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/src/ccid.h new/acsccid-1.1.10/src/ccid.h --- old/acsccid-1.1.9/src/ccid.h 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/src/ccid.h 2023-08-01 09:58:22.000000000 +0200 @@ -180,6 +180,9 @@ // True if it is a SAM slot int isSamSlot; + + /* Write delay in milliseconds */ + int writeDelay; } _ccid_descriptor; /* Features from dwFeatures */ @@ -314,6 +317,7 @@ #define ACS_ACR1283_4S_CL_READER 0x072f2213 #define ACS_ACR1283_CL_READER 0x072f222C #define ACS_ACR1283U_FW_UPGRADE 0x072f220C +#define ACS_ACR1552_1S_CL_READER 0x072f2303 #define ACS_ACR1581_1S_DUAL_READER 0x072f2301 #define ACS_AET62_PICC_READER 0x072f0102 #define ACS_AET62_1SAM_PICC_READER 0x072f0103 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/src/ccid_usb.c new/acsccid-1.1.10/src/ccid_usb.c --- old/acsccid-1.1.9/src/ccid_usb.c 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/src/ccid_usb.c 2023-08-01 09:58:22.000000000 +0200 @@ -90,6 +90,7 @@ int bulk_in; int bulk_out; int interrupt; + int has_interrupt; /* Number of slots using the same device */ int real_nb_opened_slots; @@ -471,7 +472,8 @@ || (ACS_ACR1252_1S_CL_READER == readerID) || (ACS_ACR1252IMP_1S_CL_READER == readerID) || (ACS_WALLETMATE_1S_CL_READER == readerID) - || (ACS_ACR1581_1S_DUAL_READER == readerID)) + || (ACS_ACR1581_1S_DUAL_READER == readerID) + || (ACS_ACR1552_1S_CL_READER == readerID)) { /* * We can't talk to the two CCID interfaces @@ -519,7 +521,8 @@ || (ACS_ACR1251K_DUAL_READER == readerID) || (ACS_ACR1252_1S_CL_READER == readerID) || (ACS_ACR1252IMP_1S_CL_READER == readerID) - || (ACS_WALLETMATE_1S_CL_READER == readerID)) + || (ACS_WALLETMATE_1S_CL_READER == readerID) + || (ACS_ACR1552_1S_CL_READER == readerID)) /* only 2 interfaces for this device */ max_interface_number = 1; @@ -790,7 +793,8 @@ || (ACS_ACR1252_1S_CL_READER == readerID) || (ACS_ACR1252IMP_1S_CL_READER == readerID) || (ACS_WALLETMATE_1S_CL_READER == readerID) - || (ACS_ACR1581_1S_DUAL_READER == readerID)) + || (ACS_ACR1581_1S_DUAL_READER == readerID) + || (ACS_ACR1552_1S_CL_READER == readerID)) { /* use the next interface for the next "slot" */ static_interface = interface + 1; @@ -992,7 +996,14 @@ #ifdef __APPLE__ usbDevice[reader_index].multislot_extension = NULL; #else - usbDevice[reader_index].multislot_extension = Multi_CreateFirstSlot(reader_index); + /* + * If the reader has interrupt endpoint, init the multislot + * stuff. + */ + if (usbDevice[reader_index].has_interrupt) + usbDevice[reader_index].multislot_extension = Multi_CreateFirstSlot(reader_index); + else + usbDevice[reader_index].multislot_extension = NULL; #endif libusb_free_config_descriptor(config_desc); @@ -1041,13 +1052,17 @@ // Initialize isSamSlot usbDevice[reader_index].ccid.isSamSlot = FALSE; + /* Initialize the write delay. */ + usbDevice[reader_index].ccid.writeDelay = 0; + // The 2nd interface (composite device) is a SAM slot if ((readerID == ACS_ACR1281_1S_PICC_READER) || (readerID == ACS_ACR1251_1S_CL_READER) || (readerID == ACS_ACR1251U_C) || (readerID == ACS_ACR1252_1S_CL_READER) || (readerID == ACS_ACR1252IMP_1S_CL_READER) || - (readerID == ACS_WALLETMATE_1S_CL_READER)) + (readerID == ACS_WALLETMATE_1S_CL_READER) || + (readerID == ACS_ACR1552_1S_CL_READER)) { if (interface == 1) usbDevice[reader_index].ccid.isSamSlot = TRUE; @@ -1093,9 +1108,13 @@ goto end2; } - /* Disable card detection thread for APG8201-B2. */ + /* + * Disable card detection thread for APG8201-B2 or the reader + * which does not have interrupt endpoint. + */ if ((usbDevice[reader_index].ccid.readerID == ACS_APG8201_B2) - || (usbDevice[reader_index].ccid.readerID == ACS_APG8201_B2RO)) + || (usbDevice[reader_index].ccid.readerID == ACS_APG8201_B2RO) + || (!usbDevice[reader_index].has_interrupt)) { goto end; } @@ -1180,60 +1199,83 @@ int rv; int actual_length; char debug_header[] = "-> 121234 "; - int pos; - int len; - int delayed = FALSE; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); (void)snprintf(debug_header, sizeof(debug_header), "-> %06X ", (int)reader_index); - // Fix APG8201 and ACR85 ICC cannot receive command properly - // Add delay for APG8201 and ACR85 ICC - if ((usbDevice[reader_index].ccid.readerID == ACS_APG8201) || - (usbDevice[reader_index].ccid.readerID == ACS_ACR85_PINPAD_READER_ICC)) - { - delayed = TRUE; - } - // Workaround for ACR122U reader usbDevice[reader_index].last_write_size = length; - // Send command by dividing number of packets - pos = 0; - while (length > 0) + if ((ccid_descriptor->bInterfaceProtocol == PROTOCOL_ACR38) + || (usbDevice[reader_index].ccid.writeDelay > 0)) { - if (length > usbDevice[reader_index].bulkOutMaxPacketSize) - len = usbDevice[reader_index].bulkOutMaxPacketSize; - else - len = length; + int pos; + int len; - DEBUG_XXD(debug_header, buffer + pos, len); + // Send command by dividing number of packets + pos = 0; + while (length > 0) + { + if (length > usbDevice[reader_index].bulkOutMaxPacketSize) + len = usbDevice[reader_index].bulkOutMaxPacketSize; + else + len = length; - rv = libusb_bulk_transfer(usbDevice[reader_index].dev_handle, - usbDevice[reader_index].bulk_out, buffer + pos, len, - &actual_length, USB_WRITE_TIMEOUT); + if (len <= 0) + { + DEBUG_CRITICAL2("invalid packet size: %d", len); + return STATUS_UNSUCCESSFUL; + } - if (rv < 0) - { - DEBUG_CRITICAL5("write failed (%d/%d): %d %s", - usbDevice[reader_index].bus_number, - usbDevice[reader_index].device_address, rv, libusb_error_name(rv)); + DEBUG_XXD(debug_header, buffer + pos, len); - if (LIBUSB_ERROR_NO_DEVICE == rv) - return STATUS_NO_SUCH_DEVICE; + rv = libusb_bulk_transfer(usbDevice[reader_index].dev_handle, + usbDevice[reader_index].bulk_out, buffer + pos, len, + &actual_length, USB_WRITE_TIMEOUT); - return STATUS_UNSUCCESSFUL; - } + if (rv < 0) + { + DEBUG_CRITICAL5("write failed (%d/%d): %d %s", + usbDevice[reader_index].bus_number, + usbDevice[reader_index].device_address, rv, libusb_error_name(rv)); - if (delayed) - { - // Delay 10 ms - if (length > usbDevice[reader_index].bulkOutMaxPacketSize) - usleep(10 * 1000); + if (LIBUSB_ERROR_NO_DEVICE == rv) + return STATUS_NO_SUCH_DEVICE; + + return STATUS_UNSUCCESSFUL; + } + + /* Delay the write operation. */ + if ((usbDevice[reader_index].ccid.writeDelay > 0) + && (length > usbDevice[reader_index].bulkOutMaxPacketSize)) + { + usleep(usbDevice[reader_index].ccid.writeDelay * 1000); + } + + pos += len; + length -= len; } - pos += len; - length -= len; + return STATUS_SUCCESS; + } + + DEBUG_XXD(debug_header, buffer, length); + + rv = libusb_bulk_transfer(usbDevice[reader_index].dev_handle, + usbDevice[reader_index].bulk_out, buffer, length, + &actual_length, USB_WRITE_TIMEOUT); + + if (rv < 0) + { + DEBUG_CRITICAL5("write failed (%d/%d): %d %s", + usbDevice[reader_index].bus_number, + usbDevice[reader_index].device_address, rv, libusb_error_name(rv)); + + if (LIBUSB_ERROR_NO_DEVICE == rv) + return STATUS_NO_SUCH_DEVICE; + + return STATUS_UNSUCCESSFUL; } return STATUS_SUCCESS; @@ -1550,6 +1592,12 @@ usb_interface = get_ccid_usb_interface(desc, &num); + usbdevice->bulk_in = 0; + usbdevice->bulk_out = 0; + usbdevice->interrupt = 0; + usbdevice->has_interrupt = FALSE; + usbdevice->bulkOutMaxPacketSize = 0; + /* * 3 Endpoints maximum: Interrupt In, Bulk In, Bulk Out */ @@ -1561,6 +1609,7 @@ { usbdevice->interrupt = usb_interface->altsetting->endpoint[i].bEndpointAddress; + usbdevice->has_interrupt = TRUE; continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/src/ifdhandler.c new/acsccid-1.1.10/src/ifdhandler.c --- old/acsccid-1.1.9/src/ifdhandler.c 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/src/ifdhandler.c 2023-08-01 09:58:22.000000000 +0200 @@ -59,11 +59,7 @@ #include <iconv.h> -#if defined(__APPLE__) | defined(sun) #pragma pack(1) -#else -#pragma pack(push, 1) -#endif /* Structure for FEATURE_WRITE_DISPLAY */ typedef struct _WRITE_DISPLAY @@ -92,11 +88,7 @@ uint16_t wLcdMaxLines; /* Maximum number of lines that can be used */ } DISPLAY_PROPERTIES, *PDISPLAY_PROPERTIES; -#if defined(__APPLE__) | defined(sun) #pragma pack() -#else -#pragma pack(pop) -#endif /* Array of structures to hold the ATR and other state value of each slot */ static CcidDesc CcidSlots[CCID_DRIVER_MAX_READERS]; @@ -618,7 +610,8 @@ || (ACS_ACR1251K_DUAL_READER == readerID) || (ACS_ACR1252_1S_CL_READER == readerID) || (ACS_ACR1252IMP_1S_CL_READER == readerID) - || (ACS_WALLETMATE_1S_CL_READER == readerID)) + || (ACS_WALLETMATE_1S_CL_READER == readerID) + || (ACS_ACR1552_1S_CL_READER == readerID)) *Value = 2; /* 3 CCID interfaces */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acsccid-1.1.9/src/supported_readers.txt new/acsccid-1.1.10/src/supported_readers.txt --- old/acsccid-1.1.9/src/supported_readers.txt 2023-03-15 09:45:30.000000000 +0100 +++ new/acsccid-1.1.10/src/supported_readers.txt 2023-08-01 09:58:22.000000000 +0200 @@ -65,6 +65,10 @@ 0x072f:0xb501:ACS ACR40T ICC Reader 0x072f:0xb504:ACS ACR40 FW_Upgrade +# ACR40U +0x072f:0xb506:ACS ACR40U ICC Reader +0x072f:0xb505:ACS SCR FW_Upgrade + # ACR83U-A1 0x072f:0x90d2:ACS ACR83U @@ -233,6 +237,11 @@ # ACR1311U-N1 0x072f:0x2258:ACS ACR1311 PICC Reader +# ACR1552U-M1/M2 +0x072f:0x2303:ACS ACR1552 1S CL Reader +0x072f:0x2308:ACS ACR1552 CL Reader +0x072f:0x2302:ACS ACR1552 USB FW_Upgrade + # ACR1581U-C1 0x072f:0x2301:ACS ACR1581 1S Dual Reader 0x072f:0x2300:ACS ACR1581 USB FW_Upgrade