Developers
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 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
- 3 participants
- 2972 discussions
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1472946898 14400
# Node ID 75cb01b8fb0d0a0f523db839a1eb876839861050
# Parent 617ef175811dcf0d49b8dba8769e845972ebf672
[LT-725UV] Add Support for LUITON LT-725UV
This patch adds basic support for the LUITON LT-725UV mobile radio.
#3745
diff -r 617ef175811d -r 75cb01b8fb0d chirp/drivers/lt725uv.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/lt725uv.py Sat Sep 03 19:54:58 2016 -0400
@@ -0,0 +1,763 @@
+# Copyright 2016:
+# * Jim Unroe KC9HI, <rock.unroe(a)gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import time
+import struct
+import logging
+import re
+
+LOG = logging.getLogger(__name__)
+
+from chirp import chirp_common, directory, memmap
+from chirp import bitwise, errors, util
+from chirp.settings import RadioSettingGroup, RadioSetting, \
+ RadioSettingValueBoolean, RadioSettingValueList, \
+ RadioSettingValueString, RadioSettingValueInteger, \
+ RadioSettingValueFloat, RadioSettings
+from textwrap import dedent
+
+MEM_FORMAT = """
+#seekto 0x0200;
+struct {
+ u8 unknown1;
+ u8 volume;
+ u8 unknown2[2];
+ u8 wtled;
+ u8 rxled;
+ u8 txled;
+ u8 ledsw;
+ u8 beep;
+ u8 ring;
+ u8 bcl;
+ u8 tot;
+} settings;
+
+struct vfo {
+ u8 unknown1[2];
+ u32 rxfreq;
+ u8 unknown2[8];
+ u8 power;
+ u8 unknown3[3];
+ u24 offset;
+ u32 step;
+ u8 sql;
+};
+
+#seekto 0x0300;
+struct {
+ struct vfo vfoa;
+} upper;
+
+#seekto 0x0380;
+struct {
+ struct vfo vfob;
+} lower;
+
+struct mem {
+ u32 rxfreq;
+ u16 is_rxdigtone:1,
+ rxdtcs_pol:1,
+ rxtone:14;
+ u8 recvmode;
+ u32 txfreq;
+ u16 is_txdigtone:1,
+ txdtcs_pol:1,
+ txtone:14;
+ u8 botsignal;
+ u8 eotsignal;
+ u8 power:1,
+ wide:1,
+ compandor:1
+ scrambler:1
+ unknown:4;
+ u8 namelen;
+ u8 name[6];
+ u8 unused;
+};
+
+#seekto 0x0400;
+struct mem upper_memory[128];
+
+#seekto 0x1000;
+struct mem lower_memory[128];
+
+"""
+
+MEM_SIZE = 0x1C00
+BLOCK_SIZE = 0x40
+STIMEOUT = 2
+
+LIST_RECVMODE = ["", "QT/DQT", "QT/DQT + Signaling"]
+LIST_SIGNAL = ["Off"] + ["DTMF%s" % x for x in range(1, 9)] + \
+ ["DTMF%s + Identity" % x for x in range(1, 9)] + \
+ ["Identity code"]
+LIST_POWER = ["Low", "Mid", "High"]
+LIST_COLOR = ["Off", "Orange", "Blue", "Purple"]
+LIST_LEDSW = ["Auto", "On"]
+LIST_RING = ["Off"] + ["%s seconds" % x for x in range(1, 10)]
+LIST_TIMEOUT = ["Off"] + ["%s seconds" % x for x in range(30, 630, 30)]
+
+
+def _clean_buffer(radio):
+ radio.pipe.timeout = 0.005
+ junk = radio.pipe.read(256)
+ radio.pipe.timeout = STIMEOUT
+ if junk:
+ Log.debug("Got %i bytes of junk before starting" % len(junk))
+
+
+def _rawrecv(radio, amount):
+ """Raw read from the radio device"""
+ data = ""
+ try:
+ data = radio.pipe.read(amount)
+ except:
+ _exit_program_mode(radio)
+ msg = "Generic error reading data from radio; check your cable."
+ raise errors.RadioError(msg)
+
+ if len(data) != amount:
+ _exit_program_mode(radio)
+ msg = "Error reading data from radio: not the amount of data we want."
+ raise errors.RadioError(msg)
+
+ return data
+
+
+def _rawsend(radio, data):
+ """Raw send to the radio device"""
+ try:
+ radio.pipe.write(data)
+ except:
+ raise errors.RadioError("Error sending data to radio")
+
+
+def _make_frame(cmd, addr, length, data=""):
+ """Pack the info in the headder format"""
+ frame = struct.pack(">4sHH", cmd, addr, length)
+ # add the data if set
+ if len(data) != 0:
+ frame += data
+ # return the data
+ return frame
+
+
+def _recv(radio, addr, length):
+ """Get data from the radio """
+
+ data = _rawrecv(radio, length)
+
+ # DEBUG
+ LOG.info("Response:")
+ LOG.debug(util.hexprint(data))
+
+ return data
+
+
+def _do_ident(radio):
+ """Put the radio in PROGRAM mode & identify it"""
+ # set the serial discipline
+ radio.pipe.baudrate = 19200
+ radio.pipe.parity = "N"
+ radio.pipe.timeout = STIMEOUT
+
+ # flush input buffer
+ _clean_buffer(radio)
+
+ magic = "PROM_LIN"
+
+ _rawsend(radio, magic)
+
+ ack = _rawrecv(radio, 1)
+ if ack != "\x06":
+ _exit_program_mode(radio)
+ if ack:
+ LOG.debug(repr(ack))
+ raise errors.RadioError("Radio did not respond")
+
+ return True
+
+
+def _exit_program_mode(radio):
+ endframe = "EXIT"
+ _rawsend(radio, endframe)
+
+
+def _download(radio):
+ """Get the memory map"""
+
+ # put radio in program mode and identify it
+ _do_ident(radio)
+
+ # UI progress
+ status = chirp_common.Status()
+ status.cur = 0
+ status.max = MEM_SIZE / BLOCK_SIZE
+ status.msg = "Cloning from radio..."
+ radio.status_fn(status)
+
+ data = ""
+ for addr in range(0, MEM_SIZE, BLOCK_SIZE):
+ frame = _make_frame("READ", addr, BLOCK_SIZE)
+ # DEBUG
+ LOG.info("Request sent:")
+ LOG.debug(util.hexprint(frame))
+
+ # sending the read request
+ _rawsend(radio, frame)
+
+ # now we read
+ d = _recv(radio, addr, BLOCK_SIZE)
+
+ # aggregate the data
+ data += d
+
+ # UI Update
+ status.cur = addr / BLOCK_SIZE
+ status.msg = "Cloning from radio..."
+ radio.status_fn(status)
+
+ _exit_program_mode(radio)
+
+ data += "LT-725UV"
+
+ return data
+
+
+def _upload(radio):
+ """Upload procedure"""
+
+ # put radio in program mode and identify it
+ _do_ident(radio)
+
+ # UI progress
+ status = chirp_common.Status()
+ status.cur = 0
+ status.max = MEM_SIZE / BLOCK_SIZE
+ status.msg = "Cloning to radio..."
+ radio.status_fn(status)
+
+ # the fun starts here
+ for addr in range(0, MEM_SIZE, BLOCK_SIZE):
+ # sending the data
+ data = radio.get_mmap()[addr:addr + BLOCK_SIZE]
+
+ frame = _make_frame("WRIE", addr, BLOCK_SIZE, data)
+
+ _rawsend(radio, frame)
+
+ # receiving the response
+ ack = _rawrecv(radio, 1)
+ if ack != "\x06":
+ _exit_program_mode(radio)
+ msg = "Bad ack writing block 0x%04x" % addr
+ raise errors.RadioError(msg)
+
+ # UI Update
+ status.cur = addr / BLOCK_SIZE
+ status.msg = "Cloning to radio..."
+ radio.status_fn(status)
+
+ _exit_program_mode(radio)
+
+
+def model_match(cls, data):
+ """Match the opened/downloaded image to the correct version"""
+ rid = data[0x1C00:0x1C08]
+
+ if rid == cls.MODEL:
+ return True
+
+ return False
+
+
+def _split(rf, f1, f2):
+ """Returns False if the two freqs are in the same band (no split)
+ or True otherwise"""
+
+ # determine if the two freqs are in the same band
+ for low, high in rf.valid_bands:
+ if f1 >= low and f1 <= high and \
+ f2 >= low and f2 <= high:
+ # if the two freqs are on the same Band this is not a split
+ return False
+
+ # if you get here is because the freq pairs are split
+ return True
+
+
+(a)directory.register
+class LT725UV(chirp_common.CloneModeRadio,
+ chirp_common.ExperimentalRadio):
+ """LUITON LT-725UV Radio"""
+ VENDOR = "LUITON"
+ MODEL = "LT-725UV"
+ MODES = ["NFM", "FM"]
+ TONES = chirp_common.TONES
+ DTCS_CODES = sorted(chirp_common.DTCS_CODES + [645])
+ NAME_LENGTH = 6
+ DTMF_CHARS = list("0123456789ABCD*#")
+
+ VALID_BANDS = [(136000000, 176000000),
+ (400000000, 480000000)]
+
+ # valid chars on the LCD
+ VALID_CHARS = chirp_common.CHARSET_ALPHANUMERIC + \
+ "`{|}!\"#$%&'()*+,-./:;<=>?@[]^_"
+
+ @classmethod
+ def get_prompts(cls):
+ rp = chirp_common.RadioPrompts()
+ rp.experimental = \
+ ('The UV-50X3 driver is a beta version.\n'
+ '\n'
+ 'Please save an unedited copy of your first successful\n'
+ 'download to a CHIRP Radio Images(*.img) file.'
+ )
+ rp.pre_download = _(dedent("""\
+ Follow this instructions to download your info:
+
+ 1 - Turn off your radio
+ 2 - Connect your interface cable
+ 3 - Turn on your radio
+ 4 - Do the download of your radio data
+ """))
+ rp.pre_upload = _(dedent("""\
+ Follow this instructions to upload your info:
+
+ 1 - Turn off your radio
+ 2 - Connect your interface cable
+ 3 - Turn on your radio
+ 4 - Do the upload of your radio data
+ """))
+ return rp
+
+ def get_features(self):
+ rf = chirp_common.RadioFeatures()
+ rf.has_settings = True
+ rf.has_bank = False
+ rf.has_tuning_step = False
+ rf.can_odd_split = True
+ rf.has_name = True
+ rf.has_offset = True
+ rf.has_mode = True
+ rf.has_dtcs = True
+ rf.has_rx_dtcs = True
+ rf.has_dtcs_polarity = True
+ rf.has_ctone = True
+ rf.has_cross = True
+ rf.has_sub_devices = self.VARIANT == ""
+ rf.valid_modes = self.MODES
+ rf.valid_characters = self.VALID_CHARS
+ rf.valid_duplexes = ["", "-", "+", "split", "off"]
+ rf.valid_tmodes = ['', 'Tone', 'TSQL', 'DTCS', 'Cross']
+ rf.valid_cross_modes = [
+ "Tone->Tone",
+ "DTCS->",
+ "->DTCS",
+ "Tone->DTCS",
+ "DTCS->Tone",
+ "->Tone",
+ "DTCS->DTCS"]
+ rf.valid_skips = []
+ rf.valid_name_length = self.NAME_LENGTH
+ rf.valid_dtcs_codes = self.DTCS_CODES
+ rf.valid_bands = self.VALID_BANDS
+ rf.memory_bounds = (1, 128)
+ return rf
+
+ def get_sub_devices(self):
+ return [LT725UVUpper(self._mmap), LT725UVLower(self._mmap)]
+
+ def sync_in(self):
+ """Download from radio"""
+ try:
+ data = _download(self)
+ except errors.RadioError:
+ # Pass through any real errors we raise
+ raise
+ except:
+ # If anything unexpected happens, make sure we raise
+ # a RadioError and log the problem
+ LOG.exception('Unexpected error during download')
+ raise errors.RadioError('Unexpected error communicating '
+ 'with the radio')
+ self._mmap = memmap.MemoryMap(data)
+ self.process_mmap()
+
+ def sync_out(self):
+ """Upload to radio"""
+ try:
+ _upload(self)
+ except:
+ # If anything unexpected happens, make sure we raise
+ # a RadioError and log the problem
+ LOG.exception('Unexpected error during upload')
+ raise errors.RadioError('Unexpected error communicating '
+ 'with the radio')
+
+ def process_mmap(self):
+ """Process the mem map into the mem object"""
+ self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
+
+ def get_raw_memory(self, number):
+ return repr(self._memobj.memory[number - 1])
+
+ def _memory_obj(self, suffix=""):
+ return getattr(self._memobj, "%s_memory%s" % (self._vfo, suffix))
+
+ def _get_dcs(self, val):
+ return int(str(val)[2:-18])
+
+ def _set_dcs(self, val):
+ return int(str(val), 16)
+
+ def get_memory(self, number):
+ _mem = self._memory_obj()[number - 1]
+
+ mem = chirp_common.Memory()
+ mem.number = number
+
+ if _mem.get_raw()[0] == "\xff":
+ mem.empty = True
+ return mem
+
+ mem.freq = int(_mem.rxfreq) * 10
+
+ if _mem.txfreq == 0xFFFFFFFF:
+ # TX freq not set
+ mem.duplex = "off"
+ mem.offset = 0
+ elif int(_mem.rxfreq) == int(_mem.txfreq):
+ mem.duplex = ""
+ mem.offset = 0
+ elif _split(self.get_features(), mem.freq, int(_mem.txfreq) * 10):
+ mem.duplex = "split"
+ mem.offset = int(_mem.txfreq) * 10
+ else:
+ mem.duplex = int(_mem.rxfreq) > int(_mem.txfreq) and "-" or "+"
+ mem.offset = abs(int(_mem.rxfreq) - int(_mem.txfreq)) * 10
+
+ for char in _mem.name[:_mem.namelen]:
+ mem.name += chr(char)
+
+ dtcs_pol = ["N", "N"]
+
+ if _mem.rxtone == 0x3FFF:
+ rxmode = ""
+ elif _mem.is_rxdigtone == 0:
+ # ctcss
+ rxmode = "Tone"
+ mem.ctone = int(_mem.rxtone) / 10.0
+ else:
+ # digital
+ rxmode = "DTCS"
+ mem.rx_dtcs = self._get_dcs(_mem.rxtone)
+ if _mem.rxdtcs_pol == 1:
+ dtcs_pol[1] = "R"
+
+ if _mem.txtone == 0x3FFF:
+ txmode = ""
+ elif _mem.is_txdigtone == 0:
+ # ctcss
+ txmode = "Tone"
+ mem.rtone = int(_mem.txtone) / 10.0
+ else:
+ # digital
+ txmode = "DTCS"
+ mem.dtcs = self._get_dcs(_mem.txtone)
+ if _mem.txdtcs_pol == 1:
+ dtcs_pol[0] = "R"
+
+ if txmode == "Tone" and not rxmode:
+ mem.tmode = "Tone"
+ elif txmode == rxmode and txmode == "Tone" and mem.rtone == mem.ctone:
+ mem.tmode = "TSQL"
+ elif txmode == rxmode and txmode == "DTCS" and mem.dtcs == mem.rx_dtcs:
+ mem.tmode = "DTCS"
+ elif rxmode or txmode:
+ mem.tmode = "Cross"
+ mem.cross_mode = "%s->%s" % (txmode, rxmode)
+
+ mem.dtcs_polarity = "".join(dtcs_pol)
+
+ mem.mode = self.MODES[_mem.wide]
+
+ # Extra
+ mem.extra = RadioSettingGroup("extra", "Extra")
+
+ if _mem.recvmode == 0xFF:
+ val = 0x00
+ else:
+ val = _mem.recvmode
+ recvmode = RadioSetting("recvmode", "Receiving mode",
+ RadioSettingValueList(LIST_RECVMODE,
+ LIST_RECVMODE[val]))
+ mem.extra.append(recvmode)
+
+ if _mem.botsignal == 0xFF:
+ val = 0x00
+ else:
+ val = _mem.botsignal
+ botsignal = RadioSetting("botsignal", "Launch signaling",
+ RadioSettingValueList(LIST_SIGNAL,
+ LIST_SIGNAL[val]))
+ mem.extra.append(botsignal)
+
+ if _mem.eotsignal == 0xFF:
+ val = 0x00
+ else:
+ val = _mem.eotsignal
+ eotsignal = RadioSetting("eotsignal", "Transmit end signaling",
+ RadioSettingValueList(LIST_SIGNAL,
+ LIST_SIGNAL[val]))
+ mem.extra.append(eotsignal)
+
+ compandor = RadioSetting("compandor", "Compandor",
+ RadioSettingValueBoolean(bool(_mem.compandor)))
+ mem.extra.append(compandor)
+
+ scrambler = RadioSetting("scrambler", "Scrambler",
+ RadioSettingValueBoolean(bool(_mem.scrambler)))
+ mem.extra.append(scrambler)
+
+ return mem
+
+ def set_memory(self, mem):
+ _mem = self._memory_obj()[mem.number - 1]
+
+ if mem.empty:
+ _mem.set_raw("\xff" * 24)
+ _mem.namelen = 0
+ return
+
+ _mem.set_raw("\xFF" * 15 + "\x00\x00" + "\xFF" * 7)
+
+ _mem.rxfreq = mem.freq / 10
+ if mem.duplex == "off":
+ _mem.txfreq = 0xFFFFFFFF
+ elif mem.duplex == "split":
+ _mem.txfreq = mem.offset / 10
+ elif mem.duplex == "+":
+ _mem.txfreq = (mem.freq + mem.offset) / 10
+ elif mem.duplex == "-":
+ _mem.txfreq = (mem.freq - mem.offset) / 10
+ else:
+ _mem.txfreq = mem.freq / 10
+
+ _mem.namelen = len(mem.name)
+ _namelength = self.get_features().valid_name_length
+ for i in range(_namelength):
+ try:
+ _mem.name[i] = ord(mem.name[i])
+ except IndexError:
+ _mem.name[i] = 0xFF
+
+ rxmode = ""
+ txmode = ""
+
+ if mem.tmode == "Tone":
+ txmode = "Tone"
+ elif mem.tmode == "TSQL":
+ rxmode = "Tone"
+ txmode = "TSQL"
+ elif mem.tmode == "DTCS":
+ rxmode = "DTCSSQL"
+ txmode = "DTCS"
+ elif mem.tmode == "Cross":
+ txmode, rxmode = mem.cross_mode.split("->", 1)
+
+ if rxmode == "":
+ _mem.rxdtcs_pol = 1
+ _mem.is_rxdigtone = 1
+ _mem.rxtone = 0x3FFF
+ elif rxmode == "Tone":
+ _mem.rxdtcs_pol = 0
+ _mem.is_rxdigtone = 0
+ _mem.rxtone = int(mem.ctone * 10)
+ elif rxmode == "DTCSSQL":
+ _mem.rxdtcs_pol = 1 if mem.dtcs_polarity[1] == "R" else 0
+ _mem.is_rxdigtone = 1
+ _mem.rxtone = self._set_dcs(mem.dtcs)
+ elif rxmode == "DTCS":
+ _mem.rxdtcs_pol = 1 if mem.dtcs_polarity[1] == "R" else 0
+ _mem.is_rxdigtone = 1
+ _mem.rxtone = self._set_dcs(mem.rx_dtcs)
+
+ if txmode == "":
+ _mem.txdtcs_pol = 1
+ _mem.is_txdigtone = 1
+ _mem.txtone = 0x3FFF
+ elif txmode == "Tone":
+ _mem.txdtcs_pol = 0
+ _mem.is_txdigtone = 0
+ _mem.txtone = int(mem.rtone * 10)
+ elif txmode == "TSQL":
+ _mem.txdtcs_pol = 0
+ _mem.is_txdigtone = 0
+ _mem.txtone = int(mem.ctone * 10)
+ elif txmode == "DTCS":
+ _mem.txdtcs_pol = 1 if mem.dtcs_polarity[0] == "R" else 0
+ _mem.is_txdigtone = 1
+ _mem.txtone = self._set_dcs(mem.dtcs)
+
+ _mem.wide = self.MODES.index(mem.mode)
+
+ # extra settings
+ for setting in mem.extra:
+ setattr(_mem, setting.get_name(), setting.value)
+
+ def get_settings(self):
+ """Translate the bit in the mem_struct into settings in the UI"""
+ _mem = self._memobj
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ top = RadioSettings(basic)
+
+ # Basic
+
+ volume = RadioSetting("settings.volume", "Volume",
+ RadioSettingValueInteger(0, 20,
+ _mem.settings.volume))
+ basic.append(volume)
+
+ powera = RadioSetting("upper.vfoa.power", "Power (Upper)",
+ RadioSettingValueList(LIST_POWER, LIST_POWER[
+ _mem.upper.vfoa.power]))
+ basic.append(powera)
+
+ powerb = RadioSetting("lower.vfob.power", "Power (Lower)",
+ RadioSettingValueList(LIST_POWER, LIST_POWER[
+ _mem.lower.vfob.power]))
+ basic.append(powerb)
+
+ wtled = RadioSetting("settings.wtled", "Standby LED Color",
+ RadioSettingValueList(LIST_COLOR, LIST_COLOR[
+ _mem.settings.wtled]))
+ basic.append(wtled)
+
+ rxled = RadioSetting("settings.rxled", "RX LED Color",
+ RadioSettingValueList(LIST_COLOR, LIST_COLOR[
+ _mem.settings.rxled]))
+ basic.append(rxled)
+
+ txled = RadioSetting("settings.txled", "TX LED Color",
+ RadioSettingValueList(LIST_COLOR, LIST_COLOR[
+ _mem.settings.txled]))
+ basic.append(txled)
+
+ ledsw = RadioSetting("settings.ledsw", "Back light mode",
+ RadioSettingValueList(LIST_LEDSW, LIST_LEDSW[
+ _mem.settings.ledsw]))
+ basic.append(ledsw)
+
+ beep = RadioSetting("settings.beep", "Beep",
+ RadioSettingValueBoolean(bool(_mem.settings.beep)))
+ basic.append(beep)
+
+ ring = RadioSetting("settings.ring", "Ring",
+ RadioSettingValueList(LIST_RING, LIST_RING[
+ _mem.settings.ring]))
+ basic.append(ring)
+
+ bcl = RadioSetting("settings.bcl", "Busy channel lockout",
+ RadioSettingValueBoolean(bool(_mem.settings.bcl)))
+ basic.append(bcl)
+
+ tot = RadioSetting("settings.tot", "Timeout Timer",
+ RadioSettingValueList(LIST_TIMEOUT, LIST_TIMEOUT[
+ _mem.settings.tot]))
+ basic.append(tot)
+
+ if _mem.upper.vfoa.sql == 0xFF:
+ val = 0x04
+ else:
+ val = _mem.upper.vfoa.sql
+ sqla = RadioSetting("upper.vfoa.sql", "Squelch (Upper)",
+ RadioSettingValueInteger(0, 9, val))
+ basic.append(sqla)
+
+ if _mem.lower.vfob.sql == 0xFF:
+ val = 0x04
+ else:
+ val = _mem.lower.vfob.sql
+ sqlb = RadioSetting("lower.vfob.sql", "Squelch (Lower)",
+ RadioSettingValueInteger(0, 9, val))
+ basic.append(sqlb)
+
+ return top
+
+ def set_settings(self, settings):
+ _settings = self._memobj.settings
+ _mem = self._memobj
+ for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
+ else:
+ try:
+ name = element.get_name()
+ if "." in name:
+ bits = name.split(".")
+ obj = self._memobj
+ for bit in bits[:-1]:
+ if "/" in bit:
+ bit, index = bit.split("/", 1)
+ index = int(index)
+ obj = getattr(obj, bit)[index]
+ else:
+ obj = getattr(obj, bit)
+ setting = bits[-1]
+ else:
+ obj = _settings
+ setting = element.get_name()
+
+ if element.has_apply_callback():
+ LOG.debug("Using apply callback")
+ element.run_apply_callback()
+ elif element.value.get_mutable():
+ LOG.debug("Setting %s = %s" % (setting, element.value))
+ setattr(obj, setting, element.value)
+ except Exception, e:
+ LOG.debug(element.get_name())
+ raise
+
+
+ @classmethod
+ def match_model(cls, filedata, filename):
+ match_size = False
+ match_model = False
+
+ # testing the file data size
+ if len(filedata) == MEM_SIZE + 8:
+ match_size = True
+
+ # testing the firmware model fingerprint
+ match_model = model_match(cls, filedata)
+
+ if match_size and match_model:
+ return True
+ else:
+ return False
+
+
+class LT725UVUpper(LT725UV):
+ VARIANT = "Upper"
+ _vfo = "upper"
+
+
+class LT725UVLower(LT725UV):
+ VARIANT = "Lower"
+ _vfo = "lower"
1
1
--
Brian
1
0

