[chirp_devel] [PATCH] [th9800] fix skip scan/priority issues #2247
Jens Jensen
Sat Jan 24 12:25:05 PST 2015
# HG changeset patch
# User Jens Jensen <af5mi at yahoo.com>
# Date 1422131048 21600
# Sat Jan 24 14:24:08 2015 -0600
# Node ID 4d094ce0a504d719fe4cd84ae3baef5ba48dd92e
# Parent b533ae13e0a964d48851e1148d88ad8564e4538f
[th9800] fix skip scan/priority issues #2247
Skip/priority settings were not taking effect.
Channel fields were for display only.
There are special channel banks controlling scan enable and priority.
This fix manipulates both channel fields and bank flags.
diff -r b533ae13e0a9 -r 4d094ce0a504 chirp/th9800.py
--- a/chirp/th9800.py Sat Jan 24 12:28:25 2015 -0600
+++ b/chirp/th9800.py Sat Jan 24 14:24:08 2015 -0600
@@ -126,8 +126,9 @@
} settings;
#seekto 0x%04X;
-u8 chan_active_a[128];
-u8 chan_active_b[128];
+u8 chan_active[128];
+u8 scan_enable[128];
+u8 priority[128];
#seekto 0x%04X;
struct {
@@ -201,35 +202,28 @@
(self._mmap_offset, self._scanlimits_offset, self._settings_offset,
self._chan_active_offset, self._info_offset), self._mmap)
- def get_chan_active(self, num):
+ def get_active(self, banktype, num):
+ """get active flag for channel active, scan enable, or priority banks"""
+ bank = getattr(self._memobj, banktype)
index = (num - 1) / 8
bitpos = (num - 1) % 8
mask = 2**bitpos
- enabled = self._memobj.chan_active_a[index] & mask
- if CHIRP_DEBUG:
- print "gca:", num, index, bitpos, self._memobj.chan_active_a[index],
- enabled
+ enabled = bank[index] & mask
if enabled:
return True
else:
return False
- def set_chan_active(self, num, enable):
+ def set_active(self, banktype, num, enable = True):
+ """set active flag for channel active, scan enable, or priority banks"""
+ bank = getattr(self._memobj, banktype)
index = (num - 1) / 8
bitpos = (num - 1) % 8
mask = 2**bitpos
- if CHIRP_DEBUG:
- print "setting to:", enable, mask
- print "before:", self._memobj.chan_active_a[index]
if enable:
- self._memobj.chan_active_a[index] |= mask
- self._memobj.chan_active_b[index] |= mask
+ bank[index] |= mask
else:
- self._memobj.chan_active_a[index] &= ~mask
- self._memobj.chan_active_b[index] &= ~mask
- if CHIRP_DEBUG:
- print "sca:", num, index, bitpos
- print "after:", self._memobj.chan_active_a[index]
+ bank[index] &= ~mask
def get_raw_memory(self, number):
return repr(self._memobj.memory[number - 1])
@@ -239,11 +233,7 @@
mem = chirp_common.Memory()
mem.number = number
- #if not _mem.get_raw().startswith("\xFF\xFF\xFF\xFF"):
- # mem.empty = True
- # return mem
-
- mem.empty = not self.get_chan_active(number)
+ mem.empty = not self.get_active("chan_active", number)
if mem.empty:
return mem
@@ -274,7 +264,13 @@
mem.name = str(_mem.name)
mem.name = mem.name.rstrip("\xFF")
- mem.skip = SCAN_MODES[int(_mem.scan)]
+ if not self.get_active("scan_enable", number):
+ mem.skip = "S"
+ elif self.get_active("priority", number):
+ mem.skip = "P"
+ else:
+ mem.skip = ""
+
mem.mode = _mem.am and "AM" or MODES[int(_mem.fmdev)]
mem.power = POWER_LEVELS[_mem.power]
@@ -329,13 +325,13 @@
def set_memory(self, mem):
_mem = self._memobj.memory[mem.number - 1]
- _prev_active = self.get_chan_active(mem.number)
- self.set_chan_active(mem.number, not mem.empty)
+ _prev_active = self.get_active("chan_active", mem.number)
+ self.set_active("chan_active", mem.number, not mem.empty)
if mem.empty or not _prev_active:
if CHIRP_DEBUG:
print "initializing memory channel %d" % mem.number
_mem.set_raw(BLANK_MEMORY)
-
+
if mem.empty:
return
@@ -375,6 +371,15 @@
display.value = "Frequency"
_mem.scan = SCAN_MODES.index(mem.skip)
+ if mem.skip == "P":
+ self.set_active("priority", mem.number, True)
+ self.set_active("scan_enable", mem.number, True)
+ elif mem.skip == "S":
+ self.set_active("priority", mem.number, False)
+ self.set_active("scan_enable", mem.number, False)
+ elif mem.skip == "":
+ self.set_active("priority", mem.number, False)
+ self.set_active("scan_enable", mem.number, True)
if mem.mode == "AM":
_mem.am = True
@@ -444,8 +449,11 @@
basic.append( RadioSetting("mute_mode", "Mute Mode",
RadioSettingValueList(opts, opts[_settings.mute_mode])))
opts = ["MEM", "MSM"]
- basic.append( RadioSetting("scan_mode", "Scan Mode",
- RadioSettingValueList(opts, opts[_settings.scan_mode])))
+ scanmode = RadioSetting("scan_mode", "Scan Mode",
+ RadioSettingValueList(opts, opts[_settings.scan_mode]))
+ scanmode.set_doc("MEM = Normal scan, bypass channels marked skip. " \
+ " MSM = Scan only channels marked priority.")
+ basic.append(scanmode)
opts = ["TO", "CO"]
basic.append( RadioSetting("scan_resume", "Scan Resume",
RadioSettingValueList(opts, opts[_settings.scan_resume])))
More information about the chirp_devel
mailing list