Skip to main content

DMR Kaitai protocols

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

This repository contains Kaitai-IO definitions of various protocols that can be met in DMR networks, both amateur and professional

Contributing

Please follow these steps

  1. Add or update .ksy definition file
  2. Run re-compilation script ./rebuild-all.sh (generates .py from .ksy and formats them using black formatter)
  3. Provide at least one example dataset to check the implementation with

And specifically avoid these mistakes:

  1. Modifying generated python sources / dissectors after generating

Supported

  • ETSI
    • CSBK (all from TS 102 361-2)
    • Data Blocks (Rate 1, 1/2, 3/4 confirmed and unconfirmed)
    • Data Headers (UDT, Response, Unconfirmed, Confirmed, Short Data Defined, Short Status Precoded, Proprietary)
    • UDP IPv4 Compressed header
    • FULL LC (Full Link Control, Group/Individual voice, GPS Info, Talker Alias + continuation blocks)
  • HAM
    • Homebrew 2015 (per DL5DI, G4KLX, DG1HT 2015)
    • Mmdvm 2020 (with non-standardized features in mmdvm-host, dmr-gateway, hblink and others)
  • Hytera
    • Data Delivery States
    • Data Transmit Protocol
    • GPS Data
    • HDAP (Hytera DMR Application Protocol)
    • HRNP (Hytera Radio Network Protocol)
    • HSTRP (Hytera Simple Transport Reliability Protocol)
    • IPSC (with separate definition for IPSC Heartbeat)
    • LP (Location Protocol)
    • RCP (Radio Control Protocol)
    • RRS (Radio Registration Service)
    • RTTP (Real-time Transport Protocol)
    • TP (Telemetry Protocol)
    • TMP (Text Message Protocol)
  • Motorola
    • ARS (Automatic Registration Service)
    • MBXML (Motorola Binary XML) - only partially supported now
    • TMP (Text Message Protocol)

Testing

run make test (or pytest directly like this env PYTHONPATH=. pytest -vrpP)

Development notes

  1. Use make test, make build or make test-only (without rebuilding the .py files first), or use the commands from Makefile directly, if you don't have make available
  2. If you intend to modify/develop this library, use python3 -m pip install -e --upgrade ., changes to dmr-kaitai project sources are then automatically propagated to your environment without re-installing

Tools

If you install through pip3 install dmr-kaitai or manually from repo using python3 -m pip install ., you should be provided with command-line tools, to pass hex payloads of various protocols to and see what is inside. Tools support multiple hex payloads, each hex string is treated as separate PDU to parse and pretty-print

Usage example

> debug-hytera-hrnp 7e0400002010000100189b6002040005006400000001c403
{'block': 0,
 'checksum': 39776,
 'data': {'checksum': 196,
          'data': {'data': {'data': b'd\x00\x00\x00\x01'},
                   'message_length': 5,
                   'service_type': <ServiceTypes.radio_identification_request: 4>},
          'is_reliable_message': False,
          'message_footer': b'\x03',
          'message_header': <MessageHeaderTypes.radio_control_protocol: 2>},
 'destination_id': 16,
 'header_identifier': b'~',
 'hrnp_packet_length': 24,
 'opcode': <Opcodes.data: 0>,
 'packet_number': 1,
 'source_id': 32,
 'version': 4}

Full listing of available tools

  • debug-homebrew
  • debug-mmdvm
  • debug-hytera-rcp
  • debug-hytera-hdap
  • debug-hytera-hrnp
  • debug-hytera-hstrp
  • debug-hytera-tmp
  • debug-hytera-lp
  • debug-hytera-ipsc
  • debug-hytera-rrs
  • debug-hytera-dds
  • debug-hytera-dtp
  • debug-motorola-ars
  • debug-motorola-tmp

License

AGPLv3.0 see LICENSE file for more info

Metadata

Release files for dmr-kaitai 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dmr-kaitai 1.1.2
File Size Uploaded
dmr_kaitai-1.1.2.tar.gz 49.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dmr-kaitai 1.1.2
File Interpreter ABI Platform
dmr_kaitai-1.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 144.5 kB

Release files / dmr_kaitai-1.1.2.tar.gz

Download URL dmr_kaitai-1.1.2.tar.gz
Size 49.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8d9dae06f622957703e5c626594da1ccbb45b997a6c925105bcdfc2c02faca34
BLAKE2b-256 checksum
How to use checksums
019d52a40f028f896d3120baf10587264ad3cdf204a626ca66a316311974d6dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.6

Release files / dmr_kaitai-1.1.2-py3-none-any.whl

Download URL dmr_kaitai-1.1.2-py3-none-any.whl
Size 95.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f491a9bf52c081c1c3906702f4a10c874f32e83c767e4cc301a210c2e467149
BLAKE2b-256 checksum
How to use checksums
cde1e478fc3a71e0c941ee3d3f44e1d9d54d73421bf235619bff0f9382335f6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.6

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0

3 release files

0.9

3 release files

0.8

3 release files

0.7

3 release files

0.6

2 release files

0.5

2 release files

0.4

2 release files

0.3

2 release files

0.2

2 release files

0.1

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page