[chirp_devel] [PATCH] [BTECH] Add Work Mode Settings
Jim Unroe
Mon Apr 11 19:55:09 PDT 2016
# HG changeset patch
# User Jim Unroe <rock.unroe at gmail.com>
# Date 1460429278 14400
# Node ID c0b5e35b06659d29a3c72c02fb2ee7423dacc100
# Parent 3f271ee7d0da0bd604defef9e0d2fca268ae6139
[BTECH] Add Work Mode Settings
Add Work Mode Presets.
releated to #3015
diff -r 3f271ee7d0da -r c0b5e35b0665 chirp/drivers/btech.py
--- a/chirp/drivers/btech.py Mon Apr 11 22:39:52 2016 -0400
+++ b/chirp/drivers/btech.py Mon Apr 11 22:47:58 2016 -0400
@@ -26,7 +26,7 @@
from chirp.settings import RadioSettingGroup, RadioSetting, \
RadioSettingValueBoolean, RadioSettingValueList, \
RadioSettingValueString, RadioSettingValueInteger, \
- RadioSettings
+ RadioSettings, InvalidValueError
from textwrap import dedent
MEM_FORMAT = """
@@ -122,6 +122,30 @@
char line2[6];
} poweron_msg;
+struct settings_vfo {
+ u8 freq[8];
+ u8 unknown1;
+ u8 offset[4];
+ u8 unknown2[3];
+ ul16 rxtone;
+ ul16 txtone;
+ u8 scode;
+ u8 spmute;
+ u8 optsig;
+ u8 scramble;
+ u8 wide;
+ u8 power;
+ u8 shiftd;
+ u8 step;
+ u8 unknown3[4];
+};
+
+#seekto 0x0F00;
+struct {
+ struct settings_vfo a;
+ struct settings_vfo b;
+} vfo;
+
#seekto 0x1000;
struct {
char name[6];
@@ -196,6 +220,13 @@
LIST_REPM = ["Off", "Carrier", "CTCSS or DCS", "Tone", "DTMF"]
LIST_RPTDL = ["Off"] + ["%s ms" % x for x in range(1, 10)]
LIST_ANIL = ["3", "4", "5"]
+LIST_AB = ["A", "B"]
+LIST_VFOMR = ["Frequency", "Channel"]
+LIST_SHIFT = ["Off", "+", "-"]
+LIST_TXP = ["High", "Low"]
+LIST_WIDE = ["Wide", "Narrow"]
+STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 25.0]
+LIST_STEP = [str(x) for x in STEPS]
# This is a general serial timeout for all serial read functions.
# Practice has show that about 0.7 sec will be enough to cover all radios.
@@ -1027,7 +1058,8 @@
basic = RadioSettingGroup("basic", "Basic Settings")
advanced = RadioSettingGroup("advanced", "Advanced Settings")
other = RadioSettingGroup("other", "Other Settings")
- top = RadioSettings(basic, advanced, other)
+ work = RadioSettingGroup("work", "Work Mode Settings")
+ top = RadioSettings(basic, advanced, other, work)
# Basic
tdr = RadioSetting("settings.tdr", "Transceiver dual receive",
@@ -1271,6 +1303,181 @@
fp = RadioSetting("fingerprint.fp", "Fingerprint", val)
other.append(fp)
+ # Work
+ dispab = RadioSetting("settings2.dispab", "Display",
+ RadioSettingValueList(LIST_AB,LIST_AB[
+ _mem.settings2.dispab]))
+ work.append(dispab)
+
+ vfomr = RadioSetting("settings2.vfomr", "VFO/MR mode",
+ RadioSettingValueList(LIST_VFOMR,LIST_VFOMR[
+ _mem.settings2.vfomr]))
+ work.append(vfomr)
+
+ keylock = RadioSetting("settings2.keylock", "Keypad lock",
+ RadioSettingValueBoolean(_mem.settings2.keylock))
+ work.append(keylock)
+
+ mrcha = RadioSetting("settings2.mrcha", "MR A channel",
+ RadioSettingValueInteger(0, 199,
+ _mem.settings2.mrcha))
+ work.append(mrcha)
+
+ mrchb = RadioSetting("settings2.mrchb", "MR B channel",
+ RadioSettingValueInteger(0, 199,
+ _mem.settings2.mrchb))
+ work.append(mrchb)
+
+ def convert_bytes_to_freq(bytes):
+ real_freq = 0
+ for byte in bytes:
+ real_freq = (real_freq * 10) + byte
+ return chirp_common.format_freq(real_freq * 10)
+
+ def my_validate(value):
+ value = chirp_common.parse_freq(value)
+ print value
+ if 180000000 <= value and value < 210000000:
+ msg = ("Can't be between 180.00000-210.00000")
+ raise InvalidValueError(msg)
+ elif 231000000 <= value and value < 400000000:
+ msg = ("Can't be between 231.00000-400.00000")
+ raise InvalidValueError(msg)
+ elif 210000000 <= value and value < 231000000 \
+ and "+220" not in self.MODEL:
+ msg = ("Can't be between 180.00000-400.00000")
+ raise InvalidValueError(msg)
+ return chirp_common.format_freq(value)
+
+ def apply_freq(setting, obj):
+ value = chirp_common.parse_freq(str(setting.value)) / 10
+ for i in range(7, -1, -1):
+ obj.freq[i] = value % 10
+ value /= 10
+
+ val1a = RadioSettingValueString(0, 10, convert_bytes_to_freq(
+ _mem.vfo.a.freq))
+ val1a.set_validate_callback(my_validate)
+ vfoafreq = RadioSetting("vfo.a.freq", "VFO A frequency", val1a)
+ vfoafreq.set_apply_callback(apply_freq, _mem.vfo.a)
+ work.append(vfoafreq)
+
+ val1b = RadioSettingValueString(0, 10, convert_bytes_to_freq(
+ _mem.vfo.b.freq))
+ val1b.set_validate_callback(my_validate)
+ vfobfreq = RadioSetting("vfo.b.freq", "VFO B frequency", val1b)
+ vfobfreq.set_apply_callback(apply_freq, _mem.vfo.b)
+ work.append(vfobfreq)
+
+ vfoashiftd = RadioSetting("vfo.a.shiftd", "VFO A shift",
+ RadioSettingValueList(LIST_SHIFT, LIST_SHIFT[
+ _mem.vfo.a.shiftd]))
+ work.append(vfoashiftd)
+
+ vfobshiftd = RadioSetting("vfo.b.shiftd", "VFO B shift",
+ RadioSettingValueList(LIST_SHIFT, LIST_SHIFT[
+ _mem.vfo.b.shiftd]))
+ work.append(vfobshiftd)
+
+ def convert_bytes_to_offset(bytes):
+ real_offset = 0
+ for byte in bytes:
+ real_offset = (real_offset * 10) + byte
+ return chirp_common.format_freq(real_offset * 10000)
+
+ def apply_offset(setting, obj):
+ value = chirp_common.parse_freq(str(setting.value)) / 10000
+ for i in range(3, -1, -1):
+ obj.offset[i] = value % 10
+ value /= 10
+
+ val1a = RadioSettingValueString(0, 10, convert_bytes_to_offset(
+ _mem.vfo.a.offset))
+ vfoaoffset = RadioSetting("vfo.a.offset",
+ "VFO A offset (0.00-99.95)", val1a)
+ vfoaoffset.set_apply_callback(apply_offset, _mem.vfo.a)
+ work.append(vfoaoffset)
+
+ val1b = RadioSettingValueString(0, 10, convert_bytes_to_offset(
+ _mem.vfo.b.offset))
+ vfoboffset = RadioSetting("vfo.b.offset",
+ "VFO B offset (0.00-99.95)", val1b)
+ vfoboffset.set_apply_callback(apply_offset, _mem.vfo.b)
+ work.append(vfoboffset)
+
+ vfoatxp = RadioSetting("vfo.a.power", "VFO A power",
+ RadioSettingValueList(LIST_TXP,LIST_TXP[
+ _mem.vfo.a.power]))
+ work.append(vfoatxp)
+
+ vfobtxp = RadioSetting("vfo.b.power", "VFO B power",
+ RadioSettingValueList(LIST_TXP,LIST_TXP[
+ _mem.vfo.b.power]))
+ work.append(vfobtxp)
+
+ vfoawide = RadioSetting("vfo.a.wide", "VFO A bandwidth",
+ RadioSettingValueList(LIST_WIDE,LIST_WIDE[
+ _mem.vfo.a.wide]))
+ work.append(vfoawide)
+
+ vfobwide = RadioSetting("vfo.b.wide", "VFO B bandwidth",
+ RadioSettingValueList(LIST_WIDE,LIST_WIDE[
+ _mem.vfo.b.wide]))
+ work.append(vfobwide)
+
+ vfoastep = RadioSetting("vfo.a.step", "VFO A step",
+ RadioSettingValueList(LIST_STEP,LIST_STEP[
+ _mem.vfo.a.step]))
+ work.append(vfoastep)
+
+ vfobstep = RadioSetting("vfo.b.step", "VFO B step",
+ RadioSettingValueList(LIST_STEP,LIST_STEP[
+ _mem.vfo.b.step]))
+ work.append(vfobstep)
+
+ vfoaoptsig = RadioSetting("vfo.a.optsig", "VFO A optional signal",
+ RadioSettingValueList(OPTSIG_LIST,
+ OPTSIG_LIST[_mem.vfo.a.optsig]))
+ work.append(vfoaoptsig)
+
+ vfoboptsig = RadioSetting("vfo.b.optsig", "VFO B optional signal",
+ RadioSettingValueList(OPTSIG_LIST,
+ OPTSIG_LIST[_mem.vfo.b.optsig]))
+ work.append(vfoboptsig)
+
+ vfoaspmute = RadioSetting("vfo.a.spmute", "VFO A speaker mute",
+ RadioSettingValueList(SPMUTE_LIST,
+ SPMUTE_LIST[_mem.vfo.a.spmute]))
+ work.append(vfoaspmute)
+
+ vfobspmute = RadioSetting("vfo.b.spmute", "VFO B speaker mute",
+ RadioSettingValueList(SPMUTE_LIST,
+ SPMUTE_LIST[_mem.vfo.b.spmute]))
+ work.append(vfobspmute)
+
+ vfoascr = RadioSetting("vfo.a.scramble", "VFO A scramble",
+ RadioSettingValueBoolean(_mem.vfo.a.scramble))
+ work.append(vfoascr)
+
+ vfobscr = RadioSetting("vfo.b.scramble", "VFO B scramble",
+ RadioSettingValueBoolean(_mem.vfo.b.scramble))
+ work.append(vfobscr)
+
+ vfoascode = RadioSetting("vfo.a.scode", "VFO A PTT-ID",
+ RadioSettingValueList(PTTIDCODE_LIST,
+ PTTIDCODE_LIST[_mem.vfo.a.scode]))
+ work.append(vfoascode)
+
+ vfobscode = RadioSetting("vfo.b.scode", "VFO B PTT-ID",
+ RadioSettingValueList(PTTIDCODE_LIST,
+ PTTIDCODE_LIST[_mem.vfo.b.scode]))
+ work.append(vfobscode)
+
+ pttid = RadioSetting("settings.pttid", "PTT ID",
+ RadioSettingValueList(PTTID_LIST,
+ PTTID_LIST[_mem.settings.pttid]))
+ work.append(pttid)
+
return top
def set_settings(self, settings):
More information about the chirp_devel
mailing list