You are on page 1of 72

Document Reader SDK Change History

Document Reader SDK Change History

Important Notices
By using the Gemalto Document Reader AT9000 MK2 product range (the “Product”), you (the “User”), agree to be bound by the
following terms and conditions.
Because use of the Product varies widely and is beyond the control of Gemalto the user is responsible for determining whether the
Gemalto Product is fit for a particular purpose and suitable for user’s application. Warranties, remedies and limitations may vary by
product and jurisdiction.
Gemalto offers a range of security products to protect against article and/or document identity counterfeit, alteration, diversion,
duplication, simulation and substitution. However no security products can guarantee absolute protection against attempts to
successfully accomplish these illegal activities.
Technical Information: The technical information, recommendations and other statements contained in this document are based
upon tests or experience that Gemalto believes are reliable, but the accuracy or completeness of such information is not
guaranteed.
Warranty, Limited Remedy and Limited Liability:
THE FOLLOWING IS MADE IN LIEU OF ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING THE IMPLIED WARRANTY
OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Gemalto warrants that its Product will meet Gemalto’s
written specifications at the time of shipment. Gemalto’s obligation and your exclusive remedy shall be, at Gemalto’s option, to
replace or repair the Gemalto Product or refund the purchase price of the Gemalto Product. IN NO EVENT WILL GEMALTO BE
LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED TO
LOSS OF PROFITS, IN ANY WAY RELATED TO THE PRODUCTS REGARDLESS OF THE LEGAL THEORY ASSERTED
© Gemalto 2018. All rights reserved.
Scotch Brite is a trademark of 3M. Used under license in Canada.
Windows is a registered trademark or trademark of Microsoft Corporation in the United States and/or other countries. Kensington is
a registered trademark of ACCO Brands.
No part of this publication may be reproduced, transcribed, stored in a retrieval system or transmitted in any form whatsoever,
without the prior written consent of Gemalto.
U.S. Pat Nos. 6,019,287 and 6,611,612
Gemalto reserves the right to make changes to its Products at any time and without notice.

Office Locations

The Americas Europe, Middle East and Africa


1545 Carling Avenue, Suite 700 6 rue de la Verrerie
Ottawa, Ontario CS 20001
Canada K1Z 8P9 92197 Meudon
France
Telephone: +1 800 581 2631
technical.service@gemalto.com Telephone: +33 1 55 01 50 00

Asia, Pacific and Australia


12 Ayer Rajah Crescent
139941 Singapore
Singapore

Telephone: +65 6317 3333

Page 2 of 72
Document Reader SDK Change History

1. Overview
This document lists the changes that have been made within each release of the API. Note that the High
Level API is implemented using the Low Level API, so changes made within the Low Level can have an
impact on High Level API users. For a detailed description any API call, please refer to the latest API
documentation.

Page 3 of 72
Document Reader SDK Change History

2. Document Reader SDK V3


1.1 Version 3.4.2.x – April 2018
NOTE: See below for 3.4.0.x changes included in the 3.4.2.x releases. VC Runtime upgraded to vc14, as
explained in 3.4.0.x section.
1.1.1 API Changes
The best way to see all structure and functional changes is to run WinDiff on the SDK Include folder of the
previous SDK version and this newer SDK version. However, here is a list of affected structures and
methods. Most changes are due to the added support for the iDL/eDL RF applications.
• Structures (MMMReaderDataTypes.h)
o PASSPORT_APPLICATION
o APPLICATION_MODE
o MMMReaderRFItem
• Structures (MMMReaderHighLevelAPI.h)
o MMMReaderDataType
• Structures (MMMReaderSettings.h)
o RFProcessSettings
o RFIDDataToSend
o LedSettings
o DocDetectSettings
o ImgSettings
1.1.2 API
• Added support for new AT10K USB document readers.
• Added [RFProcSettings] ValidateSecuritySetupFields
(puRFIDSettings.puRFProcessSettings.puValidateSecuritySetupFields) setting.
Determines whether or not to perform extra validation on chip security setup fields for BAC/SAC
(DocNum, DOB, DOE, etc.) Including checking for misread characters and checksum errors in those
fields.
Default is disabled where only length checks on security setup fields for BAC/SAC
Enable to help prevent sending bad values to chips that may then increase their APDU timeouts
extensively.
• High Level – added [LedSetting] DocumentStatusLedTimeout
(LedSettings.puDocumentStatusLedTimeout) to set how long the success/failure status led stays on after
processing a document. (default = 10 seconds, 0 = until the document is removed)
• Added documentation of the AutoOrientation setting to the Application.INI, which can be used to correctly
orient document images.
• Added [DocDetect] CropToLaminate setting, which if set to 1, will attempt to provide cropping of TD30
and TD36 to include clear laminate edges. By default, clear laminate may be cropped out of documents.
• Improved barcode decoding time
o Added [Img] BarcodeThreads setting to allow for multi-threaded barcode decoding when using
multiple decoders for increased speed. Default = 0 (use max number of CPU cores). Set to 1 to
use the traditional single barcode thread. (puImageSettings.barcodeThreads)

Page 4 of 72
Document Reader SDK Change History

• Improved reading of cell phone barcodes on very dark or very bright phones
o Added [Img] EnhancedDarkObjectBarcodeDecoding setting, enabled by default, to handle
decoding barcodes on very dark and very bright cell phones. Set to 0 to disable the feature.
(puImageSettings.enhancedDarkObjectBarcodeDecoding)
o Added [Img] UseAmbientForBarcodeDarkObjects setting, enabled by default, to use the ambient
light image for cell phone barcode decoding. Set to 0 to use the traditional white light visible
image. (puImageSettings.useAmbientForBarcodeDarkObjects)
• Updated AAMVAParser.xml to include the 2016 AAMVA version for parsing of some more recently issued
DL.
• Added support for reading of the ISO 18013 iDL and ISO-CEI TR 19446 eDL applications (DG1 to 14).
To test, use HLNonBlocking samples and enable iDL/eDL applications and eDL RF data items. Or, use
the more low level eMRTDReader, making sure to enable iDL/eDL applications from the menu and eDL
RF data items from the RF settings.
o The Application.INI file in the CONFIG/EDL folder may be used in place of the CONFIG
Application.INI to automatically enable basic eDL reading. You may also compare the two files to
see how to enable eDL reading.
• Added parsing of mandatory eDL/iDL data groups, including DG1 Data, DG6 Photo and DG7
Fingerprints.
• See RF_APPLICATION_MODE (puRFIDSettings.puRFProcessSettings.puRFApplicationMode) to
specify which application(s) to attempt reading.
• Fixed option to read EF.ATR to determine the read binary buffer size used when reading data groups
from the chip. See READ_BINARY_USE_EFATR_IF_PRESENT
(puRFProcessSettings.puReadBinaryUseEFATRIfPresent).
• Disabled FaceFind used for photo location/document orientation on passport sized documents by default
on all readers except the CR5400 ID card reader (which cannot accept passports anyways). The reason
this was done is only to preserve original fixed photo crop on passports because in some cases FaceFind
could find the face incorrectly on a passport. ID card sized documents will still use FaceFind for photo
location on all readers by default. To enable FaceFind for passports, set the following in the
Application.INI or ImgSettings.faceFindPassport in code.
[Img]
FaceFindPassport=1
To disable FaceFind entirely, set the following in the Application.INI or ImgSettings.faceFind in code.
[Img]
FaceFind=0

Page 5 of 72
Document Reader SDK Change History

1.2 Version 3.4.0.x – Aug 2017


NOTE: All updates and Rollup Patches in previous version 3.3.7.7 below are included in 3.4.0.x
See below for details of version 3.3.7.7 and rollup patches.
1.2.1 VC Runtime Changes
Version 3.4.x.x and above of the SDK is upgraded to use the Microsoft VC14 runtime and Visual Studio
2015. The SDK installer automatically installs the applicable vc14 merge modules for vc14 CRT and
MFC. A copy of the vc14 redistributable installer (vc14_redist.exe) and merge modules (MSM) are also
included in the SDK BIN folder if needed for your own deployment installation process. EXE or the 2
MSM files may be used.
1.2.2 Driver
Updated naming and updated SCM drivers for legacy PV series readers.
1.2.3 API Changes
The best way to see all structure and functional changes is to run WinDiff on the SDK Include folder of the
previous SDK version and this newer SDK version. However, here is a list of affected structures and
methods. Most changes are due to the added support for the eID RF application and BSI 5.2.

NOTE: the MMMReaderRFPasswordCallback changed with one parameter changing from a bool
(aOnlyAcceptsMRZ) to an enum (AllowedPasswordMethods) to handle more use cases for eID.

• Structures (MMMReaderDataTypes.h)
o AccessControlPasswordMethod
o AllowedPasswordMethods
o RFAccessControlPasswords
o MMMReaderRFPasswordCallback
o CERT_TYPE
o PASSPORT_APPLICATION
o MMMReaderTerminalType
o RF_APPLICATION_MODE
o MMMReaderRFItem
o MMMReaderPlace
o MMMReaderPeriodRange
o MMMReaderPeriod
o MMMReaderValidityPeriod
o MMMReaderIssuingEntity
o MMMReaderGeneralPlace
o MMMReaderPlaceOfBirth
o MMMReaderMultiplePlaces
o MMMReaderPlaceOfResidence

Page 6 of 72
Document Reader SDK Change History

o eIDAuxiliaryData
o eIDRestrictedIdentificationData
o eDLVehicleCategory
o eDLDataGroup1Data

• Structures (MMMReaderHighLevelAPI.h)
o MMMReaderDataType
• Structures (MMMReaderSettings.h)
o RFProcessSettings
o RFIDDataToSend
o CameraSettings
• Methods (MMMReaderLowLevelAPI.h)
o MMMReader_RFOpenEx
o MMMReader_RFSelectApplication
o MMMReader_RFWaitForOpenEx
o MMMReader_RFValidateSignatureEx
o MMMReader_RFValidateSignedAttributesEx
o MMMReader_RFValidateDocSignerCertEx
1.2.4 Low Level API
• Added support for reading of the German eID application (DG1 to 22), including parsing of the data
groups.
• eID support for BSI 5.2 as an Inspection System (IS) and Authentication Terminal (AT) for profiles
TS_PACE, TS_TA, TS_CA, TS_eID, and TS_bio.
• Added support for PACE-CAM. PACE-CAM is disabled by default. If enabled, the SDK will select the
PACE-CAM algorithm if supported by the chip, which will perform PACE and Chip Authentication. PACE-
CAM is an optional feature and does not have to be enabled, as all chips must support at least one other
PACE algorithm if they provide a PACE-CAM algorithm. Settings are
puRFProcessSettings.puPaceCamEnabled or [RFProcSettings] PACE_CAM_ENABLED=0 or 1 in the
Application.INI.
• Added settings for USBTimeout and USBPacketSize. These should ONLY be used if attempting to use
our readers in a USB Redirection setup, such as Citrix. The USBTimeout can be increased and the
USBPacketSize can be decreased to help on slow networks with USB redirection. Defaults are 5
seconds (USBTimeout) and 5242880 bytes (USBPacketSize). For a slower network, increase the timeout
and decrease packet size. For example, 15 seconds and 5120 bytes. Settings are [Camera]
USBTimeout=? and USBPacketSize=? in Application.INI or CameraSettings.usbTimeout and
CameraSettings.usbPacketSize. NOTE: USBPacketSize must be a multiple of 64.
NOTE: firmware detection (ActiveReader) may also be needed for best performance in a USB redirection
environment. If not using firmware detect, then images are being transferred constantly from reader to
PC for ActiveVideo document detection. To enable firmware document detect, set
[DocDetect]
ActiveReader=1
ActiveVideo=0

Page 7 of 72
Document Reader SDK Change History

in the Application.INI

Page 8 of 72
Document Reader SDK Change History

1.4 Version 3.3.7 – April 2017


1.4.1 Deployment
With the addition of face find for photo in the high level API (see Version 3.3.6 below), deployments of the
3M SDK using the high level API and CD_IMAGE_PHOTO require 2 additional files:
haarcascade_eyes.xml
haarcascade_face.xml
Without them, the high level API will error if trying to retrieve the photo from a document read.
If not retrieving the photo from the document, these files are not necessary.
To turn off FaceFind for photo, see the last item in 1.4.4 below.
1.4.2 Driver
• Fix driver installer (3MPageReaderDriversSetup.EXE) to use correct registry key version.
1.4.3 Applications
• BarcodeTester – fix possible application crash if no scanner connected.
• OutputWedge – added support for global variables by adding “global.” to the front of the variable name,
such as $global.myvar, which allows creation of variables based on data items, which can be used
throughout the script to create file names based on document numbers, etc.
1.4.4 High Level API
• Added a DocDetect setting called SearchAreaMultiplier (DocDetectSettings.searchAreaMultiplier) used in
relation to ActiveVideo document detection (default). This can be used to move the start of the document
detection zone closer or further away from the front of the reader. The previous value was 4, which
means to start searching for documents at the camera height * 0.4 from the front of the reader through to
the back of the reader capture area. (From just below half of the reader glass to the back). The default
value is now 0, which allows detecting documents placed closer to the front of the reader more easily. To
revert to the old setting, set SearchAreaMultiplier = 4
• Added improvements to detection of white cell phones and/or cell phones with large cases appearing
white during DarkObjects detection. In the past, improvements were made to the reading of barcodes on
cell phones, which are detected as dark objects when enabled. However, white cell phones could appear
as normal white documents and decrease the success of barcode reading. White cell phones should now
be detected as dark objects when DarkObjects detection is enabled, which allows for improved barcode
reading on the phone.
• ePassport – select the strongest chip authentication algorithm available so that AES is used in the case of
multiple.
• ePassport – fix issue with chip authentication failing on some German passports due to the keyid having
leading 0s. Trim the leading 0s before sending keyid to the chip.
• Fix issue potentially causing Data Matrix barcode data to be returned multiple times for the same
barcode.
• Include OpenCV for face find as a static lib so that dlls are not required for deployment. NOTE:
Haarcascade_eyes.xml and haarcascade_face.xml are still required for High Level deployment where the
PHOTO and/or AutoOrientation by PHOTO is used.
• Add support for reading ISO 18013 IDL MRZ.
• Cropping fix to remove over-crop of right edge on smaller documents.
• Fix misread of some Chinese 1 line MRZ.

Page 9 of 72
Document Reader SDK Change History

• Fix misread of Italian ID MRZ.


• Change to leave arm/document position up in the CR5400 when reader state is set to DISABLED. This
allows an integrator to control when the document is inserted by handling certain high level events,
inserting the document and changing the reader state to ENABLED. Then back to DISABLED on end of
document data.
• Fix SDK loading of DLLs to search local SDK path before system path. This could be an issue if using
multiple 3M SDKs on the same machine and one of them is on the system path.
• ePassport - send length expected byte during chip authentication with AES general authenticate. Some
chips return error if not present.
• ePassport - fix Active Authentication issue with RSA causing signature validation failure for some public
keys due to usage of an incorrect key size function when performing signature validation.
• ePassport - fix Active Authentication issue with RSA on some chips with key sizes of 256 bytes or greater.
Some chips expect internal authenticate with extended length, so now use extended length command for
larger key sizes.
• ePassport – fix for reading LDS 1.8 EF.SOD.
• PDF417 decoder update to improve reading of the Illinois DL.
• PDF417 fix to prevent possible memory violation.
• DataMatrix decoder fix to prevent possible memory violation and hang found with white cell phone.
• If using darkobject detection for cell phones, updates to help prevent false detect and better detect.
• Fix CR5400 issue with the High Level Blocking API barcode decoding. The barcode data, if any, from the
first image captured (side1) was never being returned.
• Fix CR5400 miscrop on some ID cards with dark colored top or bottom edges.
• Fix cropping crash with white iphone.
• Fix bug in FILE_SIZE loging strategy that could cause the logger to not create new file numbers because
it incorrectly replaced number values in the path of the log and not simply the log file name.
• Update FILE_SIZE logging strategy to retain a maximum of 10 log files. This allows the MaxLogFileSize
setting to then control how large these 10 files grow.
• Added setting ImgSettings.faceFind to turn off using face find algorithm for CD_IMAGE_PHOTO.
FaceFind is on by default and allows finding the photo on various document types, such as ID cards. To
turn off using face find in the Application.INI, use
[Img]
FaceFind=0
1.4.5 Rollup Patches
1.4.5.1 Rollup 8
Fix OCR misread of Chinese 3 line due to OCR bug introduced in 3.3.7.7
1.4.5.2 Rollup 7
• ePassport - add some Terminal Auth algorithms for ECDSA SHA512, SHA384 and RSA SHA 512.
• Fix O/0 misreads of document number on Uruguay (URY) 3 line 30 ID cards.
• Add Bulgarian Motor Vehicle Registration OCR

Page 10 of 72
Document Reader SDK Change History

1.4.5.3 Rollup 6
• High Level SDK - update to choose MRZ with the least bad characters if more than one MRZ found (IR
and VIS). Only applicable if
[Img] CheckVisibleOcr=1 (ImgSettings.checkVisibleOcr)
• MSR AAMVA parser fix for cards that contain a pound symbol in track 3
1.4.5.4 Rollup 5
• ePassport - fix potential random SAC/PACE failure with some elliptic curve algorithms.
• Better detection of white iphone for barcode decoding.
• ePassport - wait longer when selecting passport if the chip is in-use by another application.
1.4.5.5 Rollup 4
• FaceFind improvements.
• Update to allow haar_cascade XML files to be placed in the SDK BIN or SDK CONFIG folder. Previously,
the XML files could only be placed in the application directory.
• Fix possible OCR misread due to support for variable witdth font in Rollup 3.
1.4.5.6 Rollup 3
• ePassport - fix SAC/PACE with custom curve parameters.
• Fix possible OCR/MRZ misreads on 2 line 44 docuemnts due to support for variable witdth font in Rollup
1. Variable width font on 2 line 44 is still supported.
• Fix issue that may cause a crash when shutting down the swipe reader and no swipe reader is
connected, after being connected when the swipe is initialized.
• DotNet wrapper fix for 64 bit SDK only to properly pass back AAMVA data. In some cases, due to a
marshalling error on 64 bit, the AAMVA data may not be received with the MMMReaderDotNet wrapper.
1.4.5.7 Rollup 2
• ePassport - fix Active Authentication failure with 2048 bit key sizes due to not sending the internal
authenticate with extended length
1.4.5.8 Rollup 1
• Add support to read mis-printed MRZ with variable width font on some 2 line 44 documents
• Fix some 1 line Chinese ID MRZ misreads
• ActiveAuthentication RSA SHA224 was missing
• Fix PACE random mapping calculation
• Better error checking for DG15 encoding and ActiveAuthentication
• Fix EF.SOD version check to allow LDS 1.8
• Fix Chip Auth with DiffeHellman and allow standard DH domain params

Page 11 of 72
Document Reader SDK Change History

1.5 Version 3.3.6 – Sept 2016


1.5.1 Face Find BETA
When the CD_IMAGEPHOTO data item is requested, the High Level API now uses face finding
technology to locate and crop the photo. In previous versions, the photo was only cropped to a fixed
location on passport sized documents without any knowledge of where the photo actually is located. The
SDK AutoOrientation feature can also be enabled to rotate documents based on the location of the face.

Photo Location
• CD_IMAGEPHOTO is documented in the 3M Page Reader Programmers Guide.
• CD_IMAGEPHOTO can be enabled by setting PhotoImage=1 in the Application.INI [DataToSend]
section, which is the default setting.
• A new data item was added, CD_IMAGEPHOTODATA, that is also returned if CD_IMAGEPHOTO is
enabled. CD_IMAGEPHOTODATA provides face find related information, including the location of the
face, location of the crop to photo and if the face was found on the front/rear image for dual sided
CR5400 readers. This allows for customized cropping of the face within the CD_IMAGEVIS /
CD_IMAGEVISREAR.
• See MMMReaderPhotoData in MMMReaderDataTypes.h or MMM.Readers.PhotoData (.NET)

AutoOrientation
• By default, documents are oriented by MRZ, Magstripe and PDF417 barcode location.
• Orientation by PHOTO (face) is now supported, but is not enabled by default, as this is not needed in
general circumstances.
• AutoOrientation can be set in the Application.INI [DataToSend] section. Set AutoOrientation=27 for all
orientation features (MRZ, MAGSTRIPE_TOP, BARCODE, PHOTO).
• See MMMReaderAutoOrientation in MMMReaderDataTypes.h for possible values. The default is
AutoOrientation=11 (MRZ, MAGSTRIPE_TOP, BARCODE).

1.5.2 High Level API


• Fixed some PDF417 decoder memory issues causing access violations.
• High Level QA API – fixed intermittent reading issue due to not waiting for
RF_APPLICATION_OPENED_SUCCESSFULLY before starting to read RF data.
• Cropping fix to better crop dark document with random pieces of white, such as the back of a boarding
pass with one or more white barcode stickers.

Page 12 of 72
Document Reader SDK Change History

1.6 Version 3.3.5.2 – August 2016


1.6.1 Misc
• Add PAGE_READER_HOME environment variable referencing the SDK installation path and add
PAGE_READER_HOME\Bin to system PATH during installation.
• Add CRSeriesConfigUtility for CR100 configuration.
1.6.2 High Level API
• Fixed auto-detection of CR100 swipe reader protocol in cases where the protocol stored on the reader is
a single character, such as “T”, for “TECS”. In the past, only the full protocol name was valid, but CR100
readers may be shipped with single character protocol names.

1.7 Version 3.3.5.1 – July 2016


1.7.1 High Level API
• Fix - AutoOrientation by PDF417 barcode was incorrectly finding and rotating by artifacts that were not
actually barcodes.
• Added options to MMMReader_CaptureImage method for raw image and anti-glare.
• Fix issue with CD_BACKEY_CORRECTION data item callback not getting called.
• Fix potential issue with CD_BACKEY_CORRECTION in .NET wrapper. In some cases, garbage data
could be introduced to the end of the MRZ when the corrected MRZ is larger than the incorrect MRZ, due
to a missing NULL terminator.
• PDF417 decoder fix to allow reading of barcodes with 3 or less rows of data.
1.7.2 Low Level API
• Fixed document type returned for generic CR and CT 3 line identity documents from Custom to Identity
type document.
• ePassport – use PCSC exclusive access when reading chip to prevent interference from other
applications trying to read the chip at the same time causing read failures.
• Fix to .NET 4.0 wrapper CodelineData structure to properly return the ImageSource.
• Added DocDetectSettings.activeReaderReaderWhiteThresh to control the percentage of white in the
ActiveReader firmware detect zone needed for detection. Possible values (25 (default), 12, 6). This
would allow detecting very small white documents with firmware detection, if necessary.
• ePassport – CERT_STORE change to check for overlapping DV cert when a newer DV cert is present,
but does not yet have an IS cert and the previous DV cert is still valid with an IS cert. This logic keeps the
older DV/IS cert, which is still valid, instead of throwing it away and using the new DV cert without an IS
issued yet.

Page 13 of 72
Document Reader SDK Change History

1.8 Version 3.3.4 – May 2016


1.8.1 High Level API
• Fix memory leak from PASSIVE_AUTHENTICATION status
• Fix issue with RF password callback being fired with no data when scanning a document after
disconnecting/reconnecting the reader or connecting the reader after the SDK is started.
• Added missing MMMReader_LL_AdjustSettingsByDPI call to LoadAndProcessFromScanDirectory()
function
• Added missing call to ClearDocumentData() at being of LoadAndProcessFromScanDirectory()
• Cropping fix to FindSides if using if using standard IR image for document location. HighLevel setting
(UseFirstImageCapturedForLocate=1). This could cause an overcrop of a smaller document if a finger is
also on the side of the document/ID card.
• Fixed missing enumeration values in .NET 2.0 legacy wrapper
• Added LoadFromScanDirectory to .NET wrapper
• Removed legacy RTE8000 wrappers
• Fixes to SWIPE connect/disconnect events not being sent to calling application
• Added support of the TECS protocol for the swipe reader
1.8.2 Low Level API
• Fix memory leak in the GetHash method used for passport operations
• Fix potential SAC memory leak
• Fix passport enumeration missing commas
• Add passport support for reading with larger buffer sizes and extended APDUs
• Fix potential memory leak in document location code FindTop
• Fix finding location of top document edge.
• PDF417 decoder improvements and fixes for potential memory leaks and access violations.
• RdrDev USB check for garbage image width/height
• Fixed a bug in the FILE_SIZE logging strategy where it was finding the second '.' in the path and not the
filename.
• Cropping fix for finding sides of some passports with PDF417 barcodes causing an undercrop of the right
edge.
• Change default RF read buffer size to 4096 (puRFProcessSettings.puReadBinaryBufferSize) from 220.
This value gets used if we determine the chip supports extended APDUs from its ATR and faster read
times are achieved. A read buffer size of 220 is used if we determine extended APDU is not supported
from the ATR. If EF.ATR is enabled (puRFProcessSettings.puReadBinaryUseEFATRIfPresent) and
present, then it overrides the buffer size.
• Add a fix for passports whose DG2 files are not encoded properly
• Added log message for Extended Length APDU support by parsing the ATR
• Cropping fix for top overcrop and undercrop (front of glass) of some ID cards
• Add firmware version to level 5 log
• Cropping updates to help avoid capturing fingers above ID cards.

Page 14 of 72
Document Reader SDK Change History

• Added support for IDTech mag stripe reader


• Modify logging to allow SDK log file to be opened for read during logging
• Updated MMMReaderRFPassowrdCallback comments in header file
• Improve reading of 1 line Chinese MRZ to avoid garbage data above the MRZ
• Cropping updates to prevent overcrop of non-standard Chinese AD card

Page 15 of 72
Document Reader SDK Change History

1.9 Version 3.3.3 – December 2015


1.9.1 Miscellaneous
• .NET applications and .NET wrapper are now built for .NET 4.0. .NET 2.0 wrapper is provided for
backwards compatibility.
1.9.2 Drivers
• 3MPageReaderDriversSetup.EXE updated to version 1.26.6, which installs the correct HID RF driver on
Windows 10 and disables a new Windows 10 Smart Card Device Enumeration Service (ScDeviceEnum)
that can cause RF failures for a few minutes after the reader is connected.
1.9.3 Applications
• HLNonBlockingContainer/HLBlockingTestContainer –
o Modified “Save Last Image” menu option to save selected image types/format in the SDK Data
folder. The Image Format setting (JPEG/BMP/PNG/TIFF) is now applicable when saving last
image.
o Added a check to verify the reader is in a safe state before saving any configuration changes.
• HLNonBlockingContainer
o Fix crash when connecting a legacy PV30 reader.
o Added check to ensure Scale Factor is within range when changing in the settings dialog.
o Added some code to the SDK sample showing how to parse the EF COM/SOD hash maps and
the DOC_SIGNER_CERT.
o Fixed file names on the Save Last image operation for rear images on the CR5400.
o Added support for saving of barcode images.
o Added a check to verify the reader is in a safe state before saving any configuration changes.
• LowLevelExample.NET – added call to DestroyCachedData before each document detect to avoid
memory leak.
• AgeVerifier
o Added silent run option if on the tray.
o Added SaveVisible, directory and imageFormat options.
o Added option to restore window from tray on newDocument event.
• OutputWedge – added options to control output for Unknown document and Bad Char documents.
• eMRTD – fixed issue when reading a non-ePassport document with a USB only powered reader.
1.9.4 High Level API
• Update parsing rules for 3-line 30 Chinese ID.
• Fix to prevent Kenyan VISA with no checksum from being treated as a standard passport with a
checksum error.
• Fix to parsing of old Romanian ID to return Nationality as empty “” instead of 132 as printed on the document. Newer
Romanian ID Nationality is returned as ROU.
• Update to support 3-line 30 Mexican Voter Card to treat Sex as ALPHA to allow reading of non-ICAO H (male) and F
(female) values.
• Add support for 1-line 30 Dutch DL.
• Add support for 3-line 30 Hong Kong / Macau Entry Card starting with CT instead of CR.

Page 16 of 72
Document Reader SDK Change History

• Fix CheckVisibleOCR option to ensure that, when enabled, the check is performed when no MRZ is found
on the first OCR attempt.
• Fix marshalling of .NET CodelineData MrzOnRearSide and ExpiredDocumentFlag members.
• PDF417 decoder update to read truncated barcodes, such as some older Ohio DL.
• PDF417 decoder updates for better reading of distorted barcodes.
• Updated the crop to codeline functionality to accurately crop to the area of the document where the MRZ
(codeline) is searched.
• ePassport – fixed issue when performing Active Authentication with 2048- bit key sizes caused by not
reading all of the data from the chip.
• Added TIFF as a supported output file format.
• When post processing image, only rotate to handle cards at 90 degrees if an ID card size document. This
allows documents that are tall, such as HK/Macau arrival departure cards, to remain oriented correctly.
• Fix issue in QA mode when using an MK2 HighRes caused by the higher DPI of the reader.
• Added despeckleCodelineImage flag to OCRSettings to perform removal of stray black pixels in the
thresholded image to help reading MRZ with extra noise.
• Added alignTopBottom flag to ImgSettings to perform alignment/scaling of the top/bottom card edges to
be parallel to help correct distortion of cards in the CR5400.
• Added some missing enumerations to the Java wrapper.
• Fix crash when detecting ID cards on the KR2400 and when unplugging the USB of the KR2400 after
reading a document.
• ePassport – fixed issue with 1 line 30 documents failing BAC due to MRZ params not being parsed
correctly.
• ePassport – fix issue with passport failing to read the first time.
• Fix issue not allowing ActiveVideo to be turned off, which is used for some legacy RTE8000 readers in
kiosks.
• AAMVA – added IIN number used by Nunavut and Northwest Territories.
• Java – exposed a method, ParseCodelineData, to parse a codeline string.
• Fix cropping issues on legacy RTE8000 1 MP readers.
• Add support for Chinese 1 line ID starting with “C<”, in addition to the already supported “CS”
• Fix issues when using the RTE8000 with the QANonBlockingExample application.
• Improved SDK initialization speed.
• ePassport – prevent CD_SCDG1_CODELINE from being returned with empty data when there is no
ePassport application.
• PDF417 decoder updated to include CR/LF as ASCII to show ASCII result if all ASCII barcode.
• PDF417 decoder improved to read barcodes with less than perfect start/end markers.

Page 17 of 72
Document Reader SDK Change History

1.10 Version 3.3.2 – June 2015


1.10.1 API Changes
• RFIDDataToSend – added puEFComDGMap, puEFSodHashMap and puGetDocSignerCert. Allows for
bitmap of EF.COM data groups, bitmap of EF.SOD DG hashes and DocSignerCert from the EF.SOD, if
present. CD_EFCOM_DG_MAP, CD_EFSOD_HASH_MAP and CD_DOC_SIGNER_CERT in High Level
API.
• Low Level - Added aDarkObjectFound parameter to MMMReader_LocateDocumentEx,
MMMReader_LocateDocumentTwoSidedEx, MMMReader_CameraDetectDocumentEx and
MMMReader_CameraDetectDocumentTwoSidedEx methods. This allows to determine if a cell phone
was detected versus a normal white document.
• Low Level – Added method MMMReader_GetDetectDocumentState to return the detect document state,
which can be used to determine if the same document is on the scanner after state changes or when
performing independent captures. (MOVEDOC = -2, NODOC = -1, SAMEDOC = 0, NEWDOC = 1)
• High Level – Added MMMReader_CaptureImage method to allow on-demand capture of images using
high level image settings.
1.10.2 Miscellaneous
• Fixed CR5400 user guide shortcut.
• Recompiled OpenSSL library (rt_libeay32.dll) for VC2010, as it was still compiled for VC2005 and we no
longer use VC2005.
• Added newline to end of #Swipe.ini configuration file so that the last option is recognized properly.
• Added support for legacy Ottawa PVxx readers that use different white background logic.
• Updated user guides with latest contact information.
1.10.3 Applications
• OutputWedge
o Added new item INPUT_SOURCE to be set as OCR or MAG to indicate the device source for the
data.
o Fixed bug with string task because the “str” identifier was improperly defined as string.
o Fixed OutputWedgeSysTray.ini to use the correct FullPageSampleScript.xml by default.
• LowLevelAPITestContainer
o Ensure locate has been called before post processing an image with bogus DocPosition values.
o Fixed bug causing black image to be returned after PostProcess with an RTE8000 connected and
the Colour setting used.
o Fixed Plugin page to properly decode barcodes.
o Added Reader Name button to RF tab to get the connected RF reader name used by ePassport.
• ReaderExpo
o Add saving of the ePassport DG2_PHOTO into application image save directory.
• HLNonBlockingContainer/HLBlockingTestContainer/HLNonBlockingExample.NET/HLBlockingExample.N
ET
o Added more imaging and detection configuration options in the Data To Send dialog.
• AgeVerifier

Page 18 of 72
Document Reader SDK Change History

o Added existing AgeVerifier application to SDK and added support for the CR5400.
o Added ability to show biographic data from MRZ or AAMVA.
• HLNonBlockingContainer
o Added EFCOM_DG_MAP, EFSOD_HASH_MAP and DOC_SIGNER_CERT ePassport options.
• BarcodeTester
o Updated Visible Image option to perform the same as the High Level decoding.
o Added Crop option.
o Updated Dark Objects option to perform like the High Level decoding by using barcode image
settings for cell phones (dark objects) and Visible (if selected) for white documents.
1.10.4 Plugins/Decoders
• Fix decoder crashes sometimes caused by dark images, composite barcodes or some uncropped
documents.
• Fix error decoding some PDF417 barcodes that are pre-cropped to the barcode instead of the entire
scanner image.
• Add support for PDF417 barcodes that are missing some top and/or bottom rows.
• Improved reading of angled barcodes, such as when an ID card is placed at an angle on the scanner.
• High Level API – Improved barcode reading on KR9000 when using DarkObject detection for cell phones.
This is accomplished by using the Visible (grayscale) image with Ambient Removal (if enabled/default) for
normal white documents and the Visible (grayscale) barcode image with no Ambient Removal for cell
phones. This allows for better decoding on white/non-cell phone documents, such as ID cards.
• High Level API – Improved reading barcodes on darker cell phones with brighter image capture. Note: a
reasonable amount of light must still be produced by the cell phone to decode the barcode, as would be
expected to use the cell phone under normal operation.
• Fix to use camera capture width/height for maximum image size, which some barcode decoders use for
internal cropping/location logic. In 3.1 and earlier SDKs, the captured image size was the maximum
camera size. In 3.2 and greater SDKs, the captured image size is slightly smaller to reduce noise around
image from camera internals.
1.10.5 High Level API
• Improved rules for reading Chinese ID 3 line of 30.
• Improved UV Security Check.
• Fix issue with HL returning a good read/green LED with no MRZ codeline data.
• Modified error code ERROR_CURRENTLY_IN_USE to be non-critical, which will no longer cause a
reader thread restart. This is used when forcing a scan to determine the reader is currently in a reading
state without restarting the thread, but waiting for completion.
• Fixed memory leak when using a CR5400 and High Level API caused by AutoOrientation by BARCODE
(PDF417). The leak would only occur if using a CR5400 and a blank ID card with no MRZ or magstripe.
• Fixed bug causing errors reading standard 3 line of 30 documents starting with CR due to incorrectly
identifying them as non-standard HongKong ID 3 of 30.
• Fix to avoid misreads of 1 line of 30 documents.
• Update to check MMMReader_GetDetectDocumentState after LocateDocument in case independent
image captures were previously called.

Page 19 of 72
Document Reader SDK Change History

