Releases: eclipse-keypop/keypop-storagecard-java-api
Releases · eclipse-keypop/keypop-storagecard-java-api
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.
0.1.0
This is the initial release.