[chirp_devel] [PATCH] Fix Icom radio detection
# HG changeset patch # User Martin Cooper mfncooper@gmail.com # Date 1595606974 25200 # Fri Jul 24 09:09:34 2020 -0700 # Node ID 7c40348d9e67a9877bd9ea57970deebe835f95f2 # Parent 37a6a6d6f42535562669c8d3fc4e3765a218aa2d Fix Icom radio detection
Icom radio detection has been broken for a long time, because the detection code is expecting to be passed a radio instance, but is being passed a serial port instead. Since we are trying to determine the model, we don't have the relevant class yet. Instead, create a minimal radio instance to allow us to query for the model.
These changes fix both the 'Detect' option in the 'Download From Radio' menu and the 'chirpc --id' command.
Fixes #7905
diff --git a/chirp/detect.py b/chirp/detect.py --- a/chirp/detect.py +++ b/chirp/detect.py @@ -16,12 +16,20 @@ import serial import logging
-from chirp import errors, directory +from chirp import chirp_common, errors, directory from chirp.drivers import ic9x_ll, icf, kenwood_live, icomciv
LOG = logging.getLogger(__name__)
+class DetectorRadio(chirp_common.Radio): + """Minimal radio for model detection""" + MUNCH_CLONE_RESP = False + + def get_payload(self, data, raw, checksum): + return data + + def _icom_model_data_to_rclass(md): for _rtype, rclass in directory.DRV_TO_RADIO.items(): if rclass.VENDOR != "Icom": @@ -40,7 +48,7 @@
try: ser.baudrate = 9600 - md = icf.get_model_data(ser) + md = icf.get_model_data(DetectorRadio(ser)) return _icom_model_data_to_rclass(md) except errors.RadioError, e: LOG.error("_detect_icom_radio: %s", e) diff --git a/chirpc b/chirpc --- a/chirpc +++ b/chirpc @@ -196,10 +196,9 @@ sys.exit(0)
if options.id: - from chirp import icf - s = serial.Serial(port=options.serial, baudrate=9600, timeout=0.5) - md = icf.get_model_data(s) - print "Model:\n%s" % util.hexprint(md) + from chirp import detect + md = detect.detect_icom_radio(options.serial) + print "Model:\n%s" % md.MODEL sys.exit(0)
if not options.radio:
participants (1)
-
Martin Cooper