Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ajxv/rrhfoem04-lib
https://github.com/ajxv/rrhfoem04-lib
Last synced: 8 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/ajxv/rrhfoem04-lib
- Owner: ajxv
- License: mit
- Created: 2024-11-29T11:59:24.000Z (23 days ago)
- Default Branch: main
- Last Pushed: 2024-12-02T12:09:53.000Z (20 days ago)
- Last Synced: 2024-12-02T12:19:57.923Z (20 days ago)
- Language: Python
- Size: 17.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 dataThe 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.