[chirp_devel] [PATCH] [vx-3] add basic settings support #1291
Jens Jensen
Sun Jan 5 14:28:58 PST 2014
# HG changeset patch
# User Jens Jensen <kd4tjx at yahoo.com>
# Date 1388960912 21600
# Sun Jan 05 16:28:32 2014 -0600
# Node ID 53bdc54bcb55b584cac9af85169039d930693cb3
# Parent 3c9f030bbf7e4c6686a30bcc65fd4c11963f1eb6
[vx-3] add basic settings support #1291
diff -r 3c9f030bbf7e -r 53bdc54bcb55 chirp/vx3.py
--- a/chirp/vx3.py Sun Jan 05 12:16:16 2014 -0600
+++ b/chirp/vx3.py Sun Jan 05 16:28:32 2014 -0600
@@ -16,7 +16,11 @@
from chirp import chirp_common, yaesu_clone, directory
from chirp import bitwise
+from chirp.settings import RadioSetting, RadioSettingGroup, \
+ RadioSettingValueInteger, RadioSettingValueList, \
+ RadioSettingValueBoolean, RadioSettingValueString
from textwrap import dedent
+import os, re
#interesting offsets which may be checksums needed later
#0x0393 checksum1?
@@ -24,10 +28,129 @@
#0x0409 checksum2?
#0x04C9 checksum2a?
+if os.getenv("CHIRP_DEBUG"):
+ CHIRP_DEBUG = True
+else:
+ CHIRP_DEBUG = False
+
MEM_FORMAT = """
#seekto 0x7F4A;
u8 checksum;
+#seekto 0x024A;
+struct {
+ u8 unk01_1:3,
+ att_broadcast:1,
+ att_marine:1,
+ unk01_2:2
+ att_wx:1;
+ u8 unk02;
+ u8 apo;
+ u8 arts_beep;
+ u8 unk04_1;
+ u8 beep_level;
+ u8 beep_mode;
+ u8 unk04_2;
+ u8 arts_cwid[16];
+ u8 unk05[10];
+ u8 channel_counter;
+ u8 unk06_1[2];
+ u8 dtmf_delay;
+ u8 dtmf_chan_active;
+ u8 unk06_2[5];
+ u8 emergency_eai_time;
+ u8 emergency_signal;
+ u8 unk07[30];
+ u8 fw_key_timer;
+ u8 internet_key;
+ u8 lamp;
+ u8 lock_mode;
+ u8 my_key;
+ u8 mic_gain;
+ u8 mem_ch_step;
+ u8 unk08[3];
+ u8 sql_fm;
+ u8 sql_wfm;
+ u8 radio_am_sql;
+ u8 radio_fm_sql;
+ u8 on_timer;
+ u8 openmsg_mode;
+ u8 openmsg[6];
+ u8 pager_rxtone1;
+ u8 pager_rxtone2;
+ u8 pager_txtone1;
+ u8 pager_txtone2;
+ u8 password[4];
+ u8 unk10;
+ u8 priority_time;
+ u8 ptt_delay;
+ u8 rx_save;
+ u8 scan_resume;
+ u8 scan_restart;
+ u8 sub_rx_timer;
+ u8 unk11[7];
+ u8 tot;
+ u8 wake_up;
+ u8 unk12[2];
+ u8 vfo_mode:1,
+ arts_cwid_enable:1,
+ scan_lamp:1,
+ fast_tone_search:1,
+ ars:1,
+ dtmf_speed:1,
+ split_tone:1,
+ dtmf_autodialer:1;
+ u8 busy_led:1,
+ tone_search_mute:1,
+ unk14_1:1,
+ bclo:1,
+ band_edge_beep:1,
+ unk14_2:2,
+ txsave:1;
+ u8 unk15_1:2,
+ smart_search:1,
+ emergency_eai:1,
+ unk15_2:2,
+ hm_rv:1,
+ moni_tcall:1;
+ u8 lock:1,
+ unk16_1:1,
+ arts:1,
+ arts_interval:1,
+ unk16_2:1,
+ protect_memory:1,
+ unk16_3:1,
+ mem_storage:1;
+ u8 vol_key_mode:1,
+ unk17_1:2,
+ wx_alert:1,
+ temp_unit:1,
+ unk17_2:2,
+ password_active:1;
+ u8 fm_broadcast_mode:1,
+ fm_antenna:1,
+ am_antenna:1,
+ fm_speaker_out:1,
+ home_vfo:1,
+ unk18_1:2,
+ priority_revert:1;
+} settings;
+
+// banks?
+#seekto 0x034D;
+u8 banks_unk1;
+
+#seekto 0x0356;
+u32 banks_unk2;
+
+#seekto 0x0409;
+u8 banks_unk3;
+
+#seekto 0x04CA;
+struct {
+ u8 memory[16];
+} dtmf[10];
+
#seekto 0x0B7A;
struct {
u8 name[6];
@@ -43,12 +166,17 @@
u16 in_use;
} bank_used[24];
+#seekto 0x03FE;
+struct {
+ u8 speaker;
+ u8 earphone;
+} volumes;
#seekto 0x20CA;
struct {
u8 even_pskip:1,
even_skip:1,
- even_valid:1,
+ even_valid:1, // TODO: should be "showname", i.e., show alpha name
even_masked:1,
odd_pskip:1,
odd_skip:1,
@@ -68,7 +196,7 @@
bbcd freq[3];
u8 power:2,
unknown2:4,
- tmode:2;
+ tmode:2; // TODO: tmode should be 6 bits (extended tone modes)
u8 name[6];
bbcd offset[3];
u8 unknown3:2,
@@ -76,10 +204,13 @@
u8 unknown4:1,
dcs:7;
u8 unknown5;
- u8 unknown6;
- u8 unknown7:4,
+ u8 smetersquelch;
+ u8 unknown7a:2,
+ attenuate:1,
+ unknown7b:1,
automode:1,
- unknown8:3;
+ unknown8:1,
+ bell:2;
} memory[999];
"""
@@ -88,6 +219,8 @@
DUPLEX = ["", "-", "+", "split"]
MODES = ["FM", "AM", "WFM", "Auto", "NFM"] # NFM handled specially in radio
TMODES = ["", "Tone", "TSQL", "DTCS"]
+## TODO: TMODES = ["", "Tone, "TSQL", "DTCS", "Rev Tone", "User Tone", "Pager",
+## "Message", "D Code", "Tone/DTCS", "DTCS/Tone"]
#still need to verify 9 is correct, and add auto: look at byte 1 and 20
STEPS = [ 5.0, 9, 10.0, 12.5, 15.0, 20.0, 25.0, 50.0, 100.0 ]
@@ -104,6 +237,7 @@
("\x00" * 13) + "*" + "\x00\x00,'|\x00\x00\x00\x00" + \
("\x00" * 64))
+DTMFCHARSET = list("0123456789ABCD*#")
POWER_LEVELS = [chirp_common.PowerLevel("High", watts=1.50),
chirp_common.PowerLevel("Low", watts=0.10)]
@@ -214,9 +348,8 @@
_model = "AH028"
_memsize = 32587
_block_lengths = [ 10, 32577 ]
- #right now this reads in 45 seconds and writes in 123 seconds
- #attempts to speed it up appear unstable, more testing required
- _block_size = 8
+ #right now this reads in 45 seconds and writes in 41 seconds
+ _block_size = 64
@classmethod
def get_prompts(cls):
@@ -258,6 +391,7 @@
rf.memory_bounds = (1, 999)
rf.can_odd_split = True
rf.has_ctone = False
+ rf.has_settings = True
return rf
def get_raw_memory(self, number):
@@ -361,3 +495,399 @@
def get_bank_model(self):
return VX3BankModel(self)
+
+ def _decode_chars(self, inarr):
+ if CHIRP_DEBUG:
+ print "@_decode_chars, type: %s" % type(inarr)
+ print inarr
+ outstr = ""
+ for i in inarr:
+ if i == 0xFF:
+ break
+ outstr += CHARSET[i & 0x7F]
+ return outstr.rstrip()
+
+ def _encode_chars(self, instr, length = 16):
+ if CHIRP_DEBUG:
+ print "@_encode_chars, type: %s" % type(instr)
+ print instr
+ outarr = []
+ instr = str(instr)
+ for i in range(length):
+ if i < len(instr):
+ outarr.append(CHARSET.index(instr[i]))
+ else:
+ outarr.append(0xFF)
+ return outarr
+
+ def get_settings(self):
+ _settings = self._memobj.settings
+ basic = RadioSettingGroup("basic", "Basic")
+ sound = RadioSettingGroup("sound", "Sound")
+ dtmf = RadioSettingGroup("dtmf", "DTMF")
+ arts = RadioSettingGroup("arts", "ARTS")
+ eai = RadioSettingGroup("eai", "Emergency")
+ msg = RadioSettingGroup("msg", "Messages")
+ top = RadioSettingGroup("top", "All Settings",
+ basic, sound, arts, dtmf, eai, msg)
+
+ basic.append( RadioSetting("att_wx", "Attenuation WX",
+ RadioSettingValueBoolean(_settings.att_wx)))
+
+ basic.append( RadioSetting("att_marine", "Attenuation Marine",
+ RadioSettingValueBoolean(_settings.att_marine)))
+
+ basic.append( RadioSetting("att_broadcast", "Attenuation Broadcast",
+ RadioSettingValueBoolean(_settings.att_broadcast)))
+
+ basic.append( RadioSetting("ars", "Auto Repeater Shift",
+ RadioSettingValueBoolean(_settings.ars)))
+
+ basic.append( RadioSetting("home_vfo", "Home->VFO",
+ RadioSettingValueBoolean(_settings.home_vfo)))
+
+ basic.append( RadioSetting("bclo", "Busy Channel Lockout",
+ RadioSettingValueBoolean(_settings.bclo)))
+
+ basic.append( RadioSetting("busyled", "Busy LED",
+ RadioSettingValueBoolean(_settings.busy_led)))
+
+ basic.append( RadioSetting("fast_tone_search", "Fast Tone search",
+ RadioSettingValueBoolean(_settings.fast_tone_search)))
+
+ basic.append( RadioSetting("priority_revert", "Priority Revert",
+ RadioSettingValueBoolean(_settings.priority_revert)))
+
+ basic.append( RadioSetting("protect_memory", "Protect memory",
+ RadioSettingValueBoolean(_settings.protect_memory)))
+
+ basic.append( RadioSetting("scan_lamp", "Scan Lamp",
+ RadioSettingValueBoolean(_settings.scan_lamp)))
+
+ basic.append( RadioSetting("split_tone", "Split tone",
+ RadioSettingValueBoolean(_settings.split_tone)))
+
+ basic.append( RadioSetting("tone_search_mute", "Tone search mute",
+ RadioSettingValueBoolean(_settings.tone_search_mute)))
+
+ basic.append( RadioSetting("txsave", "TX save",
+ RadioSettingValueBoolean(_settings.txsave)))
+
+ basic.append( RadioSetting("wx_alert", "WX Alert",
+ RadioSettingValueBoolean(_settings.wx_alert)))
+
+ opts = ["Bar Int", "Bar Ext"]
+ basic.append( RadioSetting("am_antenna", "AM antenna",
+ RadioSettingValueList(opts, opts[_settings.am_antenna])))
+
+ opts = ["Ext Ant", "Earphone"]
+ basic.append( RadioSetting("fm_antenna", "FM antenna",
+ RadioSettingValueList(opts, opts[_settings.fm_antenna])))
+
+ opts = ["off"] + [ "%0.1f" % (t / 60.0) for t in range(30, 750, 30) ]
+ basic.append( RadioSetting("apo", "APO time (hrs)",
+ RadioSettingValueList(opts, opts[_settings.apo])))
+
+ opts = ["+/- 5 MHZ", "+/- 10 MHZ", "+/- 50 MHZ", "+/- 100 MHZ"]
+ basic.append( RadioSetting("channel_counter", "Channel counter",
+ RadioSettingValueList(opts, opts[_settings.channel_counter])))
+
+ opts = ["0.3", "0.5", "0.7", "1.0", "1.5"]
+ basic.append( RadioSetting("fw_key_timer", "FW key timer (s)",
+ RadioSettingValueList(opts, opts[_settings.fw_key_timer])))
+
+ opts = ["Home", "Reverse"]
+ basic.append( RadioSetting("hm_rv", "HM/RV key",
+ RadioSettingValueList(opts, opts[_settings.hm_rv])))
+
+ opts = [ "%d" % t for t in range(2, 11) ] + ["continuous", "off"]
+ basic.append( RadioSetting("lamp", "Lamp Timer (s)",
+ RadioSettingValueList(opts, opts[_settings.lamp])))
+
+ basic.append( RadioSetting("lock", "Lock",
+ RadioSettingValueBoolean(_settings.lock)))
+
+ opts = ["key", "ptt", "key+ptt"]
+ basic.append( RadioSetting("lock_mode", "Lock mode",
+ RadioSettingValueList(opts, opts[_settings.lock_mode])))
+
+ opts = ["10", "20", "50", "100"]
+ basic.append( RadioSetting("mem_ch_step", "Memory Chan step",
+ RadioSettingValueList(opts, opts[_settings.mem_ch_step])))
+
+ opts = ["lower", "next"]
+ basic.append( RadioSetting("mem_storage", "Memory storage mode",
+ RadioSettingValueList(opts, opts[_settings.mem_storage])))
+
+ opts = [ "%d" % t for t in range(1, 10) ]
+ basic.append( RadioSetting("mic_gain", "Mic gain",
+ RadioSettingValueList(opts, opts[_settings.mic_gain])))
+
+ opts = ["monitor", "tone call"]
+ basic.append( RadioSetting("moni_tcall", "Moni/TCall button",
+ RadioSettingValueList(opts, opts[_settings.moni_tcall])))
+
+ opts = ["off"] + \
+ [ "%02d:%02d" % (t / 60, t % 60) for t in range(10, 1450, 10) ]
+ basic.append( RadioSetting("on_timer", "On Timer (hrs)",
+ RadioSettingValueList(opts, opts[_settings.on_timer])))
+
+ opts2 = ["off"] + \
+ [ "0.%d" % t for t in range(1, 10) ] + \
+ [ "%1.1f" % (t / 10.0) for t in range(10, 105, 5) ]
+ basic.append( RadioSetting("priority_time", "Priority time",
+ RadioSettingValueList(opts2, opts2[_settings.priority_time])))
+
+ opts = ["off", "20", "50", "100", "200"]
+ basic.append( RadioSetting("ptt_delay", "PTT delay (ms)",
+ RadioSettingValueList(opts, opts[_settings.ptt_delay])))
+
+ basic.append( RadioSetting("rx_save", "RX save (s)",
+ RadioSettingValueList(opts2, opts2[_settings.rx_save])))
+
+ basic.append( RadioSetting("scan_restart", "Scan restart (s)",
+ RadioSettingValueList(opts2, opts2[_settings.scan_restart])))
+
+ opts = [ "%1.1f" % (t / 10.0) for t in range(20, 105, 5) ] + \
+ ["busy", "hold"]
+ basic.append( RadioSetting("scan_resume", "Scan resume (s)",
+ RadioSettingValueList(opts, opts[_settings.scan_resume])))
+
+ opts = ["single", "continuous"]
+ basic.append( RadioSetting("smart_search", "Smart search",
+ RadioSettingValueList(opts, opts[_settings.smart_search])))
+
+ opts = ["off"] + [ "TRX %d" % t for t in range(1, 11)] + ["hold"] + \
+ [ "TX %d" % t for t in range(1, 11)]
+ basic.append( RadioSetting("sub_rx_timer", "Sub RX timer",
+ RadioSettingValueList(opts, opts[_settings.sub_rx_timer])))
+
+ opts = ["C", "F"]
+ basic.append( RadioSetting("temp_unit", "Temperature unit",
+ RadioSettingValueList(opts, opts[_settings.temp_unit])))
+
+ opts = ["off"] + [ "%1.1f" % (t / 10.0) for t in range(5, 105, 5) ]
+ basic.append( RadioSetting("tot", "Time-out timer (mins)",
+ RadioSettingValueList(opts, opts[_settings.tot])))
+
+ opts = ["all", "band"]
+ basic.append( RadioSetting("vfo_mode", "VFO mode",
+ RadioSettingValueList(opts, opts[_settings.vfo_mode])))
+
+ opts = ["off"] + [ "%d" % t for t in range(5, 65, 5) ] + ["EAI"]
+ basic.append( RadioSetting("wake_up", "Wake up (s)",
+ RadioSettingValueList(opts, opts[_settings.wake_up])))
+
+ opts = ["hold", "3 secs"]
+ basic.append( RadioSetting("vol_key_mode", "Volume key mode",
+ RadioSettingValueList(opts, opts[_settings.vol_key_mode])))
+
+ # subgroup programmable keys
+
+ opts = ["INTNET", "INT MR", "Set Mode (my key)"]
+ basic.append( RadioSetting("internet_key", "Internet key",
+ RadioSettingValueList(opts, opts[_settings.internet_key])))
+
+ keys = [ "Antenna AM", "Antenna FM", "Antenna Attenuator", "Auto Power Off",
+ "Auto Repeater Shift", "ARTS Beep", "ARTS Interval", "Busy Channel Lockout",
+ "Bell Ringer", "Bell Select", "Bank Name", "Band Edge Beep", "Beep Level",
+ "Beep Select", "Beep User", "Busy LED", "Channel Counter", "Clock Shift",
+ "CW ID", "CW Learning", "CW Pitch", "CW Training", "DC Voltage",
+ "DCS Code", "DCS Reverse", "DTMF A/M", "DTMF Delay", "DTMF Set",
+ "DTMF Speed", "EAI Timer", "Emergency Alarm", "Ext Menu", "FW Key",
+ "Half Deviation", "Home/Reverse", "Home > VFO", "INT Code",
+ "INT Conn Mode", "INT A/M", "INT Set", "INT Key", "INTNET", "Lamp",
+ "LED Light", "Lock", "Moni/T-Call", "Mic Gain", "Memory Display",
+ "Memory Write Mode", "Memory Channel Step", "Memory Name Write",
+ "Memory Protect", "Memory Skip", "Message List", "Message Reg",
+ "Message Set", "On Timer", "Open Message", "Pager Answer Back",
+ "Pager Receive Code", "Pager Transmit Code", "Pager Frequency",
+ "Priority Revert", "Priority Timer", "Password", "PTT Delay",
+ "Repeater Shift Direction", "Repeater Shift", "Receive Mode",
+ "Smart Search", "Save Rx", "Save Tx", "Scan Lamp", "Scan Resume",
+ "Scan Restart", "Speaker Out", "Squelch Level", "Squelch Type",
+ "Squelch S Meter", "Squelch Split Tone", "Step", "Stereo", "Sub Rx",
+ "Temp", "Tone Frequency", "Time Out Timer", "Tone Search Mute",
+ "Tone Search Speed", "VFO Band", "VFO Skip", "Volume Mode", "Wake Up",
+ "Weather Alert" ]
+ rs = RadioSetting("my_key", "My key",
+ RadioSettingValueList(keys, keys[_settings.my_key - 16]))
+ # TODO: fix keys list isnt exactly right order
+ # leave disabled in settings for now
+ # basic.append(rs)
+
+ # sound tab
+
+ sound.append( RadioSetting("band_edge_beep", "Band edge beep",
+ RadioSettingValueBoolean(_settings.band_edge_beep)))
+
+ opts = ["off", "key+scan", "key"]
+ sound.append( RadioSetting("beep_mode", "Beep mode",
+ RadioSettingValueList(opts, opts[_settings.beep_mode])))
+
+ _volumes = self._memobj.volumes
+
+ opts = map(str, range(0,33))
+ sound.append( RadioSetting("speaker_vol", "Speaker volume",
+ RadioSettingValueList(opts, opts[_volumes.speaker])))
+
+ sound.append( RadioSetting("earphone_vol", "Earphone volume",
+ RadioSettingValueList(opts, opts[_volumes.earphone])))
+
+ opts = ["auto", "speaker"]
+ sound.append( RadioSetting("fm_speaker_out", "FM Speaker out",
+ RadioSettingValueList(opts, opts[_settings.fm_speaker_out])))
+
+ opts = ["mono", "stereo"]
+ sound.append( RadioSetting("fm_broadcast_mode", "FM broadcast mode",
+ RadioSettingValueList(opts, opts[_settings.fm_broadcast_mode])))
+
+ opts = map(str, range(16))
+ sound.append( RadioSetting("sql_fm", "Squelch level (FM)",
+ RadioSettingValueList(opts, opts[_settings.sql_fm])))
+
+ opts = map(str, range(9))
+ sound.append( RadioSetting("sql_wfm", "Squelch level (WFM)",
+ RadioSettingValueList(opts, opts[_settings.sql_wfm])))
+
+ opts = map(str, range(16))
+ sound.append( RadioSetting("radio_am_sql", "Squelch level (Broadcast Radio AM)",
+ RadioSettingValueList(opts, opts[_settings.radio_am_sql])))
+
+ opts = map(str, range(9))
+ sound.append( RadioSetting("radio_fm_sql", "Squelch level (Broadcast Radio FM)",
+ RadioSettingValueList(opts, opts[_settings.radio_fm_sql])))
+
+ # dtmf tab
+
+ opts = ["manual", "auto"]
+ dtmf.append( RadioSetting("dtmf_autodialer", "DTMF autodialer mode",
+ RadioSettingValueList(opts, opts[_settings.dtmf_autodialer])))
+
+ opts = ["50", "250", "450", "750", "1000"]
+ dtmf.append( RadioSetting("dtmf_delay", "DTMF delay (ms)",
+ RadioSettingValueList(opts, opts[_settings.dtmf_delay])))
+
+ opts = ["50", "100"]
+ dtmf.append( RadioSetting("dtmf_speed", "DTMF speed (ms)",
+ RadioSettingValueList(opts, opts[_settings.dtmf_speed])))
+
+ opts = map(str, range(10))
+ dtmf.append( RadioSetting("dtmf_chan_active", "DTMF active",
+ RadioSettingValueList(opts, opts[_settings.dtmf_chan_active])))
+
+ for i in range(10):
+ name = "dtmf" + str(i)
+ dtmfsetting = self._memobj.dtmf[i]
+ dtmfstr = ""
+ for c in dtmfsetting.memory:
+ if c < len(DTMFCHARSET):
+ dtmfstr += DTMFCHARSET[c]
+ if CHIRP_DEBUG:
+ print dtmfstr
+ dtmfentry = RadioSettingValueString(0, 16, dtmfstr)
+ dtmfentry.set_charset(DTMFCHARSET + list(" "))
+ rs = RadioSetting(name, name.upper(), dtmfentry)
+ dtmf.append(rs)
+
+ # arts tab
+ arts.append( RadioSetting("arts", "ARTS",
+ RadioSettingValueBoolean(_settings.arts)))
+
+ opts = ["off", "in range", "always"]
+ arts.append( RadioSetting("arts_beep", "ARTS beep",
+ RadioSettingValueList(opts, opts[_settings.arts_beep])))
+
+ opts = ["15", "25"]
+ arts.append( RadioSetting("arts_interval", "ARTS interval",
+ RadioSettingValueList(opts, opts[_settings.arts_interval])))
+
+ arts.append( RadioSetting("arts_cwid_enable", "CW ID",
+ RadioSettingValueBoolean(_settings.arts_cwid_enable)))
+
+ cwid = RadioSettingValueString(0, 16,
+ self._decode_chars(_settings.arts_cwid.get_value()))
+ cwid.set_charset(CHARSET)
+ arts.append( RadioSetting("arts_cwid", "CW ID", cwid ))
+
+ # EAI tab
+
+ eai.append( RadioSetting("emergency_eai", "EAI",
+ RadioSettingValueBoolean(_settings.emergency_eai)))
+
+ opts = [ "interval %dm" % t for t in range(1, 10) ] + \
+ [ "interval %dm" % t for t in range(10, 55, 5) ] + \
+ [ "continuous %dm" % t for t in range(1, 10) ] + \
+ [ "continuous %dm" % t for t in range(10, 55, 5) ]
+
+ eai.append( RadioSetting("emergency_eai_time", "EAI time",
+ RadioSettingValueList(opts, opts[_settings.emergency_eai_time])))
+
+ opts = ["beep", "strobe", "beep+strobe", "beam", "beep+beam", "cw", "beep+cw", "cwt"]
+ eai.append( RadioSetting("emergency_signal", "emergency signal",
+ RadioSettingValueList(opts, opts[_settings.emergency_signal])))
+
+ # msg tab
+
+ opts = ["off", "dc voltage", "message"]
+ msg.append( RadioSetting("openmsg_mode", "Opening message mode",
+ RadioSettingValueList(opts, opts[_settings.openmsg_mode])))
+
+ openmsg = RadioSettingValueString(0, 6,
+ self._decode_chars(_settings.openmsg.get_value()))
+ openmsg.set_charset(CHARSET)
+ msg.append( RadioSetting("openmsg", "Opening Message", openmsg ))
+
+ return top
+
+ def set_settings(self, uisettings):
+ for element in uisettings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
+ if not element.changed():
+ continue
+ try:
+ setting = element.get_name()
+ _settings = self._memobj.settings
+ if re.match('dtmf\d', setting):
+ # set dtmf fields
+ dtmfstr = str(element.value).strip()
+ newval = []
+ for i in range(0,16):
+ if i < len(dtmfstr):
+ newval.append(DTMFCHARSET.index(dtmfstr[i]))
+ else:
+ newval.append(0xFF)
+ if CHIRP_DEBUG:
+ print newval
+ idx = int(setting[-1:])
+ _settings = self._memobj.dtmf[idx]
+ _settings.memory = newval
+ continue
+ if re.match('.*_vol$', setting):
+ # volume fields
+ voltype = re.sub('_vol$','', setting)
+ setattr(self._memobj.volumes, voltype, element.value)
+ continue
+ if setting == "my_key":
+ # my_key is memory is off by 9 from list, beware hacks!
+ opts = element.value.get_options()
+ optsidx = opts.index(element.value.get_value())
+ idx = optsidx + 16
+ setattr(_settings, "my_key", idx)
+ continue
+ oldval = getattr(_settings, setting)
+ newval = element.value
+ if setting == "arts_cwid":
+ newval = self._encode_chars(newval)
+ if setting == "openmsg":
+ newval = self._encode_chars(newval, 6)
+ if CHIRP_DEBUG:
+ print "Setting %s(%s) <= %s" % (setting,
+ oldval, newval)
+ setattr(_settings, setting, newval)
+ except Exception, e:
+ print element.get_name()
+ raise
+
\ No newline at end of file
More information about the chirp_devel
mailing list