Open smarek opened 4 years ago
Ok, so after trying to implement original DL5DI protocol and parse what HBlink/DMRGateway produces, i think we have the differences mapped.
All of the homebrew protocol commands, i've been able to find in implementations, is currently described in Kaitai definition here homebrew.ksy and corresponding language specific compilations available here Python 3 and Lua 5.1+
However I've been unable to find authoritative protocol specifiation, and I'd like to be sure
Coud someone please confirm that there is no such documentation and one has to find the consensus of protocol in current implementation of various ham-dmr software? @g4klx
Example of parsed messages, from hblink/mmdvmhost communication follows (clone Hytera_Homebrew_Bridge, python3 -m pip install -r requirements.txt --user
, cd tests
)
> ./pcap_test.py data/pcap/HYTERA_IPSC/hblink_mmdvmhost_1.pcapng | grep Raw | grep -v DMRD
Raw RPTL={'command_prefix': 'RPTL', 'command_data': {'repeater_id': 2308125}} load=5250544c0023381d
Raw RPTL={'command_prefix': 'RPTL', 'command_data': {'repeater_id': 2308125}} load=5250544c0023381d
Raw RPTL={'command_prefix': 'RPTL', 'command_data': {'repeater_id': 2308125}} load=5250544c0023381d
Raw RPTL={'command_prefix': 'RPTL', 'command_data': {'repeater_id': 2308125}} load=5250544c0023381d
Raw RPTL={'command_prefix': 'RPTL', 'command_data': {'repeater_id': 2308125}} load=5250544c0023381d
Raw RPTA={'command_prefix': 'RPTA', 'command_data': {'magic': b'CK', 'repeater_id': 3161088735}} load=52505441434bbc6a62df
Raw RPTK={'command_prefix': 'RPTK', 'command_data': {'repeater_id': 2308125, 'sha256': b'aF\xf9\xc1b\x13\x1f\xc9\xf8\xdf\x02nO\xa0\xce\xf9a}\xc2\xf0\x90L\xea\xdc9|h&P{9\xfd'}} load=5250544b0023381d6146f9c162131fc9f8df026e4fa0cef9617dc2f0904ceadc397c6826507b39fd
Raw RPTA={'command_prefix': 'RPTA', 'command_data': {'magic': b'CK', 'repeater_id': 2308125}} load=52505441434b0023381d
Raw RPTC={'command_prefix': 'RPTC', 'command_data': {'data': {'repeater_id': 2308125, 'call_sign': 'OK0PPF ', 'rx_freq': '430725000', 'tx_freq': '438325000', 'tx_power': '01', 'color_code': '01', 'latitude': '0.000000', 'longitude': '00.000000', 'antenna_height_above_ground': '000', 'location': 'AnyWhere ', 'description': 'Multi-Mode Repeater3', 'url': 'www.prevadece.cz ', 'software_id': '20190131 ', 'package_id': 'MMDVM_Nano_hotSPOT ', 'unparsed_data': ''}}} load=525054430023381d4f4b30505046202034333037323530303034333833323530303030313031302e30303030303030302e303030303030303030416e7957686572652020202020202020202020204d756c74692d4d6f6465205265706561746572337777772e7072657661646563652e637a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020323031393031333120202020202020202020202020202020202020202020202020202020202020204d4d44564d5f4e616e6f5f686f7453504f5420202020202020202020202020202020202020202020
Raw RPTA={'command_prefix': 'RPTA', 'command_data': {'magic': b'CK', 'repeater_id': 2308125}} load=52505441434b0023381d
Raw RPTP={'command_prefix': 'RPTP', 'command_data': {'magic': b'ING', 'repeater_id': 2308125}} load=52505450494e470023381d
Raw MSTP={'command_prefix': 'MSTP', 'command_data': {'magic': b'ONG', 'repeater_id': 2308125}} load=4d5354504f4e470023381d
Raw RPTP={'command_prefix': 'RPTP', 'command_data': {'magic': b'ING', 'repeater_id': 2308125}} load=52505450494e470023381d
Raw MSTP={'command_prefix': 'MSTP', 'command_data': {'magic': b'ONG', 'repeater_id': 2308125}} load=4d5354504f4e470023381d
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x01OpenGD '}} load=444d52410023381d233809014f70656e474420
Raw DMRD={'command_prefix': 'DMRD', 'command_data': {'sequence_no': 77, 'source_id': 2308105, 'target_id': 111, 'repeater_id': 2308125, 'slot_no': True, 'call_type': False, 'frame_type': 0, 'data_type': 4, 'stream_id': 1229515879, 'dmr_data': b'\xa3:K\x84\x7f2\x82\xf6r\xf3h.\xa0qQ\x12C\xc2py[%\xc3\xac\xb1O] x\x03\x8cg\xff', 'bit_error_rate': 0, 'rssi': 62}} load=444d52444d23380900006f0023381d844948ec67a33a4b847f3282f672f3682ea071511243c270795b25c3acb14f5d2078038c67ff003e
Raw DMRD={'command_prefix': 'DMRD', 'command_data': {'sequence_no': 78, 'source_id': 2308105, 'target_id': 111, 'repeater_id': 2308125, 'slot_no': True, 'call_type': False, 'frame_type': 0, 'data_type': 5, 'stream_id': 1229515879, 'dmr_data': b'\xa1|}`\x1cs\xac5\xbf\xe6}\x00\xeaQ\x10\x00\x00\x00\x0e+%<@\xbf\xf3x\x08J?q\xf8\x9c\x85', 'bit_error_rate': 0, 'rssi': 62}} load=444d52444e23380900006f0023381d854948ec67a17c7d601c73ac35bfe67d00ea51100000000e2b253c40bff378084a3f71f89c85003e
Raw DMRD={'command_prefix': 'DMRD', 'command_data': {'sequence_no': 79, 'source_id': 2308105, 'target_id': 111, 'repeater_id': 2308125, 'slot_no': True, 'call_type': False, 'frame_type': 1, 'data_type': 0, 'stream_id': 1229515879, 'dmr_data': b'\xb9\xe8\x81Ras\x00*k\xb9\xe8\x81RgU\xfd}\xf7_qs\x00*k\xb9\xe8\x81Ras\x00*k', 'bit_error_rate': 0, 'rssi': 62}} load=444d52444f23380900006f0023381d904948ec67b9e881526173002a6bb9e881526755fd7df75f7173002a6bb9e881526173002a6b003e
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x00^OK2ZAR'}} load=444d52410023381d233809005e4f4b325a4152
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x01OpenGD '}} load=444d52410023381d233809014f70656e474420
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x0277\x00\x00\x00\x00\x00'}} load=444d52410023381d2338090237370000000000
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x03\x00\x00\x00\x00\x00\x00\x00'}} load=444d52410023381d2338090300000000000000
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x00^OK2ZAR'}} load=444d52410023381d233809005e4f4b325a4152
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x01OpenGD '}} load=444d52410023381d233809014f70656e474420
Raw DMRA={'command_prefix': 'DMRA', 'command_data': {'repeater_id': 2308125, 'radio_id': 2308105, 'talker_alias': '\x01OpenGD '}} load=444d52410023381d233809014f70656e474420
Raw RPTP={'command_prefix': 'RPTP', 'command_data': {'magic': b'ING', 'repeater_id': 2308125}} load=52505450494e470023381d
Raw MSTP={'command_prefix': 'MSTP', 'command_data': {'magic': b'ONG', 'repeater_id': 2308125}} load=4d5354504f4e470023381d
Hello,
we'd like to support MMDVMHost from server-side (replacing brandmeister or HBLink with custom solution)
However reading this docs: https://wiki.brandmeister.network/index.php/Homebrew_repeater_protocol Seems like the MMDVMHost implementation differs from publicly known DL5DI specification of Homebrew
Could anyone here please clarify, what are the differences (or reasons for differences) ? Also if there is any updated specification, which describes current state-of-things in MMDVM
Thank you
Project ref. https://github.com/OK-DMR/ok-dmr-master/issues/2