/pyuFR

Python3 library to communicate with Digital Logic µFR-series NFC readers (https://www.d-logic.net/)

Primary LanguagePython

                                    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
           ---------------------------------------------------------