[chirp_devel] [PATCH] Bug #1973 - Wouxun KG-UV8D import from data source

Ron Wellsted
Wed Oct 22 03:19:18 PDT 2014


# HG changeset patch
# User Ron Wellsted <ron at wellsted.org.uk>
# Date 1413972610 -3600
#      Wed Oct 22 11:10:10 2014 +0100
# Node ID bd1d2bac911911051c0a7b7f345cb6a0eba58ea7
# Parent  3f6e7bfb2dba87c820233356736509732de3a2cb
Bug #1973 - Wouxun KG-UV8D import from data source
Changes to correct the above bug.  Problem was due to wrong memory
item name and an assumption about the length of certain fields.

diff -r 3f6e7bfb2dba -r bd1d2bac9119 chirp/kguv8d.py
--- a/chirp/kguv8d.py	Tue Oct 21 14:17:23 2014 -0700
+++ b/chirp/kguv8d.py	Wed Oct 22 11:10:10 2014 +0100
@@ -464,6 +464,7 @@
         rf.has_tuning_step = False
         rf.has_bank = False
         rf.can_odd_split = True
+        rf.valid_skips = ["", "S"]
         rf.valid_tmodes = ["", "Tone", "TSQL", "DTCS"]
         rf.valid_modes = ["FM", "NFM"]
         rf.valid_power_levels = self.POWER_LEVELS
@@ -564,8 +565,7 @@
 
         mem.dtcs_polarity = "".join(dtcs_pol)
 
-        if not _mem.scan_add:
-            mem.skip = "S"
+        mem.skip = "" if bool(_mem.scan_add) else "S"
 
         mem.power = self.POWER_LEVELS[_mem.power]
         mem.mode = _mem.iswide and "FM" or "NFM"
@@ -611,6 +611,10 @@
             print "Set TX %s (%i) RX %s (%i)" % (tx_mode, _mem.txtone,
                                                  rx_mode, _mem.rxtone)
 
+    def _wipe_memory(self, mem):
+        mem.set_raw("\x00" * (mem.size() / 8))
+        self._memobj.valid[mem.number] = 0
+
     def set_memory(self, mem):
         number = mem.number
 
@@ -618,8 +622,7 @@
         _nam = self._memobj.names[number]
 
         if mem.empty:
-            wipe_memory(_mem, "\x00")
-            self._memobj.valid[mem.number] = 0
+            self._wipe_memory(_mem)
             return
 
         _mem.rxfreq = int(mem.freq / 10)
@@ -634,8 +637,8 @@
             _mem.txfreq = int(mem.freq / 10) - int(mem.offset / 10)
         else:
             _mem.txfreq = int(mem.freq / 10)
-        _mem.skip = mem.skip != "S"
-        _mem.iswide = mem.mode != "NFM"
+        _mem.scan_add = int(mem.skip != "S")
+        _mem.iswide = int(mem.mode == "NFM")
 
         self._set_tone(mem, _mem)
 
@@ -654,68 +657,69 @@
         _vfoa = self._memobj.vfoa
         _vfob = self._memobj.vfob
         cfg_grp = RadioSettingGroup("cfg_grp", "Configuration Settings")
-        vfo_grp = RadioSettingGroup("vfo_grp", "VFO Settings")
+        vfoa_grp = RadioSettingGroup("vfoa_grp", "VFO A Settings")
+        vfob_grp = RadioSettingGroup("vfob_grp", "VFO B Settings")
         key_grp = RadioSettingGroup("key_grp", "Key Settings")
         scn_grp = RadioSettingGroup("scn_grp", "Scan Group")
         cal_grp = RadioSettingGroup("cal_grp", "Call Group")
         lmt_grp = RadioSettingGroup("lmt_grp", "Frequency Limits")
         oem_grp = RadioSettingGroup("oem_grp", "OEM Info")
-        group = RadioSettingGroup("top", "All Settings", cfg_grp,
-                        vfo_grp, key_grp, scn_grp, cal_grp, lmt_grp, oem_grp)
+        group = RadioSettingGroup("top", "All Settings", cfg_grp, vfoa_grp,
+                        vfob_grp, key_grp, scn_grp, cal_grp, lmt_grp, oem_grp)
 
         #
         # Configuration Settings
         #
         rs = RadioSetting("ponmsg", "Poweron message", RadioSettingValueList(
-                        PONMSG_LIST, PONMSG_LIST[self._memobj.settings.ponmsg]))
+                        PONMSG_LIST, PONMSG_LIST[_settings.ponmsg]))
         cfg_grp.append(rs)
         rs = RadioSetting("voice", "Voice Guide", RadioSettingValueBoolean(
-                            self._memobj.settings.voice))
+                            _settings.voice))
         cfg_grp.append(rs)
