# HG changeset patch # User DanClemmensen DanClemmensen@gmail.com # Date 1551145350 28800 # Mon Feb 25 17:42:30 2019 -0800 # Node ID b5d1b0e834e6e5fe6ed9b592d68979738fbea404 # Parent d34d952552de214669f517c3aa0a1a0474236dcf [ft4] compander, 6.25 suppress, freq range fix [#4787] a few fixups that dont fall into other categories. the US fersons (FT-4XR and FT65R) don't allow the 6.25 KHz frequency step. The FT-65 has a feature the FT-4 lacks (compander). The code had a leftover "valid_frequencies statement.
diff -r d34d952552de -r b5d1b0e834e6 chirp/drivers/ft4.py --- a/chirp/drivers/ft4.py Mon Feb 25 17:11:28 2019 -0800 +++ b/chirp/drivers/ft4.py Mon Feb 25 17:42:30 2019 -0800 @@ -442,7 +442,11 @@ POWER_LEVELS = [chirp_common.PowerLevel("High", watts=5.0), chirp_common.PowerLevel("Mid", watts=2.5), chirp_common.PowerLevel("Low", watts=0.5)] -STEPS = [0, 5.0, 6.25, 10.0, 12.5, 15.0, 20.0, 25.0, 50.0, 100.0] + +# these steps encode to 0-9 on all radios, but encoding #2 is disallowed +# on the US versions (FT-4XR) +STEP_CODE = [0, 5.0, 6.25, 10.0, 12.5, 15.0, 20.0, 25.0, 50.0, 100.0] + TONE_MODES = ["", "Tone", "TSQL", "DTCS", "DTCS-R", "TSQL-R", "Cross"] CROSS_MODES = ["DTCS->", "DTCS->DTCS"] # only the extras we need
@@ -489,21 +493,6 @@ ] EPCS_CODES = [format(flt) for flt in [0] + TONE_MAP[1:]]
-# names for the setmode function for the programmable keys. Mode zero means -# that the key is programmed for a memory not a setmode. -SETMODES = [ - "mem", "apo", "ar bep", "ar int", "beclo", - "beep", "bell", "cw id", "cw wrt", "de vlt", - "dcs cod", "dtc dly", "dtc_set", "dtc spd", "edg bep", - "lamp", "ledbsy", "led tx", "lock", "m/t-cl", - "mem.del", "mem.tag", "pag.abk", "pag.cdr", "pag.cdt", - "pri rvt", "pswd.on", "pswdwt", "rf sql", "rpt ars", - "rpt frq", "rpt sft", "rxsave", "scan.lamp", "scan.rs", - "skip", "sql.typ", "step", "tn freq", "tot", - "tx pwr", "tx save", "vfo spl", "vox", "wfm.rcv", - "wx.alert" - ] -
class YaesuSC35GenericRadio(chirp_common.CloneModeRadio, chirp_common.ExperimentalRadio): @@ -523,7 +512,7 @@ rp = chirp_common.RadioPrompts() rp.experimental = ( 'Tested only by the developer and only on a single radio.\n' - ' Proceed at your own risk!' + 'Proceed at your own risk!' )
rp.pre_download = "".join([ @@ -548,7 +537,7 @@ rf.valid_tmodes = TONE_MODES rf.valid_cross_modes = CROSS_MODES rf.valid_power_levels = POWER_LEVELS - rf.valid_tuning_steps = STEPS + rf.valid_tuning_steps = self.legal_steps rf.valid_skips = SKIPS rf.valid_characters = CHARSET rf.valid_name_length = self.namelen @@ -578,8 +567,6 @@ def sync_out(self): try: do_upload(self) - except errors.RadioError: - raise except Exception as e: raise errors.RadioError("Failed to communicate with radio: %s" % e)
@@ -590,7 +577,7 @@ # The few that are more complicated use these handlers instead.
# callback for setting byte arrays (DTMF[0-9], passwd, and CW_ID) - def apply_str_to_bytearray(self, element, obj): + def apply_str_to_bytearray(self, element, obj): lng = len(obj) strng = (element.value.get_value() + " ")[:lng] bytes = bytearray(strng, "ascii") @@ -646,12 +633,13 @@ rs.set_apply_callback(apply, i) group.append(rs) for i in range(0, self.Pkeys): - get_prog(i + 1, ["unused", "in use"], _progkeys.modes[i * 2], + i1 = i + 1 + get_prog(i1, ["unused", "in use"], _progkeys.modes[i * 2], "P", "Programmable key ", self.apply_P) - get_prog(i + 1, SETMODES, _progkeys.modes[i * 2 + 1], "modeP", - "mode for Programmable key", self.apply_Pmode) - get_prog(i + 1, self.MEMLIST, _progkeys.ndx[i], "memP", - "mem for Programmable key", self.apply_Pmem) + get_prog(i1, self.SETMODES, _progkeys.modes[i * 2 + 1], "modeP", + "mode for Programmable key ", self.apply_Pmode) + get_prog(i1, self.MEMLIST, _progkeys.ndx[i], "memP", + "mem for Programmable key ", self.apply_Pmem) # ------------ End of special settings handlers.
# list of group description tuples: (groupame,group title, [param list]). @@ -718,10 +706,18 @@ ] # ----------------end of group_descriptions
- # list of group description tuples: (groupame,group title, [param list]). - # A param is a tuple: - # for a simple param: (paramname, paramtitle,[valuename list]) - # for a handler param: (paramname, paramtitle,( handler,[handler params])) + # allow a child class to add a param. + def add_paramdesc(self,group, param): + for description in self.group_descriptions: + groupname, title, parms = description + if group == groupname: + description[2] += param + return + + # returns the current values of all the settings in the radio memory image, + # in the form of a RadioSettings list. Uses the group_descriptions + # list to create the groups and params. Simple valuelist params are handled + # inline. More complex params are built by calling the special handlers. def get_settings(self): _settings = self._memobj.settings groups = RadioSettings() @@ -1015,7 +1011,6 @@ # VHF, RX (136000000, 174000000) # UHF, RX (400000000, 480000000) ] - valid_bands = [(108000000, 520000000), (700000000, 999990000)] _valid_chars = chirp_common.CHARSET_ASCII numblocks = 0x215 # number of 16-byte blocks in the radio _memsize = 16 * numblocks # used by CHIRP file loader to guess radio type @@ -1023,7 +1018,22 @@ Pkeys = 2 # number of programmable keys on the FT-4 namelen = 6 # length of the mem name display on the FT-4 front-panel id_str = b'IFT-35R\x00\x00V100\x00\x00' - + # names for the setmode function for the programmable keys. Mode zero means + # that the key is programmed for a memory not a setmode. + SETMODES = [ + "mem", "apo", "ar bep", "ar int", "beclo", #00-04 + "beep", "bell", "cw id", "cw wrt", "dc vlt", #05-09 + "dcs cod", "dt dly", "dt set", "dtc spd", "edg.bep", #10-14 + "lamp", "led.bsy", "led.tx", "lock", "m/t-cl", #15-19 + "mem.del", "mem.tag", "pag.abk", "pag.cdr", "pag.cdt", #20-24 + "pri.rvt", "pswd", "pswdwt", "rf sql", "rpt.ars", #25-29 + "rpt.frq", "rpt.sft", "rxsave", "scn.lmp", "scn.rsm", #30-34 + "skip", "sql.typ", "step", "tn frq", "tot", #35-39 + "tx pwr", "tx save", "vfo.spl", "vox", "wfm.rcv", #40-44 + "w/n.dev", "wx.alert" #45-46 + ] + legal_steps = list(STEP_CODE) + legal_steps.remove(6.25) #should not remove if euro version
# don't register the FT-65 in the production version until it is tested # @directory.register @@ -1038,7 +1048,6 @@ # VHF, RX (136000000, 174000000) # UHF, RX (400000000, 480000000) ] - valid_bands = [(108000000, 520000000), (700000000, 999990000)] _valid_chars = chirp_common.CHARSET_ASCII numblocks = 0x215 # number of 16-byte blocks in the radio _memsize = 16 * numblocks # used by CHIRP file loader to guess radio type @@ -1046,4 +1055,20 @@ Pkeys = 4 # number of programmable keys on the FT-65 namelen = 8 # length of the mem name display on the FT-65 front panel id_str=b'IH-420\x00\x00\x00V100\x00\x00' + # names for the setmode function for the programmable keys. Mode zero means + # that the key is programmed for a memory not a setmode. + SETMODES = [ + "mem", "apo", "arts", "battsave", "b-ch.l/o", # 00-04 + "beep", "bell", "compander", "ctcss", "cw id", # 05-09 + "dc volt", "dcs code", "dtmf set", "dtmf wrt", "edg bep", # 10-14 + "key lock", "lamp", "ledbsy", "mem del", "mon/t-cl", # 15-19 + "name tag", "pager", "password", "pri.rvt", "repeater", # 20-24 + "resume", "rf.sql", "scn.lamp", "skip", "sql type", # 25-29 + "step", "tot", "tx pwr", "tx save", "vfo.spl", # 30-34 + "vox", "wfm.rcv", "wide/nar", "wx alert", "scramble" # 35-39 + ] + legal_steps = list(STEP_CODE) + legal_steps.remove(6.25) #should not remove if euro version + def __init__(self): + self.add_paramdesc("misc", ("compander", "Compander", ["ON", "OFF"]))