[chirp_devel] [PATCH] [TH-F6A] Implementing settings

Marco Filippi IZ3GME
Thu Mar 12 02:26:35 PDT 2015


# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1426150172 -3600
#      Thu Mar 12 09:49:32 2015 +0100
# Node ID c9c9128ca29ea21f54249788a9c0e47c9d5fbdc4
# Parent  256ccb5acf2491df0b76ae7767fb62951d8392a1
[TH-F6A] Implementing settings

Most of the settings have been implemented

supports #2383

diff --git a/chirp/drivers/kenwood_live.py b/chirp/drivers/kenwood_live.py
--- a/chirp/drivers/kenwood_live.py
+++ b/chirp/drivers/kenwood_live.py
@@ -57,7 +57,7 @@
             LOG.error("Timeout waiting for data")
             break
 
-    LOG.debug("D7->PC: %s" % result.strip())
+    LOG.debug("RADIO->PC: %s" % result.strip())
 
     LOCK.release()
 
@@ -243,32 +243,60 @@
             raise errors.RadioError("Radio refused delete of %i" % number)
         del self.__memcache[number]
 
-TH_D7_SETTINGS = {
-    "BAL":   ["4:0", "3:1", "2:2", "1:3", "0:4"],
-    "BEP":   ["Off", "Key", "Key+Data", "All"],
-    "BEPT":  ["Off", "Mine", "All New"],  # D700 has fourth "All"
-    "DS":    ["Data Band", "Both Bands"],
-    "DTB":   ["A", "B"],
-    "DTBA":  ["A", "B", "A:TX/B:RX"],  # D700 has fourth A:RX/B:TX
-    "DTX":   ["Manual", "PTT", "Auto"],
-    "ICO":   ["Kenwood", "Runner", "House", "Tent", "Boat", "SSTV",
-              "Plane", "Speedboat", "Car", "Bicycle"],
-    "MNF":   ["Name", "Frequency"],
-    "PKSA":  ["1200", "9600"],
-    "POSC":  ["Off Duty", "Enroute", "In Service", "Returning",
-              "Committed", "Special", "Priority", "Emergency"],
-    "PT":    ["100ms", "200ms", "500ms", "750ms",
-              "1000ms", "1500ms", "2000ms"],
-    "SCR":   ["Time", "Carrier", "Seek"],
-    "SV":    ["Off", "0.2s", "0.4s", "0.6s", "0.8s", "1.0s",
-              "2s", "3s", "4s", "5s"],
-    "TEMP":  ["F", "C"],
-    "TXI":   ["30sec", "1min", "2min", "3min", "4min", "5min",
-              "10min", "20min", "30min"],
-    "UNIT":  ["English", "Metric"],
-    "WAY":   ["Off", "6 digit NMEA", "7 digit NMEA", "8 digit NMEA",
-              "9 digit NMEA", "6 digit Magellan", "DGPS"],
-}
+    def _kenwood_get(self, cmd):
+        resp = command(self.pipe, cmd)
+        if " " in resp:
+            return resp.split(" ", 1)
+        else:
+            if resp == cmd:
+                return [resp, ""]
+            else:
+                raise errors.RadioError("Radio refused to return %s" % cmd)
+
+    def _kenwood_set(self, cmd, value):
+        resp = command(self.pipe, cmd, value)
+        if resp[:len(cmd)] == cmd:
+            return
+        raise errors.RadioError("Radio refused to set %s" % cmd)
+
+    def _kenwood_get_bool(self, cmd):
+        _cmd, result = self._kenwood_get(cmd)
+        return result == "1"
+
+    def _kenwood_set_bool(self, cmd, value):
+        return self._kenwood_set(cmd, str(int(value)))
+
+    def _kenwood_get_int(self, cmd):
+        _cmd, result = self._kenwood_get(cmd)
+        return int(result)
+
+    def _kenwood_set_int(self, cmd, value, digits=1):
+        return self._kenwood_set(cmd, ("%%0%ii" % digits) % value)
+
+    def set_settings(self, settings):
+        for element in settings:
+            if not isinstance(element, RadioSetting):
+                self.set_settings(element)
+                continue
+            if not element.changed():
+                continue
+            if isinstance(element.value, RadioSettingValueBoolean):
+                self._kenwood_set_bool(element.get_name(), element.value)
+            elif isinstance(element.value, RadioSettingValueList):
+                options = self._SETTINGS_OPTIONS[element.get_name()]
+                self._kenwood_set_int(element.get_name(),
+                                      options.index(str(element.value)))
+            elif isinstance(element.value, RadioSettingValueInteger):
+                if element.value.get_max() > 9:
+                    digits = 2
+                else:
+                    digits = 1
+                self._kenwood_set_int(element.get_name(),
+                                      element.value, digits)
+            elif isinstance(element.value, RadioSettingValueString):
+                self._kenwood_set(element.get_name(), str(element.value))
+            else:
+                LOG.error("Unknown type %s" % element.value)
 
 
 class KenwoodOldLiveRadio(KenwoodLiveRadio):
