[chirp_devel] [PATCH] [uvb5] Additional Settings
Jim Unroe
Mon Apr 29 17:59:04 PDT 2013
Oops. I forgot to add the comment that this patch is relative to #815.
Sorry :(
Jim
On Mon, Apr 29, 2013 at 8:52 PM, Jim Unroe <rock.unroe at gmail.com> wrote:
> # HG changeset patch
> # User Jim Unroe <rock.unroe at gmail.com>
> # Date 1367282877 14400
> # Node ID dffed026a3f208a7b7e975f71cb8ee54d437ad5c
> # Parent f08b832077574e7a40180fb33601d9613c5574cd
> [uvb5] Additional Settings
> add imports from chirp.settings
> add/update structures based on memory mapping
> add rf.has_settings = True
> add def get_settings(self):
> add def set_settings(self, settings):
> add Basic Settings group
> add settings equivalent to the Baofeng UV-B5 Software
> Optional Features Menu
> - Scan Type
> - Time Out Timer
> - Frequency Mode
> - Radio Work Mode (A)
> - Radio Work Mode (B)
> - Display Format (F1)
> - Display Format (F2)
> - PTT-ID
> - PTT-ID Code
> - Squelch Level
> - VOX Level
> - FM Work Mode
> - Dual Standby TX Priority
> - Language
> - Dual Standby
> - Roger Beep
> - Backlight
> - Save Mode
> - FM Function
> - Beep Prompt
> - Voice Prompt
> - DTMF Side Tone
>
> diff -r f08b83207757 -r dffed026a3f2 chirp/uvb5.py
> --- a/chirp/uvb5.py Mon Apr 22 09:52:39 2013 -0700
> +++ b/chirp/uvb5.py Mon Apr 29 20:47:57 2013 -0400
> @@ -15,6 +15,9 @@
>
> import struct
> from chirp import chirp_common, directory, bitwise, memmap, errors, util
> +from chirp.settings import RadioSetting, RadioSettingGroup, \
> + RadioSettingValueBoolean, RadioSettingValueList, \
> + RadioSettingValueInteger, RadioSettingValueString
>
> mem_format = """
> struct memory {
> @@ -29,7 +32,7 @@
> u8 unknown3:1,
> scanadd:1,
> isnarrow:1,
> - unknown4:1,
> + bcl:1,
> highpower:1,
> unknown5:1,
> duplex:2;
> @@ -48,6 +51,37 @@
> struct {
> u8 name[5];
> } names[128];
> +
> +#seekto 0x0D30;
> +struct {
> + u8 squelch;
> + u8 freqmode_ab:1,
> + save_funct:1,
> + backlight:1,
> + beep_tone:1,
> + roger:1,
> + tdr:1,
> + scantype:2;
> + u8 language:1,
> + workmode_b:1,
> + workmode_a:1,
> + workmode_fm:1,
> + voice_prompt:1,
> + fm:1,
> + pttid:2;
> + u8 timeout;
> + u8 mdf_b:2,
> + mdf_a:2,
> + unknown_1:2,
> + txtdr:2;
> + u8 sidetone;
> + u8 vox;
> +} settings;
> +
> +#seekto 0x0D50;
> +struct {
> + u8 code[6];
> +} pttid;
> """
>
> def do_ident(radio):
> @@ -127,6 +161,7 @@
>
> def get_features(self):
> rf = chirp_common.RadioFeatures()
> + rf.has_settings = True
> rf.valid_tmodes = ["", "Tone", "TSQL", "DTCS", "Cross"]
> rf.valid_duplexes = DUPLEX
> rf.valid_skips = ["", "S"]
> @@ -238,6 +273,12 @@
> break
> mem.name = mem.name.rstrip()
>
> + mem.extra = RadioSettingGroup("Extra", "extra")
> +
> + rs = RadioSetting("bcl", "BCL",
> + RadioSettingValueBoolean(_mem.bcl))
> + mem.extra.append(rs)
> +
> return mem
>
> def set_memory(self, mem):
> @@ -268,6 +309,173 @@
> except IndexError:
> _nam[i] = 0xFF
>
> + for setting in mem.extra:
> + setattr(_mem, setting.get_name(), setting.value)
> +
> + def get_settings(self):
> + basic = RadioSettingGroup("basic", "Basic Settings")
> + group = RadioSettingGroup("top", "All Settings", basic)
> +
> + options = ["Time", "Carrier", "Search"]
> + rs = RadioSetting("scantype", "Scan Type",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.scantype]))
> + basic.append(rs)
> +
> + options = ["%s min" % x for x in range(1, 8)]
> + options.insert(0, "Off")
> + rs = RadioSetting("timeout", "Time Out Timer",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.timeout]))
> + basic.append(rs)
> +
> + options = ["A", "B"]
> + rs = RadioSetting("freqmode_ab", "Frequency Mode",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.freqmode_ab]))
> + basic.append(rs)
> +
> + options = ["Frequency Mode", "Channel Mode"]
> + rs = RadioSetting("workmode_a", "Radio Work Mode(A)",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.workmode_a]))
> + basic.append(rs)
> +
> + rs = RadioSetting("workmode_b", "Radio Work Mode(B)",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.workmode_b]))
> + basic.append(rs)
> +
> + options = ["Frequency", "Name", "Channel"]
> + rs = RadioSetting("mdf_a", "Display Format(F1)",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.mdf_a]))
> + basic.append(rs)
> +
> + rs = RadioSetting("mdf_b", "Display Format(F2)",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.mdf_b]))
> + basic.append(rs)
> +
> + options = ["Off", "BOT", "EOT", "Both"]
> + rs = RadioSetting("pttid", "PTT-ID",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.pttid]))
> + basic.append(rs)
> +
> + dtmfchars = "0123456789ABCD"
> + _codeobj = self._memobj.pttid.code
> + _code = "".join([dtmfchars[x] for x in _codeobj if int(x) < 0x1F])
> + val = RadioSettingValueString(0, 6, _code, False)
> + val.set_charset(dtmfchars)
> + rs = RadioSetting("pttid.code", "PTT-ID Code", val)
> + def apply_code(setting, obj):
> + code = []
> + for j in range(0, 6):
> + try:
> + code.append(dtmfchars.index(str(setting.value)[j]))
> + except IndexError:
> + code.append(0xFF)
> + obj.code = code
> + rs.set_apply_callback(apply_code, self._memobj.pttid)
> + basic.append(rs)
> +
> + rs = RadioSetting("squelch", "Squelch Level",
> + RadioSettingValueInteger(0, 9,
> self._memobj.settings.squelch))
> + basic.append(rs)
> +
> + rs = RadioSetting("vox", "VOX Level",
> + RadioSettingValueInteger(0, 9,
> self._memobj.settings.vox))
> + basic.append(rs)
> +
> + options = ["Frequency Mode", "Channel Mode"]
> + rs = RadioSetting("workmode_fm", "FM Work Mode",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.workmode_fm]))
> + basic.append(rs)
> +
> + options = ["Current Frequency", "F1 Frequency", "F2 Frequency"]
> + rs = RadioSetting("txtdr", "Dual Standby TX Priority",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.txtdr]))
> + basic.append(rs)
> +
> + options = ["English", "Chinese"]
> + rs = RadioSetting("language", "Language",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.language]))
> + basic.append(rs)
> +
> + rs = RadioSetting("tdr", "Dual Standby",
> +
> RadioSettingValueBoolean(self._memobj.settings.tdr))
> + basic.append(rs)
> +
> + rs = RadioSetting("roger", "Roger Beep",
> +
> RadioSettingValueBoolean(self._memobj.settings.roger))
> + basic.append(rs)
> +
> + rs = RadioSetting("backlight", "Backlight",
> +
> RadioSettingValueBoolean(self._memobj.settings.backlight))
> + basic.append(rs)
> +
> + rs = RadioSetting("save_funct", "Save Mode",
> +
> RadioSettingValueBoolean(self._memobj.settings.save_funct))
> + basic.append(rs)
> +
> + rs = RadioSetting("fm", "FM Function",
> + RadioSettingValueBoolean(self._
> memobj.settings.fm))
> + basic.append(rs)
> +
> + options = ["Enabled", "Disabled"]
> + rs = RadioSetting("beep_tone", "Beep Prompt",
> + RadioSettingValueList(options,
> +
> options[self._memobj.settings.beep_tone]))
> + basic.append(rs)
> +
> + rs = RadioSetting("voice_prompt", "Voice Prompt",
> +
> RadioSettingValueBoolean(self._memobj.settings.voice_prompt))
> + basic.append(rs)
> +
> + rs = RadioSetting("sidetone", "DTMF Side Tone",
> +
> RadioSettingValueBoolean(self._memobj.settings.sidetone))
> + 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
> + 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 (filedata.startswith("KT511 Radio Program data") and
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20130429/b7c7285b/attachment-0001.html
More information about the chirp_devel
mailing list