def datagram_received(self, data: bytes, addr: Tuple[str, int]) -> None: try: self.log_debug(f"Hytera incoming {data.hex()}") self.queue_incoming.put_nowait(parse_hytera_data(data)) except EOFError as e: self.log_error(f"Cannot parse IPSC DMR packet {hexlify(data)} from {addr}") self.log_exception(e) except ValidationNotEqualError as e: self.log_error(f"Cannot parse IPSC DMR packet {hexlify(data)} from {addr}") self.log_error("Parser for Hytera data failed to match the packet data") self.log_exception(e)
async def test_mmdv_to_hytera(): hytera_incoming: Queue = Queue() hytera_outgoing: Queue = Queue() mmdvm_incoming: Queue = Queue() mmdvm_outgoing: Queue = Queue() settings: BridgeSettings = BridgeSettings(filedata=BridgeSettings.MINIMAL_SETTINGS) translator: HyteraMmdvmTranslator = HyteraMmdvmTranslator( settings=settings, hytera_outgoing=hytera_outgoing, hytera_incoming=hytera_incoming, mmdvm_outgoing=mmdvm_outgoing, mmdvm_incoming=mmdvm_incoming, ) asyncio.create_task(translator.translate_from_mmdvm()) asyncio.create_task(translator.translate_from_hytera()) # testcase 1 hytera_input: bytes = unhexlify( "5a5a5a5a072c000041000501010000001111cccc111100004013fc9655e07d83c44095585" "adee19ae61e8abd2d8e93ce71a5daf4340322cfaf5600f955e001006f00000009382300" ) hytera_parsed: KaitaiStruct = parse_hytera_data(hytera_input) mmdvm_output: bytes = unhexlify( "444d52440123380900006f00000000050000000096fce055837d40c45895de5a9ae11ee6bd" "8a8e2dce93a571f4da0334cf2256aff9" ) await hytera_incoming.put(hytera_parsed) mmdvm_translated: bytes = await mmdvm_outgoing.get() assert mmdvm_output == mmdvm_translated # testcase 2 mmdvm_input: bytes = unhexlify("")
def datagram_received(self, data: bytes, addr: Tuple[str, int]) -> None: try: self.queue_incoming.put_nowait(parse_hytera_data(data)) except EOFError: self.log( f"Cannot parse IPSC DMR packet {hexlify(data)} from {addr}")
#!/usr/bin/env python3 import os import sys try: import hytera_homebrew_bridge except ImportError: sys.path.append( os.path.dirname( os.path.dirname(os.path.dirname(os.path.realpath(__file__))))) from hytera_homebrew_bridge.tests.prettyprint import prettyprint from hytera_homebrew_bridge.lib.utils import parse_hytera_data if __name__ == "__main__": if len(sys.argv) < 2: print("use as %s <hexstring>" % sys.argv[0]) exit(0) packet = parse_hytera_data(bytes.fromhex(sys.argv[1])) if packet: prettyprint(packet) else: print("Unknown Hytera packet")