All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed card removal wait for
INNOVATRON_B_PRIMEprotocol cards: APDU polling is now bypassed in favor of the standard PC/SC absence detection, and disconnection is unconditionally performed withUNPOWERregardless of the configured disconnection mode.
2.6.2 - 2026-02-20
- Normalized logging and error messages using Keyple coding standards.
2.6.1 - 2026-02-06
- Split
MIFARE_CLASSICinto two distinct protocols inPcscCardCommunicationProtocol:MIFARE_CLASSIC_1Kwith ATR pattern3B8F8001804F0CA000000306030001.*(card type 0001)MIFARE_CLASSIC_4Kwith ATR pattern3B8F8001804F0CA000000306030002.*(card type 0002)
- Added
MIFARE_CLASSIC_1KandMIFARE_CLASSIC_4Kto the default enabled protocols inPcscPluginAdapter.
keyple-common-java-apifrom2.0.1to2.0.2keyple-plugin-java-apifrom2.3.1to2.3.2keyple-util-java-libfrom2.4.0to2.4.1slf4j-apifrom1.7.32to1.7.36(compileOnly)
2.6.0 - 2025-12-12
- Added support for NXP MIFARE Classic (1K, 4K variants) in
PcscCardCommunicationProtocolwith ATR pattern3B8F8001804F0CA00000030603000(1|2).*according to PC/SC Part 3 Supplemental Document.
- Changed default sharing mode from
EXCLUSIVEtoSHAREDinPcscReader.setSharingMode()to improve compatibility with multi-threaded applications.
- Fixed PC/SC context contention on Linux by implementing separate contexts for monitoring and communication operations,
preventing
SCARD_E_SHARING_VIOLATIONerrors and thread blocking when using card presence detection concurrently with APDU transmission (especially withwaitForCardRemoval()in a separate thread).
2.5.3 - 2025-10-22
- Fixed card disconnection not correctly handled when opening the physical channel.
2.5.2 - 2025-06-27
- Corrected regex for ISO card identification.
- Migrated the CI pipeline from Jenkins to GitHub Actions.
2.5.1 - 2025-05-07
- Fixed card disconnection when checking card presence.
2.5.0 - 2025-04-22
- Introduced new enum
PcscCardCommunicationProtocolthat unifies contact and contactless protocol handling:ISO_14443_4: For all ISO 14443-4 compliant cards (Type A and Type B)INNOVATRON_B_PRIME: For Calypso devices using B Prime protocolMIFARE_ULTRALIGHT: For NXP MIFARE Ultralight and UltralightC technologiesST25_SRT512: For STMicroelectronics ST25 memory tagsISO_7816_3: For contact cards using ISO 7816-3 protocol
- Implemented precise ATR pattern rules aligned with PC/SC Part 3 standards
- Added comprehensive documentation with references to PC/SC specifications
- Enhanced
PcscReader.DisconnectionModeenum with additional modes:UNPOWER: Powers off the card completely (corresponds to PC/SCSCARD_UNPOWER_CARD)EJECT: Ejects the card if supported by the reader (corresponds to PC/SCSCARD_EJECT_CARD)
- Marked
PcscSupportedContactlessProtocolas deprecated, to be replaced byPcscCardCommunicationProtocol - Marked
PcscSupportedContactProtocolas deprecated, to be replaced byPcscCardCommunicationProtocol
- Updated security provider from
jnasmartcardiotojnasmartcardio/cnaversion0.3.0-CNA
2.4.2 - 2025-01-27
- Correct card disconnection logic when a card was present and
checkCardPresence()is called.
2.4.1 - 2025-01-22
- Ensures the physical channel is re-established when
checkCardPresence()(required by the plugin API) is called, in case a card was previously connected.
2.4.0 - 2024-10-08
- Added a new method
setProvider(Provider provider)inPcscPluginFactoryBuilderto allow the use of a custom PC/SC provider.
2.3.1 - 2024-10-01
- Avoid creating multiple contexts when monitoring readers.
2.3.0 - 2024-09-24
- Use
jnasmartcardiolib built with Java 8.
- Add configurable card monitoring cycle duration through a new method
setCardMonitoringCycleDuration(int cycleDuration)to set the card monitoring cycle duration inPcscPluginFactoryBuilder, enabling customization of the default 500ms value. Especially useful under Linux environments.
2.2.3 - 2024-09-18
- Force
net.java.dev.jna:jna:5.15.0to bypass bug JDK-8313765. - Embed
jnasmartcardio-0.2.8-SNAPSHOT.jaruntil an official release is published.
2.2.2 - 2024-09-16
- Fixed smartcardio weaknesses by using jnasmartcardio as provider.
- Fixed errors in the distinction between Reader IO and Card IO exceptions.
- Logging improvement.
2.2.1 - 2024-04-12
- Java source and target levels
1.6->1.8
- Gradle
6.8.3->7.6.4
2.2.0 - 2024-03-29
- Added a note to warn about observability issues when using Java 16+ to
README.mdfile. - Added project status badges on
README.mdfile.
- CI: code coverage report when releasing.
- Documentation of
setDisconnectionMode(the default value indicated was incorrect).
- Keyple Plugin API
2.0.0->2.3.0 - Keyple Util Library
2.3.0->2.3.1(source code not impacted)
2.1.2 - 2023-04-24
- Unnecessary logging in Java 16+ during reflexive calls used to overcome the deficiencies of
smartcard.ioin Windows environment.
2.1.1 - 2023-04-05
PcscPluginFactoryBuilder.useContactReaderIdentificationFiltermethod marked as deprecated.
- Use default reader type identification filters.
- Logging of the available readers names in the
AbstractPcscPluginAdapterclass.
2.1.0 - 2022-07-25
PcscReader.transmitControlCommandandPcscReader.getIoctlCcidEscapeCommandIdmethods (issue #9).- "CHANGELOG.md" file (issue eclipse-keyple/keyple#6).
- CI: Forbid the publication of a version already released (issue #6).
- "Keyple Util Library" to version
2.1.0by removing the use of deprecated methods.
- Setting the smartcard.io path in the case of MacOS platform.
2.0.0 - 2021-10-06
This is the initial release.
It follows the extraction of Keyple 1.0 components contained in the eclipse-keyple/keyple-java repository to dedicated repositories.
It also brings many major API changes.