[chirp_devel] [PATCH] Add radio alias support

Dan Smith
Thu Apr 14 16:55:30 PDT 2016


# HG changeset patch
# User Dan Smith <dsmith at danplanet.com>
# Date 1460678120 25200
#      Thu Apr 14 16:55:20 2016 -0700
# Node ID 1a0a36bc2a8d9dc6ec08af2dc775d809e62451c8
# Parent  c0b5e35b06659d29a3c72c02fb2ee7423dacc100
Add radio alias support

This introduces a small class called Alias which defines the identifying
attributes of a radio model. Radio inherits from that, and also has a
list of ALIASES that can be zero or more of those classes. When we
construct the clone box where a user chooses a model, show them all the
models, including aliases.

#0

diff -r c0b5e35b0665 -r 1a0a36bc2a8d chirp/chirp_common.py
--- a/chirp/chirp_common.py	Mon Apr 11 22:47:58 2016 -0400
+++ b/chirp/chirp_common.py	Thu Apr 14 16:55:20 2016 -0700
@@ -987,13 +987,17 @@
     pass
 
 
-class Radio(object):
+class Alias(object):
+    VENDOR = "Unknown"
+    MODEL = "Unknown"
+    VARIANT = ""
+
+
+class Radio(Alias):
     """Base class for all Radio drivers"""
     BAUD_RATE = 9600
     HARDWARE_FLOW = False
-    VENDOR = "Unknown"
-    MODEL = "Unknown"
-    VARIANT = ""
+    ALIASES = []
 
     def status_fn(self, status):
         """Deliver @status to the UI"""
diff -r c0b5e35b0665 -r 1a0a36bc2a8d chirp/drivers/uv5r.py
--- a/chirp/drivers/uv5r.py	Mon Apr 11 22:47:58 2016 -0400
+++ b/chirp/drivers/uv5r.py	Thu Apr 14 16:55:20 2016 -0700
@@ -572,8 +572,6 @@
     "!@#$%^&*()+-=[]:\";'<>?,./"
 
 
-# Uncomment this to actually register this radio in CHIRP
- at directory.register
 class BaofengUV5R(chirp_common.CloneModeRadio,
                   chirp_common.ExperimentalRadio):
     """Baofeng UV-5R"""
@@ -1571,6 +1569,16 @@
                 raise
 
 
+class UV5XAlias(chirp_common.Alias):
+    VENDOR = "Baofeng"
+    MODEL = "UV-5X"
+
+
+ at directory.register
+class BaofengUV5RGeneric(BaofengUV5R):
+    ALIASES = [UV5XAlias]
+
+
 @directory.register
 class BaofengF11Radio(BaofengUV5R):
     VENDOR = "Baofeng"
diff -r c0b5e35b0665 -r 1a0a36bc2a8d chirp/ui/clone.py
--- a/chirp/ui/clone.py	Mon Apr 11 22:47:58 2016 -0400
+++ b/chirp/ui/clone.py	Thu Apr 14 16:55:20 2016 -0700
@@ -13,6 +13,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import collections
 import threading
 import logging
 import os
@@ -72,16 +73,15 @@
         return miscwidgets.make_choice([], False)
 
     def __make_vendor(self, model):
-        vendors = {}
+        vendors = collections.defaultdict(list)
         for rclass in sorted(directory.DRV_TO_RADIO.values()):
             if not issubclass(rclass, chirp_common.CloneModeRadio) and \
                     not issubclass(rclass, chirp_common.LiveRadio):
                 continue
 
-            if rclass.VENDOR not in vendors:
-                vendors[rclass.VENDOR] = []
-
             vendors[rclass.VENDOR].append(rclass)
+            for alias in rclass.ALIASES:
+                vendors[alias.VENDOR].append(alias)
 
         self.__vendors = vendors
 
@@ -187,6 +187,17 @@
                 if rclass.MODEL == model:
                     cs.radio_class = rclass
                     break
+                alias_match = None
+                for alias in rclass.ALIASES:
+                    if alias.MODEL == model:
+                        alias_match = rclass
+                        break
+                if alias_match:
+                    cs.radio_class = rclass
+                    LOG.debug(
+                        'Chose %s alias for %s because model %s selected' % (
+                            alias_match, cs.radio_class, model))
+                    break
             if not cs.radio_class:
                 common.show_error(
                     _("Internal error: Unable to upload to {model}").format(



More information about the chirp_devel mailing list