Developers
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
September 2021
- 11 participants
- 36 discussions
# HG changeset patch
# User Angus Ainslie <angus(a)akkea.ca>
# Date 1592188302 25200
# Sun Jun 14 19:31:42 2020 -0700
# Branch py3
# Node ID eb35a46c5f7e43518f6adc88768107efc0a3d402
# Parent b1e01577ff2505de7fcca665bf3d6af296f0f7ca
[thd74] Add a Kenwood d74 driver
Based on code from
Tom Hayward, Eric Wolak, William McKeehan
https://chirp.danplanet.com/issues/4129
This works with python3 no idea about python2
diff --git a/chirp/drivers/thd74.py b/chirp/drivers/thd74.py
new file mode 100644
--- /dev/null
+++ b/chirp/drivers/thd74.py
@@ -0,0 +1,571 @@
+import logging
+import struct
+import binascii
+
+import time
+
+from chirp import directory, bitwise, errors, chirp_common, memmap
+from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings, \
+ RadioSettingValueInteger, RadioSettingValueString, \
+ RadioSettingValueList, RadioSettingValueBoolean, \
+ InvalidValueError
+
+from . import thd72
+from chirp.util import hexprint
+
+LOG = logging.getLogger(__name__)
+
+# Save files from MCP-D74 have a 256-byte header, and possibly some oddness
+# TH-D74 memory map
+
+# 0x02000: memory flags, 4 bytes per memory
+# 0x04000: memories, each 40 bytes long
+# 0x10000: names, each 16 bytes long, null padded, ascii encoded
+
+# memory channel
+# 0 1 2 3 4 5 6 7 8 9 a b c d e f
+# [freq ] ? mode tmode/duplex rtone ctone dtcs cross_mode [offset] ?
+
+# frequency is 32-bit unsigned little-endian Hz
+
+DEFAULT_PROG_VFO = (
+ (136000000, 174000000),
+ (410000000, 470000000),
+ (118000000, 136000000),
+ (136000000, 174000000),
+ (320000000, 400000000),
+ (400000000, 524000000),
+)
+
+# Some of the blocks written by MCP have a length set of less than 0x00/256
+BLOCK_SIZES = {
+ 0x0003: 0x00B4,
+ 0x0007: 0x0068,
+}
+
+mem_format = """
+// TODO: find lockout
+
+#seekto 0x10c0;
+struct {
+ char power_on_msg[16];
+ char modem_name[16];
+} onmsg_name;
+
+#seekto 0x1200;
+struct {
+ char callsign[8];
+} callsign;
+
+#seekto 0x02000;
+struct {
+// 4 bytes long
+ u8 disabled;
+ u8 unk;
+ u8 group;
+ u8 unk2;
+} flag[1032];
+
+#seekto 0x04000;
+// TODO: deal with the 16-byte trailers of every block
+struct {
+ struct {
+ ul32 freq;
+ ul32 offset;
+
+ u8 tuning_step:4,
+ unk:4;
+ u8 mode:4,
+ unk1:4;
+ u8 tone_mode:4,
+ duplex:4;
+ u8 rtone;
+
+ u8 ctone;
+ u8 dtcs;
+ u8 cross_mode:4
+ digital_squelch:4;
+ char urcall[8];
+ char rpt1[8];
+ char rpt2[8];
+
+ u8 digital_squelch_code;
+
+ } mem[6];
+
+ u8 pad[16];
+} memory[1167]; // TODO: correct number of memories
+
+#seekto 0x10000;
+struct {
+ char name[16];
+} channel_name[1000];
+
+#seekto 0x14700;
+struct {
+ char name[16];
+} wx_name[10];
+
+#seekto 0x144d0;
+struct {
+ char name[16];
+} call_name[6];
+
+#seekto 0x14800;
+struct {
+ char name[16];
+} group_name[31];
+"""
+
+STEPS = [5.0, 6.25, None, None, 10.0, 12.5, 15.0, 20.0, 25.0, 50.0, 100.0, 9.0]
+MODES = [
+ "FM",
+ "DV",
+ "AM",
+ "LSB",
+ "USB",
+ "CW",
+ "NFM",
+ "DV"
+]
+
+def hex(data):
+ data_txt = ""
+ for idx in range(0, len(data), 16):
+ bytes = binascii.hexlify(str(data[idx:idx+16]).encode('utf8')).upper()
+ for idx in range(0, len(bytes), 2):
+ data_txt += str(bytes[idx:idx+2]) + " "
+ data_txt += "\n"
+ return data_txt.strip()
+
+class SProxy(object):
+ def __init__(self, delegate):
+ self.delegate = delegate
+
+ def read(self, len):
+ r = self.delegate.read(len)
+ LOG.debug("READ\n" + hex(r))
+ return r
+
+ def write(self, data):
+ LOG.debug("WRITE\n" + hex(data))
+ return self.delegate.write(str(data))
+
+ @property
+ def timeout(self):
+ return self.delegate.timeout
+
+ @timeout.setter
+ def timeout(self, timeout):
+ self.delegate.timeout = timeout
+
+
+
+(a)directory.register
+class THD74Radio(thd72.THD72Radio):
+ MODEL = "TH-D74 (clone mode)"
+ #MODEL = "TH-D74"
+ _memsize = 500480
+ # I think baud rate might be ignored by USB-Serial stack of the D74's
+ # on-board FTDI chip, but it doesn't seem to hurt.
+ BAUD_RATE = 115200
+
+
+ #def __init__(self, pipe):
+ # pipe = SProxy(pipe)
+ # super(THD74Radio, self).__init__(pipe)
+
+ def get_features(self):
+ rf = super(THD74Radio, self).get_features()
+ rf.has_tuning_step = True
+ return rf
+
+ def process_mmap(self):
+ self._memobj = bitwise.parse(mem_format, self._mmap)
+ self._dirty_blocks = []
+
+ def sync_in(self):
+ # self._detect_baud()
+ self._mmap = self.download()
+ self.process_mmap()
+
+ def sync_out(self):
+ if len(self._dirty_blocks):
+ self.upload(self._dirty_blocks)
+ else:
+ self.upload()
+
+ def read_block(self, block, count=256):
+ cmd = struct.pack(">cHH", b"R", block, count%256)
+ print( "Read cmd %s" % cmd )
+ self.pipe.write(''.join(chr(b) for b in cmd))
+
+ r = self.pipe.read(5)
+ if len(r) != 5:
+ raise Exception("Did not receive block response")
+
+ print( "Read input %s %i %i %i %i" % ( r, ord(r[1]), ord(r[2]), ord(r[3]), ord(r[4] )))
+
+ #cmd, _block, _ = struct.unpack(">cHH", b''.join(ord(b) for b in r))
+ cmd = r[0]
+ _block = (ord(r[1]) << 8) + ord(r[2])
+ if cmd != 'W' or _block != block:
+ raise Exception("Invalid response: %s %i %i" % (cmd, block, _block))
+
+ data = ""
+ while len(data) < count:
+ data += self.pipe.read(count - len(data))
+
+ self.pipe.write(chr(0x06))
+ if self.pipe.read(1) != chr(0x06):
+ raise Exception("Did not receive post-block ACK!")
+
+ return data
+
+ def write_block(self, block, map, count=256):
+ #print("Write block ", block )
+ c = struct.pack(">cHH", b"W", block, count%256)
+ base = block * 256
+ data = map[base:base + count]
+ # It's crucial that these are written together. Otherwise the radio
+ # will fail to ACK under some conditions.
+ c_d = ''.join(chr(b) for b in c) + data
+ self.pipe.write(c_d)
+
+ ack = self.pipe.read(1)
+
+ if len(ack) == 0:
+ print("read timed out block %d - trying again" % block )
+ time.sleep(0.5)
+ ack = self.pipe.read(1)
+
+ if ack != chr(0x06):
+ print("Block %d write failed %d" % ( block, ord(ack)))
+
+ return ack == chr(0x06)
+
+ def _unlock(self):
+ """Voodoo sequence of operations to get the radio to accept our programming."""
+
+ h = self.read_block(0, 6)
+
+ unlock = ("\x57\x00\x00\x00\x30\xff\x01\xff\x00\x00\xff\xff\xff\xff\xff\x01" +
+ "\x00\x00\x00\x03\x01\x00\x00\x00\x00\x02\x00\x30\x30\x30\x00\xff" +
+ "\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+ "\xff\xff\xff\xff\xff")
+
+ self.pipe.write(unlock)
+
+ ack = self.pipe.read(1)
+
+ if ack != chr(0x06):
+ raise errors.RadioError("Expected ack but got {} ({})".format(ord(ack), type(ack)))
+
+ c = struct.pack(">cHH", b"W", 0, 0x38C8)
+ self.pipe.write(''.join(chr(b) for b in c))
+ # magic unlock sequence
+ unlock = [0xFF] * 8 + [0] * 160 + [0xFF] * 32
+ unlock = "".join([chr(x) for x in unlock])
+ self.pipe.write(unlock)
+
+ time.sleep(0.01)
+ ack = self.pipe.read(1)
+
+ if ack != chr(0x06):
+ raise errors.RadioError("Expected ack but got {} ({})".format(ord(ack), type(ack)))
+
+ def download(self, raw=False, blocks=None):
+ if blocks is None:
+ blocks = list(range(int(self._memsize / 256)))
+ else:
+ blocks = [b for b in blocks if b < int(self._memsize / 256)]
+
+ if self.command("0M PROGRAM", 2, timeout=1.5) != "0M":
+ raise errors.RadioError("Radio didn't go into PROGRAM mode")
+
+ allblocks = list(range(int(self._memsize / 256)))
+ self.pipe.baudrate = 57600
+ try:
+ self.pipe.setRTS()
+ except AttributeError:
+ self.pipe.rts = True
+ self.pipe.read(1)
+ data = ""
+ LOG.debug("reading blocks %d..%d" % (blocks[0], blocks[-1]))
+ total = len(blocks)
+ count = 0
+ for i in allblocks:
+ if i not in blocks:
+ data += 256 * '\xff'
+ continue
+ data += self.read_block(i)
+ count += 1
+ if self.status_fn:
+ s = chirp_common.Status()
+ s.msg = "Cloning from radio"
+ s.max = total
+ s.cur = count
+ self.status_fn(s)
+
+
+ self.pipe.write("E")
+ if raw:
+ return data
+ return memmap.MemoryMap(data)
+
+ def upload(self, blocks=None):
+ # MCP-D74 sets DTR, so we should too
+ try:
+ self.pipe.setDTR()
+ except AttributeError:
+ self.pipe.dtr = True
+
+ if blocks is None:
+ blocks = list(range((int(self._memsize / 256)) - 2))
+ else:
+ blocks = [b for b in blocks if b < int(self._memsize / 256)]
+
+ if self.command("0M PROGRAM", 2, timeout=1.5) != "0M":
+ raise errors.RadioError("Radio didn't go into PROGRAM mode")
+
+ if self._unlock():
+ raise errors.RadioError("Unlock failed")
+
+ # This block definitely isn't written conventionally, so we let _unlock
+ # handle it and skip.
+ if 0 in blocks:
+ blocks.remove(0)
+
+ # For some reason MCP-D74 skips this block. If we don't, we'll get a NACK
+ # on the next one. There is also a more than 500 ms delay for the ACK.
+ if 1279 in blocks:
+ blocks.remove(1279)
+
+ print("writing blocks %d..%d" % (blocks[0], blocks[-1]))
+ total = len(blocks)
+ count = 0
+ for i in blocks:
+ time.sleep(0.001)
+ r = self.write_block(i, self._mmap, BLOCK_SIZES.get(i, 256))
+ count += 1
+ if not r:
+ raise errors.RadioError("write of block %i failed" % i)
+ if self.status_fn:
+ s = chirp_common.Status()
+ s.msg = "Cloning to radio"
+ s.max = total
+ s.cur = count
+ self.status_fn(s)
+
+ lock = ("\x57\x00\x00\x00\x06\x02\x01\xff\x00\x00\xff")
+ self.pipe.write(lock)
+
+ self.pipe.write("F")
+ # clear out blocks we uploaded from the dirty blocks list
+ self._dirty_blocks = [b for b in self._dirty_blocks if b not in blocks]
+
+ def command(self, cmd, response_length, timeout=0.5):
+ start = time.time()
+
+ LOG.debug("PC->D72: %s" % cmd)
+ default_timeout = self.pipe.timeout
+ self.pipe.write(cmd + "\r")
+ self.pipe.timeout = timeout
+ try:
+ data = self.pipe.read(response_length + 1)
+ LOG.debug("D72->PC: %s" % data.strip())
+ finally:
+ self.pipe.timeout = default_timeout
+ return data.strip()
+
+ def get_raw_memory(self, number):
+ bank = number // 6
+ idx = number % 6
+
+ _mem = self._memobj.memory[bank].mem[idx]
+ return repr(_mem) + \
+ repr(self._memobj.flag[number])
+
+ def get_id(self):
+ r = self.command("ID", 9)
+ if r.startswith("ID "):
+ return r.split(" ")[1]
+ else:
+ raise errors.RadioError("No response to ID command")
+
+ def set_channel_name(self, number, name):
+ name = name[:16] + '\x00' * 16
+ if number < 999:
+ self._memobj.channel_name[number].name = name[:16]
+ self.add_dirty_block(self._memobj.channel_name[number])
+ elif number >= 1020 and number < 1030:
+ number -= 1020
+ self._memobj.wx_name[number].name = name[:16]
+ self.add_dirty_block(self._memobj.wx_name[number])
+
+ def get_memory(self, number):
+ if isinstance(number, str):
+ try:
+ number = thd72.THD72_SPECIAL[number]
+ except KeyError:
+ raise errors.InvalidMemoryLocation("Unknown channel %s" %
+ number)
+
+ if number < 0 or number > (max(thd72.THD72_SPECIAL.values()) + 1):
+ raise errors.InvalidMemoryLocation(
+ "Number must be between 0 and 999")
+
+ bank = number // 6
+ idx = number % 6
+
+ #print("reading memory #%d bank %d entry %d" %(number, bank, idx))
+ _mem = self._memobj.memory[bank].mem[idx]
+ flag = self._memobj.flag[number]
+
+ #print("Memory mode %d" % _mem.mode)
+ if _mem.mode < len( MODES ) and MODES[_mem.mode] == "DV":
+ mem = chirp_common.DVMemory()
+ else:
+ mem = chirp_common.Memory()
+
+ mem.number = number
+
+ if number > 999:
+ mem.extd_number = thd72.THD72_SPECIAL_REV[number]
+ if flag.disabled == 0xFF:
+ mem.empty = True
+ return mem
+
+ mem.name = self.get_channel_name(number)
+ mem.freq = int(_mem.freq)
+ mem.tmode = thd72.TMODES[int(_mem.tone_mode)]
+ mem.rtone = chirp_common.TONES[_mem.rtone]
+ mem.ctone = chirp_common.TONES[_mem.ctone]
+ mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]
+ mem.duplex = thd72.DUPLEX[int(_mem.duplex)]
+ mem.offset = _mem.offset
+ mem.mode = MODES[int(_mem.mode)]
+ mem.tuning_step = STEPS[_mem.tuning_step]
+
+ if mem.mode == "DV":
+ mem.dv_urcall = _mem.urcall
+ mem.dv_rpt1call = _mem.rpt1
+ mem.dv_rpt2call = _mem.rpt2
+ mem.dv_code = _mem.digital_squelch_code
+
+ if number < 999:
+ # mem.skip = chirp_common.SKIP_VALUES[int(flag.skip)]
+ mem.cross_mode = chirp_common.CROSS_MODES[_mem.cross_mode]
+ if number > 999:
+ mem.cross_mode = chirp_common.CROSS_MODES[0]
+ mem.immutable = ["number", "bank", "extd_number", "cross_mode"]
+ if number >= 1020 and number < 1030:
+ mem.immutable += ["freq", "offset", "tone", "mode",
+ "tmode", "ctone", "skip"] # FIXME: ALL
+ else:
+ mem.immutable += ["name"]
+
+ return mem
+
+ def set_memory(self, mem):
+ LOG.debug("set_memory(%d)" % mem.number)
+ if mem.number < 0 or mem.number > (max(thd72.THD72_SPECIAL.values()) + 1):
+ raise errors.InvalidMemoryLocation(
+ "Number must be between 0 and 999")
+
+ # weather channels can only change name, nothing else
+ if mem.number >= 1020 and mem.number < 1030:
+ self.set_channel_name(mem.number, mem.name)
+ return
+
+ flag = self._memobj.flag[mem.number]
+ self.add_dirty_block(self._memobj.flag[mem.number])
+
+ # only delete non-WX channels
+ was_empty = flag.disabled == 0xf
+ if mem.empty:
+ flag.disabled = 0xf
+ return
+ flag.disabled = 0
+
+ bank = mem.number // 6
+ idx = mem.number % 6
+
+ print("seting memory #%d bank %d entry %d" %(mem.number, bank, idx))
+ _mem = self._memobj.memory[bank].mem[idx]
+ self.add_dirty_block(_mem)
+ if was_empty:
+ self.initialize(_mem)
+
+ _mem.freq = mem.freq
+
+ if mem.number < 999:
+ self.set_channel_name(mem.number, mem.name)
+
+ _mem.tone_mode = thd72.TMODES_REV[mem.tmode]
+ _mem.rtone = chirp_common.TONES.index(mem.rtone)
+ _mem.ctone = chirp_common.TONES.index(mem.ctone)
+ _mem.dtcs = chirp_common.DTCS_CODES.index(mem.dtcs)
+ _mem.cross_mode = chirp_common.CROSS_MODES.index(mem.cross_mode)
+ _mem.duplex = thd72.DUPLEX_REV[mem.duplex]
+ _mem.offset = mem.offset
+ _mem.mode = thd72.MODES_REV[mem.mode]
+
+ prog_vfo = thd72.get_prog_vfo(mem.freq)
+ #flag.prog_vfo = prog_vfo
+
+ #if mem.number < 999:
+ # flag.skip = chirp_common.SKIP_VALUES.index(mem.skip)
+
+
+ @staticmethod
+ def _add_00_pad(val, length):
+ return val.ljust(length, "\x00")[:length]
+
+
+ @classmethod
+ def apply_callsign(cls, setting, obj):
+ callsign = setting.value.get_value().upper()
+ setattr(obj, "callsign", cls._add_00_pad(callsign, 8))
+
+
+ @classmethod
+ def apply_power_on_msg(cls, setting, obj):
+ msg = setting.value.get_value()
+ setattr(obj, "power_on_msg", cls._add_00_pad(msg, 16))
+
+
+ def _get_general_settings(self):
+ menu = RadioSettingGroup("general", "General")
+ cs = self._memobj.callsign
+
+ val = RadioSettingValueString(
+ 0, 6, str(cs.callsign).rstrip("\x00"))
+ rs = RadioSetting("cs.callsign", "Callsign", val)
+ rs.set_apply_callback(self.apply_callsign, cs)
+ menu.append(rs)
+
+ msg = self._memobj.onmsg_name
+
+ val = RadioSettingValueString(
+ 0, 16, str(msg.power_on_msg).rstrip("\x00"))
+ rs = RadioSetting("msg.power_on_msg", "Power on message", val)
+ rs.set_apply_callback(self.apply_power_on_msg, msg)
+ menu.append(rs)
+
+ return menu
+
+
+ def _get_settings(self):
+ top = RadioSettings(self._get_general_settings())
+ return top
+
+
+ def get_settings(self):
+ try:
+ return self._get_settings()
+ except:
+ import traceback
+ LOG.error("Failed to parse settings: %s", traceback.format_exc())
+ return None
+
4
4
Hey Dan and all,
You have probably noticed that I have pushed a couple changes to support a
few older Icom handheld radios and marked them as experimental. The
memories and banks have been mapped and the basic functionality (excluding
extra settings support) have all been added.
I have marked them experimental with an alert to users for the reason that
I do not actually have access to these radios for validation purposes,
however I am fairly certain that these drivers are functionally accurate in
their initial state. The only action that I cannot confirm is the actual
write to the radio, which would require inherent knowledge of the specific
icf end frame marker for these models . To complete this would require
access to the unit (which I do not have) or a lucky guess (which I have
attempted).
When I get a moment I can also send along a couple manufactured image files
for these radios to be added to the test base, however real images would be
preferable (maybe someone on the list has these radios?). But in the
meantime please advise if you have any questions or concerns with these
drivers, as they have been requested by many users in the past and may
prove useful to some.
Thanks again!
-kosta
2
4
Tested changes:
[Kosta A <ve7kcy(a)gmail.com>] # Parent 5aa2294d78ea241c6573dcf1929475b072e73685
Minor UI tweak, do not show empty header in tree view column. Fixes #9397.
[Kosta A <ve7kcy(a)gmail.com>] # Parent d156d3a46b7e6cbce985dc14186f0e07b5d3016b
Prevent memory editor from always loading last memory in memory range twice. Fixes #9401
[Kosta A <ve7kcy(a)gmail.com>] # Parent 5aa2294d78ea241c6573dcf1929475b072e73685
Prevent re-entrant calls to 'update_recent_files' when opening a file from the 'Recent Files' menu action. Fixes #9399.
Gtk was failing on this and was sending an error message to the console.
[Kosta A <ve7kcy(a)gmail.com>] Supress console spew from python-future warning in non-debug builds.
[Tom Hayward <tom(a)tomh.us>] [id880] Fix typo in charset definition. #281
[Tom Hayward <tom(a)tomh.us>] [thf6a] Support full charset (ASCII). Fixes #141
[Tom Hayward <tom(a)tomh.us>] [id880] Support full charset. Fixes #281
[Tom Hayward <tom(a)tomh.us>] [vx5] Support full charset (ASCII). Fixes #292
[Tom Hayward <tom(a)tomh.us>] [id31a] set used bit when creating new memory, clear when deleting. Fixes #269
[Tom Hayward <tom(a)tomh.us>] Support PyGTK < 2.22 in bank edit. Fixes #231
[Tom Hayward <tom(a)tomh.us>] [d710] [v71] [d72] Fix tone list (not all tones are supported). Fixes #212
[Dan Smith <dsmith(a)danplanet.com>] [vx7] Fix setting memory power levels on 220MHz band
Fixes #214
[Dan Smith <dsmith(a)danplanet.com>] fips: Pennsylvania FIPS code was wrong. #117
[Marco Filippi <iz3gme.marco(a)gmail.com>] Consider lower bound frequency of each valid_band as valid
Fix bug #181
[Tom Hayward <tom(a)tomh.us>] tmd700: allow 8-char names. Fixes #176
[Dan Smith <dsmith(a)danplanet.com>] Fix the "blind deletion" problem, as well as properly direct copy/paste
Fixes #172
[David Griffith <dave(a)661.org>] Bug #155 fix: VX-7 1.25m power levels
[David Griffith <dave(a)661.org>] New INSTALL and README files
Fixes #122
[Tom Hayward <tom(a)tomh.us>] thd72: only use hardware flow on OS X. Fixes #166
[Marco Filippi <iz3gme.marco(a)gmail.com>] [FT817] Tone freq not set correctly
Same as #88 for FT857, to avoid code duplication fix code have been moved from
ft857 to its ancestor class
Fix bug #163
[Tom Hayward <tom(a)tomh.us>] Fix Mac .app so paths with spaces work. Fixes Bug #145
Full log:
[...truncated 970 lines...]
Testing Radtel T18 detect ... ok
test_edges (tests.TestCase_RadtelT18)
Testing Radtel T18 edges ... ok
test_settings (tests.TestCase_RadtelT18)
Testing Radtel T18 settings ... ok
test_banks (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 brute force ... ok
test_clone (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 clone ... ok
test_copy_all (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 copy all ... ok
test_detect (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 detect ... ok
test_edges (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 edges ... ok
test_settings (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 settings ... ok
test_banks (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 brute force ... ok
test_clone (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 clone ... ok
test_copy_all (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 copy all ... ok
test_detect (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 detect ... ok
test_edges (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 edges ... ok
test_settings (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 settings ... ok
test_banks (tests.TestCase_IcomID800H)
Testing Icom ID-800H banks ... ok
test_brute_force (tests.TestCase_IcomID800H)
Testing Icom ID-800H brute force ... ok
test_clone (tests.TestCase_IcomID800H)
Testing Icom ID-800H clone ... ok
test_copy_all (tests.TestCase_IcomID800H)
Testing Icom ID-800H copy all ... ok
test_detect (tests.TestCase_IcomID800H)
Testing Icom ID-800H detect ... ok
test_edges (tests.TestCase_IcomID800H)
Testing Icom ID-800H edges ... ok
test_settings (tests.TestCase_IcomID800H)
Testing Icom ID-800H settings ... ok
test_banks (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF brute force ... ok
test_clone (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF clone ... ok
test_copy_all (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF copy all ... ok
test_detect (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF detect ... ok
test_edges (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF edges ... ok
test_settings (tests.TestCase_LUITONLT580UHF)
Testing LUITON LT-580_UHF settings ... ok
test_banks (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 banks ... ok
test_brute_force (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 brute force ... ok
test_clone (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 clone ... ok
test_copy_all (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 copy all ... ok
test_detect (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 detect ... ok
test_edges (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 edges ... ok
test_settings (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 settings ... ok
test_banks (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV brute force ... ok
test_clone (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV clone ... ok
test_copy_all (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV copy all ... ok
test_detect (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV detect ... ok
test_edges (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV edges ... ok
test_settings (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV settings ... ok
test_banks (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H banks ... ok
test_brute_force (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H brute force ... ok
test_clone (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H clone ... ok
test_copy_all (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H copy all ... ok
test_detect (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H detect ... ok
test_edges (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H edges ... ok
test_settings (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 brute force ... ok
test_clone (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 clone ... ok
test_copy_all (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 copy all ... ok
test_detect (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 detect ... ok
test_edges (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 edges ... ok
test_settings (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 settings ... ok
test_banks (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus brute force ... ok
test_clone (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus clone ... ok
test_copy_all (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus copy all ... ok
test_detect (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus detect ... ok
test_edges (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus edges ... ok
test_settings (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus settings ... ok
test_banks (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A brute force ... ok
test_clone (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A clone ... ok
test_copy_all (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A copy all ... ok
test_detect (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A detect ... ok
test_edges (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A edges ... skipped 'No mutable memory locations found'
test_settings (tests.TestCase_RetevisRB17A)
Testing Retevis RB17A settings ... ok
test_banks (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 brute force ... ok
test_clone (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 clone ... ok
test_copy_all (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 copy all ... ok
test_detect (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 detect ... ok
test_edges (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 edges ... ok
test_settings (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 settings ... ok
test_banks (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND brute force ... ok
test_clone (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND clone ... ok
test_copy_all (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND copy all ... ok
test_detect (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND detect ... ok
test_edges (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND edges ... ok
test_settings (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND settings ... ok
test_banks (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF brute force ... ok
test_clone (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF clone ... ok
test_copy_all (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF copy all ... ok
test_detect (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF detect ... ok
test_edges (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF edges ... ok
test_settings (tests.TestCase_LUITONLT580VHF)
Testing LUITON LT-580_VHF settings ... ok
test_banks (tests.TestCase_IcomID880H)
Testing Icom ID-880H banks ... ok
test_brute_force (tests.TestCase_IcomID880H)
Testing Icom ID-880H brute force ... ok
test_clone (tests.TestCase_IcomID880H)
Testing Icom ID-880H clone ... ok
test_copy_all (tests.TestCase_IcomID880H)
Testing Icom ID-880H copy all ... ok
test_detect (tests.TestCase_IcomID880H)
Testing Icom ID-880H detect ... ok
test_edges (tests.TestCase_IcomID880H)
Testing Icom ID-880H edges ... ok
test_settings (tests.TestCase_IcomID880H)
Testing Icom ID-880H settings ... ok
test_banks (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 banks ... ok
test_brute_force (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 brute force ... ok
test_clone (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 clone ... ok
test_copy_all (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 copy all ... ok
test_detect (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 detect ... ok
test_edges (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 edges ... ok
test_settings (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII banks ... ok
test_brute_force (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII brute force ... ok
test_clone (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII clone ... ok
test_copy_all (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII copy all ... ok
test_detect (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII detect ... ok
test_edges (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII edges ... ok
test_settings (tests.TestCase_AnyTone5888UVIII)
Testing AnyTone 5888UVIII settings ... ok
test_banks (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A banks ... ok
test_brute_force (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A brute force ... ok
test_clone (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A clone ... ok
test_copy_all (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A copy all ... ok
test_detect (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A detect ... ok
test_edges (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A edges ... ok
test_settings (tests.TestCase_IcomIC2730A)
Testing Icom IC-2730A settings ... ok
test_banks (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S brute force ... ok
test_clone (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S clone ... ok
test_copy_all (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S copy all ... ok
test_detect (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S detect ... ok
test_edges (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S edges ... ok
test_settings (tests.TestCase_BaofengBFA58S)
Testing Baofeng BF-A58S settings ... ok
test_banks (tests.TestCase_RetevisRB26)
Testing Retevis RB26 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRB26)
Testing Retevis RB26 brute force ... ok
test_clone (tests.TestCase_RetevisRB26)
Testing Retevis RB26 clone ... ok
test_copy_all (tests.TestCase_RetevisRB26)
Testing Retevis RB26 copy all ... ok
test_detect (tests.TestCase_RetevisRB26)
Testing Retevis RB26 detect ... ok
test_edges (tests.TestCase_RetevisRB26)
Testing Retevis RB26 edges ... skipped 'No mutable memory locations found'
test_settings (tests.TestCase_RetevisRB26)
Testing Retevis RB26 settings ... ok
test_banks (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E brute force ... ok
test_clone (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E clone ... ok
test_copy_all (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E copy all ... ok
test_detect (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E detect ... ok
test_edges (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E edges ... ok
test_settings (tests.TestCase_WouxunKGUV8E)
Testing Wouxun KG-UV8E settings ... ok
test_banks (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) brute force ... ok
test_clone (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) clone ... ok
test_copy_all (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) copy all ... ok
test_detect (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) detect ... ok
test_edges (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) edges ... ok
test_settings (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) settings ... ok
test_banks (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 brute force ... ok
test_clone (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 clone ... ok
test_copy_all (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 copy all ... ok
test_detect (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 detect ... ok
test_edges (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 edges ... ok
test_settings (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 settings ... ok
test_banks (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M brute force ... ok
test_clone (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M clone ... ok
test_copy_all (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M copy all ... ok
test_detect (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M detect ... ok
test_edges (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M edges ... ok
test_settings (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV brute force ... ok
test_clone (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV clone ... ok
test_copy_all (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV copy all ... ok
test_detect (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV detect ... ok
test_edges (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV edges ... ok
test_settings (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV settings ... ok
test_banks (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 brute force ... ok
test_clone (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 clone ... ok
test_copy_all (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 copy all ... ok
test_detect (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 detect ... ok
test_edges (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 edges ... ok
test_settings (tests.TestCase_BaofengBFT1)
Testing Baofeng BF-T1 settings ... ok
test_banks (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 banks ... ok
test_brute_force (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 brute force ... ok
test_clone (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 clone ... ok
test_copy_all (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 copy all ... ok
test_detect (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 detect ... ok
test_edges (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 edges ... ok
test_settings (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 settings ... ok
test_banks (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV brute force ... ok
test_clone (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV clone ... ok
test_copy_all (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV copy all ... ok
test_detect (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV detect ... ok
test_edges (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV edges ... ok
test_settings (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV settings ... ok
test_banks (tests.TestCase_RetevisRT1)
Testing Retevis RT1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT1)
Testing Retevis RT1 brute force ... ok
test_clone (tests.TestCase_RetevisRT1)
Testing Retevis RT1 clone ... ok
test_copy_all (tests.TestCase_RetevisRT1)
Testing Retevis RT1 copy all ... ok
test_detect (tests.TestCase_RetevisRT1)
Testing Retevis RT1 detect ... ok
test_edges (tests.TestCase_RetevisRT1)
Testing Retevis RT1 edges ... ok
test_settings (tests.TestCase_RetevisRT1)
Testing Retevis RT1 settings ... ok
test_banks (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 brute force ... ok
test_clone (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 clone ... ok
test_copy_all (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 copy all ... ok
test_detect (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 detect ... ok
test_edges (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 edges ... ok
test_settings (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 settings ... ok
test_banks (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H banks ... ok
test_brute_force (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H brute force ... ok
test_clone (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H clone ... ok
test_copy_all (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H copy all ... ok
test_detect (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H detect ... ok
test_edges (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H edges ... ok
test_settings (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H settings ... ok
test_banks (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus brute force ... ok
test_clone (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus clone ... ok
test_copy_all (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus copy all ... ok
test_detect (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus detect ... ok
test_edges (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus edges ... ok
test_settings (tests.TestCase_WouxunKGUV9DPlus)
Testing Wouxun KG-UV9D Plus settings ... ok
test_banks (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 brute force ... ok
test_clone (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 clone ... ok
test_copy_all (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 copy all ... ok
test_detect (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 detect ... ok
test_edges (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 edges ... ok
test_settings (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M brute force ... ok
test_clone (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M clone ... ok
test_copy_all (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M copy all ... ok
test_detect (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M detect ... ok
test_edges (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M edges ... ok
test_settings (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M settings ... ok
test_banks (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 brute force ... ok
test_clone (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 clone ... ok
test_copy_all (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 copy all ... ok
test_detect (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 detect ... ok
test_edges (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 edges ... ok
test_settings (tests.TestCase_BaofengBFT8)
Testing Baofeng BF-T8 settings ... ok
test_banks (tests.TestCase_RetevisRT16)
Testing Retevis RT16 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT16)
Testing Retevis RT16 brute force ... ok
test_clone (tests.TestCase_RetevisRT16)
Testing Retevis RT16 clone ... ok
test_copy_all (tests.TestCase_RetevisRT16)
Testing Retevis RT16 copy all ... ok
test_detect (tests.TestCase_RetevisRT16)
Testing Retevis RT16 detect ... ok
test_edges (tests.TestCase_RetevisRT16)
Testing Retevis RT16 edges ... skipped 'No mutable memory locations found'
test_settings (tests.TestCase_RetevisRT16)
Testing Retevis RT16 settings ... ok
test_banks (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 brute force ... ok
test_clone (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 clone ... ok
test_copy_all (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 copy all ... ok
test_detect (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 detect ... ok
test_edges (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 edges ... ok
test_settings (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 settings ... ok
test_banks (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 banks ... ok
test_brute_force (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 brute force ... ok
test_clone (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 clone ... ok
test_copy_all (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 copy all ... ok
test_detect (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 detect ... ok
test_edges (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 edges ... ok
test_settings (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH brute force ... ok
test_clone (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH clone ... ok
test_copy_all (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH copy all ... ok
test_detect (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH detect ... ok
test_edges (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH edges ... ok
test_settings (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH settings ... ok
test_banks (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R brute force ... ok
test_clone (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R clone ... ok
test_copy_all (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R copy all ... ok
test_detect (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R detect ... ok
test_edges (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R edges ... ok
test_settings (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R settings ... ok
test_banks (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P brute force ... ok
test_clone (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P clone ... ok
test_copy_all (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P copy all ... ok
test_detect (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P detect ... ok
test_edges (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P edges ... ok
test_settings (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P settings ... ok
test_banks (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 brute force ... ok
test_clone (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 clone ... ok
test_copy_all (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 copy all ... ok
test_detect (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 detect ... ok
test_edges (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 edges ... ok
test_settings (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 settings ... ok
test_banks (tests.TestCase_IcomICP7)
Testing Icom IC-P7 banks ... ok
test_brute_force (tests.TestCase_IcomICP7)
Testing Icom IC-P7 brute force ... ok
test_clone (tests.TestCase_IcomICP7)
Testing Icom IC-P7 clone ... ok
test_copy_all (tests.TestCase_IcomICP7)
Testing Icom IC-P7 copy all ... ok
test_detect (tests.TestCase_IcomICP7)
Testing Icom IC-P7 detect ... ok
test_edges (tests.TestCase_IcomICP7)
Testing Icom IC-P7 edges ... ok
test_settings (tests.TestCase_IcomICP7)
Testing Icom IC-P7 settings ... ok
test_banks (tests.TestCase_BaofengF11)
Testing Baofeng F-11 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengF11)
Testing Baofeng F-11 brute force ... ok
test_clone (tests.TestCase_BaofengF11)
Testing Baofeng F-11 clone ... ok
test_copy_all (tests.TestCase_BaofengF11)
Testing Baofeng F-11 copy all ... ok
test_detect (tests.TestCase_BaofengF11)
Testing Baofeng F-11 detect ... ok
test_edges (tests.TestCase_BaofengF11)
Testing Baofeng F-11 edges ... ok
test_settings (tests.TestCase_BaofengF11)
Testing Baofeng F-11 settings ... ok
test_banks (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R brute force ... ok
test_clone (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R clone ... ok
test_copy_all (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R copy all ... ok
test_detect (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R detect ... ok
test_edges (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R edges ... ok
test_settings (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S brute force ... ok
test_clone (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S clone ... ok
test_copy_all (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S copy all ... ok
test_detect (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S detect ... ok
test_edges (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S edges ... ok
test_settings (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S settings ... ok
test_banks (tests.TestCase_KYDIP620)
Testing KYD IP-620 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KYDIP620)
Testing KYD IP-620 brute force ... ok
test_clone (tests.TestCase_KYDIP620)
Testing KYD IP-620 clone ... ok
test_copy_all (tests.TestCase_KYDIP620)
Testing KYD IP-620 copy all ... ok
test_detect (tests.TestCase_KYDIP620)
Testing KYD IP-620 detect ... ok
test_edges (tests.TestCase_KYDIP620)
Testing KYD IP-620 edges ... ok
test_settings (tests.TestCase_KYDIP620)
Testing KYD IP-620 settings ... ok
test_banks (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M brute force ... ok
test_clone (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M clone ... ok
test_copy_all (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M copy all ... ok
test_detect (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M detect ... ok
test_edges (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M edges ... ok
test_settings (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R brute force ... ok
test_clone (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R clone ... ok
test_copy_all (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R copy all ... ok
test_detect (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R detect ... ok
test_edges (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R edges ... ok
test_settings (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R settings ... ok
test_banks (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR banks ... ok
test_brute_force (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR brute force ... ok
test_clone (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR clone ... ok
test_copy_all (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR copy all ... ok
test_detect (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR detect ... ok
test_edges (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR edges ... ok
test_settings (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR settings ... ok
test_banks (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) brute force ... ok
test_clone (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) clone ... ok
test_copy_all (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) copy all ... ok
test_detect (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) detect ... ok
test_edges (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) edges ... ok
test_settings (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) settings ... ok
test_banks (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R brute force ... ok
test_clone (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R clone ... ok
test_copy_all (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R copy all ... ok
test_detect (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R detect ... ok
test_edges (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R edges ... ok
test_settings (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R settings ... ok
test_banks (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 brute force ... ok
test_clone (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 clone ... ok
test_copy_all (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 copy all ... ok
test_detect (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 detect ... ok
test_edges (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 edges ... ok
test_settings (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 settings ... ok
test_banks (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A brute force ... ok
test_clone (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A clone ... ok
test_copy_all (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A copy all ... ok
test_detect (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A detect ... ok
test_edges (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A edges ... ok
test_settings (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A settings ... ok
test_banks (tests.TestCase_KYDNC630A)
Testing KYD NC-630A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KYDNC630A)
Testing KYD NC-630A brute force ... ok
test_clone (tests.TestCase_KYDNC630A)
Testing KYD NC-630A clone ... ok
test_copy_all (tests.TestCase_KYDNC630A)
Testing KYD NC-630A copy all ... ok
test_detect (tests.TestCase_KYDNC630A)
Testing KYD NC-630A detect ... ok
test_edges (tests.TestCase_KYDNC630A)
Testing KYD NC-630A edges ... ok
test_settings (tests.TestCase_KYDNC630A)
Testing KYD NC-630A settings ... ok
test_banks (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 brute force ... ok
test_clone (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 clone ... ok
test_copy_all (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 copy all ... ok
test_detect (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 detect ... ok
test_edges (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 edges ... ok
test_settings (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 settings ... ok
test_banks (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M brute force ... ok
test_clone (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M clone ... ok
test_copy_all (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M copy all ... ok
test_detect (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M detect ... ok
test_edges (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M edges ... ok
test_settings (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_RetevisRT21)
Testing Retevis RT21 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT21)
Testing Retevis RT21 brute force ... ok
test_clone (tests.TestCase_RetevisRT21)
Testing Retevis RT21 clone ... ok
test_copy_all (tests.TestCase_RetevisRT21)
Testing Retevis RT21 copy all ... ok
test_detect (tests.TestCase_RetevisRT21)
Testing Retevis RT21 detect ... ok
test_edges (tests.TestCase_RetevisRT21)
Testing Retevis RT21 edges ... ok
test_settings (tests.TestCase_RetevisRT21)
Testing Retevis RT21 settings ... ok
test_banks (tests.TestCase_IcomICT70)
Testing Icom IC-T70 banks ... ok
test_brute_force (tests.TestCase_IcomICT70)
Testing Icom IC-T70 brute force ... ok
test_clone (tests.TestCase_IcomICT70)
Testing Icom IC-T70 clone ... ok
test_copy_all (tests.TestCase_IcomICT70)
Testing Icom IC-T70 copy all ... ok
test_detect (tests.TestCase_IcomICT70)
Testing Icom IC-T70 detect ... ok
test_edges (tests.TestCase_IcomICT70)
Testing Icom IC-T70 edges ... ok
test_settings (tests.TestCase_IcomICT70)
Testing Icom IC-T70 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 brute force ... ok
test_clone (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 clone ... ok
test_copy_all (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 copy all ... ok
test_detect (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 detect ... ok
test_edges (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 edges ... ok
test_settings (tests.TestCase_TYTTHUV88)
Testing TYT TH-UV88 settings ... ok
test_banks (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R brute force ... ok
test_clone (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R clone ... ok
test_copy_all (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R copy all ... ok
test_detect (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R detect ... ok
test_edges (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R edges ... ok
test_settings (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R settings ... ok
test_banks (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 banks ... ok
test_brute_force (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 brute force ... ok
test_clone (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 clone ... ok
test_copy_all (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 copy all ... ok
test_detect (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 detect ... ok
test_edges (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 edges ... ok
test_settings (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 brute force ... ok
test_clone (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 clone ... ok
test_copy_all (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 copy all ... ok
test_detect (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 detect ... ok
test_edges (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 edges ... ok
test_settings (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 settings ... ok
test_banks (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE banks ... ok
test_brute_force (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE brute force ... ok
test_clone (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE clone ... ok
test_copy_all (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE copy all ... ok
test_detect (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE detect ... ok
test_edges (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE edges ... ok
test_settings (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE settings ... ok
test_banks (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 brute force ... ok
test_clone (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 clone ... ok
test_copy_all (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 copy all ... ok
test_detect (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 detect ... ok
test_edges (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 edges ... ok
test_settings (tests.TestCase_MidlandDBR2500)
Testing Midland DBR2500 settings ... ok
test_banks (tests.TestCase_RetevisRT22)
Testing Retevis RT22 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT22)
Testing Retevis RT22 brute force ... ok
test_clone (tests.TestCase_RetevisRT22)
Testing Retevis RT22 clone ... ok
test_copy_all (tests.TestCase_RetevisRT22)
Testing Retevis RT22 copy all ... ok
test_detect (tests.TestCase_RetevisRT22)
Testing Retevis RT22 detect ... ok
test_edges (tests.TestCase_RetevisRT22)
Testing Retevis RT22 edges ... ok
test_settings (tests.TestCase_RetevisRT22)
Testing Retevis RT22 settings ... ok
test_banks (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H brute force ... ok
test_clone (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H clone ... ok
test_copy_all (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H copy all ... ok
test_detect (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H detect ... ok
test_edges (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H edges ... ok
test_settings (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) brute force ... ok
test_clone (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) clone ... ok
test_copy_all (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) copy all ... ok
test_detect (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) detect ... ok
test_edges (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) edges ... ok
test_settings (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) settings ... ok
test_banks (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 brute force ... ok
test_clone (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 clone ... ok
test_copy_all (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 copy all ... ok
test_detect (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 detect ... ok
test_edges (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 edges ... ok
test_settings (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 settings ... ok
test_banks (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R brute force ... ok
test_clone (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R clone ... ok
test_copy_all (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R copy all ... ok
test_detect (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R detect ... ok
test_edges (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R edges ... ok
test_settings (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R settings ... ok
test_banks (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 brute force ... ok
test_clone (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 clone ... ok
test_copy_all (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 copy all ... ok
test_detect (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 detect ... ok
test_edges (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 edges ... ok
test_settings (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R banks ... ok
test_brute_force (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R brute force ... ok
test_clone (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R clone ... ok
test_copy_all (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R copy all ... ok
test_detect (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R detect ... ok
test_edges (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R edges ... ok
test_settings (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R settings ... ok
test_banks (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D banks ... ok
test_brute_force (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D brute force ... ok
test_clone (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D clone ... ok
test_copy_all (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D copy all ... ok
test_detect (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D detect ... ok
test_edges (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D edges ... ok
test_settings (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D settings ... ok
test_banks (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M brute force ... ok
test_clone (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M clone ... ok
test_copy_all (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M copy all ... ok
test_detect (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M detect ... ok
test_edges (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M edges ... ok
test_settings (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M settings ... ok
test_banks (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS brute force ... ok
test_clone (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS clone ... ok
test_copy_all (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS copy all ... ok
test_detect (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS detect ... ok
test_edges (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS edges ... ok
test_settings (tests.TestCase_RetevisRT22FRS)
Testing Retevis RT22FRS settings ... ok
test_banks (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A brute force ... ok
test_clone (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A clone ... ok
test_copy_all (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A copy all ... ok
test_detect (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A detect ... ok
test_edges (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A edges ... ok
test_settings (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 brute force ... ok
test_clone (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 clone ... ok
test_copy_all (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 copy all ... ok
test_detect (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 detect ... ok
test_edges (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 edges ... ok
test_settings (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 settings ... ok
test_banks (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 brute force ... ok
test_clone (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 clone ... ok
test_copy_all (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 copy all ... ok
test_detect (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 detect ... ok
test_edges (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 edges ... ok
test_settings (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 settings ... ok
test_banks (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G banks ... ok
test_brute_force (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G brute force ... ok
test_clone (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G clone ... ok
test_copy_all (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G copy all ... ok
test_detect (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G detect ... ok
test_edges (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G edges ... ok
test_settings (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G settings ... ok
test_banks (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S brute force ... ok
test_clone (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S clone ... ok
test_copy_all (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S copy all ... ok
test_detect (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S detect ... ok
test_edges (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S edges ... skipped 'No mutable memory locations found'
test_settings (tests.TestCase_RetevisRT22S)
Testing Retevis RT22S settings ... ok
test_banks (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R banks ... ok
test_brute_force (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R brute force ... ok
test_clone (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R clone ... ok
test_copy_all (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R copy all ... ok
test_detect (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R detect ... ok
test_edges (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R edges ... ok
test_settings (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R settings ... ok
test_banks (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R brute force ... ok
test_clone (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R clone ... ok
test_copy_all (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R copy all ... ok
test_detect (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R detect ... ok
test_edges (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R edges ... ok
test_settings (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 banks ... ok
test_brute_force (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 brute force ... ok
test_clone (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 clone ... ok
test_copy_all (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 copy all ... ok
test_detect (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 detect ... ok
test_edges (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 edges ... ok
test_settings (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D banks ... ok
test_brute_force (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D brute force ... ok
test_clone (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D clone ... ok
test_copy_all (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D copy all ... ok
test_detect (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D detect ... ok
test_edges (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D edges ... ok
test_settings (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D settings ... ok
test_banks (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 brute force ... ok
test_clone (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 clone ... ok
test_copy_all (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 copy all ... ok
test_detect (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 detect ... ok
test_edges (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 edges ... ok
test_settings (tests.TestCase_VertexStandardFTL2011)
Testing Vertex Standard FTL-2011 settings ... ok
test_banks (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 brute force ... ok
test_clone (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 clone ... ok
test_copy_all (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 copy all ... ok
test_detect (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 detect ... ok
test_edges (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 edges ... ok
test_settings (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_RetevisRT23)
Testing Retevis RT23 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT23)
Testing Retevis RT23 brute force ... ok
test_clone (tests.TestCase_RetevisRT23)
Testing Retevis RT23 clone ... ok
test_copy_all (tests.TestCase_RetevisRT23)
Testing Retevis RT23 copy all ... ok
test_detect (tests.TestCase_RetevisRT23)
Testing Retevis RT23 detect ... ok
test_edges (tests.TestCase_RetevisRT23)
Testing Retevis RT23 edges ... ok
test_settings (tests.TestCase_RetevisRT23)
Testing Retevis RT23 settings ... ok
test_banks (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 brute force ... ok
test_clone (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 clone ... ok
test_copy_all (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 copy all ... ok
test_detect (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 detect ... ok
test_edges (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 edges ... ok
test_settings (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 settings ... ok
test_banks (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 brute force ... ok
test_clone (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 clone ... ok
test_copy_all (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 copy all ... ok
test_detect (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 detect ... ok
test_edges (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 edges ... ok
test_settings (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M brute force ... ok
test_clone (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M clone ... ok
test_copy_all (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M copy all ... ok
test_detect (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M detect ... ok
test_edges (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M edges ... ok
test_settings (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 brute force ... ok
test_clone (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 clone ... ok
test_copy_all (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 copy all ... ok
test_detect (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 detect ... ok
test_edges (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 edges ... ok
test_settings (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D banks ... ok
test_brute_force (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D brute force ... ok
test_clone (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D clone ... ok
test_copy_all (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D copy all ... ok
test_detect (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D detect ... ok
test_edges (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D edges ... ok
test_settings (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D settings ... ok
test_banks (tests.TestCase_RetevisRT26)
Testing Retevis RT26 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT26)
Testing Retevis RT26 brute force ... ok
test_clone (tests.TestCase_RetevisRT26)
Testing Retevis RT26 clone ... ok
test_copy_all (tests.TestCase_RetevisRT26)
Testing Retevis RT26 copy all ... ok
test_detect (tests.TestCase_RetevisRT26)
Testing Retevis RT26 detect ... ok
test_edges (tests.TestCase_RetevisRT26)
Testing Retevis RT26 edges ... ok
test_settings (tests.TestCase_RetevisRT26)
Testing Retevis RT26 settings ... ok
test_banks (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K brute force ... ok
test_clone (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K clone ... ok
test_copy_all (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K copy all ... ok
test_detect (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K detect ... ok
test_edges (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K edges ... ok
test_settings (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K settings ... ok
test_banks (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R banks ... ok
test_brute_force (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R brute force ... ok
test_clone (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R clone ... ok
test_copy_all (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R copy all ... ok
test_detect (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R detect ... ok
test_edges (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R edges ... ok
test_settings (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R settings ... ok
test_banks (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G banks ... ok
test_brute_force (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G brute force ... ok
test_clone (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G clone ... ok
test_copy_all (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G copy all ... ok
test_detect (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G detect ... ok
test_edges (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G edges ... ok
test_settings (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G settings ... ok
test_banks (tests.TestCase_RetevisRT622)
Testing Retevis RT622 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT622)
Testing Retevis RT622 brute force ... ok
test_clone (tests.TestCase_RetevisRT622)
Testing Retevis RT622 clone ... ok
test_copy_all (tests.TestCase_RetevisRT622)
Testing Retevis RT622 copy all ... ok
test_detect (tests.TestCase_RetevisRT622)
Testing Retevis RT622 detect ... ok
test_edges (tests.TestCase_RetevisRT622)
Testing Retevis RT622 edges ... ok
test_settings (tests.TestCase_RetevisRT622)
Testing Retevis RT622 settings ... ok
test_banks (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 brute force ... ok
test_clone (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 clone ... ok
test_copy_all (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 copy all ... ok
test_detect (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 detect ... ok
test_edges (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 edges ... ok
test_settings (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 settings ... ok
test_banks (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D brute force ... ok
test_clone (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D clone ... ok
test_copy_all (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D copy all ... ok
test_detect (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D detect ... ok
test_edges (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D edges ... ok
test_settings (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_QYTKT8R)
Testing QYT KT-8R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_QYTKT8R)
Testing QYT KT-8R brute force ... ok
test_clone (tests.TestCase_QYTKT8R)
Testing QYT KT-8R clone ... ok
test_copy_all (tests.TestCase_QYTKT8R)
Testing QYT KT-8R copy all ... ok
test_detect (tests.TestCase_QYTKT8R)
Testing QYT KT-8R detect ... ok
test_edges (tests.TestCase_QYTKT8R)
Testing QYT KT-8R edges ... ok
test_settings (tests.TestCase_QYTKT8R)
Testing QYT KT-8R settings ... ok
test_banks (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 brute force ... ok
test_clone (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 clone ... ok
test_copy_all (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 copy all ... ok
test_detect (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 detect ... ok
test_edges (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 edges ... ok
test_settings (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 settings ... ok
test_banks (tests.TestCase_RetevisRT76)
Testing Retevis RT76 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT76)
Testing Retevis RT76 brute force ... ok
test_clone (tests.TestCase_RetevisRT76)
Testing Retevis RT76 clone ... ok
test_copy_all (tests.TestCase_RetevisRT76)
Testing Retevis RT76 copy all ... ok
test_detect (tests.TestCase_RetevisRT76)
Testing Retevis RT76 detect ... ok
test_edges (tests.TestCase_RetevisRT76)
Testing Retevis RT76 edges ... skipped 'No mutable memory locations found'
test_settings (tests.TestCase_RetevisRT76)
Testing Retevis RT76 settings ... ok
test_banks (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D brute force ... ok
test_clone (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D clone ... ok
test_copy_all (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D copy all ... ok
test_detect (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D detect ... ok
test_edges (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D edges ... ok
test_settings (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D settings ... ok
test_banks (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D brute force ... ok
test_clone (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D clone ... ok
test_copy_all (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D copy all ... ok
test_detect (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D detect ... ok
test_edges (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D edges ... ok
test_settings (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D settings ... ok
test_banks (tests.TestCase_RetevisRT87)
Testing Retevis RT87 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT87)
Testing Retevis RT87 brute force ... ok
test_clone (tests.TestCase_RetevisRT87)
Testing Retevis RT87 clone ... ok
test_copy_all (tests.TestCase_RetevisRT87)
Testing Retevis RT87 copy all ... ok
test_detect (tests.TestCase_RetevisRT87)
Testing Retevis RT87 detect ... ok
test_edges (tests.TestCase_RetevisRT87)
Testing Retevis RT87 edges ... ok
test_settings (tests.TestCase_RetevisRT87)
Testing Retevis RT87 settings ... ok
test_banks (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR banks ... ok
test_brute_force (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR brute force ... ok
test_clone (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR clone ... ok
test_copy_all (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR copy all ... ok
test_detect (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR detect ... ok
test_edges (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR edges ... ok
test_settings (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR settings ... ok
test_banks (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 brute force ... ok
test_clone (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 clone ... ok
test_copy_all (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 copy all ... ok
test_detect (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 detect ... ok
test_edges (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 edges ... ok
test_settings (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 settings ... ok
test_banks (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D brute force ... ok
test_clone (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D clone ... ok
test_copy_all (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D copy all ... ok
test_detect (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D detect ... ok
test_edges (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D edges ... ok
test_settings (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D settings ... ok
test_banks (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 brute force ... ok
test_clone (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 clone ... ok
test_copy_all (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 copy all ... ok
test_detect (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 detect ... ok
test_edges (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 edges ... ok
test_settings (tests.TestCase_RetevisRT9000D136174)
Testing Retevis RT9000D_136-174 settings ... ok
test_banks (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE banks ... ok
test_brute_force (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE brute force ... ok
test_clone (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE clone ... ok
test_copy_all (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE copy all ... ok
test_detect (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE detect ... ok
test_edges (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE edges ... ok
test_settings (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE settings ... ok
test_banks (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR banks ... ok
test_brute_force (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR brute force ... ok
test_clone (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR clone ... ok
test_copy_all (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR copy all ... ok
test_detect (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR detect ... ok
test_edges (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR edges ... ok
test_settings (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR settings ... ok
----------------------------------------------------------------------
Ran 1148 tests in 497.845s
OK (skipped=162)
struct memory {
bbcd rx_freq[4];
bbcd tx_freq[4];
lbcd rx_tone[2];
lbcd tx_tone[2];
u8 unknown10:5,
highpower:1,
unknown11:2;
u8 unknown20:4,
narrow:1,
unknown21:3;
u8 unknown31:1,
scanadd:1,
unknown32:6;
u8 unknown4;
};
struct name {
char name[7];
};
#seekto 0x0010;
struct memory channels[128];
#seekto 0x08C0;
struct name names[128];
#seekto 0x2020;
struct memory vfo1;
struct memory vfo2;
style create: /chirp/.tox/style
style installdeps: pep8==1.6.2, future
style inst: /chirp/.tox/.tmp/package/1/chirp-0.3.0dev.zip
style installed: DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.,chirp==0.3.0.dev0,configparser==3.7.4,contextlib2==0.5.5,filelock==3.0.12,future==0.15.2,importlib-metadata==0.18,Mako==1.0.3,MarkupSafe==0.23,mercurial==3.7.3,packaging==19.0,pathlib2==2.3.4,pep8==1.6.2,pluggy==0.12.0,py==1.8.0,pygobject==3.20.0,pyparsing==2.4.0,pyserial==3.0.1,scandir==1.10.0,six==1.12.0,toml==0.10.0,tox==3.13.2,virtualenv==16.6.1,zipp==0.5.2
style run-test-pre: PYTHONHASHSEED='1086925647'
style run-test: commands[0] | python ./tools/cpep8.py
./chirp/ui/mainapp.py:546:35: E711 comparison to None should be 'if cond is None:'
./chirp/ui/mainapp.py:2108:80: E501 line too long (81 > 79 characters)
ERROR: InvocationError for command /chirp/.tox/style/bin/python ./tools/cpep8.py (exited with code 1)
___________________________________ summary ____________________________________
unit: commands succeeded
driver: commands succeeded
ERROR: style: commands failed
Build step 'Execute shell' marked build as failure
Email was triggered for: Failure
Sending email for trigger: Failure
1
1
[chirp_devel] [PATCH] Minor UI tweak, do not show empty header in tree view column. Fixes #9397
by Kosta A. 29 Sep '21
by Kosta A. 29 Sep '21
29 Sep '21
# HG changeset patch
# User Kosta A. <ve7kcy(a)gmail.com>
# Date 1632859901 25200
# Tue Sep 28 13:11:41 2021 -0700
# Branch ui-fix
# Node ID 2bf6e8155e7edfbe02e51187e9da3d3ca6fce051
# Parent 5aa2294d78ea241c6573dcf1929475b072e73685
Minor UI tweak, do not show empty header in tree view column. Fixes #9397.
diff --git a/chirp/ui/settingsedit.py b/chirp/ui/settingsedit.py
--- a/chirp/ui/settingsedit.py
+++ b/chirp/ui/settingsedit.py
@@ -48,8 +48,9 @@
self._store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT)
self._view = gtk.TreeView(self._store)
self._view.get_selection().connect("changed", self._view_changed_cb)
- self._view.append_column(
- gtk.TreeViewColumn("", gtk.CellRendererText(), text=0))
+ column = gtk.TreeViewColumn("", gtk.CellRendererText(), text=0)
+ #column.set_widget(gtk.Label())
+ self._view.append_column(column)
self._view.show()
scrolled_window = gtk.ScrolledWindow()
scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
3
2
[chirp_devel] [PATCH] Minor UI tweak, do not show empty header in tree view column. Fixes #9397
by Kosta A. 29 Sep '21
by Kosta A. 29 Sep '21
29 Sep '21
# HG changeset patch
# User Kosta A. <ve7kcy(a)gmail.com>
# Date 1632859901 25200
# Tue Sep 28 13:11:41 2021 -0700
# Branch ui-fix
# Node ID 62d81b5019d77256fbd77ab762b15188b72f35ee
# Parent 5aa2294d78ea241c6573dcf1929475b072e73685
Minor UI tweak, do not show empty header in tree view column. Fixes #9397.
diff --git a/chirp/ui/settingsedit.py b/chirp/ui/settingsedit.py
--- a/chirp/ui/settingsedit.py
+++ b/chirp/ui/settingsedit.py
@@ -48,8 +48,9 @@
self._store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT)
self._view = gtk.TreeView(self._store)
self._view.get_selection().connect("changed", self._view_changed_cb)
- self._view.append_column(
- gtk.TreeViewColumn("", gtk.CellRendererText(), text=0))
+ column = gtk.TreeViewColumn("", gtk.CellRendererText(), text=0)
+ column.set_widget(gtk.Label())
+ self._view.append_column(column)
self._view.show()
scrolled_window = gtk.ScrolledWindow()
scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
2
1
[chirp_devel] [PATCH] [wxui] Add "Open Stock Config" submenu to "File" menu #9403
by Joseph.P.Scanlan@n7xsd.us 29 Sep '21
by Joseph.P.Scanlan@n7xsd.us 29 Sep '21
29 Sep '21
# HG changeset patch
# User <Joseph.P.Scanlan(a)n7xsd.us>
# Date 1632944620 25200
# Wed Sep 29 12:43:40 2021 -0700
# Branch py3
# Node ID 065286ef952577c1e629c745b58a0d3798dbee4b
# Parent 9fb5b8995942e5d2d19090967aa2d591c37eb796
[wxui] Add "Open Stock Config" submenu to "File" menu #9403
The "Open Stock Config" submenu lists the CSV files in
~/.chirp/stock_configs. Selecting a file opens it.
This patch does not create the stock_configs directory or
any files in it.
Stock configs are not added to the "Open Recent"
submenu when opened.
diff -r 9fb5b8995942 -r 065286ef9525 chirp/wxui/main.py
--- a/chirp/wxui/main.py Sun Sep 26 16:30:23 2021 -0700
+++ b/chirp/wxui/main.py Wed Sep 29 12:43:40 2021 -0700
@@ -18,6 +18,8 @@
from chirp.wxui import settingsedit
from chirp import CHIRP_VERSION
+from fnmatch import fnmatch
+
EditorSetChanged, EVT_EDITORSET_CHANGED = wx.lib.newevent.NewCommandEvent()
CONF = config.get()
LOG = logging.getLogger(__name__)
@@ -25,6 +27,7 @@
EMPTY_MENU_LABEL = '(none)'
KEEP_RECENT = 8
OPEN_RECENT_MENU = None
+OPEN_STOCK_CONFIG_MENU = None
class ChirpEditorSet(wx.Panel):
def __init__(self, radio, filename, *a, **k):
@@ -194,6 +197,24 @@
open_item = file_menu.Append(wx.ID_OPEN)
self.Bind(wx.EVT_MENU, self._menu_open, open_item)
+ stock_dir = platform.get_platform().config_file("stock_configs")
+ sconfigs = []
+ if os.path.isdir(stock_dir):
+ for fn in os.listdir(stock_dir):
+ if fnmatch(fn, "*.csv"):
+ config, ext = os.path.splitext(fn)
+ sconfigs.append(config)
+ sconfigs.sort()
+ if len(sconfigs):
+ self.OPEN_STOCK_CONFIG_MENU = wx.Menu()
+ for fn in sconfigs:
+ submenu_item = self.OPEN_STOCK_CONFIG_MENU.Append(
+ wx.ID_ANY, fn)
+ self.Bind(wx.EVT_MENU,
+ self._menu_open_stock_config, submenu_item)
+ file_menu.AppendSubMenu(self.OPEN_STOCK_CONFIG_MENU,
+ "Open Stock Config")
+
self.OPEN_RECENT_MENU = wx.Menu()
i = 0
fn = CONF.get("recent%i" % i, "state")
@@ -326,6 +347,13 @@
tb.Realize()
def adj_menu_open_recent(self, filename):
+ ### Don't add stock config files to the recent files list
+ stock_dir = platform.get_platform().config_file("stock_configs")
+ this_dir = os.path.dirname(filename)
+ if (stock_dir and os.path.exists(stock_dir) and
+ this_dir and os.path.samefile(stock_dir, this_dir)):
+ return
+
### Travel the Open Recent menu looking for filename
found_mi = None
empty_mi = None
@@ -451,6 +479,13 @@
config._CONFIG.save()
self.open_file(str(filename))
+ def _menu_open_stock_config(self, event):
+ stock_dir = platform.get_platform().config_file("stock_configs")
+ fn = self.OPEN_STOCK_CONFIG_MENU.FindItemById(event.GetId()).GetLabel()
+ fn += ".csv"
+ filename = os.path.join(stock_dir, fn)
+ self.open_file(filename)
+
def _menu_open_recent(self, event):
filename = self.OPEN_RECENT_MENU.FindItemById(event.GetId()).GetLabel()
self.open_file(filename)
1
0
[chirp_devel] [PATCH] Supress console spew from python-future warning in non-debug builds
by Kosta A. 29 Sep '21
by Kosta A. 29 Sep '21
29 Sep '21
# HG changeset patch
# User Kosta A. <ve7kcy(a)gmail.com>
# Date 1632713960 25200
# Sun Sep 26 20:39:20 2021 -0700
# Node ID 5aa2294d78ea241c6573dcf1929475b072e73685
# Parent 3a40534ccc6e58d9818224eb8182bb62499fac80
Supress console spew from python-future warning in non-debug builds.
diff --git a/chirp/drivers/anytone778uv.py b/chirp/drivers/anytone778uv.py
--- a/chirp/drivers/anytone778uv.py
+++ b/chirp/drivers/anytone778uv.py
@@ -60,7 +60,7 @@
has_future = True
except ImportError:
has_future = False
- LOG.warning('python-future package is not '
+ LOG.debug('python-future package is not '
'available; %s requires it' % __name__)
diff --git a/chirp/drivers/ga510.py b/chirp/drivers/ga510.py
--- a/chirp/drivers/ga510.py
+++ b/chirp/drivers/ga510.py
@@ -17,7 +17,7 @@
has_future = True
except ImportError:
has_future = False
- LOG.warning('python-future package is not available; '
+ LOG.debug('python-future package is not available; '
'%s requires it' % __name__)
# GA510 also has DTCS code 645
diff --git a/chirp/drivers/ic2730.py b/chirp/drivers/ic2730.py
--- a/chirp/drivers/ic2730.py
+++ b/chirp/drivers/ic2730.py
@@ -35,7 +35,7 @@
from builtins import bytes
except ImportError:
HAS_FUTURE = False
- LOG.warning('python-future package is not '
+ LOG.debug('python-future package is not '
'available; %s requires it' % __name__)
MEM_FORMAT = """
diff --git a/chirp/drivers/tk8180.py b/chirp/drivers/tk8180.py
--- a/chirp/drivers/tk8180.py
+++ b/chirp/drivers/tk8180.py
@@ -36,7 +36,7 @@
has_future = True
except ImportError:
has_future = False
- LOG.warning('python-future package is not '
+ LOG.debug('python-future package is not '
'available; %s requires it' % __name__)
diff --git a/chirp/drivers/tmd710.py b/chirp/drivers/tmd710.py
--- a/chirp/drivers/tmd710.py
+++ b/chirp/drivers/tmd710.py
@@ -36,7 +36,7 @@
from builtins import bytes
except ImportError:
HAS_FUTURE = False
- LOG.warning('python-future package is not '
+ LOG.debug('python-future package is not '
'available; %s requires it' % __name__)
BAUD = 0
4
3
[chirp_devel] [PATCH] Prevent memory editor from always loading last memory in memory range twice. Fixes #9401
by Kosta A. 28 Sep '21
by Kosta A. 28 Sep '21
28 Sep '21
# HG changeset patch
# User Kosta A. <ve7kcy(a)gmail.com>
# Date 1632898724 25200
# Tue Sep 28 23:58:44 2021 -0700
# Branch misc
# Node ID b63e73d64098798c1bcbb17ea98a5c11c962a20a
# Parent d156d3a46b7e6cbce985dc14186f0e07b5d3016b
Prevent memory editor from always loading last memory in memory range twice. Fixes #9401
diff --git a/chirp/ui/memedit.py b/chirp/ui/memedit.py
--- a/chirp/ui/memedit.py
+++ b/chirp/ui/memedit.py
@@ -1390,7 +1390,7 @@
# Run low priority jobs to get the rest of the memories
hi = int(self.hi_limit_adj.get_value())
- for i in range(hi, max+1):
+ for i in range(hi+1, max+1):
job = common.RadioJob(None, "get_memory", i)
job.set_desc(_("Getting memory {number}").format(number=i))
self.rthread.submit(job, 10)
1
0
[chirp_devel] [PATCH] Prevent re-entrant calls to 'update_recent_files' when opening a file from the 'Recent Files' menu action. Fixes #9399
by Kosta A. 28 Sep '21
by Kosta A. 28 Sep '21
28 Sep '21
# HG changeset patch
# User Kosta A. <ve7kcy(a)gmail.com>
# Date 1632716707 25200
# Sun Sep 26 21:25:07 2021 -0700
# Branch update-recent
# Node ID a7f62387fcaa2bacbaabfce740bce6bb20e98156
# Parent 5aa2294d78ea241c6573dcf1929475b072e73685
Prevent re-entrant calls to 'update_recent_files' when opening a file from the 'Recent Files' menu action. Fixes #9399.
Gtk was failing on this and was sending an error message to the console.
diff --git a/chirp/ui/mainapp.py b/chirp/ui/mainapp.py
--- a/chirp/ui/mainapp.py
+++ b/chirp/ui/mainapp.py
@@ -540,9 +540,13 @@
CONF.set(key, fn, "state")
else:
CONF.remove_option(key, "state")
+ self.recent_files = None
def update_recent_files(self):
- recent_files = self._get_recent_list()
+ if (not self.recent_files == None):
+ return
+
+ self.recent_files = self._get_recent_list()
for index in range(0, KEEP_RECENT):
action_name = "recent%i" % index
path = "/MenuBar/file/recent"
@@ -552,8 +556,8 @@
old_action.set_visible(False)
self.menu_ag.remove_action(old_action)
- if (index < len(recent_files)):
- fname = recent_files[index]
+ if (index < len(self.recent_files)):
+ fname = self.recent_files[index]
widget_label = os.path.basename(fname).replace("_", "__")
widget_tip = _("Open recent file") + (" {name}").format(
name=fname)
@@ -583,11 +587,9 @@
recent_files.append(fname)
self._set_recent_list(recent_files)
- self.update_recent_files()
def clear_recent_files(self):
self._set_recent_list([])
- self.update_recent_files()
def import_stock_config(self, action, config):
eset = self.get_current_editorset()
@@ -2092,6 +2094,9 @@
self.add_accel_group(self.menu_uim.get_accel_group())
+ self.recentmenu = self.menu_uim.get_widget(
+ "/MenuBar/file/recent")
+
self.infomenu = self.menu_uim.get_widget(
"/MenuBar/help/clone_information")
@@ -2100,6 +2105,7 @@
# Initialize
self.do_toggle_developer(self.menu_ag.get_action("developer"))
+ self.recentmenu.connect("activate", lambda a: self.update_recent_files())
return self.menu_uim.get_widget("/MenuBar")
@@ -2325,6 +2331,7 @@
d.destroy()
CONF.set_bool("warned_about_reporting", True)
+ self.recent_files = None
self.update_recent_files()
try:
self.update_stock_configs()
1
0
# HG changeset patch
# User Kosta A. <ve7kcy(a)gmail.com>
# Date 1632714516 25200
# Sun Sep 26 20:48:36 2021 -0700
# Node ID d3727332f2854d76d0e863c150ac36a5e776c9af
# Parent 5aa2294d78ea241c6573dcf1929475b072e73685
Prevent memory for last memory being twice.
diff --git a/chirp/ui/memedit.py b/chirp/ui/memedit.py
--- a/chirp/ui/memedit.py
+++ b/chirp/ui/memedit.py
@@ -1394,7 +1394,7 @@
# Run low priority jobs to get the rest of the memories
hi = int(self.hi_limit_adj.get_value())
- for i in range(hi, max+1):
+ for i in range(hi+1, max+1):
job = common.RadioJob(None, "get_memory", i)
job.set_desc(_("Getting memory {number}").format(number=i))
self.rthread.submit(job, 10)
3
2