• Fix to return Nationality (ROU) when reading 2 line 36 Romanian ID instead of empty. Older Romanian
IDs that are not ICAO compliant and have a numeric nationality field will still return an empty nationality.
• Set CodelineData DocNumber to extended document number when applicable.
1.10.6 Low Level API
• Fixed MMMReader_LL_LoadSettings to adjust settings based on DPI of camera due to issue found with
CR5400 connected.
• Fixed MMMReader_LL_LoadSettings to ensure Application.INI changes to default settings are preserved.
• Added check to UV Security Check to avoid china travel documents (T, D, W, Q) as they tend to fail on
the non UV dull document laminate.
• ePassport – Add support for EAC Chip Authentication using AES. Previously, on Chip Authentication
with 3DES was supported.
• AAMVA – added support for decoding Canadian Military Driver License, which has an improperly coded
IIN.
• Fix cropping issue with ID cards and magstripe that are pushed to the back edge of the scanner, leaving
no black space between the ID card and back of capture area.
• Fix cropping issue with ID cards on the KR9000 leading to an under-crop due to false detection of a
magstripe between the top of the ID card and back of the scanner.
• ePassport – add support for second CAR (Certificate Authority Reference) in EF.CVCA during EAC
Terminal Authentication.
• ePassport – allow Passive Authentication to pass with a warning if unable to read EAC protected
DataGroups because EAC is not enabled.
• Fixed random warping of image on CR5400 due to OCR image manipulation.
• ePassport – Fix bug with DH (Diffie-Hellman) EAC Chip Authentication key exchange.
• ePassport – Fix lookup of certificate chain passed to the chip during EAC Terminal Authentication (TA),
which was causing some TA failures.
• ePassport – Avoid sending root CVCA to chip during EAC Terminal Authentication (TA) if passed in via
CVCA callback. FileStore will not load CVCA roots.
• ePassport – Fix to handle reading DataGroups larger than 32k using the ReadBinaryOdd command. One
particular chip was not responding to the ReadBinaryOdd command as expected at the end of the data.
• ePassport – Add the ability to get the EFCOM_DG_MAP, EFSOD_HASH_MAP and
DOC_SIGNER_CERT from the EF.SOD.
• Fix detect delay to avoid document bounce on CR5400.
• Fix cropping issue when locating top (LocateTop=1) that may cause over-cropping.

Page 20 of 72
Document Reader SDK Change History

1.11 Version 3.3.1.10 – 19 November 2014


1.11.1 Data Structure Changes
Added puUseSequentialImaging to BrightnessSetting, which is specific to the CR5400 dual-sided reader.
Normally, the CR5400 takes a single snapshot of both sides of the ID1 card. This can lead to some light
bleed-through, which is primarily noticeable in the IR image. If puUseSequentialImaging is enabled for
the IR (aCamSettings.ir.puUseSequentialImaging) or VIS (aCamSettings.vis.puUseSequentialImaging),
then a snapshot of each side is taken to prevent bleed through. This does require a little more capture
time to take 2 images instead of one. This feature cannot be used with hardware ambient removal, but
can be used with anti-glare.
1.11.2 Applications
• ReaderExpo
o Fix to Control Panel to reflect current settings if multiple control panels are used in a scheme.
o Fix error recovery so that settings and plugins are reset properly to the previous state.
o Added ability to enable Sequential Imaging on the CR5400 in the Control Panel.
o Remove MRZ photo from CR5400 schemes as this only applies to passports and takes
unnecessary time.
• LowLevalAPITestContainer – add Insert Doc and Document Ready To Insert buttons for the CR5400.
• eMRTD – fix application crash if doing manual MRZ entry with no camera (advanced connect).
1.11.3 High Level API
• Added save of IMAGE_LOCATE to save the image used for cropping before the image is split on a
CR5400, when SaveImages=2.
• Added check for parser initialization in error state.
• CR5400 – do not eject document until END_OF_DOCUMENT_DATA to avoid detecting issues during
post image capture processing, such as plugin decoding.
• CR5400 – ensure LEDs are changed before the first images are captured to avoid any strange LED
behaviour during read.
• DataMatrix decoder related memory issues fixed.
1.11.4 Low Level API
• Adjust document location threshold calculation when using IR image for detection so that the top 15
pixels are also ignored (usually glare).
• Clean up some OCR settings adjustment for DPI.
• Fixed issues distinguishing between CR5400 and CR100.
• CR5400 – fix MMMReader_InsertDocument.
• ePassport – updated PassiveAuthentication to still pass with a log warning if unable to read DG3 because
EAC is not enabled.

Page 21 of 72
Document Reader SDK Change History

1.12 Version 3.3.1.4 – 6 November 2014


1.12.1 Data Structure Changes
Added SIGNAL_MAG_READ_ERROR and SIGNAL_MAG_READ_SUCCESS to MMMReaderSignal for
use with LEDs on CR54000 magstripe enabled cradle.
1.12.2 Applications
• ReaderExpo – prevent saving of settings during document reads that can cause unexpected behaviour.
• Added SAC_STATUS as an available RF data item in sample applications.
1.12.3 High Level API
• Fixed issue causing long delays during reads when detectDuringRF is enabled.
• Fixed data type translation issue causing SAC_STATUS to not be converted to a TriState value.
• Fix memory leak caused by magstripe auto-orientation.
1.12.4 Low Level API
• Fixed EAC Terminal Authentication failure on some passports that was introduced in 3.3.1.1.

1.13 Version 3.3.1.1 – 1 October 2014


1.13.1 VC Runtime Changes
Version 3.3.x.x and above of the SDK is upgraded to use the Microsoft VC10 runtime. The Microsoft VC8
runtime is no longer used and the VC8 redistributable is no longer part of the installation or deployment
process. SDK sample projects have also been updated accordingly to Visual Studio 2010.
If you are deploying the 3M SDK with your application, the following Microsoft VC10 binaries should be
included:
• msvcr100.dll
• msvcp100.dll
• mfc100u.dll
• mfc100.dll
• atl100.dll
1.13.2 Data Structure Changes
• Added ExpiredDocumentFlag to MMMReaderCodelineData. When a valid expiry data is available, a
comparison to the current date is done and the flag is set.
• Added ImageSource to MMMReaderCodelineData to indicate the illumination source where the MRZ was
extracted from, either LIGHT_IR or LIGHT_WHITE.
• Added visaLabelCheck to OCRUSERSET, which can be set to check for MRZ on VISA labels where the
MRZ is positioned higher than normal.
• Added checkVisibleOcr to IMGSET, which can be set to read OCR is the visible image if not found in the
infrared image.
• Added ERROR_CAMERA_DEVICE_DISABLED to MMMReaderErrorCode for better error reporting of a
disabled page reader device driver.
• Added IDMEX3_30 to DOC_ID for Mexican Voter Card IFE.

Page 22 of 72
Document Reader SDK Change History

• Authentication – several data structures were updated with additional elements from migration of Data
Capture and Authentication (DCA) software that is not directly used by the Page Reader SDK at this time.
The following structures were updated as part of this process.
o MMMReaderEventCode
o MMMReaderDataFormat
o MMMReaderErrorCode
o ReaderState
o MMMReaderValidationCode
o MMMReaderDataType
o DataSendSet
o MMMReaderSettings
1.13.3 Drivers
Updated 3MPageReaderDriver to v1.26.4, which now uses the signed version of the latest HID RF driver.
This removes the need to prompt before installing the HID driver. The HID driver itself is the same.
1.13.4 Documentation
Added QS1000 user guide to SDK documentation.
1.13.5 Applications
• ReaderExpo
o Added the ability to create multiple tab pages within a single scheme. Scheme tab pages allow
for showing more features in a single scheme and displaying the features more easily on smaller
screen sizes.
o Added new Document Summary feature to summarize document and biographical information
from retrieved from other features/panels in the scheme.
o Added new Control Panel feature to centralize some common imaging features in one panel.
o Added new CR5400 schemes that include support of ePassport and/or MSR when a cradle is
used.
o Updated to better handle automatically recovering from error when no RF module and/or MSR
module is found and is required by the scheme.
o Update to ensure AAMVA panel data is cleared after each document read.
o Update to show full address in AAMVA panel instead of being cut off.
o Update to allow for resizing of image panels to smaller sizes.
o Add Age to AAMVA panel.
o Update layout of the Barcode panel to take up less space.
o Fix gender display bug in MRZ panel.
o Prevent panels from being dragged past the viewable top/left of the application.
o Improved application load time that had slowed down too much due to the new tabbed schemes
being preloaded.
• eMRTDReader
o Added the ability to select the SAC algorithm to use when a document supports multiple SAC
algorithms.

Page 23 of 72
Document Reader SDK Change History

o Updated to work with the CR5400.


1.13.6 High Level API
• Added a new method MMM_WriteTextfileSettings that is used to save all reader settings to a text file for
troubleshooting.
• Fixed problems cropping some ID1 size documents with magstripes.
• Fixed issue with Java enumerations that could cause issues when receiving some data types, such as
plugin data, from the SDK.
• Update RTE8000 Java wrapper data types.
• Enable rear images in Application.INI, so that images of both sides are returned if using the CR5400 dual
sided reader.
• Fixed issue with document counter being updated more than once per document read.
• Update to handle reading non-ICAO gender field on IDMEX 3 line of 30 documents, as required by the
Mexican Voter Card IFE.
• Fix potential crash on some images in the DataMatrix decoder.
• Fix issue with KR2400 not detecting documents.
• Added QA check on MRZ processing.
1.13.7 Low Level API
• Added support for all SAC algorithms.
• Updated RF detection to recognize the SCM contactless reader, which is optionally used in the CR5400.
• Updated RF detection to recognize new USB 3.0 compatible HID RF modules used in the latest AT9000
MK2/KR9000 series readers. Previously, the SDK puHasRF flag was being set to FALSE as these new
HID modules were not recognized.
• Added support to detect the page reader device driver is disabled and return a new
ERROR_CAMERA_DEVICE_DISABLED error code instead of misleading mismatch config settings
errors.
• Fix to prevent potential over cropping of the top of passports.
• Fix potential buffer overrun when logging PCSC errors.
• Turn image debarrel off by default for the CR5400, as hardware updates in the latest units no longer need
the correction.
• Prevent counting of ‘/r’ in QA mode scores array.

Page 24 of 72
Document Reader SDK Change History

1.14 Version 3.2.1.29 – 28 July 2014


1.14.1 High Level API
• Updated Java wrapper for dual-sided reader support.
• Improved DataMatrix barcode reading.
1.14.2 Low Level API
• Fixed issue with CR5400 card detection related driver errors.
• Fixed potential crash related to PCSC error logging if APDU is larger than 1024 bytes and send APDU
fails.
• Fixed issue with slow ePassport reading on new RevH HID antenna and certain passports.
• Improved firmware document detection response time, which is used in the CR5400.
• Allow RF ePassport functionality to be used when a CR100 swipe reader is attached.

1.15 Version 3.2.1.28 – 10 July 2014


1.15.1 Applications
• ReaderExpo – added Orientation feature to control how document orientation is determined.
• OutputWedge – added clr option to Simplified dialog and allow appending to an existing script. Assigned
KeyDelay default value on task initialization. Modified Event xml read to allow/ignore events without
tasks.
• HLBlockingTestContainer – fixed bug when using the CR5400.
• HLTunnelExample – fixed bug when post processing an image.

1.15.2 High Level API


• Fixed bug causing the RTE8000 HS to not work properly with the SDK and applications.
• Fixed issue causing inappropriate DocDetect settings to be saved to the Application.INI when adjusting
and saving reader configuration. These are detection settings that get automatically adjusted based on
scaling, etc., and were getting inadvertently saved.
• Added glare detection feature (ImgSettings.allowGlareDetection), which checks the first IR image for
glare. If glare is detected, the IR/VIS images are requested again from the reader with anti-glare enabled
to remove the glare in the firmware. This allows anti-glare to be off and only used if glare is detected for
faster overall performance.
• PDF417 decoder updated to return coordinates of the barcode(s) found.
• Added support for puDataToSend.autoOrientation of documents based on the orientation of a PDF417
barcode on the document. MRZ, Magstripe and Barcode autoOrientation are now supported.

1.16 Version 3.2.1.27 – 13 June 2014


1.16.1 Applications
• Added description lines for AAMVA templates 5, 6, 7 and 8 in the BarcodeTester application.

Page 25 of 72
Document Reader SDK Change History

• OutputWedgeSysTray - Fixed issue with not reading image format from xml file. Fixed issue with parameters not
being written properly for both input and output module sections. Added a localKeyDelay option to PressKeyChar
and TypeString tasks (to slow down specific tasks to accomodate external requirements.)
1.16.2 High Level API
• Fixed bug in magstripe finder related to puDataToSend.autoOrientation used on CR5400.
• Improved cropping of angled document edges, such as with the CR5400.
• Modified document detection scheme of CR5400 to use the lower zone for insertion and the upper zone
for removal. SDK handles CR5400 configured for old or new detection scheme.
• Added barcode processing to the “Load and Run from Directory” feature in HLNonBlockingContainer.exe
to reprocess images saved by SDK.
• Fixed AAMVA data decoder for the Yukon DL, which now ignores data element separators placed in the
header.
• Update AAMVAParser.xml with templates for versions 6, 7 and 8 to make sure newer AAMVA data is
parsed and displayed.
1.16.3 Low Level API
• Fixed a potential issue reading ePassport caused by a change in 3.2.1.25 to allow reading SAC without
removing the passport from the reader. Selecting the MF before selecting the CardAccess File caused
failures depending on the configuration.
• Fixed a potential race condition in firmware (ActiveReader) detection causing initial detection to fail when
enabled.
• Fixed bug in SendAPDU logging that would only print the lower nibble of the command.
• Added SW 61xx as a possible successful message for SendAPDU.
• Added more logging information to RT_PCSCReader.

Page 26 of 72
Document Reader SDK Change History

1.17 Version 3.2.1.26 – 2 June 2014


1.17.1 Applications
• Rebuild ReaderExpo to fix error when starting application.

1.18 Version 3.2.1.25 – 30 May 2014


1.18.1 High Level API
• Update SDK to reset LEDs during initialization.
• Fix eMRTD application crash when using RTE8000.
• Change to allow barcode processing to startup when useVisibleForBarcode is enabled, instead of waiting
for UV to complete first.

1.18.2 Low Level API


• Update to allow reprocessing of an SAC ePassport without removing the ePassport from the RF field.
This is accomplished by selecting the MF before selecting the CardAccess File.
• Fix to allow for settings configuration changes when the END_OF_DOCUMENT_DATA event is received.

1.19 Version 3.2.1.24 – 23 May 2014


1.19.1 High Level API
• Updated the OpenJPEG library to the latest 2.1.0 release.
• Fix the Capture and CaptureMulti functionality of the BarcodeTester application used to capture directly
from 3M scanners and process any barcodes found.
• Enhanced PDF417 decoder for better handling of lower quality images.
• Fix to .NET wrapper RFModule.SendAPDU to resize the aResponseBuffer to the response size.
• Fix cropping issue when placing TD30 sized document with a barcode vertically flush to left edge of
reader.
• Added puDataToSend.autoOrientation to help determine the orientation of ID cards in CR5400 readers
that may not have an MRZ. Currently only support MRZ and MAGSTRIPE_TOP/MAGSTRIPE_BOTTOM
auto orientation. The CR5400 defaults to orientation by MRZ, if present, or MAGSTRIPE_TOP. Future
SDK releases will have more options for auto orientation. Added MMMReaderPluginData.puOrientation
so that the orientation of barcodes found is returned, if supported by the decoder.
• Added some comments to the ImageOverrides.ScaleFactor setting in the Application.INI, which is also
documented in the Programmer’s Guide.
• Fix to make sure RF functions are disabled if no RF reader is detected to prevent initialization problems.
• Changed Application.INI by setting EAC_ENABLED=0 instead of 1, so that by default EAC (Extended
Access Control) is disabled.
1.19.2 Low Level API
• Speed up communication with the HID ACG Dual RF reader in legacy RTE8000 that slowed down with
the new HID reader dll in last 3.1.14.1 release.
• Prevent the SDK from powering off the HID 5321 CL antenna if the QS1000, which has no RF, is
connected. This caused issues with 3rd party applications using their own HID 5321 CL while our SDK is
running.

Page 27 of 72
Document Reader SDK Change History

• Added new parameter, bool insertDoc, to MMMReader_CameraDetectDocumentTwoSidedEx and


MMMReader_LocateDocumentTwoSidedEx to control whether or not a card in the CR5400 is
automatically inserted if considered the same document and has not been removed since last processed.
This allows one to Locate for card presence after document processing without the document being
inserted and processed automatically.

Page 28 of 72
Document Reader SDK Change History

1.20 Version 3.2.1.22 (BETA) – 28 April 2014


1.20.1 Breaking Changes
• Modified behavior of EAC certificate callback for CVCA link certificates to handle the case of multiple valid
link certificates. Previous behavior of the SDK would stop asking for link certificates when the first one
with a valid date range was received and would then proceed to ask for the DV and IS certificates. The
new behavior will keep asking for link certificates until the caller returns FALSE to indicate they are
finished passing link certificates. The SDK will then proceed to ask for DV and IS certificates as before.
1.20.2 Drivers
• Page reader drivers (3MPageReaderDriversSetup.exe) updated with new HID RF drivers for Win8 and
Win7 or later support.
• Page reader drivers updated to support CR5400.
1.20.3 Applications
• Added support for MK2 HighRes (700 DPI) reader, which supports higher DPI and the ability to scale
down the DPI if necessary with the ImageScaling feature.
• Updated LowLevelAPITestContainer, LowLevelExample.NET and BarcodeTester to work with CR5400.
• Improvements to CameraTest application for better image testing and comparison of post processed
images.
• Updated LowLevelAPITestContainer to vertically flip the image when the MRZ is found on the top.
1.20.4 High Level API
• Added more documentation to the Application.INI for easier configuration.
• Added Chinese 1 x 30 ID card for Mainland to Hongkong and Macao.
• Added 2013 French Vehicle Registration Certificate.
• Added rule for the date format on the Delaware AAMVA 2003 standard.
• Added MMMReader_IsCameraInitialised() check to MMMReader_ReadDocument() and
MMMReader_WaitForDocumentOnWindow() to return ERROR_READER_NOT_CONNECTED when no
reader is connected.
• Updated the OpenJPEG library to 2.0.0. The old implementation would crash on some JP2 images. This
implementation was modified with fixes that will not make it in until v2.1.
• Fixed a bug where the DetctDuringRF setting could cause an erroneous DOC_ON_WINDOW event.
• Increased contrast of barcode images.
1.20.5 Low Level API
• Fixed the bayer color correction functions and updated true color correction matrices for the AT9000
MK1, MK2, MK2 HighRes, QS1000 and CR5400. This was done to reduce discoloration of some visible
images.
• Fixed horizontal and vertical resolution of images from the double-sided CR5400 reader. The images
from this reader are rotated from landscape to portrait, so the camera and image resolutions are
swapped.
• LowLevelAPITestContainer fix to check for RF_APPLICATION_OPENED_SUCCESSFULLY to determine
RFOpen success.
• SDK updates to work with CR5400 unit with motor.

