[chirp_devel] [PATCH] Fix older Icom radio models by properly sending commands with raw encoding
Rhett Robinson
Fri Feb 2 17:23:08 PST 2018
# HG changeset patch
# User Rhett Robinson <rrhett at gmail.com>
# Date 1517620949 28800
# Fri Feb 02 17:22:29 2018 -0800
# Node ID e3b90fa8c3160eb3ff9a44a17b789e572d379b07
# Parent 05f340866a9c6de505f569ed6400d3d62f10369b
Fix older Icom radio models by properly sending commands with raw encoding.
Fixes #5545.
diff -r 05f340866a9c -r e3b90fa8c316 chirp/drivers/icf.py
--- a/chirp/drivers/icf.py Wed Jan 17 17:04:56 2018 -0800
+++ b/chirp/drivers/icf.py Fri Feb 02 17:22:29 2018 -0800
@@ -137,7 +137,7 @@
def get_model_data(radio, mdata="\x00\x00\x00\x00"):
"""Query the @radio for its model data"""
- send_clone_frame(radio, 0xe0, mdata)
+ send_clone_frame(radio, 0xe0, mdata, raw=True)
stream = RadioStream(radio.pipe)
frames = stream.get_frames()
@@ -165,9 +165,9 @@
return resp
-def send_clone_frame(radio, cmd, data, checksum=False):
+def send_clone_frame(radio, cmd, data, raw=False, checksum=False):
"""Send a clone frame with @cmd and @data to the @radio"""
- payload = radio.get_payload(data, checksum)
+ payload = radio.get_payload(data, raw, checksum)
frame = "\xfe\xfe\xee\xef%s%s\xfd" % (chr(cmd), payload)
@@ -243,7 +243,7 @@
if radio.is_hispeed():
start_hispeed_clone(radio, CMD_CLONE_OUT)
else:
- send_clone_frame(radio, CMD_CLONE_OUT, radio.get_model())
+ send_clone_frame(radio, CMD_CLONE_OUT, radio.get_model(), raw=True)
LOG.debug("Sent clone frame")
@@ -313,6 +313,7 @@
send_clone_frame(radio,
CMD_CLONE_DAT,
chunk,
+ raw=False,
checksum=True)
if radio.status_fn:
@@ -343,7 +344,7 @@
if radio.is_hispeed():
start_hispeed_clone(radio, CMD_CLONE_IN)
else:
- send_clone_frame(radio, CMD_CLONE_IN, radio.get_model())
+ send_clone_frame(radio, CMD_CLONE_IN, radio.get_model(), raw=True)
frames = []
@@ -352,7 +353,7 @@
break
frames += stream.get_frames()
- send_clone_frame(radio, CMD_CLONE_END, radio.get_endframe())
+ send_clone_frame(radio, CMD_CLONE_END, radio.get_endframe(), raw=True)
if SAVE_PIPE:
SAVE_PIPE.close()
@@ -604,8 +605,10 @@
return data
- def get_payload(self, data, checksum):
+ def get_payload(self, data, raw, checksum):
"""Returns the data with optional checksum BCD-encoded for the radio"""
+ if raw:
+ return data
payload = ""
for byte in data:
payload += "%02X" % ord(byte)
@@ -685,7 +688,7 @@
"""Payloads from a raw-clone-mode radio are already in raw format."""
return unescape_raw_bytes(payload)
- def get_payload(self, data, checksum):
+ def get_payload(self, data, raw, checksum):
"""Returns the data with optional checksum in raw format."""
if checksum:
cs = chr(compute_checksum(data))
More information about the chirp_devel
mailing list