OK-DMR / ok-dmrlib

DMR PDUs, elements, FEC and CRC library, including proprietary DMR protocols of Hytera and Motorola
GNU Affero General Public License v3.0
31 stars 7 forks source link
crc dmr dmr-radio etsi fec ham-radio hamradio hytera lp lrrp motorola python rcp rrs tmp tms

OK-DMR Lib

.github/workflows/sanity.yml Code Style: Python Black License Last released version PyPI downloads Python versions Wheel Codecov

This package provides way to parse and assemble various DMR ETSI protocols and functions, in pure Python implementation

Supported features

FEC (Forward Error Correction)

Algorithm Encoding Decoding / Verification
Hamming (7,4,3)
Hamming (13,9,3)
Hamming (15,11,3)
Hamming (16,11,3)
Hamming (17,12,3)
Golay (20,8,7)
Quadratic Residue (16,7,6)
Reed-Solomon (12,9,4)
Rate 3/4 Trellis
Block Product Turbo Code (196,96)
Variable length BPTC (BPTC 128,72)
Variable length BPTC (BPTC 68,28) for CACH/Short LC
Variable length BTPC (BPTC 32,11) for Single-Burst

CRC (Cyclic Redundancy Check) and Checksums

Name Generate Verify
5-bit checksum
CRC-8 (8-bit CRC)
CRC-9
CRC-CCIT (CRC16-CCIT)
CRC-32 (32-bit CRC)

ETSI PDUs (Protocol Data Units)

Name Encoding / Decoding Description
CSBK Control Signalling Block, namely: BS Outbound Activation, Unit-Unit Request/Answer, Negative ACK, Preamble, Channel Timing
EMB Embedded Signalling
FULL LC Full Link Control, namely: Group Voice, Unit-Unit, Talker Alias (header + blocks1,2,3), GPSInfo, Terminator with LC
SHORT LC Short Link Control, namely: Activity, Null
SLOT Slot Type
SYNC Synchronization patterns
Data Header Confirmed/Unconfirmed, Response, Defined Short Data
PI Header Privacy (PI) Header, without further understanding of transported data
Rate 1 Data Rate 1 data (confirmed and unconfirmed) and last block data (confirmed and unconfirmed)
Rate 1/2 Data Rate 1/2 data (confirmed and unconfirmed) and last block data (confirmed and unconfirmed)
Rate 3/4 Data Rate 3/4 data (confirmed and unconfirmed) and last block data (confirmed and unconfirmed)
Full/Short Link Control FLC/SLC PDUs
UDP/IPv4 UDP/IPv4 compressed header/packet

ETSI Information Elements

All listed elements are supported as standalone enum/class representation, which allows for decoding/encoding and describing data (discovery):

Access Types (AT), CRC Mask, CSBKO (CSBK Opcode), DPF (Data Packet Format), DT (Data Type), FID (Feature Set ID), FLCO ( Full LC Opcode), LCSS (LC Start/Stop), PI (Pre-emption and power control indicator), SLCO (Short LC Opcode), SYNC ( Synchronization pattern), Activity ID, Additional Information Field, Answer/Response, CTO (Channel Timing Opcode), DI ( Dynamic Identifier), Position Error, Reason Code, Service Options, Talker Alias Data Format, Defined Data Format (DD), Selective Automatic Repeat reQuest (SARQ), Re-Synchronize Flag (S), Send sequence number (N(S)), SAP identifier (SAP), Supplementary Flag (SF), Unified Data Transport Format (UDT Format), UDP Port Identifier (SPID/DPID), IP Address Identifier (SAID/DAID)

Hytera

Protocol Name Encoding / Decoding
Hytera Simple Transport Reliability Protocol (HSTRP)
Hytera Radio Network Protocol (HRNP)
Hytera DMR Application Protocol (HDAP)
Radio Registration Service (RRS)
Location Protocol (LP)
Radio Control Protocol (RCP)
Text Message Protocol (TMP)

Motorola

Protocol Name Encoding / Decoding
Location Request Response Protocol (LRRP)
Automatic Registration Service (ARS)
Text Messaging Service (TMS)

Available CLI tools

Additional notes