[chirp_devel] [PATCH] [BTECH] Add Basic Settings
Jim Unroe
Mon Apr 11 17:33:35 PDT 2016
# HG changeset patch
# User Jim Unroe <rock.unroe at gmail.com>
# Date 1460421134 14400
# Node ID eae0896c12a8e7a3f0c128f814a0539c7b5ba3b4
# Parent 3c0e8a9f2cc11c85fafc8007ff302d36c095f082
[BTECH] Add Basic Settings
Add settings from the OEM software "Optional Features" menu that are
related to the internal menus of these radios.
releated to #3015
diff -r 3c0e8a9f2cc1 -r eae0896c12a8 chirp/drivers/btech.py
--- a/chirp/drivers/btech.py Mon Apr 11 19:46:03 2016 -0400
+++ b/chirp/drivers/btech.py Mon Apr 11 20:32:14 2016 -0400
@@ -54,6 +54,50 @@
pttid:2;
} memory[200];
+#seekto 0x0E00;
+struct {
+ u8 tdr;
+ u8 unknown1;
+ u8 sql;
+ u8 unknown2[2];
+ u8 tot;
+ u8 apo; // BTech radios use this as the Auto Power Off time
+ // other radios use this as pre-Time Out Alert
+ u8 unknown3;
+ u8 abr;
+ u8 beep;
+ u8 unknown4[4];
+ u8 dtmfst;
+ u8 unknown5[2];
+ u8 prisc;
+ u8 prich;
+ u8 screv;
+ u8 unknown6[2];
+ u8 pttid;
+ u8 pttlt;
+ u8 unknown7;
+ u8 emctp;
+ u8 emcch;
+ u8 ringt;
+ u8 unknown8;
+ u8 camdf;
+ u8 cbmdf;
+ u8 sync; // BTech radios use this as the display sync setting
+ // other radios use this as the auto keypad lock setting
+ u8 ponmsg;
+ u8 wtled;
+ u8 rxled;
+ u8 txled;
+ u8 unknown9[5];
+ u8 anil;
+ u8 reps;
+ u8 repm;
+ u8 tdrab;
+ u8 ste;
+ u8 rpste;
+ u8 rptdl;
+} settings;
+
#seekto 0x1000;
struct {
char name[6];
@@ -108,6 +152,22 @@
OPTSIG_LIST = ["OFF", "DTMF", "2TONE", "5TONE"]
SPMUTE_LIST = ["Tone/DTCS", "Tone/DTCS and Optsig", "Tone/DTCS or Optsig"]
+LIST_TOT = ["%s sec" % x for x in range(15, 615, 15)]
+LIST_TOA = ["Off"] + ["%s seconds" % x for x in range(1, 11)]
+LIST_APO = ["Off"] + ["%s minutes" % x for x in range(30, 330, 30)]
+LIST_ABR = ["Off"] + ["%s seconds" % x for x in range(1, 51)]
+LIST_DTMFST = ["OFF", "Keyboard", "ANI", "Keyboad + ANI"]
+LIST_SCREV = ["TO (timeout)", "CO (carrier operated)", "SE (search)"]
+LIST_EMCTP = ["TX alarm sound", "TX ANI", "Both"]
+LIST_RINGT = ["Off"] + ["%s seconds" % x for x in range(1, 10)]
+LIST_MDF = ["Frequency", "Channel", "Name"]
+LIST_PONMSG = ["Full", "Message", "Battery voltage"]
+LIST_COLOR = ["Off", "Blue", "Orange", "Purple"]
+LIST_REPS = ["1000 Hz", "1450 Hz", "1750 Hz", "2100Hz"]
+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"]
+
# 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.
STIMEOUT = 0.7
@@ -613,7 +673,7 @@
global POWER_LEVELS
rf = chirp_common.RadioFeatures()
- rf.has_settings = False
+ rf.has_settings = True
rf.has_bank = False
rf.has_tuning_step = False
rf.can_odd_split = True
@@ -932,6 +992,200 @@
return mem
+ def get_settings(self):
+ """Translate the bit in the mem_struct into settings in the UI"""
+ _mem = self._memobj
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ top = RadioSettings(basic)
+
+ # Basic
+ tdr = RadioSetting("settings.tdr", "Transceiver dual receive",
+ RadioSettingValueBoolean(_mem.settings.tdr))
+ basic.append(tdr)
+
+ sql = RadioSetting("settings.sql", "Squelch level",
+ RadioSettingValueInteger(0, 9, _mem.settings.sql))
+ basic.append(sql)
+
+ tot = RadioSetting("settings.tot", "Time out timer",
+ RadioSettingValueList(LIST_TOT, LIST_TOT[
+ _mem.settings.tot]))
+ basic.append(tot)
+
+ if self.MODEL in ("UV-2501", "UV-2501+220", "UV-5001"):
+ apo = RadioSetting("settings.apo", "Auto power off timer",
+ RadioSettingValueList(LIST_APO, LIST_APO[
+ _mem.settings.apo]))
+ basic.append(apo)
+ else:
+ toa = RadioSetting("settings.apo", "Time out alert timer",
+ RadioSettingValueList(LIST_TOA, LIST_TOA[
+ _mem.settings.apo]))
+ basic.append(toa)
+
+ abr = RadioSetting("settings.abr", "Backlight timer",
+ RadioSettingValueList(LIST_ABR, LIST_ABR[
+ _mem.settings.abr]))
+ basic.append(abr)
+
+ beep = RadioSetting("settings.beep", "Key beep",
+ RadioSettingValueBoolean(_mem.settings.beep))
+ basic.append(beep)
+
+ dtmfst = RadioSetting("settings.dtmfst", "DTMF side tone",
+ RadioSettingValueList(LIST_DTMFST, LIST_DTMFST[
+ _mem.settings.dtmfst]))
+ basic.append(dtmfst)
+
+ prisc = RadioSetting("settings.prisc", "Priority scan",
+ RadioSettingValueBoolean(_mem.settings.prisc))
+ basic.append(prisc)
+
+ prich = RadioSetting("settings.prich", "Priority channel",
+ RadioSettingValueInteger(0, 199,
+ _mem.settings.prich))
+ basic.append(prich)
+
+ screv = RadioSetting("settings.screv", "Scan resume method",
+ RadioSettingValueList(LIST_SCREV, LIST_SCREV[
+ _mem.settings.screv]))
+ basic.append(screv)
+
+ pttlt = RadioSetting("settings.pttlt", "PTT transmit delay",
+ RadioSettingValueInteger(0, 30,
+ _mem.settings.pttlt))
+ basic.append(pttlt)
+
+ emctp = RadioSetting("settings.emctp", "Alarm mode",
+ RadioSettingValueList(LIST_EMCTP, LIST_EMCTP[
+ _mem.settings.emctp]))
+ basic.append(emctp)
+
+ emcch = RadioSetting("settings.emcch", "Alarm channel",
+ RadioSettingValueInteger(0, 199,
+ _mem.settings.emcch))
+ basic.append(emcch)
+
+ ringt = RadioSetting("settings.ringt", "Ring time",
+ RadioSettingValueList(LIST_RINGT, LIST_RINGT[
+ _mem.settings.ringt]))
+ basic.append(ringt)
+
+ camdf = RadioSetting("settings.camdf", "Display mode A",
+ RadioSettingValueList(LIST_MDF, LIST_MDF[
+ _mem.settings.camdf]))
+ basic.append(camdf)
+
+ cbmdf = RadioSetting("settings.cbmdf", "Display mode B",
+ RadioSettingValueList(LIST_MDF, LIST_MDF[
+ _mem.settings.cbmdf]))
+ basic.append(cbmdf)
+
+ if self.MODEL in ("UV-2501", "UV-2501+220", "UV-5001"):
+ sync = RadioSetting("settings.sync", "A/B channel sync",
+ RadioSettingValueBoolean(_mem.settings.sync))
+ basic.append(sync)
+ else:
+ autolk = RadioSetting("settings.sync", "Auto keylock",
+ RadioSettingValueBoolean(_mem.settings.sync))
+ basic.append(autolk)
+
+ ponmsg = RadioSetting("settings.ponmsg", "Power-on message",
+ RadioSettingValueList(LIST_PONMSG, LIST_PONMSG[
+ _mem.settings.ponmsg]))
+ basic.append(ponmsg)
+
+ wtled = RadioSetting("settings.wtled", "Standby backlight Color",
+ RadioSettingValueList(LIST_COLOR, LIST_COLOR[
+ _mem.settings.wtled]))
+ basic.append(wtled)
+
+ rxled = RadioSetting("settings.rxled", "RX backlight Color",
+ RadioSettingValueList(LIST_COLOR, LIST_COLOR[
+ _mem.settings.rxled]))
+ basic.append(rxled)
+
+ txled = RadioSetting("settings.txled", "TX backlight Color",
+ RadioSettingValueList(LIST_COLOR, LIST_COLOR[
+ _mem.settings.txled]))
+ basic.append(txled)
+
+ anil = RadioSetting("settings.anil", "ANI length",
+ RadioSettingValueList(LIST_ANIL, LIST_ANIL[
+ _mem.settings.anil]))
+ basic.append(anil)
+
+ reps = RadioSetting("settings.reps", "Relay signal (tone burst)",
+ RadioSettingValueList(LIST_REPS, LIST_REPS[
+ _mem.settings.reps]))
+ basic.append(reps)
+
+ repm = RadioSetting("settings.repm", "Relay condition",
+ RadioSettingValueList(LIST_REPM, LIST_REPM[
+ _mem.settings.repm]))
+ basic.append(repm)
+
+ if self.MODEL in ("UV-2501", "UV-2501+220", "UV-5001"):
+ tdrab = RadioSetting("settings.tdrab", "TDR return time",
+ RadioSettingValueList(LIST_ABR, LIST_ABR[
+ _mem.settings.tdrab]))
+ basic.append(tdrab)
+
+ ste = RadioSetting("settings.ste", "Squelch tail eliminate",
+ RadioSettingValueBoolean(_mem.settings.ste))
+ basic.append(ste)
+
+ rpste = RadioSetting("settings.rpste", "Repeater STE",
+ RadioSettingValueList(LIST_RINGT, LIST_RINGT[
+ _mem.settings.rpste]))
+ basic.append(rpste)
+
+ rptdl = RadioSetting("settings.rptdl", "Repeater STE delay",
+ RadioSettingValueList(LIST_RPTDL, LIST_RPTDL[
+ _mem.settings.rptdl]))
+ basic.append(rptdl)
+
+ return top
+
+ def set_settings(self, settings):
+ _settings = self._memobj.settings
+ for element in settings:
+ if not isinstance(element, RadioSetting):
+ if element.get_name() == "fm_preset":
+ self._set_fm_preset(element)
+ else:
+ 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():
+ LOG.debug("Using apply callback")
+ element.run_apply_callback()
+ elif setting == "vfomr":
+ setattr(obj, setting, not int(element.value))
+ elif element.value.get_mutable():
+ LOG.debug("Setting %s = %s" % (setting, element.value))
+ setattr(obj, setting, element.value)
+ except Exception, e:
+ LOG.debug(element.get_name())
+ raise
+
@classmethod
def match_model(cls, filedata, filename):
match_size = False
More information about the chirp_devel
mailing list