Page 29 of 72
Document Reader SDK Change History

• Various SDK fixes for the CR5400 and MK2 HighRes readers, mostly related to image scaling
(CR5400/MK2 HR) and two sided image capture (CR5400).
• Added EAC checks to some of the ConvertPassportExceptionToPassportErrorCode conversions. Some
of the errors were being translated to BAC failures when an EAC enabled passport was presented and
EAC was turned off.
• Modified the PDF417 data type from binary to text if there are non-printable characters in the array.
• Added a couple of missing enumerations in the CSharp wrapper for DocSignerCertMode and
ExternalCertMode.
• Fix for 1 line MRZ parsing to avoid noise lines above the MRZ.
• There was a problem where if a device with a magnetic strip reader is unplugged and plugged back in,
the mag stripe device may pull a different device address. This fix will update the device address.

Page 30 of 72
Document Reader SDK Change History

1.21 Version 3.2.1 (BETA) – 11 November 2013


Version 3.2 is significant because support is added for double-sided image capturing on readers such as
the CR5400. With the CR5400, both sides of a document are captured and processed at the same time.
The CR5400 also supports scaling of the captured image to lower DPI for performance/quality
adjustments. All imaging functions in the SDK are fully backwards compatible, with some new low level
API functions needed for two-sided images.
1.21.1 Applications
• Updated ReaderExpo, HLBlocking and HLNonBlocking to support front and rear images on two-sided
readers.
1.21.2 Low Level API
• Added new functions for CR5400 double-sided reader (MMMReader_CameraDetectDocumentTwoSided,
MMMReader_LocateDocumentTwoSided, MMMReader_ImagePostProcessTwoSided,
MMMReader_ImageReadCodelineTwoSided, MMMReader_LL_LoadCameraImageSettingsTwoSided,
MMMReader_DocumentProcessingComplete, MMMReader_CameraUpdateSettings.)
• Updated functions to accept scans with varying DPI values, instead of assuming the images captured are
~400 DPI.
• Updated reader interface DLLs to recognize and communicate with the CR5400.
• Updated document edge detection to support two-sided images.
• Updated image post processing to perform a final step for two-sided images to extract each vertical
image and create a horizontal bitmap for each side.
• Updated MrzCodeline function to accept two images and check each for an MRZ.
• Added support for legacy full page readers, such as the PV30 and PV33, to allow for easy migration to
the latest SDK.
• For all Ottawa designed readers, such as the PV30, PV35, AT9000, KR9000 and CR5400, the image
captured is now just the document window. The extra zone around the document window (mounting
hardware, RF PCB, etc.) is now removed, which provides a smaller window with less edge artifacts. This
should result in slightly faster image processing.
• Updates to various configuration structures for variable DPI and two-sided image processing.
1.21.3 High Level API
• Added the ability to detect/locate documents on two-sided readers, such as the CR5400.
• Added the ability to post process and receive two images for IR, Visible, UV and Barcode. The second
side for each image is received by setting new data types in the Application.INI for DataToSend, such as
IRImageRear, VisibleImageRear, UVImageRear and BarcodeImageRear.
• Added the ability to process the MRZ on both sides of a two-sided document.
o MrzOnRearSide added to MMMReaderCodelineData indicating if the MRZ was found on the
second set of images captured returned in the “REAR” image types.
• Added barcode processing on both sides of a two-sided document.
• Added call to a new low level API function (MMMReader_DocumentProcessingComplete) to indicate
document processing is complete, which lets the SDK perform any actions needed upon completion. For
the CR5400, this is ejecting the document. For most other readers, this is nothing.
• Updated LED success (green) logic to show success if any MRZ or Barcodes found are successfully
processed. Previously, success required an MRZ, which is not always on a document.

Page 31 of 72
Document Reader SDK Change History

• The following is a list of new options added to the Application.INI for the CR5400:
o In the DataToSend section, IRImageRear, VisibleImageRear, UVImageRear and
BarcodeImageRear to get the rear/second-side image.
o In the ImageOverrides section, added ScaleFactor setting. For double-sided readers such as
CR5400. Reader firmware scales the captured images by X % for variable DPI. Values from 25
to 100 % scaling. 100 % = full scale / highest DPI.
• The following is a list of new options added to the Application.INI for all page readers:
o In the Img section, added UseVisibleForBarcode setting. UseVisibleForBarcode may be set to 1
to use the visible colour image for barcode processing instead of taking an additional white light
image. More specifically, instead of capturing an additional white light image for barcode
processing, this option will use the visible colour image to create a greyscale image for the
barcode processing. The values are 0 – disabled and 1 for enabled. The default is disabled.
o In the DocDetect section, added ActiveReader. Enables or Disables Active Reader firmware
based document detection. This is the preferred method for the CR5400. Readers, such as the
AT9000, KR9000 and CR54000, have firmware which can repeatedly capture one illumination
and test a user selected vertical location for document presence. The location test is a very
simple threshold and black/white pixel count and does not account for ambient light, so the
location requires a black background (under the clip is its intended usage). As there is no
transferring images repeatedly, USB bandwidth and PC usage is significantly reduced. Note:
Enabling this option will override the normal detection boxes method and
ActiveVideo/DarkObjects.
o In the DocDetect section, added ActiveReaderBottomOffset. Used to set the ActiveReader
detection location. The value is millimetres from the bottom or back of the document detection
window. The default is 12 mm.

Page 32 of 72
Document Reader SDK Change History

1.22 Version 3.1.15.2 – 13 June 2014


• Fixed a potential issue reading ePassport caused by a change in 3.1.15.1 to allow reading SAC without
removing the passport from the reader. Selecting the MF before selecting the CardAccess File caused
failures depending on the configuration.
• Fixed bug in SendAPDU logging that would only print the lower nibble of the command.
• Added SW 61xx as a possible successful message for SendAPDU.
• Added more logging information to RT_PCSCReader.

1.23 Version 3.1.15.1 – 28 May 2014


1.23.1 Drivers
• Page reader drivers (3MPageReaderDriversSetup.exe) updated with new HID RF drivers for Win8 and
Win7 or later support. Version 1.26.3
1.23.2 High Level API
• Fix to .NET wrapper RFModule.SendAPDU to resize the aResponseBuffer to the response size.
• Fix to make sure RF functions are disabled if no RF reader is detected to prevent initialization problems.
1.23.3 Low Level API
• Update to allow reprocessing of an SAC ePassport without removing the ePassport from the RF field.
This is accomplished by selecting the MF before selecting the CardAccess File.
• Fix to allow for settings configuration changes when the END_OF_DOCUMENT_DATA event is received.

1.24 Version 3.1.15 – 28 April 2014


1.24.1 Breaking Changes
• Modified behavior of EAC certificate callback for CVCA link certificates to handle the case of multiple valid
link certificates. Previous behavior of the SDK would stop asking for link certificates when the first one
with a valid date range was received and would then proceed to ask for the DV and IS certificates. The
new behavior will keep asking for link certificates until the caller returns FALSE to indicate they are
finished passing link certificates. The SDK will then proceed to ask for DV and IS certificates as before.
1.24.2 Drivers
• Page reader drivers (3MPageReaderDriversSetup.exe) updated with new HID RF drivers for Win8 and
Win7 or later support.
1.24.3 High Level API
• Added Chinese 1 x 30 ID card for Mainland to Hongkong and Macao.
• Added 2013 French Vehicle Registration Certificate.
• Added rule for the date format on the Delaware AAMVA 2003 standard.
• Added MMMReader_IsCameraInitialised() check to MMMReader_ReadDocument() and
MMMReader_WaitForDocumentOnWindow() to return ERROR_READER_NOT_CONNECTED when no
reader is connected.
• Updated the OpenJPEG library to 2.0.0. The old implementation would crash on some JP2 images. This
implementation was modified with fixes that will not make it in until v2.1.
• Fixed a bug where the DetctDuringRF setting could cause an erroneous DOC_ON_WINDOW event.

Page 33 of 72
Document Reader SDK Change History

• Increased contrast of barcode images.


1.24.4 Low Level API
• Fixed the bayer color correction functions and updated true color correction matrices for the AT9000
MK1, MK2 and QS1000. This was done to reduce discoloration of some visible images.
• LowLevelAPITestContainer fix to check for RF_APPLICATION_OPENED_SUCCESSFULLY to determine
RFOpen success.
• Added EAC checks to some of the ConvertPassportExceptionToPassportErrorCode conversions. Some
of the errors were being translated to BAC failures when an EAC enabled passport was presented and
EAC was turned off.
• Modified the PDF417 data type from binary to text if there are non-printable characters in the array.
• Added a couple of missing enumerations in the CSharp wrapper for DocSignerCertMode and
ExternalCertMode.
• Fix for 1 line MRZ parsing to avoid noise lines above the MRZ.
• There was a problem where if a device with a magnetic strip reader is unplugged and plugged back in,
the mag stripe device may pull a different device address. This fix will update the device address.
• Speed up communication with the HID ACG Dual RF reader in legacy RTE8000 that slowed down with
the new HID reader dll in last 3.1.14.1 release.
• Prevent the SDK from powering off the HID 5321 CL antenna if the QS1000, which has no RF, is
connected. This caused issues with 3rd party applications using their own HID 5321 CL while our SDK is
running.

Page 34 of 72
Document Reader SDK Change History

1.25 Version 3.1.14.1 – 06 December 2013


1.25.1 Low Level API
• Fixed issue related to support for ECDSA Active Authentication modes. DG14 was being required for
RSA modes causing RSA AA to fail. DG14 is now only required for ECDSA AA modes.

1.26 Version 3.1.14 – 11 November 2013


1.26.1 Applications
• Added OutputWedge.
• Added RTDECODE_UKDL plugin for UK driver’s license.
• Fix several SDK sample build problems.
1.26.2 High Level API
• Fix allowing MMMReader_SetSignRequestCallback to be called before MMMReader_Initialise.
• Delay DocRemove sound until after RF is finished when running in USB power mode.
• Added PV30 full page reader specific configuration settings for use of the legacy reader with SDK.
• Add parsing of standard ICAO fields for 3 line Chinese home return card.
• Fixed cropping issue on RTE8000 when document was over the right edge of the window.
1.26.3 Low Level API
• Add support for ECDSA ActiveAuthentication modes.
• Updated to new version of the HID Reader.dll used for communication with the ACG Dual RF reader in
the RTE8000. Fixed random RF failures with IFX chip SLE78CLX800 used in KOSOVO passports.
RTE8000 only.
• Updated RF reading with the HID Omnikey (AT9000, KR9000, etc.) to not power off the antenna until RF
reading is complete. Previously, powering off the antenna during any RF failures prevented proper
recovery and reading.

1.27 Version 3.1.13 – 27 August 2013


1.27.1 Low Level API
• Fix for BSI TR-03105 Part 5.1 test ISO7816_F_09.
• Fix for BSI TR-03105 Part 5.1 test LDS_C_16.

1.28 Version 3.1.12 – 08 August 2013


1.28.1 High Level API
• Fixed a bug in the PDF417 barcode decoder. The library did not handle saving the Text Submode for
transitioning from Text Compact mode to Byte Compaction shift and back to Text Compact mode.
• Fixed a bug in the PDF417 barcode decoder. The decoder did not properly decode numeric over 45
characters in length.

Page 35 of 72
Document Reader SDK Change History

1.28.2 Low Level API


• Handle narrow border on sides of MRZ.
• Added noise check to ignore miscellaneous characters near the MRZ on 1 line documents.
• Update document type of Slovakia 1 line DL.

1.29 Version 3.1.11 – 11 July 2013


1.29.1 High Level API
• Fixed a bug that would cause the SDK to hang if the reader state was set to asleep while it was actively
processing a document.
• Fixed a crash in the case of use before initialisation in MMMReader_ReadDocument and
MMMReader_WaitForDocument (blocking mode API).
• Updated the Certificate Manager to handle Base-64 certificates that contain the carriage return character.
1.29.2 Low Level API
• Fixed a bug where the wrong digest algorithm was used for verifying the signed attributes.
• Changed the Passive Authentication from a failure to a warning if the failure was due to a Terminal
Authentication failure.
• Added missing RF data callback items (CD_PASSIVE_AUTHENTICATION,
CD_SCCHIP_AUTHENTICATION_STATUS, CD_SCTERMINAL_AUTHENTICATION_STATUS and
CD_SAC_STATUS).
• Fixed an issue that prevented the CD_PASSIVE_AUTHENTICATION flag from being passed to the API.
• Added initial support for Integrated Mapping.
• Added support for 1 Line EU Drivers license for Slovakia.
• Added support for (IA, C1, C2, C3, C5, C7) USA 3x30 documents.
• Remove MRZ hard context rule for the first optional field on the 3x30 documents to allow alpha numeric.
• Add MRZ context rules for 3x30 documents starting with INUSA for improved processing.
• Fixed MRZ processing of CR 3x30 documents.

1.30 Version 3.1.10 – 11 March 2013


1.30.1 High Level API
• Added initial Supplemental Access Control (SAC) support into the high level API:
o Added new data items CD_SAC_STATUS and CD_EFCARD_ACCESS data items. The SAC
status is a TRISTATE value similar to CD_BAC_STATUS to indicate whether SAC has been
performed or not. The other data item contains the content of EF.CardAccess on SAC enabled
documents.
o Added MMMReader_SetRFPasswordCallback to allow applications to register an enhanced
callback for supplying the password for BAC or SAC. For BAC documents this allows easier entry
of “required fields only”, and for SAC documents this can allow the CAN to be entered instead of
the MRZ.
o Note that SAC is not enabled by default, and so BAC will be used in preference unless
SAC_ENABLED is set to 1.

Page 36 of 72
Document Reader SDK Change History

• Added a new data item of CD_PASSIVE_AUTHENTICATION which indicates whether a chip fully passes
Passive Authentication. This is a summary data item that is equivalent to checking all of the other
validates which together define passive authentication. Note that to pass PA you must supply the external
Country Signer Certificates.
• Added MMMReader_SetWarningCallback to allow applications to set a warning callback – see the
equivalent low level API..
• Corrected an issue that occurred when using the DetectDuringRF setting which could cause
ERROR_RF_ABORTED not to be handled correctly by the SDK, causing it to re-initialise the SDK. Note
that if documents are removed during an RF read this error code can be called, so applications
configured to use this setting should not consider ERROR_RF_ABORTED as an error.
1.30.2 Low Level API
• Added initial support for Supplemental Access Control (SAC). This is defaulted to off, but if you wish to
test documents with SAC, set SAC_ENABLED=1 in the [RFProcSettings] section of SAC.
• Added MMMReader_LL_SetWarningHandler to allow applications to set a warning callback, which will be
called whenever a warning is detected. Currently this is only used for warnings relating to RFID encoding
issues and other related problems. It is recommended that QA applications may wish to check the status
of these warnings, and applications attempting to check conformity to BSI TR-03105 Part 5.1 should
check that this returns no warnings.
• Added MMMReader_LL_SetRFPasswordCallback to allow applications to register an enhanced callback
for supplying the password for BAC or SAC.
• Added MMMReader_RFCheckPassiveAuthentication which will check all of the required data items to
give an overall validation code to indicate whether PA is successful or not. Customers may prefer this to
checking each of the individual validates separately, but is functionally equivalent.
• MMMReader_RFOpen and MMMReader_RFWaitForOpen will now trigger
RF_CHIP_OPENED_SUCCESSFULLY event when the chip has been opened, before an application has
been selected. It will now trigger RF_APPLICATION_OPENED_SUCCESSFULLY when an application
has been successfully opened. Low Level API applications previously waiting for the
RF_CHIP_OPENED_SUCCESSSFULLY event should switch to the new event. This does not currently
apply to the high level API. Chips that implement applications that are not supported will trigger
RF_CHIP_OPENED_SUCCESSFULLY but not RF_APPLICATION_OPENED_SUCCESSFULLY. Also
note that SAC will be performed prior to successfully opening the application, so may request the
password prior to RF_APPLICATION_OPENED_SUCCESSFULLY.
• Corrected some issues with validation of RFID verification process to ensure compatibility with BSI TR-
03105 Part 5.1.
• Corrected an issue with OCR errors caused by documents where there were unexpected features on the
extreme left of the document (eg a thick cover that is wider than the data page).

1.31 Version 3.1.9 – 13 December 2012


1.31.1 Low Level API
• Added official support for the KR9000. This new reader will work with previous 3.1.x releases, however
with a couple of very minor issues which are corrected in this release.
• Improved dark object detection, particularly on readers that support hoodless operation such as the
KR9000 and the AT9000 MK2. This improves detection of cellphones or other “non-bright” objects. This is
enabled via Application.ini using the settings [DocDetect] DarkObjects=1 and ActiveVideo=1.
• Updated AAMVA decoding to improve reading of some documents.

Page 37 of 72
Document Reader SDK Change History

1.32 Version 3.1.8 – 23 November 2012


1.32.1 High Level API
• Corrected an issue with CD_QAINFO that prevented a valid QACodelineMeasurements object being
returned.
• Added MMMReader_GetDocumentPosition which can be used to retrieve the position a document has
been placed on the scanner. This is particularly useful for tunnelling into the low level from the high level
API.
1.32.2 Low Level API
• Removed the PP_OLD_FIXED_GAMMA flag, and replaced it with a new member in the
BrightnessSettings structure named puUseGammaInSnapshot. This allows for the gamma processing to
be performed inside the take snapshot call rather than inside the post process.
• Corrected an issue with incorrect data being returned when requesting the serial number.

