Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Protocol specification confusion MMDVM / Homebrew #578

Open
smarek opened this issue May 4, 2020 · 1 comment
Open

Protocol specification confusion MMDVM / Homebrew #578

smarek opened this issue May 4, 2020 · 1 comment

Comments

@smarek
Copy link

smarek commented May 4, 2020

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. OK-DMR/ok-dmr-master#2

@smarek
Copy link
Author

smarek commented Dec 13, 2020

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

@smarek smarek changed the title Protocol specification confusion DL5DI/G4KLX Protocol specification confusion MMDVM / Homebrew Dec 16, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant