[chirp_devel] [PATCH] [UV-3R] Add Basic Settings
# HG changeset patch # User Jim Unroe rock.unroe@gmail.com # Date 1385499658 18000 # Node ID 68dcf5898ba38f087d9a543256ef71828c24f650 # Parent fc6b4cd40403f4bb3f2b9bc3578366fdf20a85c6 [UV-3R] Add Basic Settings expose basic settings fields in memmap add Basic Settings tab add Basic Settings and other associated support related to #1267
diff -r fc6b4cd40403 -r 68dcf5898ba3 chirp/baofeng_uv3r.py --- a/chirp/baofeng_uv3r.py Sun Nov 17 11:15:47 2013 -0800 +++ b/chirp/baofeng_uv3r.py Tue Nov 26 16:00:58 2013 -0500 @@ -19,6 +19,10 @@ import os from chirp import util, chirp_common, bitwise, errors, directory from chirp.wouxun_common import do_download, do_upload +from chirp.settings import RadioSetting, RadioSettingGroup, \ + RadioSettingValueBoolean, RadioSettingValueList, \ + RadioSettingValueInteger, RadioSettingValueString, \ + RadioSettingValueFloat
if os.getenv("CHIRP_DEBUG"): DEBUG = True @@ -88,6 +92,29 @@ u8 unknown; lbcd tx_freq[4]; } tx_memory[99]; + +#seekto 0x07C2; +struct { + u8 squelch; + u8 vox; + u8 timeout; + u8 save:1, + unknown_1:1, + dw:1, + ste:1, + beep:1, + unknown_2:1, + bclo:1, + ch_flag:1; + u8 backlight:2, + relaym:1, + scanm:1, + pri:1, + unknown_3:3; + u8 unknown_4[3]; + u8 pri_ch; +} settings; + #seekto 0x0810; struct { lbcd rx_freq[4]; @@ -113,6 +140,18 @@ } names[128]; """
+STEPS = [5.0, 6.25, 10.0, 12.5, 20.0, 25.0] +STEP_LIST = [str(x) for x in STEPS] +BACKLIGHT_LIST = ["Off", "Key", "Continuous"] +TIMEOUT_LIST = ["Off"] + ["%s sec" % x for x in range(30, 210, 30)] +SCANM_LIST = ["TO", "CO"] +PRI_CH_LIST = ["Off"] + ["%s" % x for x in range(1, 100)] +CH_FLAG_LIST = ["Freq Mode", "Channel Mode"] +POWER_LIST = ["Low", "High"] +BANDWIDTH_LIST = ["Narrow", "Wide"] +DUPLEX_LIST = ["Off", "-", "+"] +STE_LIST = ["On", "Off"] + UV3R_DUPLEX = ["", "-", "+", ""] UV3R_POWER_LEVELS = [chirp_common.PowerLevel("High", watts=2.00), chirp_common.PowerLevel("Low", watts=0.50)] @@ -126,6 +165,7 @@
def get_features(self): rf = chirp_common.RadioFeatures() + rf.has_settings = True rf.valid_tmodes = ["", "Tone", "TSQL", "DTCS", "Cross"] rf.valid_modes = ["FM", "NFM"] rf.valid_power_levels = UV3R_POWER_LEVELS @@ -282,6 +322,108 @@ self._set_memory(mem, _tmem) self._set_memory(mem, _rmem)
+ def get_settings(self): + basic = RadioSettingGroup("basic", "Basic Settings") + group = RadioSettingGroup("top", "All Settings", basic) + + rs = RadioSetting("squelch", "Squelch Level", + RadioSettingValueInteger(0, 9, self._memobj.settings.squelch)) + basic.append(rs) + + rs = RadioSetting("backlight", "LCD Back Light", + RadioSettingValueList(BACKLIGHT_LIST, + BACKLIGHT_LIST[self._memobj.settings.backlight])) + basic.append(rs) + + rs = RadioSetting("beep", "Keypad Beep", + RadioSettingValueBoolean(self._memobj.settings.beep)) + basic.append(rs) + + rs = RadioSetting("vox", "VOX Level (0=OFF)", + RadioSettingValueInteger(0, 9, self._memobj.settings.vox)) + basic.append(rs) + + rs = RadioSetting("dw", "Dual Watch", + RadioSettingValueBoolean(self._memobj.settings.dw)) + basic.append(rs) + + rs = RadioSetting("ste", "Squelch Tail Eliminate", + RadioSettingValueList(STE_LIST, + STE_LIST[self._memobj.settings.ste])) + basic.append(rs) + + rs = RadioSetting("save", "Battery Saver", + RadioSettingValueBoolean(self._memobj.settings.save)) + basic.append(rs) + + rs = RadioSetting("timeout", "Time Out Timer", + RadioSettingValueList(TIMEOUT_LIST, + TIMEOUT_LIST[self._memobj.settings.timeout])) + basic.append(rs) + + rs = RadioSetting("scanm", "Scan Mode", + RadioSettingValueList(SCANM_LIST, + SCANM_LIST[self._memobj.settings.scanm])) + basic.append(rs) + + rs = RadioSetting("relaym", "Repeater Sound Response", + RadioSettingValueBoolean(self._memobj.settings.relaym)) + basic.append(rs) + + rs = RadioSetting("bclo", "Busy Channel Lock Out", + RadioSettingValueBoolean(self._memobj.settings.bclo)) + basic.append(rs) + + rs = RadioSetting("pri", "Priority Channel Scanning", + RadioSettingValueBoolean(self._memobj.settings.pri)) + basic.append(rs) + + rs = RadioSetting("pri_ch", "Priority Channel", + RadioSettingValueList(PRI_CH_LIST, + PRI_CH_LIST[self._memobj.settings.pri_ch])) + basic.append(rs) + + rs = RadioSetting("ch_flag", "Display Mode", + RadioSettingValueList(CH_FLAG_LIST, + CH_FLAG_LIST[self._memobj.settings.ch_flag])) + basic.append(rs) + + return group + + def set_settings(self, settings): + _settings = self._memobj.settings + for element in settings: + if not isinstance(element, RadioSetting): + self.set_settings(element) + continue + else: + try: + name = element.get_name() + if "." in name: + bits = name.split(".") + obj = self._memobj + for bit in bits[:-1]: + if "/" in bit: + bit, index = bit.split("/", 1) + index = int(index) + obj = getattr(obj, bit)[index] + else: + obj = getattr(obj, bit) + setting = bits[-1] + else: + obj = _settings + setting = element.get_name() + + if element.has_apply_callback(): + print "Using apply callback" + element.run_apply_callback() + else: + print "Setting %s = %s" % (setting, element.value) + setattr(obj, setting, element.value) + except Exception, e: + print element.get_name() + raise + @classmethod def match_model(cls, filedata, filename): return len(filedata) == 3648
I thought that the 3 patches I submitted would be sent together as a set. Since they weren't here is how they should be applied.
[UV-3R] Add Basic Settings [1 of 3] [UV-3R] Add Band Limit Settings [2 of 3] [UV-3R] Add Broadcast FM Presets [3 of 3]
Jim KC9HI
On Tue, Nov 26, 2013 at 4:51 PM, Jim Unroe rock.unroe@gmail.com wrote:
# HG changeset patch # User Jim Unroe rock.unroe@gmail.com # Date 1385499658 18000 # Node ID 68dcf5898ba38f087d9a543256ef71828c24f650 # Parent fc6b4cd40403f4bb3f2b9bc3578366fdf20a85c6 [UV-3R] Add Basic Settings expose basic settings fields in memmap add Basic Settings tab add Basic Settings and other associated support related to #1267
diff -r fc6b4cd40403 -r 68dcf5898ba3 chirp/baofeng_uv3r.py --- a/chirp/baofeng_uv3r.py Sun Nov 17 11:15:47 2013 -0800 +++ b/chirp/baofeng_uv3r.py Tue Nov 26 16:00:58 2013 -0500 @@ -19,6 +19,10 @@ import os from chirp import util, chirp_common, bitwise, errors, directory from chirp.wouxun_common import do_download, do_upload +from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueBoolean, RadioSettingValueList, \
RadioSettingValueInteger, RadioSettingValueString, \
RadioSettingValueFloat
if os.getenv("CHIRP_DEBUG"): DEBUG = True @@ -88,6 +92,29 @@ u8 unknown; lbcd tx_freq[4]; } tx_memory[99];
+#seekto 0x07C2; +struct {
- u8 squelch;
- u8 vox;
- u8 timeout;
- u8 save:1,
unknown_1:1,
dw:1,
ste:1,
beep:1,
unknown_2:1,
bclo:1,
ch_flag:1;
- u8 backlight:2,
relaym:1,
scanm:1,
pri:1,
unknown_3:3;
- u8 unknown_4[3];
- u8 pri_ch;
+} settings;
#seekto 0x0810; struct { lbcd rx_freq[4]; @@ -113,6 +140,18 @@ } names[128]; """
+STEPS = [5.0, 6.25, 10.0, 12.5, 20.0, 25.0] +STEP_LIST = [str(x) for x in STEPS] +BACKLIGHT_LIST = ["Off", "Key", "Continuous"] +TIMEOUT_LIST = ["Off"] + ["%s sec" % x for x in range(30, 210, 30)] +SCANM_LIST = ["TO", "CO"] +PRI_CH_LIST = ["Off"] + ["%s" % x for x in range(1, 100)] +CH_FLAG_LIST = ["Freq Mode", "Channel Mode"] +POWER_LIST = ["Low", "High"] +BANDWIDTH_LIST = ["Narrow", "Wide"] +DUPLEX_LIST = ["Off", "-", "+"] +STE_LIST = ["On", "Off"]
UV3R_DUPLEX = ["", "-", "+", ""] UV3R_POWER_LEVELS = [chirp_common.PowerLevel("High", watts=2.00), chirp_common.PowerLevel("Low", watts=0.50)] @@ -126,6 +165,7 @@
def get_features(self): rf = chirp_common.RadioFeatures()
rf.has_settings = True rf.valid_tmodes = ["", "Tone", "TSQL", "DTCS", "Cross"] rf.valid_modes = ["FM", "NFM"] rf.valid_power_levels = UV3R_POWER_LEVELS
@@ -282,6 +322,108 @@ self._set_memory(mem, _tmem) self._set_memory(mem, _rmem)
- def get_settings(self):
basic = RadioSettingGroup("basic", "Basic Settings")
group = RadioSettingGroup("top", "All Settings", basic)
rs = RadioSetting("squelch", "Squelch Level",
RadioSettingValueInteger(0, 9,
self._memobj.settings.squelch))
basic.append(rs)
rs = RadioSetting("backlight", "LCD Back Light",
RadioSettingValueList(BACKLIGHT_LIST,
BACKLIGHT_LIST[self._memobj.settings.backlight]))
basic.append(rs)
rs = RadioSetting("beep", "Keypad Beep",
RadioSettingValueBoolean(self._memobj.settings.beep))
basic.append(rs)
rs = RadioSetting("vox", "VOX Level (0=OFF)",
RadioSettingValueInteger(0, 9,
self._memobj.settings.vox))
basic.append(rs)
rs = RadioSetting("dw", "Dual Watch",
RadioSettingValueBoolean(self._memobj.settings.dw))
basic.append(rs)
rs = RadioSetting("ste", "Squelch Tail Eliminate",
RadioSettingValueList(STE_LIST,
STE_LIST[self._memobj.settings.ste]))
basic.append(rs)
rs = RadioSetting("save", "Battery Saver",
RadioSettingValueBoolean(self._memobj.settings.save))
basic.append(rs)
rs = RadioSetting("timeout", "Time Out Timer",
RadioSettingValueList(TIMEOUT_LIST,
TIMEOUT_LIST[self._memobj.settings.timeout]))
basic.append(rs)
rs = RadioSetting("scanm", "Scan Mode",
RadioSettingValueList(SCANM_LIST,
SCANM_LIST[self._memobj.settings.scanm]))
basic.append(rs)
rs = RadioSetting("relaym", "Repeater Sound Response",
RadioSettingValueBoolean(self._memobj.settings.relaym))
basic.append(rs)
rs = RadioSetting("bclo", "Busy Channel Lock Out",
RadioSettingValueBoolean(self._memobj.settings.bclo))
basic.append(rs)
rs = RadioSetting("pri", "Priority Channel Scanning",
RadioSettingValueBoolean(self._memobj.settings.pri))
basic.append(rs)
rs = RadioSetting("pri_ch", "Priority Channel",
RadioSettingValueList(PRI_CH_LIST,
PRI_CH_LIST[self._memobj.settings.pri_ch]))
basic.append(rs)
rs = RadioSetting("ch_flag", "Display Mode",
RadioSettingValueList(CH_FLAG_LIST,
CH_FLAG_LIST[self._memobj.settings.ch_flag]))
basic.append(rs)
return group
- def set_settings(self, settings):
_settings = self._memobj.settings
for element in settings:
if not isinstance(element, RadioSetting):
self.set_settings(element)
continue
else:
try:
name = element.get_name()
if "." in name:
bits = name.split(".")
obj = self._memobj
for bit in bits[:-1]:
if "/" in bit:
bit, index = bit.split("/", 1)
index = int(index)
obj = getattr(obj, bit)[index]
else:
obj = getattr(obj, bit)
setting = bits[-1]
else:
obj = _settings
setting = element.get_name()
if element.has_apply_callback():
print "Using apply callback"
element.run_apply_callback()
else:
print "Setting %s = %s" % (setting, element.value)
setattr(obj, setting, element.value)
except Exception, e:
print element.get_name()
raise
- @classmethod def match_model(cls, filedata, filename): return len(filedata) == 3648
participants (1)
-
Jim Unroe