pyuFR ----- Pure Python communication class for Digital Logic uFR-series NFC readers ------------------------------------------------------------------------ This is a Python class to communicate with Digital Logic uFR-series NFC readers such as the uFR Nano or Nano Online (https://www.d-logic.net/). Communication options include serial, UDP, TCP, websocket and HTTP POST (REST). See test routine at the bottom of the class for usage examples. Why? Digital Logic provides a full library for most platform that's perfectly usable in Python (https://www.d-logic.net/code/nfc-rfid-reader-sdk/ufr-lib). However, it has several drawbacks: - Need to import a proprietary binary blob - If your device uses a FTDI USB-to-serial interface, you must disable the native Linux FTDI kernel modules (ftdi_sio and usbserial), as it conflicts with the Digital Logic library. If you have other USB serial devices connected to your system, this is not an option. - The Digital Logic library makes it difficult to debug low-level issues Fortunately, Digital Logic is very open with their serial protocol and has documented it fully and comprehensively. This class reimplements it in pure Python, and adds a few addiitional functions. The uFR COM protocol is specified here: ohttps://github.com/nfc-rfid-reader-sdk/ufr-doc/raw/master/uFR_COM_Protocol.pdf /!\ WARNING: work in progress /!\ uFR COM protocol command uFRcomm class method Status ---------------------------------------------------------------------------- GET_READER_TYPE get_reader_type() Implemented GET_READER_SERIAL get_reader_serial() Implemented GET_SERIAL_NUMBER get_serial_number() Implemented GET_HARDWARE_VERSION get_hardware_version() Implemented GET_FIRMWARE_VERSION get_firmware_version() Implemented GET_BUILD_NUMBER get_build_number() Implemented READER_KEY_WRITE N/A Not implemented USER_DATA_READ user_data_read() Implemented USER_DATA_WRITE user_data_write() Implemented READER_KEYS_LOCK N/A Not implemented READER_KEYS_UNLOCK N/A Not implemented READER_PASSWORD_WRITE N/A Not implemented SELF_RESET self_reset() Implemented SET_SPEED_PERMANENTLY N/A Not implemented GET_SPEED_PARAMETERS N/A Not implemented SET_UART_SPEED N/A Not implemented RED_LIGHT_CONTROL red_light_control() Implemented USER_INTERFACE_SIGNAL user_interface_signal() Implemented SET_RF_ANALOG_SETTINGS set_rf_analog_settings() Implemented GET_RF_ANALOG_SETTINGS get_rf_analog_settings() Implemented SET_LED_CONFIG set_led_config() Implemented DEFAULT_UART_SPEED_SESSION N/A Not implemented GET_CARD_ID get_card_id() Implemented GET_CARD_ID_EX get_card_id_ex() Implemented GET_DLOGIC_CARD_TYPE get_dlogic_card_type() Implemented GET_LAST_CARD_ID_EX get_last_card_id_ex() Implemented SECTOR_TRAILER_WRITE N/A Not implemented SECTOR_TRAILER_WRITE_UNSAFE N/A Not implemented BLOCK_READ N/A Not implemented BLOCK_WRITE N/A Not implemented BLOCK_IN_SECTOR_READ N/A Not implemented BLOCK_IN_SECTOR_WRITE N/A Not implemented LINEAR_READ linear_read() Partially tested LINEAR_WRITE N/A Not implemented LINEAR_FORMAT_CARD N/A Not implemented LIN_ROW_READ N/A Not implemented VALUE_BLOCK_READ N/A Not implemented VALUE_BLOCK_WRITE N/A Not implemented VALUE_BLOCK_INC N/A Not implemented VALUE_BLOCK_DEC N/A Not implemented VALUE_BLOCK_IN_SECTOR_READ N/A Not implemented VALUE_BLOCK_IN_SECTOR_WRITE N/A Not implemented VALUE_BLOCK_IN_SECTOR_INC N/A Not implemented VALUE_BLOCK_IN_SECTOR_DEC N/A Not implemented GET_DESFIRE_UID N/A Not implemented SET_DESFIRE_KEY N/A Not implemented DESFIRE_WRITE_TO_FILE N/A Not implemented DESFIRE_READ_FROM_FILE N/A Not implemented DESFIRE_CREATE_APPLICATION N/A Not implemented DESFIRE_CREATE_FILE N/A Not implemented DESFIRE_CREATE_AES_KEY N/A Not implemented DESFIRE_GET_KEY_CONFIG N/A Not implemented DESFIRE_CHANGE_KEY_CONFIG N/A Not implemented DESFIRE_DELETE_APPLICATION N/A Not implemented DESFIRE_DELETE_FILE N/A Not implemented DESFIRE_SET_CONFIGURATION N/A Not implemented DESFIRE_FORMAT_CARD N/A Not implemented DESFIRE_FREE_MEM N/A Not implemented DESFIRE_WRITE_AES_KEY N/A Not implemented DESFIRE_CREATE_VALUE_FILE N/A Not implemented DESFIRE_READ_VALUE_FILE N/A Not implemented DESFIRE_INCREASE_VALUE_FILE N/A Not implemented DESFIRE_DECREASE_VALUE_FILE N/A Not implemented DESFIRE_CREATE_RECORD_FILE N/A Not implemented DESFIRE_WRITE_RECORD N/A Not implemented DESFIRE_READ_RECORDS N/A Not implemented DESFIRE_CLEAR_RECORD N/A Not implemented DESFIRE_GET_APPLICATION_IDS N/A Not implemented MFP_FIRST_AUTHENTICATE N/A Not implemented MFP_CHANGE_REG_KEY N/A Not implemented MFP_GET_UID N/A Not implemented GET_NFC_T2T_VERSION N/A Not implemented READ_COUNTER N/A Not implemented INCREMENT_COUNTER N/A Not implemented NT4H_COMMON_CMD N/A Not implemented READ_ECC_SIGNATURE N/A Not implemented SET_CARD_ID_SEND_CONF set_card_id_send_conf() Implemented GET_CARD_ID_SEND_CONF get_card_id_send_conf() Implemented SET_BAD_SELECT_NR_MAX N/A Not implemented GET_BAD_SELECT_NR_MAX N/A Not implemented ENTER_SLEEP_MODE enter_sleep_mode() Implemented LEAVE_SLEEP_MODE leave_sleep_mode() Implemented AUTO_SLEEP_SET N/A Not implemented AUTO_SLEEP_GET N/A Not implemented WRITE_EMULATION_NDEF write_emulation_ndef() Implemented TAG_EMULATION_START tag_emulation_start() Implemented TAG_EMULATION_STOP tag_emulation_stop() Implemented AD_HOC_EMULATION_START ad_hoc_emulation_start() Implemented AD_HOC_EMULATION_STOP ad_hoc_emulation_stop() Implemented GET_EXTERNAL_FIELD_STATE get_external_field_state() Implemented GET_AD_HOC_EMULATION_PARAMS get_ad_hoc_emulation_params() Implemented SET_AD_HOC_EMULATION_PARAMS set_ad_hoc_emulation_params() Implemented SET_DISPLAY_DATA N/A Not implemented SET_SPEAKER_FREQUENCY set_speaker_frequency() Implemented SET_DISPLAY_INTENSITY N/A Not implemented GET_DISPLAY_INTENSITY N/A Not implemented UFR_XRC_LOCK_OPEN N/A Not implemented UFR_XRC_SET_RELAY_STATE N/A Not implemented UFR_XRC_GET_IO_STATE N/A Not implemented ENTER_SHARE_RAM_COMM_MODE N/A Not implemented EXIT_SHARE_RAM_COMM_MODE N/A Not implemented READ_SHARE_RAM N/A Not implemented WRITE_SHARE_RAM N/A Not implemented I_BLOCK_TRANSCEIVE N/A Not implemented R_BLOCK_TRANSCEIVE N/A Not implemented S_BLOCK_DESELECT s_block_deselect() Untested SET_ISO14443_4_MODE set_iso14443_4_mode() Implemented APDU_TRANSCEIVE apdu_transceive() Untested ENABLE_ANTI_COLLISION enable_anti_collision() Implemented DISABLE_ANTI_COLLISION disable_anti_collision() Implemented ENUM_CARDS enum_cards() Implemented LIST_CARDS list_cards() Implemented SELECT_CARD select_card() Implemented DESELECT_CARD deselect_card() Implemented GET_ANTI_COLLISION_STATUS get_anti_collision_status() Implemented ESP_SET_IO_STATE esp_set_io_state() Implemented ESP_GET_IO_STATE esp_get_io_state() Implemented ESP_READER_TIME_WRITE N/A Not implemented ESP_READER_TIME_READ N/A Not implemented ESP_READER_EEPROM_READ N/A Not implemented ESP_SET_DISPLAY_DATA esp_set_display_data() Implemented ESP_READER_RESET esp_reader_reset() Implemented ESP_READER_PASSWORD_WRITE N/A Not implemented ESP_READER_EEPROM_WRITE N/A Not implemented CHECK_UID_CHANGE check_uid_change() Implemented RF_RESET rf_reset() Implemented GET_READER_STATUS get_reader_status() Implemented ---------------------------------------------------------------------------- State of completion: 38% uFRcomm class-specific methods ---------------------------------------------------------------------------- close() flush() get_async_id() uFR class methods ---------------------------------------------------------------------------- open() nano_online_host_discovery() nano_online_subnet_discovery() --------------------------------------------------------- Bug reports? Questions? You can email me. Run this command to get my email address: C=base64\ -d;$C<<<Y205emEybHpRSEoxYm1KdmVDNWpiMjBLCg==|$C ---------------------------------------------------------