[chirp_devel] [Yaesu FT-25] has been added to FT-4 driver.
Bernhard Hailer
Sat Jan 25 19:27:16 PST 2020
# HG changeset patch
# Parent 53cd045bbf8253d32b43a528b245caff243e4c02
[Yaesu FT-25] has been added to FT-4 driver.
Thanks to Dan Clemmensen for all his work to prepare for it! A test
image is attached.
A few issues with the FT-4 driver were discovered while the work for the
FT-25 was carried out; see #7601, #7603, #7605. Additional patches will
be provided.
73
Bernhard AE6YN
Fixes: #7543
diff --git a/chirp/drivers/ft4.py b/chirp/drivers/ft4.py
--- a/chirp/drivers/ft4.py
+++ b/chirp/drivers/ft4.py
@@ -2,6 +2,7 @@
# Derives loosely from two sources released under GPLv2:
# ./template.py, Copyright 2012 Dan Smith <dsmith at danplanet.com>
# ./ft60.py, Copyright 2011 Dan Smith <dsmith at danplanet.com>
+# Edited 2020 Bernhard Hailer <ham73tux at gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -261,7 +262,8 @@
msg = "Bad echo. Sent:" + util.hexprint(cmd) + ", "
msg += "Received:" + util.hexprint(echo)
LOG.debug(msg)
- raise errors.RadioError("Incorrect echo on serial port. Bad
cable?")
+ raise errors.RadioError(
+ "Incorrect echo on serial port. Radio off? Bad cable?")
if response_len is None:
return variable_len_resp(pipe)
if response_len > 0:
@@ -475,7 +477,7 @@
SKIPS = ["", "S"]
BASETYPE_FT4 = ["FT-4XR", "FT-4XE"]
-BASETYPE_FT65 = ["FT-65R"]
+BASETYPE_FT65 = ["FT-65R", "FT-25R"]
POWER_LEVELS = [chirp_common.PowerLevel("Low", watts=0.5),
chirp_common.PowerLevel("Mid", watts=2.5),
chirp_common.PowerLevel("High", watts=5.0)]
@@ -569,6 +571,12 @@
BAND_ASSIGNMENTS = [2, 1, 0, 1, 2, 0, 1, 2] # bands for the vfos and
homes
FT65_PROGS = ("prog", ["P1", "P2", "P3", "P4"])
FT65_SPECIALS = list(SPECIALS) # a shallow copy works here
+FT25_SPECIALS = [
+ ("pms", PMSNAMES),
+ ("vfo", ["VFO A UHF", "VFO A VHF", "VFO B FM"]),
+ ("home", ["HOME FM", "HOME VHF"]),
+ ("prog", ["P1", "P2"])
+ ]
FT65_SPECIALS[-1] = FT65_PROGS # replace the last entry (P key names)
@@ -669,8 +677,6 @@
rf.has_dtcs_polarity = False # REV TN reverses the tone,
not the dcs
rf.has_cross = True
rf.has_settings = True
- rf.valid_tuning_steps = self.legal_steps
-
return rf
def get_bank_model(self):
@@ -1027,31 +1033,50 @@
mem = chirp_common.Memory()
_mem, ndx, num, regtype, sname = self.slotloc(memref)
mem.number = num
- mem.freq = int(_mem.freq) * 10
- mem.offset = int(_mem.offset) * self.freq_offset_scale
- mem.duplex = DUPLEX[_mem.duplex]
- self.decode_sql(mem, _mem)
- mem.power = POWER_LEVELS[_mem.tx_pwr]
- mem.mode = ["FM", "NFM"][_mem.tx_width]
- mem.tuning_step = STEP_CODE[_mem.step]
-
+ """
+ First, we need to know whether a channel is enabled,
+ then we can process any channel parameters.
+ It was found (at least on an FT-25) that channels might be
+ uninitialized and memory is just completely filled with 0xFF.
+ """
if regtype == "pms":
mem.extd_number = sname
+
if regtype in ["memory", "pms"]:
ndx = num - 1
mem.name = clean_name(self._memobj.names[ndx].chrs)
mem.empty = not retrieve_bit(self._memobj.enable, ndx)
mem.skip = SKIPS[retrieve_bit(self._memobj.scan, ndx)]
- txfreq = int(self._memobj.txfreqs[ndx].freq) * 10
- if (txfreq != 0) and (txfreq != mem.freq):
- mem.duplex = "split"
- mem.offset = txfreq
else:
mem.empty = False
mem.extd_number = sname
mem.immutable = ["number", "extd_number", "name", "skip"]
+ """
+ So, now if channel is not empty, we can do the evaluation of
+ all parameters. Otherwise we set them to defaults.
+ """
+ if mem.empty:
+ mem.freq = 0
+ mem.offset = 0
+ mem.duplex = "off"
+ mem.power = POWER_LEVELS[2] # "High"
+ mem.mode = "FM"
+ mem.tuning_step = 0
+ else:
+ mem.freq = int(_mem.freq) * 10
+ txfreq = int(self._memobj.txfreqs[ndx].freq) * 10
+ if (txfreq != 0) and (txfreq != mem.freq):
+ mem.duplex = "split"
+ mem.offset = txfreq
+ else:
+ mem.offset = int(_mem.offset) * self.freq_offset_scale
+ mem.duplex = DUPLEX[_mem.duplex]
+ self.decode_sql(mem, _mem)
+ mem.power = POWER_LEVELS[mem.tx_pwr]
+ mem.mode = ["FM", "NFM"][_mem.tx_width]
+ mem.tuning_step = STEP_CODE[_mem.step]
return mem
def enforce_band(self, memloc, freq, mem_num, sname):
@@ -1117,7 +1142,7 @@
# UHF, RX (400000000, 480000000)
]
_valid_chars = chirp_common.CHARSET_ASCII
- numblocks = 0x215 # number of 16-byte blocks in the radio
+ numblocks = 0x215 # number of 16-byte blocks in the radio
_memsize = 16 * numblocks # used by CHIRP file loader to guess
radio type
MAX_MEM_SLOT = 200
Pkeys = 2 # number of programmable keys on the FT-4
@@ -1180,3 +1205,40 @@
"step", "tot", "tx pwr", "tx save", "vfo.spl", # 30-34
"vox", "wfm.rcv", "wide/nar", "wx alert", "scramble" # 35-39
]
+
+
+ at directory.register
+class YaesuFT25Radio(YaesuSC35GenericRadio):
+ MODEL = "FT-25R"
+ _basetype = BASETYPE_FT65
+ valid_bands = [
+ (65000000, 108000000), # broadcast FM, receive only
+ (144000000, 148000000), # VHF, US version, TX and RX
+ # VHF, RX (136000000, 174000000)
+ ]
+ _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
+ MAX_MEM_SLOT = 200
+ 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'IFT-25R\x00\x00V100\x00\x00'
+ freq_offset_scale = 50000
+ legal_steps = US_LEGAL_STEPS
+ # we need a deep copy here because we are adding deeper than the
top level.
+ class_group_descs =
copy.deepcopy(YaesuSC35GenericRadio.group_descriptions)
+ add_paramdesc(
+ class_group_descs, "misc", ("compander", "Compander", ["OFF",
"ON"]))
+ class_specials = FT25_SPECIALS
+ # 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
+ ]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Yaesu_FT-25R.img
Type: application/x-raw-disk-image
Size: 8689 bytes
Desc: not available
Url : http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20200125/b62ee2fd/attachment-0001.bin
More information about the chirp_devel
mailing list