ACS Smart Card Android Library
Advanced Card Systems Ltd.



Introduction
------------

This library provides classes and interfaces for communicating with ACS smart
card readers.

To install the library to your development environment, see the section
"Installation".



Release Notes
-------------

Version: 1.1.5
Release Date: 25/6/2019

Supported Readers

VID  PID  Reader
---- ---- ---------------------------
072F B301 ACR32U-A1
072F B304 ACR3201-A1
072F B305 ACR3201
072F 8300 ACR33U-A1
072F 8302 ACR33U-A2
072F 8307 ACR33U-A3
072F 8301 ACR33U
072F 9000 ACR38U
072F 90CF ACR38U-SAM
072F 90CC ACR38U-CCID/ACR100-CCID
072F 90D8 ACR3801
072F B100 ACR39U
072F B101 ACR39K
072F B102 ACR39T
072F B103 ACR39F
072F B104 ACR39U-SAM
072f B10C ACR39U-U1
072F B000 ACR3901U
072F 90D2 ACR83U-A1
072F 2011 ACR88U
072F 8900 ACR89U-A1
072F 8901 ACR89U-A2
072F 8902 ACR89U-A3
072F 1205 ACR100I
072F 1204 ACR101
072F 1206 ACR102
072F 2200 ACR122U/ACR122U-SAM/ACR122T
072F 2214 ACR1222U-C1
072F 1280 ACR1222U-C3
072F 2207 ACR1222U-C6
072F 222B ACR1222U-C8
072F 2206 ACR1222L-D1
072F 2225 ACR1222L
072F 222E ACR123U-A1
072F 2237 ACR123U
072F 2231 ACM123S1-Z1
072F 2203 ACR125
072F 221A ACR1251U-A1
072F 2229 ACR1251U-A2
072F 225F ACR1251T
072F 2260 ACR1251U-M1 (FARSAFE)
072F 2218 ACR1251U-C (SAM)
072F 221B ACR1251U-C
072F 2232 ACR1251UK
072F 2242 ACR1251U-C1
072F 2238 ACR1251U-C9
072F 224F ACM1251U-Z2
072F 223B ACR1252U-A1
072F 223E ACR1252U-A2
072F 2244 ACR1252U-A1 (PICC)
072F 2259 ACR1252U-A1 (IMP)
072F 223F ACR1255U-J1
072F 2239 ACR1256U
072F 2211 ACR1261U-C1
072F 2252 ACR1261U-A
072F 2100 ACR128U
072F 2224 ACR1281U-C1
072F 220F ACR1281U-C2 (qPBOC)
072F 2223 ACR1281U    (qPBOC)
072F 2208 ACR1281U-C3 (qPBOC)
072F 0901 ACR1281U-C4 (BSI)
072F 220A ACR1281U-C5 (BSI)
072F 2215 ACR1281U-C6
072F 2220 ACR1281U-C7
072F 2233 ACR1281U-K (PICC)
072F 2234 ACR1281U-K (PICC + ICC)
072F 2235 ACR1281U-K (PICC + ICC + SAM)
072F 2236 ACR1281U-K9 (PICC + ICC + 4SAM)
072F 2213 ACR1283L-D1
072F 222C ACR1283L-D2
072F 2258 ACR1311U-N1
072F 224A AMR220-C
072F 8201 APG8201-A1
072F 8206 APG8201-B2
072F 9006 CryptoMate
072F 90DB CryptoMate64
072F B200 CryptoMate T1
072F B106 CryptoMate T2
072F B112 CryptoMate EVO

System Requirements

- Android 3.1 (Honeycomb) or above.

Development Environment

- ADT r23.0.2 or above.
- ADT Bundle is recommended. See Android Developers [1] for more information.

[1] http://developer.android.com/



Installation
------------

1. To try the demo project, select Import from File menu on Eclipse. Choose
   "ReaderTest" to import to your workspace.

2. You can also run the demo project without Eclipse installed. Copy
   "ReaderTest.apk" to your Android device. Launch the installation by clicking
   the file icon on any File Explorer application.

3. To use the class library to your project, copy "acssmc-x.y.z.jar" to the
   "libs" folder of your project.



History
-------

Library

v1.1.5 (25/6/2019)
1. Add the following readers support:
   ACR1251T
   ACR1251U-M1 (FARSAFE)
   ACR3201
   CryptoMate EVO
2. Fix null reader name problem in Reader class.
3. Fix ArrayIndexOutOfBoundsException and InsufficientBufferException for
   extended APDU in transmit() method of Reader class.
4. Enable ICC extended APDU for ACR1281U-C1 >= v526.

v1.1.4 (18/1/2018)
1. Add the following readers support:
   ACR1261U-A
   ACR1311U-N1
   ACR1252U-A1 (IMP)
   AMR220-C
   APG8201-B2
2. Try 10 times for USB read error.
3. Set default PTS if PC_to_RDR_SetParameters failed in setProtocol() method of
   Reader class.