1.33 Version 3.1.7 – 15 November 2012


1.33.1 High Level API
• Corrected an issue that prevented the last plugin from being loaded – typically this would prevent the
QRCode barcode decoder from being loaded.
1.33.2 Low Level API
• Changed MMMReader_ImagePostProcess to accept an additional flag of PP_OLD_FIXED_GAMMA
which can be used to apply the old gamma correction logic which used to be present in
MMMReader_CameraTakeSnapshot. Typically this flag isn’t required, except for customers who were
previously using non-default gamma settings in the take snapshot, and do not wish to use PP_GAMMA |
PP_TRUE_COLOUR.
• Changed RF behaviour for the Kiosk Reader such that the antenna is powered down between reads and
in cases where there are problems reading the chip. This should correct some issues with some RF chips
were not read correctly. The behaviour can be reverted by setting DISCONNECT_BEHAVIOUR=0 in the
[RFInitSettings] section.
• Updated the AAMVA parser to correctly parse the Alberta driving licence.

1.34 Version 3.1.6 – 11 October 2012


1.34.1 Low Level API
• CChange to Duplicatebitmap to stop using hard coded value to fix access violation, which may correct
some errors reported when using APIs such as MMMReader_ImageReadCodeline.

1.35 Version 3.1.5 – 26 September 2012


1.35.1 .NET Wrapper
• Changed numerous low level APIs to include an “IntPtr aParam” value which is passed through to the
data callbacks, as per the C++ interface.
• Added some missing LIGHT_* constants which were present in the C++ interface.
1.35.2 High Level API
• Corrected an error that occurred under Windows 7 if ImageSize was set to a value other than the default
value of 100.

Page 38 of 72
Document Reader SDK Change History

• Renamed CD_IMAGERESERVED1 / CD_IMAGERESERVED2 to CD_IMAGECOAXVIS and


CD_IMAGECOAXIR.
1.35.3 Low Level API
• Corrected MMMReader_ImagePostProcess to correctly apply colour matrix on UV images when not using
True Colour.
• Added support for an additional non-ICAO compliant Chinese ID card.
• Updated the AAMVA parser to support eye colour, hair colour.
• Renamed LIGHT_RESERVED1 / LIGHT_RESERVED2 to LIGHT_COAX_IR and LIGHT_COAX_VIS.
• Changed the default ambient removal methods for the UV image to use values similar to the 3.0.x SDK
releases, except for the AT9000 MK 2 which uses the hardware mode.
• Further improvements to document cropping, specifically relating to ID card documents with magnetic
stripes and dark regions (such as barcodes).

1.36 Version 3.1.3 – 23 August 2012


1.36.1 High Level API
• Added an experimental setting TrueColourUV to the [DataToSend] settings, which when set to 1 causes
the high level API to use colour corrected UV images, which may provide improved UV images. The API
defaults to the previous behaviour (value = 0).
1.36.2 Low Level API
• Corrected an issue that caused the MMMReaderHardwareConfig structure to have an incorrect value set
for puHasRF on AT9000, AT9000 MK 2, and Kiosk Readers.
• Added a new API MMMReader_EnableTwainScanners which can be used to enable / disable support for
the ID150. The default behaviour is that it is enabled.
• Corrected the version numbers of Core_ImageProcess.dll and bc_Module.dll where the version number
decreased in the previous release.
• Corrected an issue connecting to QS1000 scanners that have the v1 firmware.

1.37 Version 3.1.2 – 13 August 2012


1.37.1 Low Level API
• Corrected an issue that caused MMMReader_GetSerialNumber to return
ERROR_UNABLE_TO_LOCATE_SERIAL.
• Corrected an issue that caused the MMMReaderHardwareConfig structure to have an incorrect value set
for puCalibratedByAutoCal.
• Corrected an issue causing MMMReader_RFOpen to fail to open the chip when running under USB
power mode with some ePassports.

1.38 Version 3.1.1 – 30 July 2012


1.38.1 High Level API
• Updated to support the AT9000 MK 2 in USB power mode.
• Updated the visible and IR images to use Anti-Glare and ambient removal features on the AT9000 MK 2
in the default images. This behaviour can be overridden via the ImageOverrides settings in Application.ini
if required.

Page 39 of 72
Document Reader SDK Change History

• If enabled, when dirt is detected on the scanner a new event of


DIRT_DETECTED_ON_SCANNER_WINDOW will be triggered. Note that currently dirt detection is not
enabled by default. If you wish to enable it, please contact 3M.
1.38.2 Low Level API
• Changed MMMReader_TakeSnapshot to respect a new puUseAntiGlare member of the
BrightnessSettings structure to indicate whether it should take an image with Anti-Glare enabled, on the
AT9000 MK 2.
• Changed MMMReader_TakeSnapshot to support hardware ambient subtraction on the AT9000 MK 2.
For all ambient subtraction, it is now preferred to set the subtraction method using the
puAmbientRemoval method of the BrightnessSettings structure, rather than using the now deprecated
LIGHT_BACKGROUND_SUBTRACT flag.
• Changed MMMReader_TakeSnapshot to support hardware background normalisation on the AT9000 MK
2. For the AT9000 MK 2 it is now preferred to not use PP_NORMALISE, and instead supply the correct
values in the puHardwareWBG and puLightingProfile members of the BrightnessSettings structure. A
value of 0 in these two fields indicates that hardware normalisation should not be performed, and can still
be used with PP_NORMALISE if required.
• Updated puAmbientRemoval to use a new enum of MMMReaderAmbientRemovalMethod, and added
new values for the hardware ambient subtraction methods in the AT9000 MK 2.
• Changed MMMReader_ImagePostProcess to accept a new flag of PP_TRUE_COLOUR which enables
new colour processing if aColourMatrix is non-zero and/or PP_GAMMA is set. On the AT9000 MK 2 it is
recommended to set PP_TRUE_COLOUR | PP_GAMMA | PP_CROP | PP_ROTATE and set a non-zero
aColourMatrix value to get the best colour images.
• Changed MMMReader_ImagePostProcess to accept a new aGammaValue parameter to allow the
gamma value to be used when using PP_GAMMA in combination with PP_TRUE_COLOUR. This should
typically be set to the gamma member of the BrightnesSettings structure taken from the settings loaded
from the scanner.
• Added puIsUSBPowered and puSupportsAntiGlare members into the MMMReaderHardwareConfig
structure. puIsUSBPowered will be set to true for both a QS1000 and also an AT9000MK 2 that is running
on USB power.
• Added MMMReader_RFPowerOff to enable the ability to use RFID under USB power mode on the
AT9000 MK2.
• Changed all Camera APIs and the RF calls to be mutually exclusive when used on an AT9000 MK 2 in
USB power mode. Once an RFOpen has been started, no further snapshots / document detection will be
performed until the RF read is completed by a call to RFPowerOff. Applications should ensure that if the
scanner is working in USB only mode, all imaging is completed before starting the RF read.
• Defaulted puCameraSettings.*.puAmbientRemovalMethod to use hardware ambient subtraction for the
AT9000 MK2.
• Updated cropping algorithms, both improving the finding of bottom / sides of a document, and also
improved the LocateTop algorithm that can be activated by LocateTop parameter, especially on ID1 sized
documents that have dark bands / barcodes. This is now switched on in the default Application.ini file.
• Added support for the ID150.
o The Low Level API will automatically work with the ID150. Customers who do not wish to use the
3M Page Reader SDK with the SDK, should check the serial number of the reader as returned by
GetConnectedScanners before initialising the SDK – if the serial begins “ID150” then it is an
ID150.
o If using the Low Level API with the ID150, there is an additional API of
MMMReader_CameraFeedDocument which should be called prior to reading calling

Page 40 of 72
Document Reader SDK Change History

