Releases: eclipse-keypop/keypop-storagecard-java-api
Releases · eclipse-keypop/keypop-storagecard-java-api
Release list
1.2.0
1.1.1
Removed
- Removed SLF4J useless dependency
1.1.0
Added
- Mifare Classic support: New product types
MIFARE_CLASSIC_1KandMIFARE_CLASSIC_4KinProductTypeenum to support NXP Mifare Classic 1K (64 blocks) and 4K (256 blocks) cards. - Authentication capability: New
ProductType.hasAuthentication()method to indicate whether a storage card requires authentication before read/write operations. - Mifare Classic key types: New
MifareClassicKeyTypeenum withKEY_AandKEY_Bconstants for Mifare Classic authentication. - Authentication methods: New authentication methods for Mifare Classic cards:
StorageCardSelectionExtension.prepareMifareClassicAuthenticate(int blockAddress, MifareClassicKeyType, byte[] key)StorageCardSelectionExtension.prepareMifareClassicAuthenticate(int blockAddress, MifareClassicKeyType, int keyNumber)StorageCardTransactionManager.prepareMifareClassicAuthenticate(int blockAddress, MifareClassicKeyType, byte[] key)StorageCardTransactionManager.prepareMifareClassicAuthenticate(int blockAddress, MifareClassicKeyType, int keyNumber)
- Authentication exception: New
SCAuthenticationFailedExceptionfor handling Mifare Classic
authentication failures. - ST25-specific system block methods: New dedicated methods for ST25/SRT512 system block access:
StorageCardTransactionManager.prepareSt25ReadSystemBlock()StorageCardTransactionManager.prepareSt25WriteSystemBlock(byte[] data)
Changed
- System block documentation: Enhanced
StorageCard.getSystemBlock()documentation to clarify it is specific to ST25/SRT512 cards.
Deprecated
StorageCardTransactionManager.prepareReadSystemBlock()- UseprepareSt25ReadSystemBlock()instead.StorageCardTransactionManager.prepareWriteSystemBlock(byte[])- UseprepareSt25WriteSystemBlock(byte[])instead.
1.0.0
Changed
- Exception hierarchy refactoring:
StorageCardExceptiontransformed from abstract class to interface. - Exception inheritance: All storage card exceptions now extend corresponding
keypop-reader-java-apiexceptions:SCReaderCommunicationExceptionextendsReaderCommunicationExceptionand implementsStorageCardException.SCCardCommunicationExceptionextendsCardCommunicationExceptionand implementsStorageCardException.SCInvalidCardResponseExceptionextendsInvalidCardResponseExceptionand implementsStorageCardException.
- Transaction manager hierarchy:
StorageCardTransactionManagernow extendsCardTransactionManagerfromkeypop-reader-java-api, inheriting theprocessCommands()method.
Removed
- Channel control: Removed
ChannelControlenum, now managed by parentCardTransactionManagerinterface.
Upgraded
- Keypop Reader API
2.0.1->2.1.0
0.3.0
Added
- Exception hierarchy: New base class
StorageCardExceptionwith block address context support:StorageCardException.getBlockAddress()method to retrieve the block address involved in errors.
- Enhanced exception handling: All storage card exceptions now extend
StorageCardExceptionand include block address context:CardIOExceptionconstructor now acceptsblockAddressparameter.ReaderIOExceptionconstructor now acceptsblockAddressparameter.UnexpectedCommandStatusExceptionconstructor now acceptsblockAddressparameter.
- Product type capability:
NewProductType.hasWriteAcknowledgment()method to indicate whether a storage card provides a reliable acknowledgment after write operations.
Changed
- Write operation behavior: API contract updated for
prepareWriteBlocks()method regarding verification reads:- The API now specifies that implementations must handle verification reads transparently for storage cards without reliable write acknowledgment (e.g., SRT512/ST25).
- For cards with reliable write acknowledgment, no additional reads are required by the implementation.
- Applications can now rely on the API contract that data integrity is guaranteed without explicitly performing verification reads.
Removed
- Deprecated exception: Removed
InconsistentDataExceptionclass as it's no longer needed with the new exception hierarchy.
0.2.0
Added
- System block management: New methods to handle system blocks for compatible storage card types:
StorageCardTransactionManager.prepareReadSystemBlock()method.StorageCardTransactionManager.prepareWriteSystemBlock(byte[] data)method.StorageCard.getSystemBlock()method.ProductType.hasSystemBlock()method to indicate system block support by card type.
Changed
- Parameter naming consistency across all APIs: renamed from
blockNumbertoblockAddress:StorageCardTransactionManager.prepareReadBlock(int blockAddress)method.StorageCardTransactionManager.prepareReadBlocks(int fromBlockAddress, int toBlockAddress)method.StorageCardTransactionManager.prepareWriteBlocks(int fromBlockAddress, byte[] data)method.StorageCardSelectionExtension.prepareReadBlock(int blockAddress)method.StorageCardSelectionExtension.prepareReadBlocks(int fromBlockAddress, int toBlockAddress)method.StorageCard.getBlock(int blockAddress)method.StorageCard.getBlocks(int fromBlockAddress, int toBlockAddress)method.
- Documentation improvements:
- Clarified that block addresses start at 0 and maximum value is
getBlockCount() - 1. - Enhanced documentation for zero-filled behavior when blocks haven't been read.
- Fixed incorrect reference from
ProductType.getBlockCount()toProductType.getBlockSize()in write methods.
- Clarified that block addresses start at 0 and maximum value is
- Write operation behavior: Write commands no longer automatically update the
StorageCardmemory image due to storage card technology limitations. Applications must perform explicit read operations after writes to verify actual card content.