# HG changeset patch # User Dan Smith dsmith@danplanet.com # Date 1333739557 25200 # Node ID 0dd1b82210090092fd77336db3f65f406c4c5b0e # Parent 21a443c222d1cfdb043b07f858a7b58d5fcc26d6 FIXME #93
diff -r 21a443c222d1 -r 0dd1b8221009 chirp/settings.py --- a/chirp/settings.py Fri Apr 06 12:12:35 2012 -0700 +++ b/chirp/settings.py Fri Apr 06 12:12:37 2012 -0700 @@ -156,8 +156,8 @@ return s
class RadioSetting(RadioSettingGroup): - def __init__(self, name, value): - self._name = name + def __init__(self, name, shortname, value): + RadioSettingGroup.__init__(self, name, shortname) self._value = value
if not isinstance(value, RadioSettingValue): diff -r 21a443c222d1 -r 0dd1b8221009 chirp/uv5r.py --- a/chirp/uv5r.py Fri Apr 06 12:12:35 2012 -0700 +++ b/chirp/uv5r.py Fri Apr 06 12:12:37 2012 -0700 @@ -15,8 +15,9 @@
import struct
-from chirp import chirp_common, errors, util, directory, memmap +from chirp import chirp_common, errors, util, directory, memmap, settings from chirp import bitwise +from chirp.settings import *
mem_format = """ #seekto 0x0008; @@ -35,6 +36,44 @@ unknown5:2; } memory[128];
+#seekto 0x0E28; +struct { + u8 squelch; + u8 step; + u8 unknown1; + u8 save; + u8 vox; + u8 unknown2; + u8 abr; + u8 tdr; + u8 beep; + u8 timeout; + u8 unknown3[4]; + u8 voice; + u8 unknown4; + u8 dtmfst; + u8 unknown5; + u8 screv; + u8 pttid; + u8 pttlt; + u8 mdfa; + u8 mdfb; + u8 bcl; + u8 autolk; + u8 sftd; + u8 unknown6[3]; + u8 wtled; + u8 rxled; + u8 txled; + u8 almod; + u8 tdrab; + u8 ste; + u8 rpste; + u8 rptrl; + u8 ponmsg; + u8 roger; +} settings[2]; + #seekto 0x1000; struct { u8 unknown1[8]; @@ -43,6 +82,24 @@ } names[128]; """
+STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 25.0] +step_list = [str(x) for x in STEPS] +timeout_list = ["%s sec" % x for x in range(15, 615, 15)] +resume_list = ["TO", "CO", "SE"] +mode_list = ["Channel", "Name", "Frequency"] +color_list = ["Off", "Blue", "Orange", "Purple"] + +SETTING_LISTS = { + "step" : step_list, + "timeout" : timeout_list, + "screv" : resume_list, + "mdfa" : mode_list, + "mdfb" : mode_list, + "wtled" : color_list, + "rxled" : color_list, + "txled" : color_list, +} + def do_status(radio, block): s = chirp_common.Status() s.msg = "Cloning" @@ -152,6 +209,7 @@
def process_mmap(self): self._memobj = bitwise.parse(mem_format, self._mmap) + print self.get_settings()
def sync_in(self): try: @@ -318,3 +376,96 @@ _mem.scan = mem.skip != "S" _mem.wide = mem.mode == "FM" _mem.lowpower = mem.power == UV5R_POWER_LEVELS[0] + + def get_settings(self): + _settings = self._memobj.settings[0] + group = RadioSettingGroup("top", "All Settings") + + s = RadioSetting("squelch", "Carrier Squelch Level", + RadioSettingValueInteger(0, 9, _settings.squelch)) + group.add_element(s) + + s = RadioSetting("step", "Tuning Step", + RadioSettingValueList(step_list, + step_list[_settings.step])) + group.add_element(s) + + s = RadioSetting("save", "Battery Saver", + RadioSettingValueInteger(0, 4, _settings.save)) + group.add_element(s) + + s = RadioSetting("vox", "VOX Sensitivity", + RadioSettingValueInteger(0, 10, _settings.vox)) + group.add_element(s) + + s = RadioSetting("abr", "Backlight Timeout", + RadioSettingValueInteger(0, 5, _settings.abr)) + group.add_element(s) + + s = RadioSetting("tdr", "Dual Watch", + RadioSettingValueBoolean(_settings.tdr)) + group.add_element(s) + + s = RadioSetting("beep", "Beep", + RadioSettingValueBoolean(_settings.beep)) + group.add_element(s) + + s = RadioSetting("timeout", "Timeout Timer", + RadioSettingValueList(timeout_list, + timeout_list[_settings.tdr])) + group.add_element(s) + + s = RadioSetting("voice", "Voice", + RadioSettingValueBoolean(_settings.voice)) + group.add_element(s) + + s = RadioSetting("screv", "Scan Resume", + RadioSettingValueList(resume_list, + resume_list[_settings.screv])) + group.add_element(s) + + s = RadioSetting("mdfa", "Display Mode (A)", + RadioSettingValueList(mode_list, + mode_list[_settings.mdfa])) + group.add_element(s) + + s = RadioSetting("mdfb", "Display Mode (B)", + RadioSettingValueList(mode_list, + mode_list[_settings.mdfb])) + group.add_element(s) + + s = RadioSetting("bcl", "Busy Channel Lockout", + RadioSettingValueBoolean(_settings.bcl)) + group.add_element(s) + + s = RadioSetting("autolk", "Automatic Key Lock", + RadioSettingValueBoolean(_settings.autolk)) + group.add_element(s) + + s = RadioSetting("wtled", "Standby LED Color", + RadioSettingValueList(color_list, + color_list[_settings.wtled])) + group.add_element(s) + + s = RadioSetting("rxled", "RX LED Color", + RadioSettingValueList(color_list, + color_list[_settings.rxled])) + group.add_element(s) + + s = RadioSetting("txled", "TX LED Color", + RadioSettingValueList(color_list, + color_list[_settings.txled])) + group.add_element(s) + + return group + + def set_settings(self, settings): + _settings = self._memobj.settings[0] + for element in settings.get_elements(): + value = element.get_value().get_value() + if element.get_name() in SETTING_LISTS.keys(): + value = SETTING_LISTS[element.get_name()].index(value) + try: + setattr(_settings, element.get_name(), value) + except Exception, e: + raise Exception("%s: %s" % (element.get_name(), e))