# HG changeset patch # User Dmitry Baryshkov dbaryshkov@gmail.com # Date 1603075401 -10800 # Mon Oct 19 05:43:21 2020 +0300 # Node ID 1552c486144d10aff7a63ff6d0a14b38c2c52544 # Parent de5d23f4a4235f42a3dee54e2054def2ac224572 [rt22] patch radio ID for RT-622
For RT-622 to update memory correctly, radio ID has to be written at the address 0x1b8. When reading this address reads as 0. So, patch the data during write operation to stop Chirp from overwriting radio ID on these radios.
I don't know if this operation has to be performed for other radio IDs as well, so this patching is limited to RT-622.
diff --git a/chirp/drivers/retevis_rt22.py b/chirp/drivers/retevis_rt22.py --- a/chirp/drivers/retevis_rt22.py +++ b/chirp/drivers/retevis_rt22.py @@ -205,7 +205,15 @@ serial = radio.pipe
cmd = struct.pack(">cHb", 'W', block_addr, block_size) - data = radio.get_mmap()[block_addr:block_addr + block_size] + mmap = radio.get_mmap() + data = mmap[block_addr:block_addr + block_size] + + # For some radios (RT-622) memory at 0x1b8 reads as 0, but radio ID should + # be written instead + if block_addr == radio._patch_addr: + for fp in radio._patch_id: + if fp in mmap[0:radio._patch_len]: + data = mmap[0:radio._patch_len] + data[radio._patch_len:]
LOG.debug("Writing Data:") LOG.debug(util.hexprint(cmd + data)) @@ -298,6 +306,9 @@ _memsize = 0x0400 _block_size = 0x40 _fileid = ["P32073", "P3" + "\x00\x00\x00" + "3", "P3207!"] + _patch_id = ["P3207!"] + _patch_len = 8 + _patch_addr = 0x1b8
def get_features(self): rf = chirp_common.RadioFeatures()