MMMReader_CameraTakeSnapshot, which will scan the document and cache the images, which
will then be returned via TakeSnapshot.
o The ID150 can be identified using the puHasMotorFeed member of the
MMMReaderHardwareConfig structure.
• Further changes to improve the DarkObjectDetect method of document detection, which should improve
detection of dark cell phones.
• Added patent pending dirt detection algorithms, which allows the SDK to detect that the scanner is dirty.
An additional output parameter of aDirtPosn is added to MMMReader_ImageReadCodeline which is used
to return the position of dirt if present. Additional settings parameters are supplied to this function for dirt
detection.
• Removed GPIODll.dll and bc_Content_Decoder.dll from the files required for distribution.
• Removed the non-EAC builds of RTePassportAPI.dll and RTE8000ePassportAPI.dll. The *_EAC.dll
versions of these files are supplied, and can still be used in non-EAC mode by setting the
EAC_ENABLED flag as before, without the need for additional files.
• Added the ability to specify paths in MMMReader.ini using tokens. %<token>% is expanded out to match
an environment variable with that name – eg, %APPDATA% and %TEMP%. Additionally,
%ALLUSERSAPPDATA% and %LOCALAPPDATA% are mapped to the appropriate directory even if
there is no environment variable (such as when running under Windows XP.
• Added “puLogDir” to the settings structure, which can be configured via MMMReader.ini. This path is now
the default location for log files, unless an explicit path is supplied to the call to enable logging. If not set,
this will be the “bin” directory, however you may wish to set this path to a different location via
MMMReader.ini.

1.39 Version 3.0.32 – 30 May 2012


1.39.1 High Level API
• The ForceRedetect parameter of MMMReader_SetState() now works correctly for all scenarios.
Previously when moving from RUN_DISABLED to RUN_ENABLED with a ForceRedect value of false, the
reader acted as if ForceRedect was true.
1.39.2 Low Level API
• Codeline OCR, no longer assumes images are higher than a standard codeline height.
• RFID Chip ID is now correctly returned as 8 digits on AT9000 and Kiosk readers
• UHFReadMap.xml format has been changed to support recursive reading of Identifier memory and wild
card memory value matching.
1.39.3 Plugins
• Fixed memory leak in barcode plugins that was inadvertently introduced in previous SDK release.

1.40 Version 3.0.31 – 28 February 2012


1.40.1 Low Level API
• Camera APIs now return an error immediately when the camera is in a state of error, rather than
triggering an error once the command is being executed. This change will only be visible when using the
Camera APIs in non-blocking mode.
1.40.2 RF
• Fix for Read Binary Odd, which will happen if a file larger than 32K is being read from the chip.

Page 41 of 72
Document Reader SDK Change History

1.41 Version 3.0.30 – 23 January 2012


1.41.1 Applications
• Page Reader Expo has now been replaced with 3M Reader Expo
1.41.2 RF
• Improvements to RF validation routines
1.41.3 Low Level API
• Improved UV security check algorithm
• Improvements to OCR reading of French and Chinese ID cards

1.42 Version 3.0.29 – 02 December 2011


1.42.1 High Level API
• New UHF data to send puMemoryMap.
1.42.2 Low Level API
• Modifications to MMMReaderCodelineData. Each check digit in CheckDigitDataList now has a puResult.
Known non-ICAO documents are now parsed. DocType values have been modified (see code comments
for complete list).
• Improved context rules for codelines.
• New UHF functions. MMMReader_UHFWaitForTagsInField, MMMReader_UHFGetMemoryFromMap.
The MMMReader_UHFGetMemoryFromMap function uses the config file UHFReadMap.xml to specify
what areas to read from UHF tags, to allow easy modification / addition of data to read from tags.
• The default RFID timeout for RTE8000 readers has changed to 15 seconds. This helps for new UK
passports that have an in-built timeout of 10 seconds for BAC failure.
1.42.3 Doc Detect
• Modified default settings for doc detect, to improve detection of darker documents on newer readers.
• The following members of DocDetectSettings have been re-named:

thresh -> boxesWhiteThresh


docDetectThresh -> activeVideoWhiteThresh
gotDocThresh -> activeVideoPixelCountThresh
The corresponding Application.ini settings are now as follows:
[DocDetect]
BoxesWhiteThreshold=150
ActiveVideoWhiteThreshold=200
ActiveVideoCountThreshold=400000

These members have been renamed to ensure anyone overriding the default values modify the values
they use accordingly. To convert the SDK back to the previous default settings for doc detect set the
following Application.ini option:
[ImageOverrides]
ScaleBrightnessIRDetect=100

Page 42 of 72
Document Reader SDK Change History

1.43 Version 3.0.28 – 26 October 2011


1.43.1 Low Level API
• Corrected an issue which caused a memory leak when calling MMMReader_GetConnectedScanners.
• Various small improvements to the “Dark object detect” logic which detects cell phones and other similar
objects, which should make it work more reliably without false triggers. Note that dark object detect is
disabled by default.
• MMMReader_Reboot now reboots the camera and RFID device on a kiosk reader, allowing this reader to
be successfully recovered in some additional error conditions.
• The MMMReaderDate object now represents “invalid” date parts as -1, rather than 0, to avoid ambiguity
in the case of the year.
• Adjusted the AAMVA parsing to allow additional non-compliant documents to be successfully decoded.
1.43.2 Demo Applications
• Adjusted Expo to use ambient subtraction on UV images by default, and modified all schemes to use the
ambient subtraction.

1.44 Version 3.0.27 – 7 October 2011


1.44.1 Low Level API
• Corrected an issue with context rules in the OCR not being applied for the first 5 characters, which could
potentially increase the number of misreads on some borderline documents.

1.45 Version 3.0.26 – 20 September 2011


1.45.1 Low Level API
• Corrected an issue with logging using the FILE_SIZE strategy that caused the contents of the log files to
be mixed up.
• Corrected an issue with MMMReader_RFCheckActiveAuthentication that caused it to never return correct
error codes when called in blocking mode.
• Corrected an issue with Active Authentication where it returned TS_FAILURE instead of
TS_NOT_PERFORMED if errors occurred while reading DG15, rather than indicating a failure to validate
the document.
• GetSerialNumber, GetModuleInfo, and other similar APIs have been changed to not call the error callback
when supplied a buffer not big enough for the output data. The APIs will still return
ERROR_STRING_BUFFER_TOO_SMALL to indicate that a larger buffer is required.
1.45.2 QA API
• Corrected an issue that caused the checksum validation test to incorrectly report as failed on valid
codelines.

1.46 Version 3.0.25 – 14 July 2011


1.46.1 High Level API
• Fixed an ACCESS_VIOLATION that occurred if the EF_SOD was read before the EF_COM and
puCrosscheck_EFCOM_EFSOD was enabled.

Page 43 of 72
Document Reader SDK Change History

• When UHF reading is enabled, the UHF antenna will now look for a document in parallel with the scanner
waiting for a document to be placed on the glass. This means it is possible for a UHF tag to be read
without placing it on the glass.
1.46.2 Low Level API
• Added a new error ERROR_ALLOCATING_MEMORY. This error is raised if there is an error allocating
memory on the heap.
• Added extra logging information for UNKNOWN_ERROR
• Improved FindTop algorithm which is executed if puDocDetectSettings.locateTop is set to TRUE.
• Added context rules for North American Enhanced Driver Licenses.
• Added OptionalData1 and OptionalData2 to MMMReaderCodelineData.
• Changed MMMReader_ParseAAMVA() to take a pointer to an MMMReaderAAMVAData pointer. The
value of the MMMReaderAAMVAData pointer must be null when this function is called. On return of the
function, the pointer will be set to point to a new instance of MMMReaderAAMVAData, which must be
freed by calling MMMReader_DestroyCachedObject() or MMMReader_DestroyCachedData(). For more
details see comments in the MMMReaderLowLevelAPI.h file.
1.46.3 .NET Wrapper
• Fixed issue with UpdateSettings, which could cause the directory paths to be overwritten with garbage.

1.47 Version 3.0.24 - 13 April 2011


1.47.1 High Level API
• New ImgDebug setting puMaxSaveImageCount for saving multiple images. The value can be set via the
Application.ini file “MaxSaveImageCount” value in the “Debug” section.
• Improved handling of errors, including an ERROR_INITIALISATION_FAILED error reported when UHF,
RFID, ParserDLL or Swipe modules have failed to initialise, in addition to specific errors from those
modules.
• Fixed issue with image encoders for PNG and BMP image formats silently failing to save to disk under
Windows 7 operating systems.
1.47.2 Low Level API
• Fixed an issue with signing data with ECC keys that include the optional fields ECParameter and/or
PublicKey. This was only an issue when EXTERNAL_PRIVATE_KEY_MODE is CERT_CALLBACK.
• Fixed aMRZDataRequiredFieldsOnly parameter being ignored in MMMReader_RFInitialise
function.
1.47.3 RF
• Fixed deadlock when removing a document during a data transfer.
1.47.4 Plugins
• Fixed a bug in 1D and PDF417 plugins that caused an ACCESS_VIOLATION.
1.47.5 Samples
• Fixed issue with HLTunnelExample displaying error for missing MFC80.dll.

Page 44 of 72
Document Reader SDK Change History

1.48 Version 3.0.23 – 18 March 2011


1.48.1 .NET Wrapper
• Fixed issue with MMMReader_GetData()returning an ERROR_STRING_BUFFER_TOO_SMALL message.
Now resolves this issue using a correctly sized buffer.
1.48.2 High Level API
• Improved check digit validation results.
• Fix for BAC when using an extended document number
• Further fix for EAC when using an extended document number
• Improvements to parsing of MRZ for multiple documents, including Swiss and French ID cards.
1.48.3 Low Level API
• 3M Swipe Reader SDK 1.0.0 changes now available, including support for 3M™ CR100 Document Reader.
• Added support for 3M™ QS1000 Full Page Reader.
1.48.4 Samples
• Fixed bug in barcode image display in Barcode Tester application.

1.49 Version 3.0.22 – 12 January 2011


1.49.1 High Level API
• Fixed issue with SecurityCheck on the AT9000 reader. The IMAGE_SECURITY was not being correctly
captured.
1.49.2 Low Level API
• Fixed issues which occurred when multiple readers were connected.
• Fixed issue with MMMReader_ValidateExtendedCheckDigits() which caused the check digit of
the optional data field of a passport document not to be check if its value was ‘0’.
• Corrected an issue with the ConvertFormat API not successfully converting some JPEG 2000 images.
1.49.3 Plugins
• Fixed bugs in Data Matrix plugin.

1.50 Version 3.0.21 – 10 December 2010


1.50.1 High Level API
• Now checks UHF thread has complete before starting a new document cycle.
• Added a new event READER_STATE_CHANGED. This event will be sent every time the internal reader
state is changed.
• Callback functions will no longer be called after MMMReader_Shutdown has been called.
1.50.2 Low Level API
• E-Passport reading modification. Added a new format for the KeyID, when sending data to a chip during
Chip Authentication.

Page 45 of 72
Document Reader SDK Change History

1.51 Version 3.0.20 – 23 November 2010


1.51.1 .NET Wrapper
• .NET assemblies are now signed
• Now includes the UHF High and Low level functions
1.51.2 Low Level API
• Fixed bug in RF API if Active Authentication fails. MMMReader_RFCheckActiveAuthentication
could, in certain failure cases, call the error callback. Now this will not happen and only the data callback
will be called with TS_FAILURE result.
• Fixed MMMReader_LL_SelectScanner to work with AT9000 readers.
• MMMReaderCodelineData Now includes Swiss Driving Licence.

1.52 Version 3.0.19 – 1 October 2010


1.52.1 Plugins
• Barcode plugins will now append multiple parts into a single plugin data part as long as they are encoded
in the same data format.
• Improved the barcode decode-rate of North American drivers licences.
• Added additional logging relating to plugins, so that logfiles indicate precisely which plugins are being
used while reading documents.
• Added a new experimental “FindTop” setting to the document detection settings, which can be used to
crop documents accurately even if they are not ICAO document sizes.
1.52.2 Low Level API
• The barrel distortion correction (debarrel) was slightly zooming the image on the RTE8000. This has now
been corrected.
• The API MMMReader_GetSerialNumber now returns the correct serial number for AT9000 and Kiosk
readers. Note that on these scanners, this API should not be called while the scanner is in use.
• The API MMMReader_LoadSettings now correctly returns error codes indicating that the RTE8000MSD is
not present if it is missing and an RTE8000 is connected.
• Improved OCR context rules for the French ID card.

1.53 Version 3.0.18 – 17 August 2010


1.53.1 High Level API
• Added support for read TagID and EPC from UHF documents.
1.53.2 Low Level API
• Added support for UHF addon for the AT9000.
• Fixed an issue with reading some ePassports where the data group size was greater than 32k.
• Changed MMMReaderPluginData data structure. The type of the puData member can now be determined
by the puDataFormat member. See MMMReaderDataTypes.h for a full description of the structure.
• Corrected an issue with some kiosk readers and AT9000’s which would cause documents to be
incorrectly cropped if placed at the extreme right of the scanner.

Page 46 of 72
Document Reader SDK Change History

• Corrected an issue with ScaleBrightnessUV being ignored on the AT9000.


• Changed Application.ini setting LogAllMessages so that if set to 1, all other Log*Messages settings are
overridden as 1.
• Allowed the “unprotected” from an RTE8000 to be read from another path by setting the “UseVolume=0”
and “MSDConfigs=C:\unprotected” keys in MMMReader.ini. Additionally, if using an RTE8000 HS, an
additional setting of AppendSerial=1 will use the serial number at the end of the path.
• Improved PDF417 decoding ability to read barcodes found on Florida driving licences.

1.54 Version 3.0.17 – 16 July 2010


1.54.1 High Level API
• Parsing of AAMVA data (found in North American drivers licences) has been improved. Data decoded
from licences can now be returned to the host application in a more standardised way regardless of
state or version.
• Added support for the KR2400.
• Added new data item CD_SCCROSSCHECK_EFCOM_EFSOD which indicates via a Validity Code
whether the EF.COM and EF.SOD files are consistent, as per the new low level API.
1.54.2 Low Level API
• Added a new API, MMMReader_CrosscheckEFComEFSod, which crosschecks the contents of
EF.COM against EF.SOD. The data callback returns a Validity Code, indicating whether the two
match or not. This will highlight if EF.COM has been altered to “hide” datagroups, as EF.SOD will
contain a hash value for those datagroups. It will also highlight if a datagroup does not have a hash
value specified and may have been added.
• Ensured that the Active Authentication and datagroup validation APIs will attempt to read a data-
group if EF.SOD has a hash value for the datagroup, even if EF.COM states the data group is not
present.
• Corrected an issue with reading some ePassports where the data group size was greater than 32k.

1.55 Version 3.0.16 – 30 June 2010


1.55.1 High Level API
• Added support for the new LED status scheme events added into the low level API
1.55.2 Low Level API
• Added additional events into the SIGNAL_EVENT enum, for triggering sound / LED events at the end
of document data, document removal, and when setting the scanner into the asleep state. All three
events by default do not play a sound or change LED state, but on RTE8000 scanners, they can be
configured via LED.ini.
• Increased the speed of document detection on the AT9000.
• Included a configuration file required to access the MSR addon for the AT9000.

1.56 Version 3.0.15 – 25 June 2010


1.56.1 Low Level API
• Added a new setting in Application.ini to allow the UV brightness set for the scanner to be overridden.
Add a section [ImageOverrides] with the value ScaleBrightnessUV=100 to force the UV brightness
scaling to 100% for all scanners.

Page 47 of 72
Document Reader SDK Change History

• Corrected an issue with document detection on the AT9000.


• Corrected an issue with the JPEG 2000 decoder not loading correctly from some applications, due to
mismatched Visual C++ runtime versions.
• Changes to improve support for the RTE5000.

1.57 Version 3.0.14 – 7 June 2010


1.57.1 High Level API
• Corrected an issue where codelines with very long names (greater than 30 characters) caused
problems with the CD_CODELINE_DATA type.
• Removed an unwanted message being logged to the log file every time the SDK was shut down.
1.57.2 Low Level API
• Added a “scaleBrightness” setting to the BrightnessSettings structure, which can be used to
automatically scale the exposure and gains to adjust the brightness. This is defaulted to a darker
value for UV images on the AT9000, to improve the quality of these images.
• Increased the speed of capturing images when using the RTE8000 HS e-Viewer model.
• Removed dependency on the 8.0.50727.4053 version of the C++ Runtime, allowing customers to
only install the 8.0.50727.271 version. Note that the 4053 version will still be used if installed, and is
the preferred version.
• For EAC releases, corrected an issue where the final CVCA link certificate was not requested if the
previous certificate had not yet expired.
• Optimised the document detection routines when using “dark objects” (cell-phone) detection.

1.58 Version 3.0.13 – 13 April 2010


1.58.1 High Level API
• Added new data types CD_CODELINE_DATA and CD_SCDG1_CODELINE_DATA. These return
pointers to MMMReaderCodelineData structures which contains the OCR/DG1 codeline plus the
parsed data fields within it, such as name, date of birth, expiry date etc.
The SDK samples that used the CodelineData class to parse the codeline have now been changed
as a result. The samples have been updated to demonstrate how to use the new data types instead.
Software can continue to use CD_CODELINE and CD_SCDG1_CODELINE if this is preferred.
• The MSR swipe reader option for the AT9000 has now been integrated into the High Level API. When
connected and initialised, this will return CD_SWIPE_MSR_DATA (MMMReaderMsrData struct) data
through the Data callback alongside the usual full page reader data.
• Created new data type CD_AAMVA_DATA. When used in conjunction with the PDF417 barcode
plugin, this will decode data read from barcodes found on North American drivers licences via an
MMMReaderAAMVAData structure.
• Added new datatype CD_CHECKSUMEXTENDED which returns extended information about the
check digits in the codeline.
1.58.2 Plugins
• Corrected an issue to correctly identify the symbology of some 1D barcodes.

Page 48 of 72
Document Reader SDK Change History

1.58.3 Low Level API


• Added MMMReader_ValidateExtendedCheckDigits which returns additional information about
the checkdigits, returning validation states for each individual check-digit.
• Added MMMReader_ParseCodeline which parses codelines in place of the old CodelineData class.

1.59 Version 3.0.12 – 26 February 2010


1.59.1 High Level API
• Corrected an issue where the MSD path was incorrect when re-connecting a RTE8000, causing
settings not to be correctly reloaded if a scanner is disconnected and then reconnected while the API
is running.
• New settings have been added to configure how the log file works. Logging strategies can be used to
affect the behaviour of the log file under certain conditions. See the 3M Page Reader Programmer’s
Guide for more details.
• The logLevel and flushLogFileMaxLines members of the ImgDebug struct are now
deprecated. Use the new LoggingSettings struct instead.
• For EAC enabled versions, the CD_SCTERMINAL_AUTHENTICATION_STATUS data item is now
always returned after DG3 / DG4, as the status would always be “not performed” until these are read.
• Corrected issues with the CD_READ_PROGRESS message that caused the floating point value to
be returned outside of the range 0-100.
1.59.2 Low Level API
• Corrected an issue where LEDs may not have worked on some RTE8000 readers.
• The Active Authentication, Chip Authentication, and Terminal Authentication status values are now
always returned as a TRISTATE value, and will return the “failure” and “not performed” values, in
addition to triggering the error callback. This allows an application to use this status without having to
check for various error conditions. Note that for Active Authentication, this could have an impact if
applications were checking for 0 = failure, because the TS_FAILURE value is -1, while
TS_NOT_PERFORMED is 0.
• Corrected an issue with the LIGHT_BACKGROUNDSUBTRACT flag that caused some variability in
the image
• The 3M Swipe Reader SDK is being integrated into this SDK, which can be used to support for the
MSR option for the AT9000.
• Added context for Korean documents with O’s in the document number to increase OCR accuracy of
these documents.
• Corrected an issue with the ConvertFormat API not successfully converting some JPEG 2000
images.
1.59.3 .NET Wrapper
• CD_BACKey_Correction data is now returned as a StringBuilder object, so it can be altered and
returned.
• The CodelineData class now returns dates correctly.
1.59.4 Device Drivers
• Device driver installation updated to correctly install the drivers for the RTE8000 HS, Kiosk Reader
and AT9000 under Windows 7 64-bit.

Page 49 of 72
Document Reader SDK Change History

1.60 Version 3.0.11 – January 2010


1.60.1 High Level API
• If a passport was removed from the reader after the RFID chip had been detected, but before the chip
application had been selected, neither the RF_CHIP_OPENED_SUCCESSFULLY or the
RF_CHIP_OPEN_FAILED events were sent, causing the 55 second read timeout.
1.60.2 Low Level API
• Changed the MMMReader_RFInitialise API to pass in an RFIDSettings structure instead of an
MMMReaderSettings structure. To compile older code, you can pass in the member
MMMReaderSettings::puRFIDSettings.
• Added new APIs to provide more control over loading and saving settings, so that individual settings
can be used instead of using the MMMReader_LL_LoadSettings API, which loads all settings at
once.
• Removed the need for LedDll, SecurityDll and SoundDll, functionality has been moved to other parts
of the Low Level API.
• Improvements to the QRCode barcode plugin.

1.61 Version 3.0.10 – 24 November 2009


1.61.1 High Level API
• Added a new API, MMMReader_LogFormatted, which is similar to MMMReader_LogMessage but
can be passed a formatting string and any number of extra arguments (in the same style as C
functions, like sprintf()).
1.61.2 Low Level API
• Added a new API, MMMReader_LL_LogFormatted, which is similar to MMMReader_LL_LogMessage
but can be passed a formatting string and any number of extra arguments (in the same style as C
functions, like sprintf()).
• Internal restructuring - there is now a new DeviceDll.dll that must be shipped with the SDK.
• Corrected an issue which occurred on some AT9000 / Kiosk Readers depending upon the camera
configuration.
• Changed MMMReader_ImagePostProcess so that greyscale images do not have the number of
colours reduced when used under Windows 7.
• Changes to the PP_SHARPEN image processing option when used on the AT9000, to improve
barcode decode rates.
• Corrected an issue in the PDF417 barcode decoder that caused an “Access Violation” error to occur
when reading some documents.
• Algorithm changes in the QRCode barcode decoder which may allow it to read some barcodes that
previously failed to decode.
• Corrected an issue that prevented the SDK from initialising correctly when installed in a very deeply
nested directory.

Page 50 of 72
Document Reader SDK Change History

1.62 Version 3.0.9 – 11 November 2009


1.62.1 High Level API
• Corrected an issue where setting state to READER_DISABLED at precisely the same time as a
DOC_REMOVED event was triggered caused the DOC_REMOVED never to be passed to the
application.
1.62.2 Low Level API
• Changed the image processing that is performed for barcode decoding, to improve barcode decode
rates.
• Further changes to document cropping logic.

1.63 Version 3.0.8 – 30 October 2009


1.63.1 High Level API
• Corrected an issue where MMMReader_UpdateSettings would hang if called from within the
END_OF_DOCUMENT_DATA event.
1.63.2 Low Level API
• Changed image cropping logic to better handle integrated RTE8000 scanners where there is a bright
“edge”, by allowing this to be ignored by the “left” configuration setting.
• Corrected an issue with converting some JPEG 2000 images that would cause failures in the SDK.

1.64 Version 3.0.7 – 21 October 2009


1.64.1 High Level API
• The data callback can now return the data type CD_IMAGEBARCODE, which is the image used by
the barcode decoder plugins and can be used for diagnostics.
• Corrected an issue with the enabling/disabling of plugins, which could cause the High Level API to
wait incorrectly for images that were not required.
1.64.2 Low Level API
• Corrected an issue which only appeared under Windows 7 which caused IR images to be corrupted.
• Corrected an issue with MMMReader_RFSuspend and MMMReader_RFResume which caused an
error then next time a document was read after the RF device was resumed.

1.65 Version 3.0.6 – 9 October 2009


1.65.1 Low Level API
• Corrected an issue with the image processing on images from the AT9000 and Kiosk Reader,
improving image quality from these scanners.

1.66 Version 3.0.5 – 7 October 2009


1.66.1 High Level API
• Added support for multiple RFID readers. The High Level API can be used to read contact cards on
the AT9000 if they use the same MRTD application as e-Passports. A new event of
READY_FOR_SMARTCARD will be triggered when the user should remove the document from the
glass and place it in the smartcard reader.

Page 51 of 72
Document Reader SDK Change History

1.66.2 Low Level API


• Added support for multiple RFID readers – specifically, to support the contact SmartCard reader as
well as the RFID reader in the AT9000.
o Added MMMReader_RFGetReaderInfo to query the available readers
o Added MMMReader_RFGetReaderCount to query how many smartcard readers are
available
o Added aReaderIndex parameter onto MMMReader_RFOpen call, to specify which reader you
want. You may use value 0 to indicate the RFID reader on scanners with just 1 RF device.
o Added MMMReader_RFWaitForOpen / RFWaitForRemoval for use with smartcard readers in
place of MMMReaderRFOpen, to perform “document detection” of smartcards.
• Trigger a DOC_REMOVED event when a document is quickly pulled back + forward over the doc
detect windows, to prevent two DOC_ON_WINDOW events in a row without a DOC_REMOVED
• Raised the camera thread to “Above Normal” priority to resolve some camera driver errors on the
AT9000, Kiosk Reader, and RTE8000 HS.
• Corrected an issue with the camera being accessed from multiple threads at once, a possible cause
of camera driver errors on the AT9000, Kiosk Reader, and RTE8000 HS.
• Changed the aColourMatrix parameter to MMMReader_ImagePostProcess so that regardless of the
value supplied, the correct colour matrix will be used for the camera on the AT9000, RTE8450 HS,
and Kisok Reader.
• When loading dependent DLLs such as the ePassport, the PATH environment variable is temporarily
updated to include the “bin” directory, to allow Windows to locate all other dependencies.
• An updated version of the Microsoft Visual Studio 2005 C Runtime Library is distributed, due to a
security update from Microsoft to these files.

1.67 Version 3.0.4 – 3 Sept 2009


1.67.1 High Level API
• The event callback is now called with RF_CHIP_OPENED_SUCCESSFULLY and
RF_CHIP_OPEN_FAILED events.
• Added MMMReader_RFAbort, which can be used to abort an RF read that is in progress. This can be
used in combination with the “detectDuringRF” setting to automatically abort an RF read when a
document is removed from the scanner too early.
1.67.2 Low Level API
• Added MMMReader_LL_RFAbort to abort the RF reading.

1.68 Version 3.0.3


• The SDK now ships updated device drivers for the RTE8000 and RTE8000 HS for the RFID device.

1.69 Version 3.0.2 – 10 Aug 2009


1.69.1 High Level API
• Disabled the use of hue / contrast adjustment image processing in preference to the new colour
matrix code. This provides higher quality images on the AT9000, Kiosk Reader, and RTE8450 HS.

Page 52 of 72
Document Reader SDK Change History

1.69.2 Low Level API


• Implemented the correct colour correction matrices for the AT9000, Kiosk Reader, and RTE8450 HS,
which now respects the aColourMatrix parameter on MMMReader_ImagePostProcess
• Changed the RTE8000 HS to use rolling shutter mode, which improves image quality regarding
ambient light.
• Changes to reduce the number of “camera driver” errors reported when using an AT9000 / Kiosk
Reader, or RTE8000 HS
• Corrected an issue on the RTE8000 HS which prevented document detection from working correctly
when the UV tube was automatically disabled after 60 minutes of inactivity.
• Corrected the cryptographic validation of DSC / CSC for some algorithms.
• Corrected an issue which caused the “station id” of RF antennas in an RTE8000 to be set incorrectly.
This would then cause the PC/SC drivers to fail with these antennas (but they would continue to work
using the standard drivers).
• Improved the speed of reading RF documents on the RTE8000 HS.

1.70 Version 3.0.1 – 2 June 2009


1.70.1 High Level API
• Enabled the hue / contrast / grey stretch image processing options to improve the image quality.
1.70.2 Low Level API
• Corrected some document detection and cropping problems when used on the AT9000.
• Improved the quality of the UV images on the AT9000. When using the low level API for UV images,
set the LIGHT_BACKGROUNDSUBTRACT flag to enable this feature.
• Corrected an issue with the RTE8000 HS not applying reference images correctly.
• Added support for Kiosk Readers and AT9000s that use UV LEDs. Warmup times will automatically
be ignored, and the UV LEDs will not be turned on during document detection.

1.71 Version 3.0.0 – 2 May 2009


1.71.1 SDK General Changes
• Added support for the AT9000, Kiosk Reader, and RTE8000 HS scanners. Applications written for
one scanner should in general work without modification on the other scanner types.
• Rebranded SDK from RTE8000 to MMMReader:
o For C++ applications, the prefix on all RTE8000_* functions has been changed to
MMMReader_*, and similar for enums / structs. However, compatibility wrappers
“RTE8000HighLevelAPI.h” and “RTE8000LowLevelAPI.h” can be used to map from the old
names to the new names without making code changes. Simply link with the new .lib file.
o For .NET applications, we now ship .NET 1.1 and .NET 2.0 assemblies rather than supplying
sample interop code. There are two versions, MMMReaderDotNet.dll and
RTE8000DotNet.dll. The RTE8000 version uses a similar interface to the old .cs interop files,
and can be used to easily upgrade an application to work with this SDK. For new customers,
we would recommend using the MMMReaderDotNet assemblies, as these provide a cleaner
interface to the SDK.
o Renamed DLLs to use MMMReader instead of RTE8000.
o Renamed RTE8000Expo to PageReaderExpo

Page 53 of 72
Document Reader SDK Change History

• Application.ini, which is in the Config directory, can now be used to override the settings from the
scanner. This allows your application to set the “data to send” flags and other settings without using
MMMReader_UpdateSettings. This is particularly important when using an AT9000 or Kiosk Reader,
as these do not have Reader.ini on the scanner.
• MMMReader.ini is used to locate the installation, and the Config and Plugins directories. When re-
distributing the application, we recommend that you place this with the binaries. If you change the
directory structure, please edit the paths in MMMReader.ini to have the correct locations for the
Config and Plugins directories.
• Replaced eMRTDTestProgram with a new eMRTDReader application.
• For EAC builds, there are now additional *_EAC.dll versions of the RF related DLLs. For compatibility
reasons, these DLLs are the only software change from a non-EAC release.
• The SDK now depends upon some Microsoft Visual Studio 2005 DLLs, and therefore requires the
VC8 C Runtimes to be installed. The SDK installer will automatically run Microsoft’s vcredist_x86.exe
however you must ensure this is also executed on the end users PCs.
1.71.2 High Level API
• Added aCallbackParam to ErrorCallback function, to be consistent with all other callback functions.
1.71.3 Low Level API
• Corrected an OCR issue with 2x36 documents
• Added MMMReader_RFGetChipApduTime and MMMReader_RFGetChipBytesRead to return
statistics about RF reads.
• Added new post process flags for hue adjustment, contrast, grey stretch. The sharpen post process
operation now works in a different way, and gives better results.

Page 54 of 72
Document Reader SDK Change History

Page 55 of 72
Document Reader SDK Change History

3. RTE8000 SDK v2
1.72 Version 2.1.6 – 20 Jan 2009
1.72.1 Low Level API
• Added support for additional boxes to be checked during doc detect. These can be specified in the
new boxes member of the DocDetectSettings structs, although it is recommended that customers
check with 3M RT before using these.
• Corrected an issue with PC/SC mode RFID reads, when errors are returned by the chip.

1.73 Version 2.1.5 – 20 Jan 2009


1.73.1 High Level API
• Changed the default location of sound files used in Speech / Effects modes – these are now read
from disk, rather than the RTE8000 MSD.
1.73.2 Low Level API
• Added RTE8000_RFSetQueueFinishedNotification, so that applications can be notified when the
queue of commands becomes empty.
• Additional parameter to RTE8000_SignalInitialise so that the .ini file location may be different to the
.wav file location, so that the wav files may be stored with the application.
• Additional changes to support the Kiosk Reader.
• Added additional context rules for Albanian Passports and ID cards.
1.73.3 SDK
• Java SDK examples repackaged as .jar files, and the JNI wrapper updated to use a more standard
naming convention
• RTE8000 Expo renamed to Page Scanner Expo, as it now supports the Kiosk Reader and AT9000
devices in addition to the RTE8000.
• Device driver package now includes the drivers required for the Kiosk Reader.

1.74 Version 2.1.4 – 19 Dec 2008


1.74.1 High Level API
• Corrected an issue where the BAC correction callback message would not be called if no codeline
was read at all by the OCR
1.74.2 Low Level API
• If there is a “device already in use” problem with the RFID COM port, the device is enabled / disabled
to try to resolve the issue.
• Additional changes to support the Kiosk Reader.

1.75 Version 2.1.3 – 16 Dec 08


1.75.1 Low Level API
• Additional changes to support the Kiosk Reader.

Page 56 of 72
Document Reader SDK Change History

1.76 Version 2.1.2 – 1 Oct 08


1.76.1 High Level API
• [DataToSend] UV=2 (or programmatically using puDataToSend.special |= IMAGEUV) improves the
UV image, giving superior UV images when there is ambient light.
1.76.2 Low Level API
• Initial support for using the RTE8000 API with PC / SC mode RFID drivers. Note that the preferred
drivers are still the drivers that are shipped as standard, but if PC/SC drivers are installed for other
reasons, RT software can now be used.
• Initial support for the Kiosk Reader, and the AT9000 Full Page Reader.
• Added support for the 3M ISS for Terminal Authentication (EAC builds only). The 3M ISS is a
separate product, but can be used via this SDK.
• RTE8000_GetHardwareConfig API added. This API returns a structure identifying properties of the
hardware configuration (eg, presence of light bank switching etc).
• Added LIGHT_BACKGROUNDSUBTRACT constant which can be supplied to
RTE8000_TakeSnapshot to take images with background illumination subtracted. This improves
images if ambient light leakage is significant.

1.77 Version 2.1.1


This was an internal release only.

1.78 Version 2.1.0 – 2 May 08


1.78.1 High Level API
• Default directory structure changed. Plugins are loaded from the Plugins\ directory, and config files for
plugins should now be placed in the config\ directory, rather than in the bin directory. RTE8000.ini in the
bin directory controls the location searched for these files.
• Added CD_SCDG3_FINGERPRINTS which returns a DG3FingerPrints structure (which contains
DG3FingerImage structures).
1.78.2 Low Level API
• RTE8000_RFDecodeDataGroup now accepts DG3, and will return a DG3FingerPrints structure.
• Internal restructuring, and rationalisation of DLLs required. Any DLLs shipped with previous releases but
not included this release are no longer required.
• Corrected an issue with the sign request callback, which caused access violations in some cases.

1.79 Version 2.0.47 – 18 Mar 08


1.79.1 High Level API
• Added support for the “size” parameter in DataToSend. This allows images to be scaled up or down.
1.79.2 Low Level API
• Corrected an issue with RTE8000_RFGetBACStatus incorrectly returning TS_NOT_PERFORMED when
BAC had been attempted and failed.
• Further improvements to the decode of DataMatrix barcodes.

Page 57 of 72
Document Reader SDK Change History

• Corrected issue with RTE8000_ImagePostProcess where the reference image was not applied correctly if
the image was visible light, greyscale, and rotated.

1.80 Version 2.0.46 – 8 Feb 08


1.80.1 High Level API
• Prevented DOC_ON_WINDOW from being incorrectly triggered when setting the state to disabled.
1.80.2 Low Level API
• Corrected an issue where the RFID DLLs failed to load.

1.81 Version 2.0.45 – 31 Jan 08


1.81.1 High Level API
• Added RTE8000_SetPluginOrder, and processing of DataToSend values > 1 for plugins. The plugins will
be processed in ascending order. If no order is set, or all set to 1, they will tend to alphabetical order
(previous behaviour).
• Used the RTE8000_PluginDecode change to give improved barcode decoder performance in the high
level.
1.81.2 Low Level API
• RTE8000_PluginDecode takes aImageId, which should be set to the same value for all calls that are
given the same image. This allows the plugins to share data to reduce decode time.
• Improved the read performance of DataMatrix, PDF417 and QRCodes.
• Increased the stack size allocation for the image processing thread, to resolve stack overflow errors with
very large barcode decodes.
• OCR context rules improved for various ID cards.
• Reduced the number of ERROR_GPIO errors reduced by automatically retrying the commands in the
case of failure, rather than immediately reporting the error to the caller.

1.82 Version 2.0.44 – 21 Nov 07


1.82.1 High Level API
• Suppressed the initial DOC_REMOVED event which was previously triggered when initialising the API
with no document on the scanner. If there is a document already present, a DOC_ON_WINDOW event
will still be triggered.
• Added a new setting to in #DocDetect.ini, [General], DetectDuringRF = 1, accessible via
puDocDetectSettings.detectDuringRF which enables doc detection during RF processing. The
DOC_ON_WINDOW and DOC_REMOVED events will be triggered if the user removes the passport
during the read (including while within the BAC correction callback).
1.82.2 Low Level API
• Improved the read performance of Aztec 2D barcodes.

1.83 Version 2.0.43 – 17 Oct 07


1.83.1 High Level API
• If the scanner is disconnected while in the READER_ASLEEP mode, an
ERROR_RTE8000_NOT_CONNECTED error will now be thrown.

Page 58 of 72
Document Reader SDK Change History

• The SIGNAL_DOCREMOVE led/sound event is now triggered as soon as the document may be
removed, in the case where only image processing is being performed, but all RFID and camera activity
has completed (e.g. decoding barcodes)
1.83.2 Low Level API
• Added a parameter on RTE8000_CameraDetectDocument() to allow the scanner illumination to be set
while performing document detection.
• Added RTE8000_TurnOffIllum()

1.84 Version 2.0.42 – 31 Aug 07


1.84.1 High Level API
• RTE8000_UpdateSettings structure now respects the additional RF and Sound settings structures.
1.84.2 Low Level API
• RTE8000_SignalEvent and RTE8000_SoundEvent now take the SoundSettings structure, allowing the
caller to adjust the sound settings at runtime.
• RTE8000_RFOpen parameters updated to allow parameters such as the max APDU attempts to be
adjusted at runtime. All settings from the RFID ini files are now accessible via the RTE8000Settings
structure, and loaded via RTE8000_LoadSettings.
• RTE8000_RFUpdateSettings API added, allowing settings usually configured at initialisation to be
updated.
• Added configuration settings for checking DSC/CSC against CRL, which are accessible both via the ini
files, and via the RFProcessSettings struct.

1.85 Version 2.0.41 – 19 JuL 07


1.85.1 Low Level API
• Barcode plugins now use normalised images to improve read performance in any location on the
scanner.
• Standardised barcode threshold settings for best performance.
• 1DBarcodes: Improved detection of 2of5 and IATA 2of5 to prevent 2of5 being incorrectly detected as the
IATA version.
• Updated RFID register settings to stabilise reading of slower chips.

1.86 Version 2.0.40 – 16 JuL 07


1.86.1 Low Level API
• The camera “black level” can now be set to 0 via #reader.ini [GenCamera] ZeroBlack=1, or via
puCameraSettings.zeroBlack = 1. Customers are recommended not to change this setting without first
contacting RT.
• RTE8000_RFInitialise no longer causes an Access Violation error if certificate loading encounters an
unknown certificate.
• RTE8000_RFSuspend and Resume no longer cause the RF COM port timeout to be reset. This caused
errors to occasionally occur with slower chip operations, such as Active Authentication.
• RTE8000_ImagePostProcess will now normalise visible light images even if they are not marked as
colour.

Page 59 of 72
Document Reader SDK Change History

• PDF417 plugin: corrected an issue with greyscale passes, which may improve the read-rate for some
documents.

1.87 Version 2.0.39 – 6 Jul 07


1.87.1 High Level API
• RTE8000_GetLowLevelAPI may now be called during the initialisation process (eg in the
SETTINGS_INITIALISED event), so as to allow callers to avoid race conditions with documents being
read immediately after initialisation.
1.87.2 Low Level API
• Corrected an issue which would cause the scanner to repeatedly indicate that a new document has been
placed, even though the document has already been processed.
• Corrected an issue which caused Windows to crash fatally as a result of shutting down and re-initialising
the API.
• Corrected an issue which caused the API to “deadlock” after certain error conditions arise while initialising
or resuming the RFID or Camera devices.

1.88 Version 2.0.37 – 11 Jun 07


1.88.1 High Level API
• Corrected an issue where it could take 50s to receive END_OF_DOCUMENT_DATA when using plugins,
but no data was returned from the plugin.
1.88.2 Low Level API
• Added a new error code, ERROR_RTE8000_NOT_CONNECTED, which is reported if an RTE8000 is not
found, rather than reporting an error opening the ini files.
• Added a new error code, ERROR_RF_DEVICE_NOT_FOUND which is reported if we are unable to
locate the COM port associated with the RFID device.
• Removed aChipId from RTE8000_RFOpen, as multiple chips in field are not currently supported.
• RTE8000_Initialise now takes an aParam value, which is supplied to the sign request and signature
callbacks.
• Plugins restructured, with a new additional dependency of RTDecodeHelper.dll.
• Additional plugins added to the standard package: DataMatrix and QRCode.
• Added support for setting a different colour correction matrix, and image gamma settings.
• Added support for 2x36 T documents
• Corrected an issue which caused problems to occur while shutting down when using the SDK from within
a .NET Service.
• RF – minor EAC alterations to match the latest specification.
• RF – corrected an issue which occurred when SelectFile returned an unexpected response from the chip.

1.89 Version 2.0.36


This was an internal release only.

Page 60 of 72
Document Reader SDK Change History

1.90 Version 2.0.35 – 17 Apr 07


1.90.1 High Level API
• EAC support: RTE8000_SetSignRequestCallback allows an additional callback to be set, and additional
data items added: CD_SCCHIP_AUTHENTICATION_STATUS, CD_SCTERMINAL_AUTH_STATUS,
and CD_SCEF_CVCA_FILE.
• When sending images as BMP, the resolution property is now set correctly.
1.90.2 Low Level API
• EAC support: RTE8000_RFGetChipAuthenticationStatus,
RTE8000_RFGetTerminalAuthenticationStatus, and RTE8000_RFSetSignRequestCallback added.
RFID_EF_CVCA_FILE is now a valid parameter to RTE8000_RFGetFile.
• RTE8000_RFGetBACStatus, RTE8000_GetAidBaudRate, and RTE8000_RFGetChipID are now non-
blocking.
• If a moving document is placed but is never stopped prior to removal, a doc removed event is no longer
generated.
• Image debarrelling is now more accurate on 1mp cameras.
• The “mask” parameter on RTE8000_LL_EnableLogging is now respected by more parts of the code.
1.90.3 QA API
• Added support for EAC.
• Added support for Active Authentication
• Corrected an issue with RF errors causing timeouts

1.91 Version 2.0.34 – 22 Mar 07


1.91.1 Example applications
• Added QA Non-Blocking example to the standard SDK

1.92 Version 2.0.33 – 16 Mar 07


1.92.1 Low Level API
• Recompiled all plugins, correcting an issue which caused an error to occur when shutting down.
• Ensured that all plugins are assuming correct default settings, and so will operate without .ini files.
• Further improvements to OCR of French documents.

1.93 Version 2.0.32 – 9 Mar 07


1.93.1 High Level API
• RTE8000_GetPluginName will now clear the aPluginName if called with an index greater than the
number of plugins. Previously only the length parameter was set to 0 to indicate this case.
• CD_READPROGRESS messages were being sent when not configured to be sent (DataToSend section,
Progress=1, or puDataToSend.progress)
• RTE8000_GetState will now return the “new” state when called within the ERROR_RESOLVED event
callback – previously the state was changed after completion of this callback.
• Improved responsiveness on calling RTE8000_Shutdown while the reader is in an error state.

Page 61 of 72
Document Reader SDK Change History

1.93.2 High Level API


• Improved OCR of French passports.
• Corrected an error which occurred when calling RTE8000_CameraShutdown if the camera was currently
suspended.
• Corrected an error which occurred when calling RTE8000_CameraShutdown if an error has occurred
during RTE8000_CameraInitialise.
• If a specific scanner has been selected via RTE8000_SelectScanner, do not cause other applications to
be set to READER_SUSPENDED if they attempt to access a different scanner.
• Changed RF COM port detection to prefer the COM port specified in the ini file in the case where multiple
RTE8000’s are connected.
• Increased chained APDU response buffer limit to 64k (the ISO 7816 maximum).

1.94 Version 2.0.31 – 20 Feb 07


1.94.1 High Level API
• Added a new state for RTE8000_SetState function of READER_SUSPENDED. This closes any open
hardware connections to enable another application to use the RTE8000.
• If the RTE8000 is currently in use by another application, the state will automatically be set to
READER_SUSPENDED.
1.94.2 Low Level API
• Some RF settings in #RTEPASSPORTAPI.INI are now overridden for optimum performance.
• BAC_STATUS RF data item type changed to a TRISTATE enum (see RTE8000DataTypes.h)
• Improved responsiveness and lowered CPU usage of document detection.
• Improved 1D barcode reading plugin.

1.95 Version 2.0.30 – 07 Feb 07


1.95.1 High Level API
• Added a global image debarrelling flag in #Img.ini ([Img] DebarrelImages=1)
1.95.2 Low Level API
• Implemented Driving License reading plugin.

1.96 Version 2.0.29 – 29 Jan 07


1.96.1 High Level API:
• Changed handling of RF error codes, to ensure the appropriate action is taken based upon the type of
error that occurs.
• Added demonstration of EAC ePassport reading in eMRTDTestProgram.exe, but this feature is not yet
available through the SDK.
1.96.2 Low Level API:
• Improved rotation algorithm, which improves visual quality of images, and OCR results on documents that
require rotation.
• Corrected some cases that could return an incorrect RF error code.

Page 62 of 72
Document Reader SDK Change History

• RF data files will not be decoded by default.

1.97 Version 2.0.28 – 22 Dec 06


1.97.1 High Level API:
• Corrected an issue with the OVD1 and OVD2 images not specifying the correct lighting banks.
• Corrected .NET wrappers to include the latest revisions of the data structures.
1.97.2 Low Level API:
• Improved OCR read rates for Hong Kong ID cards.

1.98 Version 2.0.27 – 21 Dec 06


1.98.1 High Level API:
• Added support for OVD1 and OVD2 image types, returning visible images with different lighting banks
enabled to highlight / suppress OVD’s placed over the document.
• When RTE8000_UpdateSettings is called, ensure image exposure + gain settings are correctly updated.
• Save the plugin enabled / disabled states on RTE8000_SaveSettings
• Corrected a timing issue which allowed chip id and air baud rate to be returned before start of doc
marker.
• CD_SECURITYCHECK now uses its own UV image rather than using the main UV image, allowing it to
work more consistently regardless of camera configuration.
• Images are now flipped based upon the OCR results.
1.98.2 Low Level API:
• Added aLightBanks into RTE8000_TakeSnapshot and RTE8000_PostProcessImage to provide support
for enabling and disabling individual light banks (requires specific hardware revision).
• Added support for Hong Kong id cards.
• Added initial support for connecting to a specific RTE8000 by serial number, in the case that multiple are
connected to the same PC.
• Plugin images may now be debarrelled – this is done for barcodes to improve read rates.
• Plugins may now specify image definitions as based upon other images. Barcode plugins now use the
same exposures as the visible image without calibration.

1.99 Version 2.0.26 – 9 Nov 06


1.99.1 High Level API:
• Added new APIs, RTE8000_GetPluginName, RTE8000_IsPluginEnabled, and RTE8000_EnablePlugin.
• Added PLUGINS_INITIALISED event to allow client applications to enable / disable plugins prior to a
document read.
• Signal the SIGNAL_SHUTDOWN when RTE8000_Shutdown is called.
• Signal the SIGNAL_DOCREMOVE when document reading is complete, and the document may be
removed.

Page 63 of 72
Document Reader SDK Change History

1.99.2 Low Level API:


• Corrected an error when shutting down if no camera device is present.
• Corrected an issue with the QA spot checking which caused false positive results in some cases.
• When the IR reference image is detected as not present, report an error.
• Correct an issue with the visible reference image being flipped in some cases.

1.100 Version 2.0.25 – 17 Oct 06


1.100.1 High Level API:
• Corrected a race-condition with RTE8000_SetState that could cause the application to deadlock if called
in quick succession.
• When RTE8000_GetData is supplied with a buffer that is not large enough, do not trigger the
READER_ERRORED state.
• Allow RTE8000_GetData to be called at any point, up until the next document is detected.
• Corrected an issue with BAC status returned incorrectly if chip baud rate or chip id data items are
enabled.
• Allow RTE8000_SetState to be called prior to RTE8000_Initialise, to change the initial state.
• Changed implementation of RTE8000_Reset to correct issue with it blocking indefinitely in some cases.
• Corrected issue with DGx validate data items causing a timeout if set for non-present data groups.
• Corrected issue with Data Groups not read correctly if they were detected as not present on the previous
document.
• Corrected the UV scheme logic to be consistent with the V1 SDK. UV is not turned on if no UV image is
required. If uvonenable=0, UV will not be turned on when starting document detection, but when the
document is detected.
• Corrected a timeout issue if no data items at all are requested.
1.100.2 Low Level API:
• Reviewed and secured RFID code against potential malicious attacks via malformed RFID chips.
• Added 5 custom sound + led events, SIGNAL_CUSTOM1 to SIGNAL_CUSTOM5, which are available for
customer use.
• Updated settings structures, to ensure compatibility with .NET framework.
• Internal changes to the document detection to use less CPU time – this should have no effect on
functionality.
• Corrected an issue with low-level camera device data structures being not initialised fully. No errors
reported due to this issue.
• Improved certificate validation when a Document Signer Certificate or Country Signer Certificate is loaded
via the Certificate callback function.
1.100.3 Client DLL API:
• Updated not to pass through “unknown” data items to the ClientDLL callback.
• Updated to include support for DG3 to DG16

Page 64 of 72
Document Reader SDK Change History

1.101 Version 2.0.24 – 19 Sep 06


1.101.1 Low Level API:
• OCR: Changes to context checking to improve read-rates.
• OCR: Corrected an issue with 3-line cards sometimes rejecting 1 line.
• Corrected an issue where ePassport digital signature validation failed if SignedAttributes were not in
lexicographical order (this is bad ASN.1 encoding, but the SDK has been modified to handle it).

1.102 Version 2.0.23 – 25 Aug 06


1.103 QA High Level API:
• Added RTQAHL_EnableAuditLogging.

1.104 High Level API:


• If RTE8000_Shutdown is called from another thread while within a blocking API, handle the shutdown
case gracefully.

1.105 Version 2.0.22 – 15 Aug 06


1.105.1 QA High Level API:
• Relocate the document after debarrelling the image to improve accuracy of cropping.
• Improved performance by not demosaicing the IR image.
• Added a “MRZ summary” test, which passes only if all MRZ positional tests pass.
1.105.2 High Level API:
• If RTE8000_ReadDocument is called when no document is on the window, return an error code rather
than blocking until a document is placed. Callers should call RTE8000_WaitForDocument if they wish this
functionality.
1.105.3 Low Level API:
• Add support for PP_RELOCATEDOCUMENT in RTE8000_ImagePostProcessImage to allow documents
to be located within images not directly taken from document detection.
• Corrected an issue with debarrelled images having seams down the centre of the image.
• Changed rotation of skewed documents to be more accurate.
• Changed OCR to allow skewed codelines to be read in QA mode whilst still reporting the correct rotation.
• Improved performance of debarrelling images.
• Improved performance of document location.

1.106 Version 2.0.21 – 31 July 06


1.106.1 High Level API:
• If SaveImages is enabled, then save the image as soon as it is processed, not when supplied to the
calling application.
• If an error occurs while opening the RFID chip, ensure that we do not expect additional RFID data to be
received.

Page 65 of 72
Document Reader SDK Change History

1.106.2 Low Level API:


• Changed the method of re-mounting the RTE8000MSD drive introduced in 2.0.20 so that it works
correctly with Windows 2000.

1.107 Version 2.0.20 – 26 July 06


1.107.1 High Level API:
• Corrected an issue with RFID data items being returned, particularly in the case where an error occurs
during the read.
• Additional logging in error conditions when not all expected data is returned.
1.107.2 Low Level API:
• Corrected an issue with images being cropped by 16 pixels vertically, even when no cropping was
requested.
• The constants in #img.ini section [DocPosn] for different document types are now configured
automatically based on camera type, not read from the .ini files. The only values used within this section
are now “Left” and “Bottom”.
• When initializing settings, if the RTE8000MSD is not present, attempt to re-mount the drive. This corrects
issues with network drive mappings hiding the RTE8000MSD if the drive-letters clash.
• Added contexts for ISR / SLV passports.
• Added a context for Russian Visas.
• Added a context for 2x44 T documents.
• Corrected an issue with reading of I94 documents.
• Added better validation of EF.SOD file to cope with particularly bad encoding.

1.108 Version 2.0.19 – 7 July 06


1.108.1 High Level API:
• Logging can be enabled via ini files.
• Log the DLL versions on startup.
• Removed DLL version APIs that were duplicates of low-level. Logging the versions is sufficient, and
callers who really need access to this can tunnel to the low-level.
• RTE8000_Initialise changed to include a parameter for the Certificates callback.
• Added RTE8000_InitialisePositionCorrection to allow additional control over document detection logic.
1.108.2 Low Level API:
• When reporting DLL versions, check the “bindir”, instead of current working directory.
• Modified RTE8000_SendAPDU to return an error code when there are error response bytes available.
• RTE8000_SendAPDU now strips the first 2 bytes from the response data.
• Added RTE8000_CameraCheckDetectBoxes and an additional callback to RTE8000_DetectDocument to
allow additional control over document detection.
• OCR: Improved reading of I-94 documents.
• Fixed an issue where EF.SOD files containing certificates with no extensions caused a crash.

Page 66 of 72
Document Reader SDK Change History

1.109 Version 2.0.18 – 26 June 06


1.109.1 High Level API:
• Respect reader.ini settings in the [DataToSend] section for plugins. The string checked is the plugin name
– the text after RTDECODE_ in the dll name – such as PDF417, and 1DBarcodes.
1.109.2 Low Level API:
• OCR: Allowed the codeline to be read when the document is skewed when performing QA.
• Added support for active authentication - CD_ACTIVEAUTHENTICATION.
• Added support for reading external document / country signer certificates.
1.109.3 QA High Level API:
• Added RTQAHL_GetErrorMessage.

1.110 Version 2.0.17 – 9 June 06


1.110.1 QA High Level API:
• Corrected QA measurements where left and right margin distances were reversed.
• Corrected issue with RFID if the passport is removed during a BAC read.
• Added test to measure gap below codelines.
1.110.2 LowLevel API:
• Fixed an issue where Data Groups read from the RF chip > 35K became corrupted.

1.111 Version 2.0.16 – 7 June 06


1.111.1 High Level API:
• Set the new removed parameter on the BAC callback whenever the CD_BACKEYCORRECTION
message is sent.
• Corrected a race condition which could cause an ePassport to attempt to use the BAC key before the
OCR has completed.
• Lowered overall memory usage by destroying images as soon as the particular image is no longer
required.
• Added support for sending the images as BMP and PNG. This can be enabled via the ImageFormat value
in [DataToSend].
• Added support for saving the last image taken of each type. This can be enabled via the SaveImages
value in [DataToSend].
• Corrected an issue with RTE8000_UpdateSettings if called within the event handler when the API is
recovering after an error has occurred.
1.111.2 Low Level API:
• BAC callback has an additional argument to indicate whether the document has been removed. If not set
to true, reading may fail if communications must be re-established with the chip.
• Read LED settings for SIGNAL_ERROR, to allow LEDs to be used for this condition.
• Measure the width of the codeline, when collecting QA data.
• Ensure GDI+ is initialised for the Image Processing area, even if the Camera functional area is not in use.

Page 67 of 72
Document Reader SDK Change History

• Corrected a crash which occurred if you shut down the API, and then re-initialised it.
• Corrected issue with image buffers being overwritten with the next image taken from the camera, in cases
where the image exposure time was significantly less than that taken to process the image.
• Improved performance while logging is enabled by leaving the file open, and not flushing it at every line
output.
• Included function entry and exit logging in release builds, so no longer require a separate debug build for
tracing.
• Added support for debarrelling an image, using RTE8000_ImagePostProcessImage.
1.111.3 QA High Level API:
• Decode the DG1 Data, and add a test to compare against the OCR as read.
• Only initialise RF if the document type specifies RF – allows QA’ing on non-RFID units.
• Additional tests added for “bad chars count”, “broken chars count”, and codeline checkdigit test.

1.112 Version 2.0.15 – 16 May 06


1.112.1 QA High Level API
• Initial beta release of the QA API.
1.112.2 High Level API
• Handle errors on startup more consistently – if the RTE8000_Initialise function errors, transition into the
error state as normal and attempt recovery.
• Corrected an issue with not supplying the crop and rotate flags for plugins based upon the image
definition supplied by the plugin.
1.112.3 Low Level API
• Document Detection made more responsive by calling the callback as soon as a document is known to
be present – before the position of the document is known.
• Separate RTE8000_CameraTakeSnapshot into two APIs – image processing portions of this API have
been moved to RTE8000_ImagePostProcessImage, and can be done in parallel with taking snapshots to
improve performance.

1.113 Version 2.0.14 – 9 May 06


1.113.1 High Level API
• Handle RF errors getting data groups by marking that specific data group as errored, but do not abort
further RF data.
1.113.2 Low Level API
• Added RTE8000_ImageConvertFormat to aid processing of JPEG2000 images.

1.114 Version 2.0.13 – 5 May 06


1.114.1 High Level API
• Added support for BAC enabled 3-line id cards (key fields are placed differently).
• Added SETTINGS_INITIALISED event to allow the caller to change configuration settings prior to them
being used.

Page 68 of 72
Document Reader SDK Change History

1.115 Version 2.0.12 – 28 April 06


1.115.1 High Level API
• Send CD_PROGRESS messages to indicate progress through the document read, based on “Progress”
in the [DataToSend] section, or via the data to send settings structure.
1.115.2 Low Level API
• Added RTE8000_RFSendAPDU.
• Prevent crash in the case where document detection boxes are configured with invalid width / height
parameters.
• Corrected an issue with 0 and O evaluation in the document number.
• When catching a structured exception, log the module addresses.
• Fixed a problem with handling the READ BINARY ODD response for Oberthur chips.

1.116 Version 2.0.11 – 10 April 06


1.116.1 High Level API
• Does not pass “cancelled” errors to the high level error handler, as these are triggered by the client
application calling SetState, and the operation being cancelled is expected behaviour.
• Ensured that after SetState is called, internally all low level queues are cancelled before continuing
processing.
• Added CD_BACKEY_CORRECTION message to allow client applications to correct the BAC key in the
case of failure using the OCR’d string.
1.116.2 Low Level API
• Changed the defaults for a number of settings to the default values supplied in the .ini files, to reduce .ini
dependencies.
• Ensured all projects are consistently using the Multi-Threaded C Runtime libraries.

1.117 Version 2.0.10 – 24 Feb 06


1.117.1 High Level:
• Error correction: UV and COAX images are no longer returned as a greyscale image.
• Multiple plugins sharing the same image will no longer report that the GDI+ bitmap is busy.
1.117.2 Low Level:
• It is no longer necessary to enable logging after initialisation to obtain RFID logging information.
• Some "first time only" initialisation moved from the RF functions which get data into RFInit.

1.118 Version 2.0.9 – 17 Feb 06


1.118.1 High level API
• When RTE8000_WaitForDocument() does not find a document within the timeout period, it no longer
calls the error callback, but simply returns the error code. It also no longer triggers the reader to re-
initialise.
• Further support for plugins.

Page 69 of 72
Document Reader SDK Change History

• When using the blocking API, obtain plugin data via RTE8000_GetPluginData().
• When using the non-blocking API, obtain plugin data via CD_PLUGIN + x messages.
• ERROR_NON_BLOCKING_ONLY has been correctly renamed as ERROR_BLOCKING_ONLY
• It is now possible to request just the BAC Status, without other data items.
1.118.2 Low Level API
• Additional logging at level 3 has been added to the RFID routines. Note currently that to retrieve this
information, you must enable logging after the high level has been initialised.

1.119 Version 2.0.8 – 1 Feb 06


1.119.1 High level:
• No longer waits for client applications callback to complete before executing OCR.
1.119.2 Low level
• RTE8000_CameraTakeSnapshot() now accepts "aQuality" of -1, which is even faster than 0 (fastest!).

1.120 Version 2.0.7 – 20 Jan 06


1.120.1 High level API
• BAC failure and failure to get a given DG no longer cause a transition to READER_ERRORED, although
still reports the error via the callback.
1.120.2 Low level API
• RTE8000_RFResetPassport() API added. This "closes" a connection opened via RTE8000_RFOpen(),
however it need not be called before calling RFOpen again.
• SDK will now abort reading an RF data group if RTE8000_RFCancelQueue is called.

1.121 Version 2.0.6 – 16 Jan 06


1.121.1 High Level API
• Initial release.
1.121.2 Low Level API
• An additional parameter to RTE8000_ImageReadCodeline() is now required.
• Fixed some memory leaks related to reading the data from the RF chip.

1.122 Version 2.0.5 – 12 Dec 05


1.122.1 Low Level API
• RTE8000_CameraTakeSnapshot takes additional parameters aCrop and aRotate. Note that although
they can be set independently, performing a crop without a rotate rarely makes sense.
• QA APIs temporarily disabled as they are currently under review, and will change in a future issue.
• RTE8000_ImagePluginDecode implemented. Note however that as the plugin interface is not yet fully
complete, no plugins are shipped with this release.

Page 70 of 72
Document Reader SDK Change History

1.123 Version 2.0.4 – 2 Dec 05


1.123.1 Low Level API
• RTE8000_RFGetChipId implemented.
• RTE8000_RFGetBACStatus now takes an additional length parameter as it now returns a NULL
terminated string.
• All APIs exposed as extern "C" to remove C++ name-mangling.
• Added some internal error recovery for RFID module to handle complete USB disconnection and
reconnection.

1.124 Version 2.0.3 – 12 Nov 05


1.124.1 Low Level API
• RF APIs implemented.
• RTE8000_ImageReadCodeline now takes a bool indicating whether it should block or not.
• RTE8000_CameraTakeSnapshot() will now wait any remaining time on the UVWarmup time before taking
the snapshot if it is in UV light (but does not block the caller).
• RTE8000_ImageProcessingCancelQueue(), RTE8000_IsImageProcessingInitialised(), and
RTE8000_IsImageProcessingActive() implemented.
• RTE8000_IsSignalInitialised() and RTE8000_SignalShutdown() implemented. Previously no shutdown
was required - this is no longer the case.
• Typo in API RTE8000_LL_GetCameraSerialNumber() corrected.
• Numerous small internal changes.

1.125 Version 2.0.2 – 8 Nov 05


1.125.1 Low Level API:
• RTE8000_LocateDocument added to perform Document Detection logic without waiting.
• RTE8000_CameraCancelQueue added to cancel any outstanding queued camera commands.
• RTE8000_EnableUV implemented, which turns on/off the UV light.
• RTE8000_GetUVWarmupTime implemented, which returns how long till the UV light is warm.
• RTE8000_GetUVEnabledTime implemented, which returns how long the UV has been switched on.
• RTE8000_DestroyCachedObject implemented, allowing deletion of a single object, rather than using
RTE8000_DestroyCachedData to remove them all.
• Signalling interfaces can now be used in parallel with taking images / detecting documents.
• Memory leak on taking an image corrected.

1.126 Version 2.0.1 – 28 Oct 05


1.126.1 Low Level API
• Initial release.

Page 71 of 72
Document Reader SDK Change History

Page 72 of 72

You might also like