Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ajxv/rrhfoem04-lib


https://github.com/ajxv/rrhfoem04-lib

Last synced: 8 days ago
JSON representation

Awesome Lists containing this project

README

        

# RRHFOEM04 Python Library

A Python Library for interfacing with the RRHFOEM04 RFID Reader.

## CRC Calculation

The protocol uses CRC-16 for error detection with the following specifications:
* Initial value (CRC_INIT): 0xFFFF
* Polynomial (CRC_POLY): 0x1021
* Width: 16 bits
* Final XOR value: CRC is inverted (~CRC)
* Calculation covers all bytes from Command Code to any custom data

The algorithm works as follows:
1. Initialize CRC to 0xFFFF
2. For each byte in the data:
* XOR the byte with the CRC
* For each bit (8 times):
* If CRC & 0x8000 is set:
* Shift CRC left by 1 and XOR with 0x1021
* Else:
* Shift CRC left by 1
* Keep only lower 16 bits (AND with 0xFFFF)
3. Invert the final CRC value

## Command Reference

### Get Reader Information
* Command code: 0xF000
* Request format:
* Frame length: 0x03
* Command code: [0xF0, 0x00]
* CRC: 2 bytes
* Response format:
* Frame length: Variable
* Command code: [0xF0, 0x00]
* Error code: 2 bytes (0x0000 = success)
* Serial number: 16 bytes
* Data: Model, version, and additional info
* CRC: 2 bytes

### Sound Buzzer
* Command code: 0xF001
* Request format:
* Frame length: 0x03
* Command code: [0xF0, 0x01]
* CRC: 2 bytes
* Response format:
* Frame length: 0x05
* Command code: [0xF0, 0x01]
* Error code: 2 bytes
* CRC: 2 bytes

## ISO15693 Operations

### Inventory (Single Slot)
* Command code: 0x1001
* Request format options:
1. With AFI:
* Frame length: 0x05
* Command code: [0x10, 0x01]
* Flags: 0x36 (Data rate + AFI)
* AFI value: 1 byte
* CRC: 2 bytes
2. Without AFI:
* Frame length: 0x04
* Command code: [0x10, 0x01]
* Flags: 0x26 (Data rate only)
* CRC: 2 bytes
* Response format:
* Frame length: Variable
* Command code: [0x10, 0x01]
* Error code: 2 bytes
* Number of cards: 1 byte
* Card UIDs: 8 bytes per card
* CRC: 2 bytes

### Read Single Block
* Command code: 0x1006
* Request format:
* Frame length: 0x06
* Command code: [0x10, 0x06]
* Flags: 0x02/0x42 (Data rate, optional high-speed)
* Block length: 1 byte
* Block number: 1 byte
* CRC: 2 bytes
* Response format:
* Frame length: Variable
* Command code: [0x10, 0x06]
* Error code: 2 bytes
* Response flag: 1 byte
* Block security status: 1 byte (if option flag set)
* Block data: Variable length
* CRC: 2 bytes

### Write Single Block
* Command code: 0x1007
* Request format:
* Frame length: Variable (6 + data length)
* Command code: [0x10, 0x07]
* Flags: 0x02/0x42
* Block length: 1 byte
* Block number: 1 byte
* Data: Variable length
* CRC: 2 bytes
* Response format:
* Frame length: 0x05
* Command code: [0x10, 0x07]
* Error code: 2 bytes
* CRC: 2 bytes

## AFI Operations

### Write AFI
* Command code: 0x100A
* Request format:
* Frame length: 0x05
* Command code: [0x10, 0x0A]
* Flags: 0x02/0x42
* AFI value: 1 byte
* CRC: 2 bytes
* Response format:
* Frame length: 0x05
* Command code: [0x10, 0x0A]
* Error code: 2 bytes
* CRC: 2 bytes

## ISO14443A Operations

### Inventory
* Command code: 0x2F01
* Request format:
* Frame length: 0x03
* Command code: [0x2F, 0x01]
* CRC: 2 bytes
* Response format:
* Frame length: Variable
* Command code: [0x2F, 0x01]
* Error code: 2 bytes
* UID length: 1 byte (4/7/10)
* UID: Variable length
* CRC: 2 bytes

### Read Block (Mifare)
* Command code: 0x2102
* Request format:
* Frame length: 0x04
* Command code: [0x21, 0x02]
* Block number: 1 byte
* CRC: 2 bytes
* Response format:
* Frame length: 0x14
* Command code: [0x21, 0x02]
* Error code: 2 bytes
* Block data: 16 bytes
* CRC: 2 bytes

### Write Block (Mifare)
* Command code: 0x2103
* Request format:
* Frame length: 0x14
* Command code: [0x21, 0x03]
* Block number: 1 byte
* Data: 16 bytes
* CRC: 2 bytes
* Response format:
* Frame length: 0x05
* Command code: [0x21, 0x03]
* Error code: 2 bytes
* CRC: 2 bytes

### Key notes for all commands:
* All multi-byte values are in big-endian format
* Error code 0x0000 indicates success
* Frame length includes all fields except itself
* CRC is calculated over all fields except frame length and CRC itself
* Response data validity should be checked via error code and CRC verification

## License

This project is licensed under the MIT License - see the LICENSE file for details.