-        rs = RadioSetting("timeout", "Timeout Timer",
-                        RadioSettingValueInteger(15, 900,
-                            self._memobj.settings.timeout * 15, 15))
+        rs = RadioSetting("timeout", "Timeout Timer", RadioSettingValueInteger(
+                        15, 900, _settings.timeout * 15, 15))
         cfg_grp.append(rs)
         rs = RadioSetting("toalarm", "Timeout Alarm",
-                        RadioSettingValueInteger(0, 10,
-                            self._memobj.settings.toalarm))
+                        RadioSettingValueInteger(0, 10, _settings.toalarm))
         cfg_grp.append(rs)
         rs = RadioSetting("channel_menu", "Menu available in channel mode",
-                        RadioSettingValueBoolean(
-                            self._memobj.settings.channel_menu))
+                            RadioSettingValueBoolean(_settings.channel_menu))
         cfg_grp.append(rs)
         rs = RadioSetting("power_save", "Power save", RadioSettingValueBoolean(
-                            self._memobj.settings.power_save))
+                            _settings.power_save))
         cfg_grp.append(rs)
         rs = RadioSetting("autolock", "Autolock", RadioSettingValueBoolean(
-                            self._memobj.settings.autolock))
+                            _settings.autolock))
         cfg_grp.append(rs)
         rs = RadioSetting("keylock", "Keypad Lock", RadioSettingValueBoolean(
-                            self._memobj.settings.keylock))
+                            _settings.keylock))
         cfg_grp.append(rs)
         rs = RadioSetting("beep", "Keypad Beep", RadioSettingValueBoolean(
-                            self._memobj.settings.keylock))
+                            _settings.keylock))
         cfg_grp.append(rs)
         rs = RadioSetting("stopwatch", "Stopwatch", RadioSettingValueBoolean(
-                            self._memobj.settings.keylock))
+                            _settings.keylock))
         cfg_grp.append(rs)
 
         #
-        # VFO Settings
+        # VFO A Settings
         #
-        #settings:
-        #   u8    workmode_a;
-        #   u8    workmode_b;
-        #   u16   work_cha;
-        #   u16   work_chb;
-        # vfoa/b:
-        #   u32   rxfreq;
+        rs = RadioSetting("vfoa_mode", "VFO A Workmode", RadioSettingValueList(
+                        WORKMODE_LIST, WORKMODE_LIST[_settings.workmode_a]))
+        vfoa_grp.append(rs)
+        rs = RadioSetting("vfoa_chan", "VFO A Channel",
+                        RadioSettingValueInteger(1, 999, _settings.work_cha))
+        vfoa_grp.append(rs)
+        rs = RadioSetting("rxfreqa", "VFO A Rx Frequency",
+                        RadioSettingValueInteger(134000000, 520000000,
+                            _vfoa.rxfreq * 10, 5000))
+        vfoa_grp.append(rs)
         #   u32   txoffset;
         #   u16   rxtone;
         #   u16   txtone;
         #   u8    unknown1:5,
         #         power:1,
-        #         unknown2:;
+        #         unknown2:2;
         #   u8    unknown3:1,
         #         shift_dir:2
         #         unknown4:2,
@@ -725,6 +729,34 @@
         #   u8    squelch;
 
         #
+        # VFO B Settings
+        #
+        rs = RadioSetting("vfob_mode", "VFO B Workmode", RadioSettingValueList(
+                        WORKMODE_LIST, WORKMODE_LIST[_settings.workmode_b]))
+        vfob_grp.append(rs)
+        rs = RadioSetting("vfob_chan", "VFO B Channel",
+                        RadioSettingValueInteger(1, 999, _settings.work_chb))
+        vfob_grp.append(rs)
+        rs = RadioSetting("rxfreqb", "VFO B Rx Frequency",
+                        RadioSettingValueInteger(134000000, 520000000,
+                            _vfob.rxfreq * 10, 5000))
+        vfob_grp.append(rs)
+        #   u32   txoffset;
+        #   u16   rxtone;
+        #   u16   txtone;
+        #   u8    unknown1:5,
+        #         power:1,
+        #         unknown2:2;
+        #   u8    unknown3:1,
+        #         shift_dir:2
+        #         unknown4:2,
+        #         mute_mode:2,
+        #         iswide:1;
+        #   u8    step;
+        #   u8    squelch;
+
+
+        #
         # Key Settings
         #
         _msg = str(_settings.dispstr).split("\0")[0]
@@ -734,7 +766,10 @@
         key_grp.append(rs)
         _ani = ""
         for i in _settings.ani:
-            _ani += chr(i + 0x30)
+            if i < 10:
+                _ani += chr(i + 0x30)
+            else:
+                break
         val = RadioSettingValueString(0, 6, _ani)
         val.set_mutable(True)
         rs = RadioSetting("ani", "ANI code", val)
@@ -804,16 +839,6 @@
         #
         # OEM info
         #
-        # struct {
-        #       char    model[8];
-        #       u8      unknown[2];
-        #       char    oem1[10];
-        #       char    oem2[10];
-        #       char    unknown2[8];
-        #       char    version[10];
-        #       u8      unknown3[6];
-        #       char    date[8];
-        # } oem_info;
         _str = str(self._memobj.oem_info.model).split("\0")[0]
         val = RadioSettingValueString(0, 15, _str)
         val.set_mutable(False)



More information about the chirp_devel mailing list