[chirp_devel] [PATCH] [tg_uv2p] Dont set a priority channel if empty or Broadcast-FM. Fixes fifth issue in #9939

# HG changeset patch # User Ran Katz rankatz@gmail.com # Date 1659543001 -10800 # Wed Aug 03 19:10:01 2022 +0300 # Node ID 383f6b57480c62cadff74664a25931470c00bfb7 # Parent 7c1a4c8b1c8dd4e97f2f31b89ed1e158adafb6d9 [tg_uv2p] Dont set a priority channel if empty or Broadcast-FM. Fixes fifth issue in #9939 The radio doesnt set a priority channel if it is empty or an FM broadcast channel, now chirp behaves the same. Also added a comment in the setting description.
diff --git a/chirp/drivers/tg_uv2p.py b/chirp/drivers/tg_uv2p.py --- a/chirp/drivers/tg_uv2p.py +++ b/chirp/drivers/tg_uv2p.py @@ -213,6 +213,7 @@ _memsize = 0x2000
RxModeKeyUnLock_FLAG = False + PriorityList = []
@classmethod def get_prompts(cls): @@ -341,10 +342,19 @@ else: mem.number = number
+ try: + self.PriorityList.remove(mem.number) + except: + None + if (_mem.freq.get_raw()[0] == "\xFF") or (_bf.band == "\x0F"): mem.empty = True return mem
+ if _bf.band > 0: + self.PriorityList.append(mem.number) + self.PriorityList.sort() + mem.freq = int(_mem.freq) * 10
if _mem.offset.get_raw()[0] == "\xFF": @@ -390,6 +400,11 @@
_bf.set_raw("\xFF")
+ try: + self.PriorityList.remove(mem.number) + except: + None + if mem.empty: _mem.set_raw("\xFF" * 16) return @@ -402,6 +417,10 @@ if mem.freq >= ele[0] and mem.freq <= ele[1]: _bf.band = idx
+ if _bf.band > 0: + self.PriorityList.append(mem.number) + self.PriorityList.sort() + _mem.freq = mem.freq / 10 _mem.offset = mem.offset / 10
@@ -511,10 +530,16 @@ mem_vals.insert(0, 0xFF) user_options.insert(0, "Not Set") options_map = zip(user_options, mem_vals) + _priority_channel = _settings.priority_channel + if not (_priority_channel in self.PriorityList): + _priority_channel = 0xFF
- rs = RadioSetting("priority_channel", "Priority Channel", + rs = RadioSetting("priority_channel", "Priority Channel:\n" + + "Note: An empty or\n" + + "Broadcast-FM channel\n" + + "will not be set", RadioSettingValueMap(options_map, - _settings.priority_channel)) + _priority_channel)) cfg_grp.append(rs)
# Step @@ -726,6 +751,13 @@ self.RxModeKeyUnLock_FLAG = False LOG.debug("Setting %s = %s" % (setting, element.value)) setattr(obj, setting, element.value) + elif setting == "priority_channel": + if not (int(element.value) in self.PriorityList): + _val = 0xFF + else: + _val = element.value + LOG.debug("Setting %s = %s" % (setting, _val)) + setattr(obj, setting, _val) elif element.value.get_mutable(): LOG.debug("Setting %s = %s" % (setting, element.value)) setattr(obj, setting, element.value)

PriorityList = []
@classmethod def get_prompts(cls):
@@ -341,10 +342,19 @@ else: mem.number = number
try:
self.PriorityList.remove(mem.number)
except:
None
if (_mem.freq.get_raw()[0] == "\xFF") or (_bf.band == "\x0F"): mem.empty = True return mem
if _bf.band > 0:
self.PriorityList.append(mem.number)
self.PriorityList.sort()
mem.freq = int(_mem.freq) * 10 if _mem.offset.get_raw()[0] == "\xFF":
@@ -390,6 +400,11 @@
_bf.set_raw("\xFF")
try:
self.PriorityList.remove(mem.number)
except:
None
if mem.empty: _mem.set_raw("\xFF" * 16) return
@@ -402,6 +417,10 @@ if mem.freq >= ele[0] and mem.freq <= ele[1]: _bf.band = idx
if _bf.band > 0:
self.PriorityList.append(mem.number)
self.PriorityList.sort()
I have the same core argument here: you're depending on get or set memory to have run before settings such that we've built this information, which won't always be the case. If set_settings() needs to look at the state of all the memories to determine the proper behavior, then that's what should happen. It's good to try to cache the stuff during single-memory operations like you do, but I think it's not necessary for performance and definitely shouldn't sacrifice correctness.
_mem.freq = mem.freq / 10 _mem.offset = mem.offset / 10
@@ -511,10 +530,16 @@ mem_vals.insert(0, 0xFF) user_options.insert(0, "Not Set") options_map = zip(user_options, mem_vals)
_priority_channel = _settings.priority_channel
if not (_priority_channel in self.PriorityList):
_priority_channel = 0xFF
Instead of depending on self.PriorityList, just have a routine you call to scan the bands of the memories in the memory object to help you make your determination.
--Dan
participants (2)
-
Dan Smith
-
Ran Katz