4. Fix incorrect slot number for reader with multiple CCID interfaces.
5. Fix missing PCB in T1 IFS response.
6. Fix missing PCB in T1 RESYNCH request.
7. Enable specific I/O controls and TLV properties for APG8201-B2 in control()
   method of Reader class.
8. Process IOCTL_IFD_DISPLAY_PROPERTIES, IOCTL_GET_KEY for APG8201-B2 and
   IOCTL_WRITE_DISPLAY for APG8201-B2 in control() method of Reader class.
9. Throw communication error in processing ACR83 specific I/O controls in
   control() method of Reader class.

v1.1.3 (31/3/2016)
1. Add the following readers support:
   ACR1251U-C9
   ACR1255U-J1
   ACR3201-A1
   ACM1251U-Z2
   ACR39U-U1
2. Update the target to Android 5.1.1.
3. Remove WTX delay in transmit() method of Reader class.
4. Fix incorrect Fl/Dl value in setProtocol() method of Reader class.
5. Allow non-CCID interfaces in open() method of Reader class.
6. Set card present if it is SAM slot.
7. Force to claim the interface if it failed in open() method of Reader class.
8. Read the card state from the interrupt endpoint asynchronously.
9. Trigger the state change on the thread.

v1.1.2 (30/6/2014)
1. Fix a bug that the card state of SAM slot is changed to absent if power down
   action is applied.
2. Add the following readers support:
   ACR32U-A1
   ACR38U
   ACR38U-SAM
   ACR3901U
   ACR1222L
   ACR123U-A1
   ACR123U
   ACM123S1-Z1
   ACR1251U-C (SAM)
   ACR1251U-C
   ACR1251UK
   ACR1251U-C1
   ACR1252U-A1
   ACR1252U-A2
   ACR1252U-A1 (PICC)
   ACR1256U
   ACR1261U-C1
   ACR1281U-K (PICC)
   ACR1281U-K (PICC + ICC)
   ACR1281U-K (PICC + ICC + SAM)
   ACR1281U-K9 (PICC + ICC + 4SAM)
   CryptoMate
   CryptoMate T1
   CryptoMate T2
3. Do not fall through to cold reset when doing the warm reset.
4. Change the delay of cold reset to 10 ms.
5. Set the parameters if the card state is specific in power() method of Reader
   class.
6. Retry the warm reset if it failed.
7. Handle the time extension request from reader.
8. Exit if the default PTS values is tried in setProtocol() method of Reader
   class.
9. Update the target to Android 4.4.

v1.1.1 (12/7/2012)
1. Add the following readers support:
   ACR39U
   ACR39K
   ACR39T
   ACR39F
   ACR39U-SAM
   ACR88U
   ACR89U-A1
   ACR89U-A2
   ACR89U-A3
   ACR125
   ACR1251U-A1
   ACR1251U-A2
   ACR1281U-C2 (qPBOC)
   ACR1281U    (qPBOC)
   ACR1281U-C3 (qPBOC)
   ACR1281U-C4 (BSI)
   ACR1281U-C5 (BSI)
   ACR1281U-C6
   ACR1281U-C7
   ACR1283L-D1
   ACR1283L-D2
   CryptoMate64

v1.1.0 (18/5/2012)
1. Add the following readers support:
   ACR83U-A1
   APG8201-A1
2. Add utility classes Features, PinVerify, PinModify, PinProperties,
   TlvProperties and ReadKeyOption to support PC/SC 2.0 Part 10 and
   ACR83/APG8201 specific controls.
3. Handle PC/SC 2.0 Part 10 and ACR83/APG8201 specific controls in
   Reader.control().

v1.0.0 (30/12/2011)
1. New Release



Demo

v1.1.3 (12/10/2018)
1. Set the response size to 65538 in TransmitTask of MainActivity.

v1.1.2 (8/5/2015)
1. Update the target to Android 5.1.1.

v1.1.1 (7/11/2013)
1. Fix a bug that command and response will be overwritten if multiple commands
   are sent in TransmitTask.
2. Update the target to Android 4.4.

v1.1.0 (18/5/2012)
1. Update the layout to handle PC/SC 2.0 Part 10 and ACR83/APG8201 specific
   controls.
2. Log the control code.

v1.0.0 (30/12/2011)
1. New Release



File Contents
-------------

API Documentation:  doc
Sample Application: ReaderTest
Android Package:    ReaderTest.apk
Class Library:      ReaderTest\libs\acssmc-1.1.5.jar



Support
-------

In case of problem, please contact ACS through:

Web Site: http://www.acs.com.hk/
E-mail: info@acs.com.hk
Tel: +852 2796 7873
Fax: +852 2796 1286



-------------------------------------------------------------------------------
Copyright (C) 2011-2019 Advanced Card Systems Ltd. All Rights Reserved.

No part of this reference manual may be reproduced or transmitted in any from
without the expressed, written permission of ACS.

Due to rapid change in technology, some of specifications mentioned in this
publication are subject to change without notice. Information furnished is
believed to be accurate and reliable. ACS assumes no responsibility for any
errors or omissions, which may appear in this document.

Android is a trademark of Google Inc.