[chirp_devel] [PATCH] [ 2 of 2 ] leixen] Adds new model, Leixen VV-898S (tri-power 25W)
by Brian Dickman 03 Sep '16
by Brian Dickman 03 Sep '16
03 Sep '16
# HG changeset patch
# User Brian Dickman <brian.maybe(a)gmail.com>
# Date 1472936188 25200
# Sat Sep 03 13:56:28 2016 -0700
# Node ID ecde4295b27703667ab8d26d19c5e945a6ea7dc1
# Parent d9eda786d470f7845f96d3ada98e3de65f5213a6
[leixen] [patch 2 of 2] Adds new model, Leixen VV-898S (tri-power 25W)
Also works for VV-898E. Resolves #3889, #3327, #3065.
diff -r d9eda786d470 -r ecde4295b277 chirp/drivers/leixen.py
--- a/chirp/drivers/leixen.py Sat Sep 03 13:52:24 2016 -0700
+++ b/chirp/drivers/leixen.py Sat Sep 03 13:56:28 2016 -0700
@@ -949,3 +949,17 @@
_file_ident = "JET"
_model_ident = 'LX-\x89\x85\x53'
+
+
+(a)directory.register
+class LeixenVV898SRadio(LeixenVV898Radio):
+ """Leixen VV-898S, also VV-898E which is identical"""
+ VENDOR = "Leixen"
+ MODEL = "VV-898S"
+
+ _model_ident = 'LX-\x89\x85\x75'
+ _mem_formatter = {'unknownormode': 'mode:1',
+ 'modeorpower': 'power:2'}
+ _power_levels = [chirp_common.PowerLevel("Low", watts=5),
+ chirp_common.PowerLevel("Med", watts=10),
+ chirp_common.PowerLevel("High", watts=25)]
1
0
# HG changeset patch
# User Brian Dickman <brian.maybe(a)gmail.com>
# Date 1472917020 25200
# Sat Sep 03 08:37:00 2016 -0700
# Node ID 3d8359621d43d5713869497d17182d6a43aebd67
# Parent 617ef175811dcf0d49b8dba8769e845972ebf672
[leixen] Revert 94db968fce11, unneeded patch that was refactored
diff -r 617ef175811d -r 3d8359621d43 chirp/drivers/leixen.py
--- a/chirp/drivers/leixen.py Wed Aug 31 21:37:06 2016 -0700
+++ b/chirp/drivers/leixen.py Sat Sep 03 08:37:00 2016 -0700
@@ -356,15 +356,6 @@
ack = radio.pipe.read(8)
-class LeixenMemory(chirp_common.Memory):
- '''Leixen memory which supports non-standard tones and codes'''
- def __init__(self):
- chirp_common.Memory.__init__(self)
-
- self._valid_map["rtone"] = TONES
- self._valid_map["ctone"] = TONES
-
-
# Declaring Aliases
class LT898UV(chirp_common.Alias):
VENDOR = "LUITON"
@@ -475,7 +466,7 @@
_mem = self._memobj.memory[number - 1]
_name = self._memobj.name[number - 1]
- mem = LeixenMemory()
+ mem = chirp_common.Memory()
mem.number = number
if _mem.get_raw()[:4] == "\xFF\xFF\xFF\xFF":
1
0
Tested changes:
[Brian Dickman <brian.maybe(a)gmail.com>] [leixen] Filter out-of-bounds audio processor setting, fixes #3675
After doing a clear all reset on the VV-898, the apro setting on
memory 1 is out of range (0xff), but the radio honors it as "off"
anyway. This fix prevents such a memory from throwing an exception on
download.
[Brian Dickman <brian.maybe(a)gmail.com>] [leixen] Support non-standard tones on VV898 radio memories. Fixes #3899.
This issue used to cause some download corruption when a radio memory
had one of the non-standard tones (as the factory image did). Note
that there is no RadioFeatures "valid tones" map, so these extra tones
can not currently be selected during new memory creation.
[Brian Dickman <brian.maybe(a)gmail.com>] [leixen] Support non-standard tones on VV898 radio memories. Fixes #3899.
This issue used to cause some download corruption when a radio memory had
one of the non-standard tones (as the factory image did). Note that there
is no RadioFeatures "valid tones" map, so these extra tones can not
currently be selected during new memory creation.
[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:
Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace
[workspace] $ hg showconfig paths.default
[workspace] $ hg pull --rev default
[workspace] $ hg update --clean --rev default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev bf777f74e27695ef2f54e7852dda88fb14bbfa2d
[workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune bf777f74e27695ef2f54e7852dda88fb14bbfa2d
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson6092443488499209763.sh
[workspace] $ /bin/sh -xe /tmp/hudson5146875047200843510.sh
+ PATH=/usr/bin:/bin:/usr/local/bin ./run_all_tests.sh
test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok
test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok
test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_int_array (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_invalid_chars (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_comment_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok
test_comment_inline_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok
test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok
test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok
test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok
test_init (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok
test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok
test_changed (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok
test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok
test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
----------------------------------------------------------------------
Ran 151 tests in 0.058s
OK
Patch 'tip' is OK
Checking for PEP8 regressions...
./chirp/chirp_common.py:33:32: E202 whitespace before ']'
./chirp/drivers/ft2900.py:1236:1: E265 block comment should start with '# '
./chirp/drivers/ft60.py:521:45: W291 trailing whitespace
./chirp/drivers/ft60.py:522:25: E128 continuation line under-indented for visual indent
./chirp/drivers/ft60.py:523:13: E301 expected 1 blank line, found 0
./chirp/drivers/ft817.py:587:41: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:684:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:688:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:691:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:692:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:695:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:696:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:699:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:702:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:705:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:708:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:711:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:714:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:717:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:720:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:721:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:724:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:725:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:728:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:731:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:732:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:735:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:736:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:739:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:740:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:743:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:744:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:747:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:750:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:753:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:754:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:757:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:758:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:761:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:764:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:767:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:768:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:771:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:772:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:775:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:776:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:779:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:782:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:783:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:786:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:789:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:790:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:793:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:794:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:810:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:811:31: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:814:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:817:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:821:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:827:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:832:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:836:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:840:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:844:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:848:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:893:25: E128 continuation line under-indented for visual indent
./chirp/drivers/thd72.py:188:1: E302 expected 2 blank lines, found 1
./chirp/drivers/thd72.py:203:23: E201 whitespace after '['
./chirp/drivers/thd72.py:203:80: E501 line too long (171 > 79 characters)
./chirp/drivers/thd72.py:203:170: E202 whitespace before ']'
./chirp/drivers/thd72.py:204:13: E201 whitespace after '['
./chirp/drivers/thd72.py:204:61: E202 whitespace before ']'
./chirp/drivers/thd72.py:205:23: E201 whitespace after '['
./chirp/drivers/thd72.py:205:74: E202 whitespace before ']'
./chirp/drivers/thd72.py:206:18: E201 whitespace after '['
./chirp/drivers/thd72.py:206:65: E202 whitespace before ']'
./chirp/drivers/thd72.py:595:1: W293 blank line contains whitespace
./chirp/drivers/thd72.py:603:1: W293 blank line contains whitespace
./chirp/ui/mainapp.py:647:13: E128 continuation line under-indented for visual indent
./chirp/ui/mainapp.py:661:5: E303 too many blank lines (2)
./chirp/ui/mainapp.py:1374:80: E501 line too long (81 > 79 characters)
./chirp/ui/mainapp.py:1378:80: E501 line too long (80 > 79 characters)
./chirp/ui/mainapp.py:1663:80: E501 line too long (85 > 79 characters)
real 0m7.572s
user 0m7.456s
sys 0m0.032s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2016-09-02 12:57:54,960] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.1 LTS (Python 2.7.12)
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2016-09-02 12:57:54,998] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2016-09-02 12:57:54,999] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2016-09-02 12:57:55,000] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2016-09-02 12:57:55,000] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2016-09-02 12:57:55,000] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2016-09-02 12:57:55,000] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2016-09-02 12:57:55,000] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2016-09-02 12:57:55,000] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2016-09-02 12:57:55,001] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2016-09-02 12:57:55,002] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2016-09-02 12:57:55,002] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2016-09-02 12:57:55,003] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2016-09-02 12:57:55,003] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2016-09-02 12:57:55,003] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2016-09-02 12:57:55,004] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2016-09-02 12:57:55,005] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2016-09-02 12:57:55,006] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2016-09-02 12:57:55,007] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2016-09-02 12:57:55,007] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2016-09-02 12:57:55,008] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2016-09-02 12:57:55,008] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2016-09-02 12:57:55,008] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2016-09-02 12:57:55,009] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2016-09-02 12:57:55,009] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2016-09-02 12:57:55,009] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2016-09-02 12:57:55,009] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2016-09-02 12:57:55,010] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2016-09-02 12:57:55,010] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2016-09-02 12:57:55,010] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2016-09-02 12:57:55,010] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2016-09-02 12:57:55,010] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2016-09-02 12:57:55,011] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2016-09-02 12:57:55,011] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2016-09-02 12:57:55,012] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2016-09-02 12:57:55,012] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2016-09-02 12:57:55,012] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2016-09-02 12:57:55,012] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2016-09-02 12:57:55,019] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2016-09-02 12:57:55,023] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2016-09-02 12:57:55,023] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2016-09-02 12:57:55,023] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2016-09-02 12:57:55,023] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2016-09-02 12:57:55,023] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2016-09-02 12:57:55,024] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2016-09-02 12:57:55,024] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2016-09-02 12:57:55,024] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2016-09-02 12:57:55,025] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2016-09-02 12:57:55,025] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2016-09-02 12:57:55,025] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2016-09-02 12:57:55,025] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2016-09-02 12:57:55,025] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2016-09-02 12:57:55,025] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2016-09-02 12:57:55,026] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2016-09-02 12:57:55,026] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2016-09-02 12:57:55,026] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2016-09-02 12:57:55,026] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2016-09-02 12:57:55,027] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2016-09-02 12:57:55,027] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2016-09-02 12:57:55,027] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2016-09-02 12:57:55,027] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2016-09-02 12:57:55,027] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2016-09-02 12:57:55,028] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2016-09-02 12:57:55,028] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2016-09-02 12:57:55,028] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2016-09-02 12:57:55,029] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2016-09-02 12:57:55,029] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2016-09-02 12:57:55,029] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2016-09-02 12:57:55,029] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2016-09-02 12:57:55,029] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2016-09-02 12:57:55,030] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2016-09-02 12:57:55,030] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2016-09-02 12:57:55,030] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2016-09-02 12:57:55,030] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2016-09-02 12:57:55,030] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2016-09-02 12:57:55,031] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2016-09-02 12:57:55,031] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2016-09-02 12:57:55,031] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2016-09-02 12:57:55,032] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2016-09-02 12:57:55,032] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2016-09-02 12:57:55,032] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2016-09-02 12:57:55,032] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2016-09-02 12:57:55,032] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2016-09-02 12:57:55,033] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2016-09-02 12:57:55,033] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2016-09-02 12:57:55,033] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2016-09-02 12:57:55,034] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2016-09-02 12:57:55,035] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2016-09-02 12:57:55,036] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2016-09-02 12:57:55,037] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2016-09-02 12:57:55,037] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2016-09-02 12:57:55,037] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2016-09-02 12:57:55,037] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2016-09-02 12:57:55,037] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2016-09-02 12:57:55,038] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2016-09-02 12:57:55,038] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2016-09-02 12:57:55,038] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2016-09-02 12:57:55,038] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2016-09-02 12:57:55,039] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2016-09-02 12:57:55,039] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2016-09-02 12:57:55,039] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2016-09-02 12:57:55,040] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2016-09-02 12:57:55,040] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2016-09-02 12:57:55,040] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2016-09-02 12:57:55,041] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2016-09-02 12:57:55,041] chirp.directory - INFO: Registered Yaesu_VX-8_R = VX8Radio
[2016-09-02 12:57:55,041] chirp.directory - INFO: Registered Yaesu_VX-8_DR = VX8DRadio
[2016-09-02 12:57:55,041] chirp.directory - INFO: Registered Yaesu_VX-8_GE = VX8GERadio
[2016-09-02 12:57:55,042] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
+ rm /tmp/Alinco_DJ175_76SE6d.img /tmp/Alinco_DJ175_MohtV2.img /tmp/Alinco_DJ596_LrCi39.img /tmp/Alinco_DJ596_izp7hj.img /tmp/Alinco_DR235T_fwq6RG.img /tmp/Alinco_DR235T_qIMV1Z.img /tmp/AnyTone_OBLTR-8R_FF6PGe.img /tmp/AnyTone_OBLTR-8R_L1FJqk.img /tmp/AnyTone_TERMN-8R_eO8_17.img /tmp/AnyTone_TERMN-8R_v25WHy.img /tmp/BTECH_UV-2501+220_uZxJqL.img /tmp/BTECH_UV-2501+220_uz3iJz.img /tmp/BTECH_UV-5001_4ft1pU.img /tmp/BTECH_UV-5001_51PtYu.img /tmp/BTECH_UV-50X3_IVea4g.img /tmp/BTECH_UV-50X3_NgLnv1.img /tmp/BTECH_UV-50X3_YnvR7q.img /tmp/BTECH_UV-50X3_Z0LhZS.img /tmp/BTECH_UV-50X3_reBIGr.img /tmp/BTECH_UV-50X3_zU8zxP.img /tmp/BTECH_UV-5X3_6odJHI.img /tmp/BTECH_UV-5X3_feeJKC.img /tmp/Baofeng_BF-888__wVyPg.img /tmp/Baofeng_BF-888_b93y3Q.img /tmp/Baofeng_F-11_N5aUka.img /tmp/Baofeng_F-11_eIm8AI.img /tmp/Baofeng_UV-3R_lwznLY.img /tmp/Baofeng_UV-3R_r4PO8y.img /tmp/Baofeng_UV-5R_KM2OOd.img /tmp/Baofeng_UV-5R_fxUqgw.img /tmp/Baofeng_UV-6R_WgxeEE.img /tmp/Baofeng_UV-6R_iTlH0Z.img /tmp/Baofeng_UV-B5_VPfVKz.img /tmp/Baofeng_UV-B5_WsOeJo.img /tmp/Baojie_BJ-9900_1cbTtg.img /tmp/Baojie_BJ-9900_70heET.img /tmp/Baojie_BJ-9900_QxBLzy.img /tmp/Baojie_BJ-9900_hrkM8c.img /tmp/Baojie_BJ-9900_q56x7p.img /tmp/Baojie_BJ-9900_txIFU2.img /tmp/Feidaxin_FD-268A_CrK7k1.img /tmp/Feidaxin_FD-268A_Q_9EDN.img /tmp/Feidaxin_FD-268B_eJSg8s.img /tmp/Feidaxin_FD-268B_hbDvLI.img /tmp/Feidaxin_FD-288B_0W5LqY.img /tmp/Feidaxin_FD-288B_t8TRtH.img /tmp/Icom_IC-208H_7gIazk.img /tmp/Icom_IC-208H_pEupu3.img /tmp/Icom_IC-2100H_DtN5bW.img /tmp/Icom_IC-2100H_m22Oop.img /tmp/Icom_IC-2200H_47Nt6y.img /tmp/Icom_IC-2200H_sbZ_IW.img /tmp/Icom_IC-2720H_SexE9k.img /tmp/Icom_IC-2720H_ptF2Mz.img /tmp/Icom_IC-2820H_Ne92rc.img /tmp/Icom_IC-2820H_lB4d8d.img /tmp/Icom_IC-Q7A_4ImMv_.img /tmp/Icom_IC-Q7A_D8Owfe.img /tmp/Icom_IC-T70_i0KZj9.img /tmp/Icom_IC-T70_pU4vaz.img /tmp/Icom_IC-T7H_MzVda3.img /tmp/Icom_IC-T7H_niKzoS.img /tmp/Icom_IC-T8A_HnZHC4.img /tmp/Icom_IC-T8A_WApcyL.img /tmp/Icom_IC-V82_U82_a7i6xS.img /tmp/Icom_IC-V82_U82_mIHZnV.img /tmp/Icom_IC-W32A_2CiY1K.img /tmp/Icom_IC-W32A_AgYV6g.img /tmp/Icom_IC-W32A_B108yK.img /tmp/Icom_IC-W32A_E4r3Vi.img /tmp/Icom_IC-W32A_YskUyT.img /tmp/Icom_IC-W32A_bDXlNY.img /tmp/Icom_IC-W32E_C2Bfac.img /tmp/Icom_IC-W32E_K4eMKF.img /tmp/Icom_IC-W32E_LLGFq4.img /tmp/Icom_IC-W32E_OD7vQ2.img /tmp/Icom_IC-W32E_T7MuBB.img /tmp/Icom_IC-W32E_s6HwDQ.img /tmp/Icom_ID-31A_2n1tZW.img /tmp/Icom_ID-31A_BCJSyb.img /tmp/Icom_ID-51 Plus_MZ2Q0P.img /tmp/Icom_ID-51 Plus_yt6T4l.img /tmp/Icom_ID-51_6mYVTe.img /tmp/Icom_ID-51_74Qw_E.img /tmp/Icom_ID-800H_0YbChP.img /tmp/Icom_ID-800H_oBkXhq.img /tmp/Icom_ID-880H_dvh69n.img /tmp/Icom_ID-880H_yvgI6A.img /tmp/Jetstream_JT220M_O7oYjB.img /tmp/Jetstream_JT220M_oW_4bZ.img /tmp/Jetstream_JT270M_JYgycd.img /tmp/Jetstream_JT270M_py8ydb.img /tmp/KYD_IP-620_jEmr9r.img /tmp/KYD_IP-620_n7uzPX.img /tmp/Kenwood_TH-D72 (clone mode)_NhVN2_.img /tmp/Kenwood_TH-D72 (clone mode)_gSmteF.img /tmp/Kenwood_TK-272G_5SNSDU.img /tmp/Kenwood_TK-272G_cndNHZ.img /tmp/Kenwood_TK-760G_mEWIst.img /tmp/Kenwood_TK-760G_sFZGFg.img /tmp/Kenwood_TK-8102_FtNvwW.img /tmp/Kenwood_TK-8102_K9IZwu.img /tmp/Leixen_VV-898_CSPgaQ.img /tmp/Leixen_VV-898_tndAWJ.img /tmp/Polmar_DB-50M_fhxQeZ.img /tmp/Polmar_DB-50M_vStJEK.img /tmp/Puxing_PX-2R_L_Kndf.img /tmp/Puxing_PX-2R_jhkJeJ.img /tmp/Puxing_PX-777_8jXeAN.img /tmp/Puxing_PX-777_stWctf.img /tmp/TYT_TH-7800_bcdZsg.img /tmp/TYT_TH-7800_vJaAG9.img /tmp/TYT_TH-9800_O_vjtV.img /tmp/TYT_TH-9800_duqOjr.img /tmp/TYT_TH-UV3R-25_CckZE7.img /tmp/TYT_TH-UV3R-25_zsQBeu.img /tmp/TYT_TH-UV3R_HAUsrm.img /tmp/TYT_TH-UV3R_t0_qCa.img /tmp/TYT_TH-UVF1_279ixb.img /tmp/TYT_TH-UVF1_Dgx007.img /tmp/TYT_TH9000_144_OJ39wo.img /tmp/TYT_TH9000_144_salBN9.img /tmp/Vertex Standard_VXA-700_I0FlsZ.img /tmp/Vertex Standard_VXA-700_jo6xJy.img /tmp/WACCOM_MINI-8900_BtmehZ.img /tmp/WACCOM_MINI-8900_zYCZzy.img /tmp/Wouxun_KG-816_Pc53Kx.img /tmp/Wouxun_KG-816_vPaqlB.img /tmp/Wouxun_KG-818_HZPuy_.img /tmp/Wouxun_KG-818_XFDfH2.img /tmp/Wouxun_KG-UV6_KcPm1j.img /tmp/Wouxun_KG-UV6_yc7kKt.img /tmp/Wouxun_KG-UV8D_mWZWg2.img /tmp/Wouxun_KG-UV8D_nghFdW.img /tmp/Wouxun_KG-UVD1P_ErMxkx.img /tmp/Wouxun_KG-UVD1P_c7zGG8.img /tmp/Yaesu_FT-1802M_JqhzSN.img /tmp/Yaesu_FT-1802M_fkrjfw.img /tmp/Yaesu_FT-1D_MXr3PC.img /tmp/Yaesu_FT-1D_SgW0kQ.img /tmp/Yaesu_FT-2800M_B2WMew.img /tmp/Yaesu_FT-2800M_zlVmpC.img /tmp/Yaesu_FT-2900R_1900R_M4KDFq.img /tmp/Yaesu_FT-2900R_1900R_X3peet.img /tmp/Yaesu_FT-50_0cs6O4.img /tmp/Yaesu_FT-50_NvD5bi.img /tmp/Yaesu_FT-60_OTc7Ro.img /tmp/Yaesu_FT-60_wvWYxo.img /tmp/Yaesu_FT-7800_7900_O70Kyz.img /tmp/Yaesu_FT-7800_7900_wb5LNA.img /tmp/Yaesu_FT-817ND (US)_3RrUlZ.img /tmp/Yaesu_FT-817ND (US)_t6Qkmz.img /tmp/Yaesu_FT-817ND_IjQ0tI.img /tmp/Yaesu_FT-817ND_ULyYjf.img /tmp/Yaesu_FT-817_DQkHIF.img /tmp/Yaesu_FT-817_ZeRYWp.img /tmp/Yaesu_FT-857_897 (US)_5huJNf.img /tmp/Yaesu_FT-857_897 (US)_9lQSCj.img /tmp/Yaesu_FT-857_897_UA4BZp.img /tmp/Yaesu_FT-857_897_cRRwh3.img /tmp/Yaesu_FT-8800_313Ib1.img /tmp/Yaesu_FT-8800_IP_XsS.img /tmp/Yaesu_FT-8800_JoOHRY.img /tmp/Yaesu_FT-8800_PdL0n9.img /tmp/Yaesu_FT-8800_iCOdwU.img /tmp/Yaesu_FT-8800_iG2tkB.img /tmp/Yaesu_FT-8900_8YUUdw.img /tmp/Yaesu_FT-8900_HfKFN7.img /tmp/Yaesu_FTM-350_5xcZKR.img /tmp/Yaesu_FTM-350_RTA_bZ.img /tmp/Yaesu_FTM-350_SmJ9kp.img /tmp/Yaesu_FTM-350_Tm8crl.img /tmp/Yaesu_FTM-350_V51kZa.img /tmp/Yaesu_FTM-350_uoo4RZ.img /tmp/Yaesu_VX-2_RNUzah.img /tmp/Yaesu_VX-2_b7EO_U.img /tmp/Yaesu_VX-3_6haHd3.img /tmp/Yaesu_VX-3_obkKvC.img /tmp/Yaesu_VX-5_LH9iXC.img /tmp/Yaesu_VX-5_W22jRZ.img /tmp/Yaesu_VX-6_MN4PRl.img /tmp/Yaesu_VX-6_f4d7_k.img /tmp/Yaesu_VX-7_hRjNXY.img /tmp/Yaesu_VX-7_kuEscG.img /tmp/Yaesu_VX-8_DSB2xh.img /tmp/Yaesu_VX-8_nqmYDH.img
Email was triggered for: Success
Sending email for trigger: Success
1
0
What's the current attitude towards parameterized memory maps, to
support different models with varying locations/names of values?
I'm working on adding Leixen VV-898S support. They decided to take
what used to be 1 bit for Power and 1 bit for Mode and instead use
both bits for Power, and move Mode to a previously unused bit. I could
work around this by parameterizing the map, so it would look sorta
like this:
u8 %s:1,
foo1:1,
foo2:1,
foo3:1,
foo4:1,
foo5:1,
%s;
The first radio would format it as:
MEM_FORMAT % ( 'unknown' , 'mode:1,power:1' )
while the second would format it as:
MEM_FORMAT % ( 'mode' , 'power:2' )
Any fundamental objections to this approach? Should I just suck it up
and combine the bits at read time on the second radio instead of
parameterizing?
--
Brian
2
2

