From 75ee72e1b9f9eafc11d42abb7762f0c5223a4f7c Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Fri, 19 Apr 2024 18:54:13 +0200 Subject: [PATCH] Function added to write a radio eeprom hexdump file. --- uvk5_CEC_05_HF_DO4KLA.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/uvk5_CEC_05_HF_DO4KLA.py b/uvk5_CEC_05_HF_DO4KLA.py index 65d1c03..7e19e8a 100755 --- a/uvk5_CEC_05_HF_DO4KLA.py +++ b/uvk5_CEC_05_HF_DO4KLA.py @@ -58,6 +58,8 @@ DEBUG_SHOW_OBFUSCATED_COMMANDS = False # might be useful for someone debugging some obscure memory issue DEBUG_SHOW_MEMORY_ACTIONS = False +DEBUG_WRITE_RADIO_HEXDUMP = True + MEM_FORMAT = """ #seekto 0x0000; struct { @@ -626,9 +628,37 @@ def do_download(radio): else: raise errors.RadioError("Memory download incomplete") + if DEBUG_WRITE_RADIO_HEXDUMP: + hex_data = _convert_to_intel_hex(eeprom) + _save_to_hex_file(hex_data, "radio_dump.hex") + return memmap.MemoryMapBytes(eeprom) +def _convert_to_intel_hex(data): + hex_data = "" + for i in range(0, len(data), 16): + chunk = data[i:i+16] + hex_data += ":" + hex_data += format(len(chunk), "02X") + hex_data += format(i >> 8, "04X") + hex_data += format(i & 0xFF, "02X") + hex_data += "00" + for byte in chunk: + hex_data += format(byte, "02X") + checksum = (len(chunk) + (i >> 8) + (i & 0xFF)) & 0xFF + checksum = ((~checksum) + 1) & 0xFF + hex_data += format(checksum, "02X") + hex_data += "\n" + hex_data += ":00000001FF" # End of file record + return hex_data + + +def _save_to_hex_file(data, filename): + with open(filename, "w") as f: + f.write(data) + + def do_upload(radio): serport = radio.pipe serport.timeout = 0.5