def add_radio_setting(radio_setting_group, mem_field, ui_name, option_map, current, doc=None): setting = RadioSetting(mem_field, ui_name, RadioSettingValueMap(option_map, current)) if doc is not None: setting.set_doc(doc) radio_setting_group.append(setting)
def _get_memory(self, number): bit = 1 << (number % 8) byte = int(number / 8) mem = chirp_common.Memory() mem.number = number _mem = self._memobj.memory[number] if number < 200: _usd = self._memobj.used[byte] _skp = self._memobj.skips[byte] else: mem.extd_number = SPECIAL_REV[number] mem.immutable = ["name", "number", "extd_number", "skip"] _usd = self._memobj.used[byte] if (number <= 206) else None _skp = None if _usd is not None and (_usd & bit): mem.empty = True return mem mem.freq = _mem.freq mem.offset = int(_mem.offset) if number < 200: mem.name = str(_mem.name).rstrip() mem.rtone = chirp_common.TONES[_mem.rtone] mem.ctone = chirp_common.TONES[_mem.ctone] mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs] mem.tuning_step = TUNING_STEPS[_mem.tuning_step] mem.mode = MODES[_mem.mode] mem.duplex = DUPLEXES[_mem.duplex] mem.dtcs_polarity = DTCS_POLARITY[_mem.dtcs_polarity] mem.tmode = TMODES[_mem.tmode] mem.power = POWER_LEVELS[_mem.power] # Extras mem.extra = RadioSettingGroup("extra", "Extra") rev = RadioSetting("rev", "Reverse duplex", RadioSettingValueBoolean(bool(_mem.rev))) rev.set_doc("Reverse duplex") mem.extra.append(rev) tx = RadioSetting("tx", "Tx permission", RadioSettingValueBoolean(bool(_mem.tx))) tx.set_doc("Tx permission") mem.extra.append(tx) if _skp is not None: mem.skip = (_skp & bit) and "S" or "" return mem
def _get_memory(self, mem, _mem): mem.freq = int(_mem.freq) * 10 mem.offset = int(_mem.offset) * 10 self._get_duplex(mem, _mem) mem.mode = self.MODES[_mem.mode] if mem.mode == "FM": if _mem.is_fm_narrow == 1: mem.mode = "NFM" mem.tuning_step = self.STEPSFM[_mem.fm_step] elif mem.mode == "AM": mem.tuning_step = self.STEPSAM[_mem.am_step] elif mem.mode == "CW" or mem.mode == "CWR": if _mem.is_cwdig_narrow == 1: mem.mode = "N" + mem.mode mem.tuning_step = self.STEPSSSB[_mem.ssb_step] else: try: mem.tuning_step = self.STEPSSSB[_mem.ssb_step] except IndexError: pass mem.skip = _mem.skip and "S" or "" self._get_tmode(mem, _mem) if _mem.tag_on_off == 1: for i in _mem.name: if i == 0xFF: break if chr(i) in self.CHARSET: mem.name += chr(i) else: # radio have some graphical chars that are not supported # we replace those with a * print "Replacing char %x with *" % i mem.name += "*" mem.name = mem.name.rstrip() else: mem.name = "" mem.extra = RadioSettingGroup("extra", "Extra") ipo = RadioSetting("ipo", "IPO", RadioSettingValueBoolean(bool(_mem.ipo))) ipo.set_doc("Bypass preamp") mem.extra.append(ipo) att = RadioSetting("att", "ATT", RadioSettingValueBoolean(bool(_mem.att))) att.set_doc("10dB front end attenuator") mem.extra.append(att) return mem
def _get_memory(self, mem, _mem): mem.freq = int(_mem.freq) * 10 mem.offset = int(_mem.offset) * 10 self._get_duplex(mem, _mem) mem.mode = self.MODES[_mem.mode] if mem.mode == "FM": if _mem.is_fm_narrow == 1: mem.mode = "NFM" mem.tuning_step = self.STEPSFM[_mem.fm_step] elif mem.mode == "AM": mem.tuning_step = self.STEPSAM[_mem.am_step] elif mem.mode == "CW" or mem.mode == "CWR": if _mem.is_cwdig_narrow == 1: mem.mode = "N" + mem.mode mem.tuning_step = self.STEPSSSB[_mem.ssb_step] else: try: mem.tuning_step = self.STEPSSSB[_mem.ssb_step] except IndexError: pass mem.skip = _mem.skip and "S" or "" self._get_tmode(mem, _mem) if _mem.tag_on_off == 1: for i in _mem.name: if i == 0xFF: break if chr(i) in self.CHARSET: mem.name += chr(i) else: # radio have some graphical chars that are not supported # we replace those with a * LOG.info("Replacing char %x with *" % i) mem.name += "*" mem.name = mem.name.rstrip() else: mem.name = "" mem.extra = RadioSettingGroup("extra", "Extra") ipo = RadioSetting("ipo", "IPO", RadioSettingValueBoolean(bool(_mem.ipo))) ipo.set_doc("Bypass preamp") mem.extra.append(ipo) att = RadioSetting("att", "ATT", RadioSettingValueBoolean(bool(_mem.att))) att.set_doc("10dB front end attenuator") mem.extra.append(att) return mem
def get_memory(self, number): _mem = self._memobj.memory[number] _flag = self._memobj.flags[number] mem = chirp_common.Memory() mem.number = number if _flag.empty: mem.empty = True return mem mult = int(TUNING_STEPS[_mem.tuning_step] * 1000) mem.freq = (_mem.frequency * mult) mem.offset = (_mem.offset * mult) mem.name = str(_mem.name).rstrip() mem.rtone = chirp_common.TONES[_mem.repeater_tone] mem.ctone = chirp_common.TONES[_mem.ctcss_tone] mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs_code] mem.tuning_step = TUNING_STEPS[_mem.tuning_step] mem.tmode = TONE_MODES[_mem.tone_mode] mem.mode = "NFM" if _mem.mode_narrow else "FM" mem.dtcs_polarity = DTCS_POLARITY[_mem.dtcs_polarity] mem.duplex = DUPLEX[_mem.duplex] mem.skip = "S" if _flag.skip else "" mem.power = POWER_LEVELS[_mem.power] # Reverse duplex mem.extra = RadioSettingGroup("extra", "Extra") rev = RadioSetting("reverse_duplex", "Reverse duplex", RadioSettingValueBoolean(bool(_mem.reverse_duplex))) rev.set_doc("Reverse duplex") mem.extra.append(rev) # Memory display style opt = ["Frequency", "Label"] dsp = RadioSetting("display_style", "Display style", RadioSettingValueList(opt, opt[_mem.display_style])) dsp.set_doc("Memory display style") mem.extra.append(dsp) return mem
def get_memory(self, number): _mem = self._memobj.memory[number] _flag = self._memobj.flags[number] mem = chirp_common.Memory() mem.number = number if _flag.empty: mem.empty = True return mem mult = int(TUNING_STEPS[_mem.tuning_step] * 1000) mem.freq = (_mem.frequency * mult) mem.offset = (_mem.offset * mult) mem.name = str(_mem.name).rstrip() mem.rtone = chirp_common.TONES[_mem.repeater_tone] mem.ctone = chirp_common.TONES[_mem.ctcss_tone] mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs_code] mem.tuning_step = TUNING_STEPS[_mem.tuning_step] mem.tmode = TONE_MODES[_mem.tone_mode] mem.mode = "NFM" if _mem.mode_narrow else "FM" mem.dtcs_polarity = DTCS_POLARITY[_mem.dtcs_polarity] mem.duplex = DUPLEX[_mem.duplex] mem.skip = "S" if _flag.skip else "" # Reverse duplex mem.extra = RadioSettingGroup("extra", "Extra") rev = RadioSetting("reverse_duplex", "Reverse duplex", RadioSettingValueBoolean(bool(_mem.reverse_duplex))) rev.set_doc("Reverse duplex") mem.extra.append(rev) # Memory display style opt = ["Frequency", "Label"] dsp = RadioSetting("display_style", "Display style", RadioSettingValueList(opt, opt[_mem.display_style])) dsp.set_doc("Memory display style") mem.extra.append(dsp) return mem
def get_settings(self): _settings = self._memobj.settings _info = self._memobj.info _bandlimits = self._memobj.bandlimits basic = RadioSettingGroup("basic", "Basic") info = RadioSettingGroup("info", "Model Info") top = RadioSettings(basic, info) basic.append(RadioSetting( "beep", "Beep", RadioSettingValueBoolean(_settings.beep))) basic.append(RadioSetting( "beep_vol", "Beep Volume", RadioSettingValueInteger(0, 15, _settings.beep_vol))) basic.append(RadioSetting( "keylock", "Key Lock", RadioSettingValueBoolean(_settings.keylock))) basic.append(RadioSetting( "ani_display", "ANI Display", RadioSettingValueBoolean(_settings.ani_display))) basic.append(RadioSetting( "auto_xfer", "Auto Transfer", RadioSettingValueBoolean(_settings.auto_xfer))) basic.append(RadioSetting( "auto_contact", "Auto Contact Always Remind", RadioSettingValueBoolean(_settings.auto_contact))) basic.append(RadioSetting( "auto_am", "Auto AM", RadioSettingValueBoolean(_settings.auto_am))) basic.append(RadioSetting( "left_sql", "Left Squelch", RadioSettingValueList( SQLPRESET, SQLPRESET[_settings.left_sql]))) basic.append(RadioSetting( "right_sql", "Right Squelch", RadioSettingValueList( SQLPRESET, SQLPRESET[_settings.right_sql]))) # basic.append(RadioSetting("apo", "Auto Power off (0.1h)", # RadioSettingValueInteger(0, 20, _settings.apo))) opts = ["Off"] + ["%0.1f" % (t / 10.0) for t in range(1, 21, 1)] basic.append(RadioSetting( "apo", "Auto Power off (Hours)", RadioSettingValueList(opts, opts[_settings.apo]))) opts = ["Off", "1", "2", "3", "Full"] basic.append(RadioSetting( "backlight", "Display Backlight", RadioSettingValueList(opts, opts[_settings.backlight]))) opts = ["Off", "Right", "Left", "Both"] basic.append(RadioSetting( "pttlock", "PTT Lock", RadioSettingValueList(opts, opts[_settings.pttlock]))) opts = ["Manual", "Auto"] basic.append(RadioSetting( "hyper_chan", "Hyper Channel", RadioSettingValueList(opts, opts[_settings.hyper_chan]))) opts = ["Key 1", "Key 2"] basic.append(RadioSetting( "right_func_key", "Right Function Key", RadioSettingValueList(opts, opts[_settings.right_func_key]))) opts = ["1000Hz", "1450Hz", "1750Hz", "2100Hz"] basic.append(RadioSetting( "tbst_freq", "Tone Burst Frequency", RadioSettingValueList(opts, opts[_settings.tbst_freq]))) opts = ["Off", "TX", "RX", "TX RX"] basic.append(RadioSetting( "mute_mode", "Mute Mode", RadioSettingValueList(opts, opts[_settings.mute_mode]))) opts = ["MEM", "MSM"] scanmode = RadioSetting( "scan_mode", "Scan Mode", RadioSettingValueList(opts, opts[_settings.scan_mode])) scanmode.set_doc("MEM = Normal scan, bypass channels marked skip. " " MSM = Scan only channels marked priority.") basic.append(scanmode) opts = ["TO", "CO"] basic.append(RadioSetting( "scan_resume", "Scan Resume", RadioSettingValueList(opts, opts[_settings.scan_resume]))) opts = ["%0.1f" % (t / 10.0) for t in range(0, 51, 1)] basic.append(RadioSetting( "exit_delay", "Span Transit Exit Delay", RadioSettingValueList(opts, opts[_settings.exit_delay]))) basic.append(RadioSetting( "tot", "Time Out Timer (minutes)", RadioSettingValueInteger(0, 30, _settings.tot))) basic.append(RadioSetting( "tot_alert", "Time Out Timer Pre Alert(seconds)", RadioSettingValueInteger(0, 15, _settings.tot_alert))) basic.append(RadioSetting( "tot_rekey", "Time Out Rekey (seconds)", RadioSettingValueInteger(0, 15, _settings.tot_rekey))) basic.append(RadioSetting( "tot_reset", "Time Out Reset(seconds)", RadioSettingValueInteger(0, 15, _settings.tot_reset))) basic.append(RadioSetting( "p1", "P1 Function", RadioSettingValueList(MICKEYFUNC, MICKEYFUNC[_settings.p1]))) basic.append(RadioSetting( "p2", "P2 Function", RadioSettingValueList(MICKEYFUNC, MICKEYFUNC[_settings.p2]))) basic.append(RadioSetting( "p3", "P3 Function", RadioSettingValueList(MICKEYFUNC, MICKEYFUNC[_settings.p3]))) basic.append(RadioSetting( "p4", "P4 Function", RadioSettingValueList(MICKEYFUNC, MICKEYFUNC[_settings.p4]))) # opts = ["0", "1"] # basic.append(RadioSetting("x", "Desc", # RadioSettingValueList(opts, opts[_settings.x]))) def _filter(name): filtered = "" for char in str(name): if char in chirp_common.CHARSET_ASCII: filtered += char else: filtered += " " return filtered rsvs = RadioSettingValueString(0, 8, _filter(_info.sn)) rsvs.set_mutable(False) rs = RadioSetting("sn", "Serial Number", rsvs) info.append(rs) rsvs = RadioSettingValueString(0, 8, _filter(_info.model)) rsvs.set_mutable(False) rs = RadioSetting("model", "Model Name", rsvs) info.append(rs) rsvs = RadioSettingValueString(0, 16, _filter(_info.code)) rsvs.set_mutable(False) rs = RadioSetting("code", "Model Code", rsvs) info.append(rs) progdate = "%d/%d/%d" % (_info.prog_mon, _info.prog_day, _info.prog_yr) rsvs = RadioSettingValueString(0, 10, progdate) rsvs.set_mutable(False) rs = RadioSetting("progdate", "Last Program Date", rsvs) info.append(rs) # 9 band limits for i in range(0, 9): objname = BANDS[i] + "lorx" objnamepp = BANDS[i] + " Rx Start" # rsv = RadioSettingValueInteger(0, 100000000, # int(_bandlimits[i].lorx)) rsv = RadioSettingValueString( 0, 10, format_freq(int(_bandlimits[i].lorx)*10)) rsv.set_mutable(False) rs = RadioSetting(objname, objnamepp, rsv) info.append(rs) objname = BANDS[i] + "hirx" objnamepp = BANDS[i] + " Rx end" rsv = RadioSettingValueString( 0, 10, format_freq(int(_bandlimits[i].hirx)*10)) rsv.set_mutable(False) rs = RadioSetting(objname, objnamepp, rsv) info.append(rs) objname = BANDS[i] + "lotx" objnamepp = BANDS[i] + " Tx Start" rsv = RadioSettingValueString( 0, 10, format_freq(int(_bandlimits[i].lotx)*10)) rsv.set_mutable(False) rs = RadioSetting(objname, objnamepp, rsv) info.append(rs) objname = BANDS[i] + "hitx" objnamepp = BANDS[i] + " Tx end" rsv = RadioSettingValueString( 0, 10, format_freq(int(_bandlimits[i].hitx)*10)) rsv.set_mutable(False) rs = RadioSetting(objname, objnamepp, rsv) info.append(rs) return top
def get_memory(self, number): _mem = self._memobj.memory[number - 1] mem = chirp_common.Memory() mem.number = number mem.empty = not self.get_active("chan_active", number) if mem.empty: return mem mem.freq = int(_mem.rx_freq) * 10 txfreq = int(_mem.tx_freq) * 10 if txfreq == mem.freq: mem.duplex = "" elif txfreq == 0: mem.duplex = "off" mem.offset = 0 elif abs(txfreq - mem.freq) > 70000000: mem.duplex = "split" mem.offset = txfreq elif txfreq < mem.freq: mem.duplex = "-" mem.offset = mem.freq - txfreq elif txfreq > mem.freq: mem.duplex = "+" mem.offset = txfreq - mem.freq mem.dtcs_polarity = DTCS_POLARITY[_mem.dtcs_pol] mem.tmode = TMODES[int(_mem.tmode)] mem.ctone = mem.rtone = int(_mem.ctcss) / 10.0 mem.dtcs = int(_mem.dtcs) mem.name = str(_mem.name) mem.name = mem.name.replace("\xFF", " ").rstrip() if not self.get_active("scan_enable", number): mem.skip = "S" elif self.get_active("priority", number): mem.skip = "P" else: mem.skip = "" mem.mode = _mem.am and "AM" or MODES[int(_mem.fmdev)] mem.power = POWER_LEVELS[_mem.power] mem.tuning_step = STEPS[_mem.step] mem.extra = RadioSettingGroup("extra", "Extra") opts = ["Frequency", "Name"] display = RadioSetting( "display", "Display", RadioSettingValueList(opts, opts[_mem.display])) mem.extra.append(display) bclo = RadioSetting( "bclo", "Busy Lockout", RadioSettingValueList(BUSY_LOCK, BUSY_LOCK[_mem.bclo])) bclo.set_doc("Busy Lockout") mem.extra.append(bclo) emphasis = RadioSetting( "emphasis", "Emphasis", RadioSettingValueBoolean(bool(_mem.emphasis))) emphasis.set_doc("Boosts 300Hz to 2500Hz mic response") mem.extra.append(emphasis) compand = RadioSetting( "compand", "Compand", RadioSettingValueBoolean(bool(_mem.compand))) compand.set_doc("Compress Audio") mem.extra.append(compand) BeatShift = RadioSetting( "BeatShift", "BeatShift", RadioSettingValueBoolean(bool(_mem.BeatShift))) BeatShift.set_doc("Beat Shift") mem.extra.append(BeatShift) TalkAround = RadioSetting( "talkaround", "Talk Around", RadioSettingValueBoolean(bool(_mem.talkaround))) TalkAround.set_doc("Simplex mode when out of range of repeater") mem.extra.append(TalkAround) scramb = RadioSetting( "scramb", "Scramble", RadioSettingValueBoolean(bool(_mem.scramb))) scramb.set_doc("Frequency inversion Scramble") mem.extra.append(scramb) return mem
def get_memory(self, number): bitpos = (1 << ((number - 1) % 8)) bytepos = ((number - 1) / 8) LOG.debug("bitpos %s" % bitpos) LOG.debug("bytepos %s" % bytepos) _mem = self._memobj.memory[number - 1] mem = chirp_common.Memory() mem.number = number mem.freq = int(_mem.rx_freq) * 10 txfreq = int(_mem.tx_freq) * 10 if txfreq == mem.freq: mem.duplex = "" elif txfreq == 0: mem.duplex = "off" mem.offset = 0 # 166666665*10 is the equivalent for FF FF FF FF # stored in the TX field elif txfreq == 1666666650: mem.duplex = "off" mem.offset = 0 elif txfreq < mem.freq: mem.duplex = "-" mem.offset = mem.freq - txfreq elif txfreq > mem.freq: mem.duplex = "+" mem.offset = txfreq - mem.freq # get bandwith FM or NFM mem.mode = MODE_LIST[_mem.mode] # tone data txtone = self.decode_tone(_mem.tx_tone) rxtone = self.decode_tone(_mem.rx_tone) chirp_common.split_tone_decode(mem, txtone, rxtone) mem.power = POWER_LEVELS[_mem.power] # add extra channel settings to the OTHER tab of the properties # extra settings are unfortunately inverted mem.extra = RadioSettingGroup("extra", "Extra") scanadd = RadioSetting("scanadd", "Scan Add", RadioSettingValueBoolean( not bool(_mem.scanadd))) scanadd.set_doc("Add channel for scanning") mem.extra.append(scanadd) bclo = RadioSetting("bclo", "Busy Lockout", RadioSettingValueBoolean(not bool(_mem.bclo))) bclo.set_doc("Busy Lockout") mem.extra.append(bclo) scramb = RadioSetting("scramb", "Scramble", RadioSettingValueBoolean(not bool(_mem.scramb))) scramb.set_doc("Scramble Audio Signal") mem.extra.append(scramb) compand = RadioSetting("compand", "Compander", RadioSettingValueBoolean( not bool(_mem.compand))) compand.set_doc("Compress Audio for TX") mem.extra.append(compand) return mem
def _get_extra(self, _mem, mem): mem.extra = RadioSettingGroup("extra", "Extra") dig = RadioSetting("isdigital", "Digital", RadioSettingValueBoolean(bool(_mem.isdigital))) dig.set_doc("Digital/Packet mode enabled") mem.extra.append(dig)
def get_memory(self, number): LOG.debug("Getting %i" % number) f = self._classes["mem"]() if self._rf.has_bank: ch, bnk = self.mem_to_ch_bnk(number) f.set_location(ch, bnk) LOG.debug("Bank %i, Channel %02i" % (bnk, ch)) else: f.set_location(number) self._send_frame(f) mem = chirp_common.Memory() mem.number = number mem.immutable = [] f = self._recv_frame(f) if len(f.get_data()) == 0: raise errors.RadioError("Radio reported error") if f.get_data() and f.get_data()[-1] == "\xFF": mem.empty = True LOG.debug("Found %i empty" % mem.number) return mem memobj = f.get_obj() LOG.debug(repr(memobj)) try: if memobj.skip == 1: mem.skip = "" else: mem.skip = "S" except AttributeError: pass mem.freq = int(memobj.freq) try: mem.mode = self._MODES[memobj.mode] # We do not know what a variety of the positions between # PSK and DV mean, so let's behave as if those values # are not set to maintain consistency between known-unknown # values and unknown-unknown ones. if mem.mode is None: raise IndexError(memobj.mode) except IndexError: LOG.error( "Bank %s location %s is set for mode %s, but no known " "mode matches that value.", int(memobj.bank), int(memobj.number), repr(memobj.mode), ) raise if self._rf.has_name: mem.name = str(memobj.name).rstrip() if self._rf.valid_tmodes: mem.tmode = self._rf.valid_tmodes[memobj.tmode] if self._rf.has_dtcs_polarity: if memobj.dtcs_polarity == 0x11: mem.dtcs_polarity = "RR" elif memobj.dtcs_polarity == 0x10: mem.dtcs_polarity = "RN" elif memobj.dtcs_polarity == 0x01: mem.dtcs_polarity = "NR" else: mem.dtcs_polarity = "NN" if self._rf.has_dtcs: mem.dtcs = bitwise.bcd_to_int(memobj.dtcs) if "Tone" in self._rf.valid_tmodes: mem.rtone = int(memobj.rtone) / 10.0 if "TSQL" in self._rf.valid_tmodes and self._rf.has_ctone: mem.ctone = int(memobj.ctone) / 10.0 if self._rf.valid_duplexes: mem.duplex = self._rf.valid_duplexes[memobj.duplex] if self._rf.can_odd_split and memobj.spl: mem.duplex = "split" mem.offset = int(memobj.freq_tx) mem.immutable = [] else: mem.immutable = ["offset"] mem.extra = RadioSettingGroup("extra", "Extra") try: dig = RadioSetting("dig", "Digital", RadioSettingValueBoolean(bool(memobj.dig))) except AttributeError: pass else: dig.set_doc("Enable digital mode") mem.extra.append(dig) options = ["Wide", "Mid", "Narrow"] try: fil = RadioSetting( "filter", "Filter", RadioSettingValueList(options, options[memobj.filter - 1])) except AttributeError: pass else: fil.set_doc("Filter settings") mem.extra.append(fil) return mem
def get_settings(self): def _get(cmd): return self._cmd('%s?' % cmd, 0).split(':')[1].strip() cw = RadioSettingGroup('beacon', 'Beacon Settings') cl = RadioSetting('CL%15s', 'CW Callsign', RadioSettingValueString(0, 15, _get('CL'))) cw.append(cl) cf = RadioSetting('CF%4i', 'CW Audio Frequency', RadioSettingValueInteger(400, 1300, int(_get('CF')))) cw.append(cf) cs = RadioSetting('CS%02i', 'CW Speed', RadioSettingValueInteger(5, 25, int(_get('CS')))) cw.append(cs) bc = RadioSetting('BC%03i', 'CW Beacon Timer', RadioSettingValueInteger(0, 600, int(_get('BC')))) cw.append(bc) bm = RadioSetting('BM%15s', 'Beacon Message', RadioSettingValueString(0, 15, _get('BM'))) cw.append(bm) bt = RadioSetting('BT%03i', 'Beacon Timer', RadioSettingValueInteger(0, 600, int(_get('BT')))) cw.append(bt) it = RadioSetting('IT%03i', 'CW ID Timer', RadioSettingValueInteger(0, 500, int(_get('IT')))) cw.append(it) tg = RadioSetting('TG%7s', 'CW Timeout Message', RadioSettingValueString(0, 7, _get('TG'))) cw.append(tg) io = RadioSettingGroup('io', 'IO') af = RadioSetting('AF%i', 'Arduino LPF', RadioSettingValueBoolean(_get('AF') == 'ON')) io.append(af) input_pin = ['OFF', 'SQ OPEN', 'PTT'] ai = RadioSetting( 'AI%i', 'Arduino Input Pin', RadioSettingValueList(input_pin, input_pin[int(_get('AI'))])) io.append(ai) output_pin = [ 'LOW', 'SQ OPEN', 'DTMF DETECT', 'TX ON', 'CTCSS DET', 'HIGH' ] ao = RadioSetting( 'AO%i', 'Arduino Output Pin', RadioSettingValueList(output_pin, output_pin[int(_get('AO'))])) io.append(ao) bauds = [str(x) for x in BAUDS] b1 = RadioSetting('B1%i', 'Arduino Baudrate', RadioSettingValueList(bauds, bauds[int(_get('B1'))])) io.append(b1) b2 = RadioSetting('B2%i', 'Main Baudrate', RadioSettingValueList(bauds, bauds[int(_get('B2'))])) io.append(b2) dtmf = RadioSettingGroup('dtmf', 'DTMF Settings') dd = RadioSetting('DD%04i', 'DTMF Tone Duration', RadioSettingValueInteger(50, 2000, int(_get('DD')))) dtmf.append(dd) dr = RadioSetting('DR%i', 'DTMF Tone Detector', RadioSettingValueBoolean(_get('DR') == 'ON')) dtmf.append(dr) gt = RadioSetting('GT%02i', 'DTMF/CW Tone Gain', RadioSettingValueInteger(0, 15, int(_get('GT')))) dtmf.append(gt) sd = RadioSetting('SD%i', 'DTMF/CW Side Tone', RadioSettingValueBoolean(_get('SD') == 'ON')) dtmf.append(sd) general = RadioSettingGroup('general', 'General') dp = RadioSetting('DP%i', 'Pre-Emphasis', RadioSettingValueBoolean(_get('DP') == 'ON')) general.append(dp) fw = RadioSetting('_fw', 'Firmware Version', RadioSettingValueString(0, 20, _get('FW'))) general.append(fw) gm = RadioSetting('GM%02i', 'Mic Gain', RadioSettingValueInteger(0, 15, int(_get('GM')))) general.append(gm) hp = RadioSetting('HP%i', 'Audio High-Pass Filter', RadioSettingValueBoolean(_get('HP') == 'ON')) general.append(hp) ht = RadioSetting('HT%04i', 'Hang Time', RadioSettingValueInteger(0, 5000, int(_get('HT')))) general.append(ht) ledmode = ['OFF', 'ON', 'SQ OPEN', 'BATT CHG STAT'] ld = RadioSetting( 'LD%i', 'LED Mode', RadioSettingValueList(ledmode, ledmode[int(_get('LD'))])) general.append(ld) sq = RadioSetting('SQ%i', 'Squelch Level', RadioSettingValueInteger(0, 9, int(_get('SQ')))) general.append(sq) to = RadioSetting('TO%03i', 'Timeout Timer', RadioSettingValueInteger(0, 600, int(_get('TO')))) general.append(to) vu = RadioSetting('VU%02i', 'Receiver Audio Volume', RadioSettingValueInteger(0, 39, int(_get('VU')))) general.append(vu) rc = RadioSetting('RC%i', 'Current Channel', RadioSettingValueInteger(0, 9, 0)) rc.set_doc('Choosing one of these values causes the radio ' 'to change to the selected channel. The radio ' 'cannot tell CHIRP what channel is selected.') general.append(rc) return RadioSettings(general, cw, io, dtmf)
def get_memory(self, number): bitpos = (1 << ((number - 1) % 8)) bytepos = ((number - 1) / 8) LOG.debug("bitpos %s" % bitpos) LOG.debug("bytepos %s" % bytepos) _mem = self._memobj.memory[number - 1] mem = chirp_common.Memory() mem.number = number mem.freq = int(_mem.rx_freq) * 10 txfreq = int(_mem.tx_freq) * 10 if txfreq == mem.freq: mem.duplex = "" elif txfreq == 0: mem.duplex = "off" mem.offset = 0 # 166666665*10 is the equivalent for FF FF FF FF # stored in the TX field elif txfreq == 1666666650: mem.duplex = "off" mem.offset = 0 elif txfreq < mem.freq: mem.duplex = "-" mem.offset = mem.freq - txfreq elif txfreq > mem.freq: mem.duplex = "+" mem.offset = txfreq - mem.freq # get bandwith FM or NFM mem.mode = MODE_LIST[_mem.mode] # tone data txtone = self.decode_tone(_mem.tx_tone) rxtone = self.decode_tone(_mem.rx_tone) chirp_common.split_tone_decode(mem, txtone, rxtone) mem.power = POWER_LEVELS[_mem.power] # add extra channel settings to the OTHER tab of the properties # extra settings are unfortunately inverted mem.extra = RadioSettingGroup("extra", "Extra") scanadd = RadioSetting( "scanadd", "Scan Add", RadioSettingValueBoolean(not bool(_mem.scanadd))) scanadd.set_doc("Add channel for scanning") mem.extra.append(scanadd) bclo = RadioSetting("bclo", "Busy Lockout", RadioSettingValueBoolean(not bool(_mem.bclo))) bclo.set_doc("Busy Lockout") mem.extra.append(bclo) scramb = RadioSetting("scramb", "Scramble", RadioSettingValueBoolean(not bool(_mem.scramb))) scramb.set_doc("Scramble Audio Signal") mem.extra.append(scramb) compand = RadioSetting( "compand", "Compander", RadioSettingValueBoolean(not bool(_mem.compand))) compand.set_doc("Compress Audio for TX") mem.extra.append(compand) return mem
def _get_zones(self): zones = RadioSettingGroup('zones', 'Zones') zone_count = RadioSetting('_zonecount', 'Number of Zones', RadioSettingValueInteger( 1, 128, len(self._zones))) zone_count.set_doc('Number of zones in the radio. ' 'Requires a save and re-load of the ' 'file to take effect. Reducing this number ' 'will DELETE memories in affected zones!') zones.append(zone_count) for i in range(len(self._zones)): zone = RadioSettingGroup('zone%i' % i, 'Zone %i' % (i + 1)) _zone = getattr(self._memobj, 'zone%i' % i).zoneinfo _name = str(_zone.name).rstrip('\x00') name = RadioSetting('name%i' % i, 'Name', RadioSettingValueString(0, 12, _name)) zone.append(name) def apply_timer(setting, key): val = int(setting.value) if val == 0: val = 0xFFFF setattr(_zone, key, val) def collapse(val): val = int(val) if val == 0xFFFF: val = 0 return val timer = RadioSetting( 'timeout', 'Time-out Timer', RadioSettingValueInteger(15, 1200, collapse(_zone.timeout))) timer.set_apply_callback(apply_timer, 'timeout') zone.append(timer) timer = RadioSetting( 'tot_alert', 'TOT Pre-Alert', RadioSettingValueInteger(0, 10, collapse(_zone.tot_alert))) timer.set_apply_callback(apply_timer, 'tot_alert') zone.append(timer) timer = RadioSetting( 'tot_rekey', 'TOT Re-Key Time', RadioSettingValueInteger(0, 60, collapse(_zone.tot_rekey))) timer.set_apply_callback(apply_timer, 'tot_rekey') zone.append(timer) timer = RadioSetting( 'tot_reset', 'TOT Reset Time', RadioSettingValueInteger(0, 15, collapse(_zone.tot_reset))) timer.set_apply_callback(apply_timer, 'tot_reset') zone.append(timer) zone.append(self._inverted_flag_setting( 'bcl_override', 'BCL Override', _zone)) zones.append(zone) return zones
def get_settings(self): def _get(cmd): return self._cmd('%s?' % cmd, 0).split(':')[1].strip() cw = RadioSettingGroup('beacon', 'Beacon Settings') cl = RadioSetting('CL%15s', 'CW Callsign', RadioSettingValueString(0, 15, _get('CL'))) cw.append(cl) cf = RadioSetting('CF%4i', 'CW Audio Frequency', RadioSettingValueInteger(400, 1300, int(_get('CF')))) cw.append(cf) cs = RadioSetting('CS%02i', 'CW Speed', RadioSettingValueInteger(5, 25, int(_get('CS')))) cw.append(cs) bc = RadioSetting('BC%03i', 'CW Beacon Timer', RadioSettingValueInteger(0, 600, int(_get('BC')))) cw.append(bc) bm = RadioSetting('BM%15s', 'Beacon Message', RadioSettingValueString(0, 15, _get('BM'))) cw.append(bm) bt = RadioSetting('BT%03i', 'Beacon Timer', RadioSettingValueInteger(0, 600, int(_get('BT')))) cw.append(bt) it = RadioSetting('IT%03i', 'CW ID Timer', RadioSettingValueInteger(0, 500, int(_get('IT')))) cw.append(it) tg = RadioSetting('TG%7s', 'CW Timeout Message', RadioSettingValueString(0, 7, _get('TG'))) cw.append(tg) io = RadioSettingGroup('io', 'IO') af = RadioSetting('AF%i', 'Arduino LPF', RadioSettingValueBoolean(_get('AF') == 'ON')) io.append(af) input_pin = ['OFF', 'SQ OPEN', 'PTT'] ai = RadioSetting('AI%i', 'Arduino Input Pin', RadioSettingValueList( input_pin, input_pin[int(_get('AI'))])) io.append(ai) output_pin = ['LOW', 'SQ OPEN', 'DTMF DETECT', 'TX ON', 'CTCSS DET', 'HIGH'] ao = RadioSetting('AO%i', 'Arduino Output Pin', RadioSettingValueList( output_pin, output_pin[int(_get('AO'))])) io.append(ao) bauds = [str(x) for x in BAUDS] b1 = RadioSetting('B1%i', 'Arduino Baudrate', RadioSettingValueList( bauds, bauds[int(_get('B1'))])) io.append(b1) b2 = RadioSetting('B2%i', 'Main Baudrate', RadioSettingValueList( bauds, bauds[int(_get('B2'))])) io.append(b2) dtmf = RadioSettingGroup('dtmf', 'DTMF Settings') dd = RadioSetting('DD%04i', 'DTMF Tone Duration', RadioSettingValueInteger(50, 2000, int(_get('DD')))) dtmf.append(dd) dr = RadioSetting('DR%i', 'DTMF Tone Detector', RadioSettingValueBoolean(_get('DR') == 'ON')) dtmf.append(dr) gt = RadioSetting('GT%02i', 'DTMF/CW Tone Gain', RadioSettingValueInteger(0, 15, int(_get('GT')))) dtmf.append(gt) sd = RadioSetting('SD%i', 'DTMF/CW Side Tone', RadioSettingValueBoolean(_get('SD') == 'ON')) dtmf.append(sd) general = RadioSettingGroup('general', 'General') dp = RadioSetting('DP%i', 'Pre-Emphasis', RadioSettingValueBoolean(_get('DP') == 'ON')) general.append(dp) fw = RadioSetting('_fw', 'Firmware Version', RadioSettingValueString(0, 20, _get('FW'))) general.append(fw) gm = RadioSetting('GM%02i', 'Mic Gain', RadioSettingValueInteger(0, 15, int(_get('GM')))) general.append(gm) hp = RadioSetting('HP%i', 'Audio High-Pass Filter', RadioSettingValueBoolean(_get('HP') == 'ON')) general.append(hp) ht = RadioSetting('HT%04i', 'Hang Time', RadioSettingValueInteger(0, 5000, int(_get('HT')))) general.append(ht) ledmode = ['OFF', 'ON', 'SQ OPEN', 'BATT CHG STAT'] ld = RadioSetting('LD%i', 'LED Mode', RadioSettingValueList( ledmode, ledmode[int(_get('LD'))])) general.append(ld) sq = RadioSetting('SQ%i', 'Squelch Level', RadioSettingValueInteger(0, 9, int(_get('SQ')))) general.append(sq) to = RadioSetting('TO%03i', 'Timeout Timer', RadioSettingValueInteger(0, 600, int(_get('TO')))) general.append(to) vu = RadioSetting('VU%02i', 'Receiver Audio Volume', RadioSettingValueInteger(0, 39, int(_get('VU')))) general.append(vu) rc = RadioSetting('RC%i', 'Current Channel', RadioSettingValueInteger(0, 9, 0)) rc.set_doc('Choosing one of these values causes the radio ' 'to change to the selected channel. The radio ' 'cannot tell CHIRP what channel is selected.') general.append(rc) return RadioSettings(general, cw, io, dtmf)