# uFCoder libraries Scope of this project are libraries used with **uFR** and **uFR Zero** Series devices and SDK examples. Libraries are supported at following platforms: Windows 32 and 64 bit (static and dynamic) Windows ARM64 (dynamic only) Linux 32 and 64 bit (dynamic & static) Linux ARM and ARM-HF (dynamic & static) Mac OSX 64 bit & Universal (dynamic only) iOS 64 bit (static & framework) Android ARM 64 bit (.aar) ESP32 ESP-IDF component ## Getting Started Download project, choose appropriate architecture and place a library in appropriate directory. Consult documentation for [API reference](https://code.d-logic.com/nfc-rfid-reader-sdk/ufr-doc/-/blob/master/uFR_Series_NFC_reader_API.pdf). For quick insight and functions' prototypes, check **/include/ufCoder.h** header file. ### Prerequisites [**uFR**](https://webshop.d-logic.com/products/nfc-rfid-reader-writer/ufr-series-dev-tools-with-sdk.html) or [**uFR Zero**](https://webshop.d-logic.com/products/nfc-rfid-reader-writer/ufr-zero-series.html) Series reader. ## License See the [uFR_library_license.md](/license/uFR_library_license.md) file for details ## Acknowledgments * Libraries are specific to mentioned hardware ONLY and some other hardware might have different approach, please bear that in mind. ## Changelog ## [Version 6.0.21] - 2025-06-18 ### General Changes - X.509 ECC curve domain params feature for MRTD SOD verification. - New MRTD feature: extract signing certificate from the SOD - **MRTD_SOD_CertToHeap()** - Document validation implemented for the **MRTD_ReadDocumentData()** function ## [Version 6.0.20] - 2025-06-13 **Bug fix** - MultiReader API: **ReaderList_*()** crash on Windows patched. ## [Version 6.0.19] - 2025-06-11 ## Diagnostic ** Reader lock status ** - GetReaderLockStatus(uint8_t *lock_status); ## [Version 6.0.18] - 2025-05-27 ### Diagnostic ** I2C devices at the reader ** - GetI2cDevicesStatus(uint8_t *dev_num, uint32_t *dev_bits): Function gets number and types of the installed I2C devices at the reader ## [Version 6.0.17] - 2025-05-14 ### General Changes **Bug fix** - Async API: **Start/StopAsyncSession()** thread termination bug on Windows patched. ## [Version 6.0.16] - 2025-05-07 ### General Changes - **API Updates:** - Async API: **Start/StopAsyncSession()** function calls updated & minor bugs fixed. ### Platform-Specific Changes #### Android - StartAsyncSession(): Support added for usage on Android via cable connection to uFR Series reader (OTG) - StopAsyncSession(): Support added for usage on Android via cable connection to uFR Series reader (OTG) ### Deprecations - uFCoder library distribution for `linux/arm-el` and `linux/static-armel` will no longer be receiving regular updates from **v6.0.16** onward as it considered `Deprecated`. ## [Version 6.0.15] - 2025-05-06 ### ISO15693 card support ** ISO15693 cards lock block implementation ** - UFR_STATUS DL_API iso15693_lock_block_no_auth(uint8_t lock_block_address); - UFR_STATUS DL_API icode_lock_block_PK(IN uint8_t *read_password, IN uint8_t *write_password, uint8_t lock_block_address); //if Protect Page enabled provided passwords - UFR_STATUS DL_API icode_lock_block(uint8_t read_pass_index, uint8_t write_pass_index, uint8_t lock_block_address); //if Protect Page enabled reader's EEPROM passwords ** ISO15693 get multiply block security status ** - UFR_STATUS DL_API iso15693_get_multiply_block_security_status(uint8_t first_block, uint8_t number_of_blocks, OUT uint8_t *block_data); ### [Version 6.0.14] - 2025-04-25 ### General Changes **Bug fix** - ReaderOpenEx() - Internal call functionality bug fixed. - APDUPlainTransceive() - LE field parsing fixup for extended APDU commands. ### [Version 6.0.13] - 2025-04-17 ### ISO15693 cards support ** NXP ICODE cards passwords manipulation ** - UFR_STATUS DL_API icode_write_password_PK(uint8_t pwd_ident, IN uint8_t *current_password, IN uint8_t *new_password); //provided passwords - UFR_STATUS DL_API icode_write_password(uint8_t pwd_ident, uint8_t current_password_index, uint8_t new_password_index); //reader's EEPROM passwords ** NXP ICODE SLIX-S, ICODE SLIX2, ICODE 3 protect page support ** - UFR_STATUS DL_API icode_protect_page_PK(IN uint8_t *read_password, IN uint8_t *write_password, uint8_t protect_page_address, uint8_t low_read_prot, uint8_t low_write_prot, uint8_t high_read_prot, uint8_t high_write_prot); //provided passwords - UFR_STATUS DL_API icode_protect_page(uint8_t read_pass_index, uint8_t write_pass_index, uint8_t protect_page_address, uint8_t low_read_prot, uint8_t low_write_prot, uint8_t high_read_prot, uint8_t high_write_prot); //reader's EEPROM passwords ### [Version 6.0.12] - 2025-04-11 ### General Changes **Bug fix** - MRTDParseDG1ToHeap() data trimming bug fixed with TD1 format; - MRTD_ReadDocumentData() minor JSON format fixup.