@@ -294,6 +322,33 @@
 
     _kenwood_split = True
 
+    _SETTINGS_OPTIONS = {
+        "BAL": ["4:0", "3:1", "2:2", "1:3", "0:4"],
+        "BEP": ["Off", "Key", "Key+Data", "All"],
+        "BEPT": ["Off", "Mine", "All New"],  # D700 has fourth "All"
+        "DS": ["Data Band", "Both Bands"],
+        "DTB": ["A", "B"],
+        "DTBA": ["A", "B", "A:TX/B:RX"],  # D700 has fourth A:RX/B:TX
+        "DTX": ["Manual", "PTT", "Auto"],
+        "ICO": ["Kenwood", "Runner", "House", "Tent", "Boat", "SSTV",
+                "Plane", "Speedboat", "Car", "Bicycle"],
+        "MNF": ["Name", "Frequency"],
+        "PKSA": ["1200", "9600"],
+        "POSC": ["Off Duty", "Enroute", "In Service", "Returning",
+                 "Committed", "Special", "Priority", "Emergency"],
+        "PT": ["100ms", "200ms", "500ms", "750ms",
+               "1000ms", "1500ms", "2000ms"],
+        "SCR": ["Time", "Carrier", "Seek"],
+        "SV": ["Off", "0.2s", "0.4s", "0.6s", "0.8s", "1.0s",
+               "2s", "3s", "4s", "5s"],
+        "TEMP": ["F", "C"],
+        "TXI": ["30sec", "1min", "2min", "3min", "4min", "5min",
+                "10min", "20min", "30min"],
+        "UNIT": ["English", "Metric"],
+        "WAY": ["Off", "6 digit NMEA", "7 digit NMEA", "8 digit NMEA",
+                "9 digit NMEA", "6 digit Magellan", "DGPS"],
+    }
+
     def get_features(self):
         rf = chirp_common.RadioFeatures()
         rf.has_settings = True
@@ -360,33 +415,6 @@
 
         return mem
 
-    def _kenwood_get(self, cmd):
-        resp = command(self.pipe, cmd)
-        if " " in resp:
-            return resp.split(" ", 1)
-        else:
-            raise errors.RadioError("Radio refused to return %s" % cmd)
-
-    def _kenwood_set(self, cmd, value):
-        resp = command(self.pipe, cmd, value)
-        if " " in resp:
-            return
-        raise errors.RadioError("Radio refused to set %s" % cmd)
-
-    def _kenwood_get_bool(self, cmd):
-        _cmd, result = self._kenwood_get(cmd)
-        return result == "1"
-
-    def _kenwood_set_bool(self, cmd, value):
-        return self._kenwood_set(cmd, str(int(value)))
-
-    def _kenwood_get_int(self, cmd):
-        _cmd, result = self._kenwood_get(cmd)
-        return int(result)
-
-    def _kenwood_set_int(self, cmd, value, digits=1):
-        return self._kenwood_set(cmd, ("%%0%ii" % digits) % value)
-
     def get_settings(self):
         main = RadioSettingGroup("main", "Main")
         aux = RadioSettingGroup("aux", "Aux")
@@ -441,7 +469,7 @@
 
         for setting, group, name in lists:
             value = self._kenwood_get_int(setting)
-            options = TH_D7_SETTINGS[setting]
+            options = self._SETTINGS_OPTIONS[setting]
             rs = RadioSetting(setting, name,
                               RadioSettingValueList(options,
                                                     options[value]))
@@ -470,28 +498,6 @@
 
         return top
 
-    def set_settings(self, settings):
-        for element in settings:
-            if not element.changed():
-                continue
-            if isinstance(element.value, RadioSettingValueBoolean):
-                self._kenwood_set_bool(element.get_name(), element.value)
-            elif isinstance(element.value, RadioSettingValueList):
-                options = TH_D7_SETTINGS[element.get_name()]
-                self._kenwood_set_int(element.get_name(),
-                                      options.index(str(element.value)))
-            elif isinstance(element.value, RadioSettingValueInteger):
-                if element.value.get_max() > 9:
-                    digits = 2
-                else:
-                    digits = 1
-                self._kenwood_set_int(element.get_name(),
-                                      element.value, digits)
-            elif isinstance(element.value, RadioSettingValueString):
-                self._kenwood_set(element.get_name(), str(element.value))
-            else:
-                LOG.error("Unknown type %s" % element.value)
-
 
 @directory.register
 class THD7GRadio(THD7Radio):