[chirp_devel] [PATCH] [leixen] Filter out-of-bounds audio processor setting
by Brian Dickman 01 Sep '16
by Brian Dickman 01 Sep '16
01 Sep '16
# HG changeset patch
# User Brian Dickman <brian.maybe(a)gmail.com>
# Date 1472704355 25200
# Wed Aug 31 21:32:35 2016 -0700
# Node ID 6be6cfb51c15e604d78ad5bcd5f421adac718c4f
# Parent 072644da3599231a2b8fe6a0b89186a7b4beab26
[leixen] Filter out-of-bounds audio processor setting, fixes #3675
After doing a clear all reset on the VV-898, the apro setting on
memory 1 is out of range (0xff), but the radio honors it as "off"
anyway. This fix prevents such a memory from throwing an exception on
download.
diff -r 072644da3599 -r 6be6cfb51c15 chirp/drivers/leixen.py
--- a/chirp/drivers/leixen.py Wed Aug 31 19:46:58 2016 -0700
+++ b/chirp/drivers/leixen.py Wed Aug 31 21:32:35 2016 -0700
@@ -512,11 +512,13 @@
RadioSettingValueList(
opts, opts[_mem.tailcut]))
mem.extra.append(rs)
+ apro = _mem.apro if _mem.apro < 0x5 else 0
+ rs = RadioSetting("apro", "Audio Processing",
opts = ["Off", "Compander", "Scrambler", "TX Scrambler",
"RX Scrambler"]
rs = RadioSetting("apro", "Audio Processing",
RadioSettingValueList(
- opts, opts[_mem.apro]))
+ opts, opts[apro]))
mem.extra.append(rs)
opts = ["On", "Off"]
rs = RadioSetting("voxoff", "VOX",
1
1

[chirp_devel] [PATCH] [leixen] Support non-standard tones on VV898 radio memories
by Brian Dickman 01 Sep '16
by Brian Dickman 01 Sep '16
01 Sep '16
# HG changeset patch
# User Brian Dickman <brian.maybe(a)gmail.com>
# Date 1472622871 25200
# Tue Aug 30 22:54:31 2016 -0700
# Node ID 2e7f65569ba66c5ca8d9d3733ae8067e3948361a
# Parent bf777f74e27695ef2f54e7852dda88fb14bbfa2d
[leixen] Support non-standard tones on VV898 radio memories. Fixes #3899.
This issue used to cause some download corruption when a radio memory had
one of the non-standard tones (as the factory image did). Note that there
is no RadioFeatures "valid tones" map, so these extra tones can not
currently be selected during new memory creation.
diff -r bf777f74e276 -r 2e7f65569ba6 chirp/drivers/leixen.py
--- a/chirp/drivers/leixen.py Mon Aug 29 10:29:40 2016 -0700
+++ b/chirp/drivers/leixen.py Tue Aug 30 22:54:31 2016 -0700
@@ -356,6 +356,15 @@
ack = radio.pipe.read(8)
+class LeixenMemory(chirp_common.Memory):
+ '''Leixen memory which supports non-standard tones and codes'''
+ def __init__(self):
+ chirp_common.Memory.__init__(self)
+
+ self._valid_map["rtone"] = TONES
+ self._valid_map["ctone"] = TONES
+
+
# Declaring Aliases
class LT898UV(chirp_common.Alias):
VENDOR = "LUITON"
@@ -466,7 +475,7 @@
_mem = self._memobj.memory[number - 1]
_name = self._memobj.name[number - 1]
- mem = chirp_common.Memory()
+ mem = LeixenMemory()
mem.number = number
if _mem.get_raw()[:4] == "\xFF\xFF\xFF\xFF":
2
2
Tested changes:
[Dave Allan <danplanet(a)dpallan.com>] Remove spurious newline causing stock config import error. Fixes #3743
[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:
Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace
[workspace] $ hg showconfig paths.default
[workspace] $ hg pull --rev default
[workspace] $ hg update --clean --rev default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev 3e366aeabfb583ef55ba5830e49cc8be9e5bfa23
[workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune 3e366aeabfb583ef55ba5830e49cc8be9e5bfa23
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson7162539669525204480.sh
[workspace] $ /bin/sh -xe /tmp/hudson3021593501803017982.sh
+ PATH=/usr/bin:/bin:/usr/local/bin ./run_all_tests.sh
test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok
test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok
test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_int_array (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_invalid_chars (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_comment_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok
test_comment_inline_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok
test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok
test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok
test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok
test_init (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok
test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok
test_changed (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok
test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok
test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
----------------------------------------------------------------------
Ran 151 tests in 0.050s
OK
Patch 'tip' is OK
Checking for PEP8 regressions...
./chirp/drivers/ft2900.py:1236:1: E265 block comment should start with '# '
./chirp/drivers/ft60.py:521:45: W291 trailing whitespace
./chirp/drivers/ft60.py:522:25: E128 continuation line under-indented for visual indent
./chirp/drivers/ft60.py:523:13: E301 expected 1 blank line, found 0
./chirp/drivers/ft817.py:587:41: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:684:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:688:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:691:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:692:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:695:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:696:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:699:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:702:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:705:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:708:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:711:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:714:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:717:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:720:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:721:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:724:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:725:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:728:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:731:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:732:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:735:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:736:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:739:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:740:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:743:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:744:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:747:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:750:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:753:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:754:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:757:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:758:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:761:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:764:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:767:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:768:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:771:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:772:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:775:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:776:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:779:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:782:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:783:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:786:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:789:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:790:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:793:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:794:29: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:810:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:811:31: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:814:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:817:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:821:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:827:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:832:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:836:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:840:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:844:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:848:25: E128 continuation line under-indented for visual indent
./chirp/drivers/kguv8d.py:893:25: E128 continuation line under-indented for visual indent
./chirp/drivers/thd72.py:188:1: E302 expected 2 blank lines, found 1
./chirp/drivers/thd72.py:203:23: E201 whitespace after '['
./chirp/drivers/thd72.py:203:80: E501 line too long (171 > 79 characters)
./chirp/drivers/thd72.py:203:170: E202 whitespace before ']'
./chirp/drivers/thd72.py:204:13: E201 whitespace after '['
./chirp/drivers/thd72.py:204:61: E202 whitespace before ']'
./chirp/drivers/thd72.py:205:23: E201 whitespace after '['
./chirp/drivers/thd72.py:205:74: E202 whitespace before ']'
./chirp/drivers/thd72.py:206:18: E201 whitespace after '['
./chirp/drivers/thd72.py:206:65: E202 whitespace before ']'
./chirp/drivers/thd72.py:595:1: W293 blank line contains whitespace
./chirp/drivers/thd72.py:603:1: W293 blank line contains whitespace
./chirp/ui/mainapp.py:647:13: E128 continuation line under-indented for visual indent
./chirp/ui/mainapp.py:661:5: E303 too many blank lines (2)
./chirp/ui/mainapp.py:1374:80: E501 line too long (81 > 79 characters)
./chirp/ui/mainapp.py:1378:80: E501 line too long (80 > 79 characters)
./chirp/ui/mainapp.py:1663:80: E501 line too long (85 > 79 characters)
real 0m7.600s
user 0m7.488s
sys 0m0.064s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2016-08-29 10:32:52,575] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.1 LTS (Python 2.7.12)
[2016-08-29 10:32:52,612] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2016-08-29 10:32:52,612] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2016-08-29 10:32:52,612] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2016-08-29 10:32:52,612] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2016-08-29 10:32:52,612] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2016-08-29 10:32:52,612] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2016-08-29 10:32:52,613] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2016-08-29 10:32:52,614] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2016-08-29 10:32:52,614] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2016-08-29 10:32:52,614] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2016-08-29 10:32:52,614] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2016-08-29 10:32:52,614] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2016-08-29 10:32:52,615] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2016-08-29 10:32:52,616] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2016-08-29 10:32:52,616] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2016-08-29 10:32:52,616] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2016-08-29 10:32:52,617] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2016-08-29 10:32:52,617] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2016-08-29 10:32:52,618] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2016-08-29 10:32:52,619] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2016-08-29 10:32:52,620] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2016-08-29 10:32:52,621] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2016-08-29 10:32:52,622] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2016-08-29 10:32:52,622] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2016-08-29 10:32:52,622] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2016-08-29 10:32:52,622] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2016-08-29 10:32:52,623] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2016-08-29 10:32:52,623] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2016-08-29 10:32:52,623] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2016-08-29 10:32:52,624] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2016-08-29 10:32:52,624] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2016-08-29 10:32:52,624] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2016-08-29 10:32:52,624] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2016-08-29 10:32:52,624] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2016-08-29 10:32:52,625] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2016-08-29 10:32:52,625] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2016-08-29 10:32:52,625] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2016-08-29 10:32:52,625] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2016-08-29 10:32:52,626] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2016-08-29 10:32:52,626] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2016-08-29 10:32:52,626] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2016-08-29 10:32:52,626] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2016-08-29 10:32:52,646] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2016-08-29 10:32:52,649] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2016-08-29 10:32:52,649] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2016-08-29 10:32:52,649] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2016-08-29 10:32:52,649] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2016-08-29 10:32:52,650] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2016-08-29 10:32:52,650] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2016-08-29 10:32:52,650] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2016-08-29 10:32:52,650] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2016-08-29 10:32:52,651] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2016-08-29 10:32:52,651] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2016-08-29 10:32:52,651] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2016-08-29 10:32:52,651] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2016-08-29 10:32:52,652] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2016-08-29 10:32:52,652] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2016-08-29 10:32:52,652] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2016-08-29 10:32:52,652] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2016-08-29 10:32:52,652] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2016-08-29 10:32:52,653] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2016-08-29 10:32:52,653] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2016-08-29 10:32:52,653] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2016-08-29 10:32:52,653] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2016-08-29 10:32:52,653] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2016-08-29 10:32:52,654] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2016-08-29 10:32:52,654] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2016-08-29 10:32:52,654] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2016-08-29 10:32:52,655] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2016-08-29 10:32:52,655] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2016-08-29 10:32:52,655] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2016-08-29 10:32:52,656] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2016-08-29 10:32:52,657] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2016-08-29 10:32:52,657] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2016-08-29 10:32:52,657] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2016-08-29 10:32:52,657] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2016-08-29 10:32:52,658] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2016-08-29 10:32:52,658] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2016-08-29 10:32:52,658] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2016-08-29 10:32:52,658] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2016-08-29 10:32:52,659] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2016-08-29 10:32:52,659] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2016-08-29 10:32:52,659] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2016-08-29 10:32:52,660] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2016-08-29 10:32:52,661] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2016-08-29 10:32:52,661] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2016-08-29 10:32:52,661] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2016-08-29 10:32:52,661] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2016-08-29 10:32:52,661] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2016-08-29 10:32:52,661] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2016-08-29 10:32:52,662] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2016-08-29 10:32:52,663] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2016-08-29 10:32:52,664] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2016-08-29 10:32:52,664] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2016-08-29 10:32:52,664] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2016-08-29 10:32:52,665] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2016-08-29 10:32:52,665] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2016-08-29 10:32:52,665] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2016-08-29 10:32:52,666] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2016-08-29 10:32:52,666] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2016-08-29 10:32:52,666] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2016-08-29 10:32:52,667] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2016-08-29 10:32:52,667] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2016-08-29 10:32:52,667] chirp.directory - INFO: Registered Yaesu_VX-8_R = VX8Radio
[2016-08-29 10:32:52,668] chirp.directory - INFO: Registered Yaesu_VX-8_DR = VX8DRadio
[2016-08-29 10:32:52,668] chirp.directory - INFO: Registered Yaesu_VX-8_GE = VX8GERadio
[2016-08-29 10:32:52,668] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
+ rm /tmp/Alinco_DJ175_Nd_5Bo.img /tmp/Alinco_DJ596_04vTz1.img /tmp/Alinco_DR235T_qgco9s.img /tmp/AnyTone_OBLTR-8R_uGB4Zn.img /tmp/AnyTone_TERMN-8R_ZMWUo6.img /tmp/BTECH_UV-2501+220_BAq7sP.img /tmp/BTECH_UV-5001_3jF7z9.img /tmp/BTECH_UV-50X3_KvvQG3.img /tmp/BTECH_UV-50X3_kRM90U.img /tmp/BTECH_UV-50X3_xjQ99Z.img /tmp/BTECH_UV-5X3_umOnI0.img /tmp/Baofeng_BF-888_Aaglui.img /tmp/Baofeng_F-11_otLxQx.img /tmp/Baofeng_UV-3R_6oReKA.img /tmp/Baofeng_UV-5R_NtyyUp.img /tmp/Baofeng_UV-6R_gOVWN8.img /tmp/Baofeng_UV-B5_ftNF7y.img /tmp/Baojie_BJ-9900_SDMv5k.img /tmp/Baojie_BJ-9900_WQLotz.img /tmp/Baojie_BJ-9900_XEKroi.img /tmp/Feidaxin_FD-268A_YhMYz_.img /tmp/Feidaxin_FD-268B_21H6uc.img /tmp/Feidaxin_FD-288B_Rbn1N0.img /tmp/Icom_IC-208H_avB0eq.img /tmp/Icom_IC-2100H_cU6vac.img /tmp/Icom_IC-2200H_A_gKVQ.img /tmp/Icom_IC-2720H_IXuaIr.img /tmp/Icom_IC-2820H_iYp_P1.img /tmp/Icom_IC-Q7A_hmOyVz.img /tmp/Icom_IC-T70_56s1oy.img /tmp/Icom_IC-T7H_oWhuKD.img /tmp/Icom_IC-T8A_ROOWjt.img /tmp/Icom_IC-V82_U82_sbOSCU.img /tmp/Icom_IC-W32A_4UzmCt.img /tmp/Icom_IC-W32A_FiYIyJ.img /tmp/Icom_IC-W32A_Wje7V1.img /tmp/Icom_IC-W32E_bUrfHR.img /tmp/Icom_IC-W32E_iUEMUO.img /tmp/Icom_IC-W32E_zToeQ9.img /tmp/Icom_ID-31A_OcyO9h.img /tmp/Icom_ID-51 Plus_T74DAx.img /tmp/Icom_ID-51_RKndH0.img /tmp/Icom_ID-800H_BZ8zUc.img /tmp/Icom_ID-880H_zj4N_g.img /tmp/Jetstream_JT220M__FRkGJ.img /tmp/Jetstream_JT270M_PTctfc.img /tmp/KYD_IP-620_5JXamC.img /tmp/Kenwood_TH-D72 (clone mode)_ieOXkE.img /tmp/Kenwood_TK-272G_bjy3gU.img /tmp/Kenwood_TK-760G_wA15GO.img /tmp/Kenwood_TK-8102_WOy8px.img /tmp/Leixen_VV-898_qLp16I.img /tmp/Polmar_DB-50M_LvXCLt.img /tmp/Puxing_PX-2R_61YcVw.img /tmp/Puxing_PX-777_7S8YyM.img /tmp/TYT_TH-7800_o0juM3.img /tmp/TYT_TH-9800_26GkRV.img /tmp/TYT_TH-UV3R-25_y8SaWk.img /tmp/TYT_TH-UV3R_E4NxaG.img /tmp/TYT_TH-UVF1_Wi0W8x.img /tmp/TYT_TH9000_144_J0eoFu.img /tmp/Vertex Standard_VXA-700_VyYJ9g.img /tmp/WACCOM_MINI-8900_72NO9g.img /tmp/Wouxun_KG-816_W3L6Fu.img /tmp/Wouxun_KG-818_ySLxvU.img /tmp/Wouxun_KG-UV6_kuJ0ul.img /tmp/Wouxun_KG-UV8D_Xbc9_q.img /tmp/Wouxun_KG-UVD1P_Dy6WiE.img /tmp/Yaesu_FT-1802M_dq6g4G.img /tmp/Yaesu_FT-1D_QiIeWW.img /tmp/Yaesu_FT-2800M_paX3G7.img /tmp/Yaesu_FT-2900R_1900R_CSCkMV.img /tmp/Yaesu_FT-50_TNR4sW.img /tmp/Yaesu_FT-60_DhfYD6.img /tmp/Yaesu_FT-7800_7900_QtItim.img /tmp/Yaesu_FT-817ND (US)_f04zeU.img /tmp/Yaesu_FT-817ND_FG0001.img /tmp/Yaesu_FT-817_H89mUp.img /tmp/Yaesu_FT-857_897 (US)_1Qm74a.img /tmp/Yaesu_FT-857_897_umg3cX.img /tmp/Yaesu_FT-8800_Nm8RZ8.img /tmp/Yaesu_FT-8800_cGbqtA.img /tmp/Yaesu_FT-8800_ezCsux.img /tmp/Yaesu_FT-8900_i4FxEv.img /tmp/Yaesu_FTM-350_6VkwRd.img /tmp/Yaesu_FTM-350_6i7C1K.img /tmp/Yaesu_FTM-350_HQsmJ0.img /tmp/Yaesu_VX-2_XMnx2H.img /tmp/Yaesu_VX-3_TqVKWR.img /tmp/Yaesu_VX-5_i0bOO_.img /tmp/Yaesu_VX-6__BBR2U.img /tmp/Yaesu_VX-7_F9RWmj.img /tmp/Yaesu_VX-8_Ctpyvt.img
Email was triggered for: Success
Sending email for trigger: Success
1
0

29 Aug '16
Hey there --
I've spent just a little bit of time to update and complete a patch
uploaded earlier to #1003 <http://chirp.danplanet.com/issues/1003>. The
attached changeset adds support for the Icom IC-7100. Let me know if you
need any additional information or if this isn't the proper protocol for
submitting a patch.
Cheers,
Adam
2
1