@@ -777,6 +783,7 @@
         rf.valid_characters = chirp_common.CHARSET_ASCII
         rf.valid_name_length = 8
         rf.memory_bounds = (0, self._upper)
+        rf.has_settings = True
         return rf
 
     def _cmd_set_memory(self, number, spec):
@@ -849,6 +856,98 @@
 
         return spec
 
+    _SETTINGS_OPTIONS = {
+        "APO": ["Off", "30min", "60min"],
+        "BAL": ["100%:0%", "75%:25%", "50%:50%", "25%:75%", "%0:100%"],
+        "BAT": ["Lithium", "Alkaline"],
+        "CKEY": ["Call", "1750Hz"],
+        "DATP": ["1200bps", "9600bps"],
+        "LAN": ["English", "Japanese"],
+        "MNF": ["Name", "Frequency"],
+        "MRM": ["All Band", "Current Band"],
+        "PT": ["100ms", "250ms", "500ms", "750ms",
+               "1000ms", "1500ms", "2000ms"],
+        "SCR": ["Time", "Carrier", "Seek"],
+        "SV": ["Off", "0.2s", "0.4s", "0.6s", "0.8s", "1.0s",
+               "2s", "3s", "4s", "5s"],
+        "VXD": ["250ms", "500ms", "750ms", "1s", "1.5s", "2s", "3s"],
+    }
+
+    def get_settings(self):
+        main = RadioSettingGroup("main", "Main")
+        aux = RadioSettingGroup("aux", "Aux")
+        save = RadioSettingGroup("save", "Save")
+        display = RadioSettingGroup("display", "Display")
+        dtmf = RadioSettingGroup("dtmf", "DTMF")
+        top = RadioSettings(main, aux, save, display, dtmf)
+
+        lists = [("APO", save, "Automatic Power Off"),
+                 ("BAL", main, "Balance"),
+                 ("BAT", save, "Battery Type"),
+                 ("CKEY", aux, "CALL Key Set Up"),
+                 ("DATP", aux, "Data Packet Speed"),
+                 ("LAN", display, "Language"),
+                 ("MNF", main, "Memory Display Mode"),
+                 ("MRM", main, "Memory Recall Method"),
+                 ("PT", dtmf, "DTMF Speed"),
+                 ("SCR", main, "Scan Resume"),
+                 ("SV", save, "Battery Save"),
+                 ("VXD", aux, "VOX Drop Delay"),
+                 ]
+
+        bools = [("ANT", aux, "Bar Antenna"),
+                 ("ATT", main, "Attenuator Enabled"),
+                 ("ARO", main, "Automatic Repeater Offset"),
+                 ("BEP", aux, "Beep for keypad"),
+                 ("DL", main, "Dual"),
+                 ("DLK", dtmf, "DTMF Lockout On Transmit"),
+                 ("ELK", aux, "Enable Locked Tuning"),
+                 ("LK", main, "Lock"),
+                 ("LMP", display, "Lamp"),
+                 ("NSFT", aux, "Noise Shift"),
+                 ("TH", aux, "Tx Hold for 1750"),
+                 ("TSP", dtmf, "DTMF Fast Transmission"),
+                 ("TXH", dtmf, "TX Hold DTMF"),
+                 ("TXS", main, "Transmit Inhibit"),
+                 ("VOX", aux, "VOX Enable"),
+                 ("VXB", aux, "VOX On Busy"),
+                 ]
+
+        ints = [("CNT", display, "Contrast", 1, 16),
+                ("VXG", aux, "VOX Gain", 0, 9),
+                ]
+
+        strings = [("MES", display, "Power-on Message", 8),
+                   ]
+
+        for setting, group, name in bools:
+            value = self._kenwood_get_bool(setting)
+            rs = RadioSetting(setting, name,
+                              RadioSettingValueBoolean(value))
+            group.append(rs)
+
+        for setting, group, name in lists:
+            value = self._kenwood_get_int(setting)
+            options = self._SETTINGS_OPTIONS[setting]
+            rs = RadioSetting(setting, name,
+                              RadioSettingValueList(options,
+                                                    options[value]))
+            group.append(rs)
+
+        for setting, group, name, minv, maxv in ints:
+            value = self._kenwood_get_int(setting)
+            rs = RadioSetting(setting, name,
+                              RadioSettingValueInteger(minv, maxv, value))
+            group.append(rs)
+
+        for setting, group, name, length in strings:
+            _cmd, value = self._kenwood_get(setting)
+            rs = RadioSetting(setting, name,
+                              RadioSettingValueString(0, length, value))
+            group.append(rs)
+
+        return top
+
 
 @directory.register
 class THF7ERadio(THF6ARadio):



More information about the chirp_devel mailing list