Developers
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
September 2016
- 11 participants
- 54 discussions
05 Sep '16
qpopped directly over the previous patch without an issue, so in
theory this should work too...
###
# HG changeset patch
# User Brian Dickman <brian.maybe(a)gmail.com>
# Date 1473038809 25200
# Sun Sep 04 18:26:49 2016 -0700
# Node ID 7d8c6b96f9866b7bdecf4fd2c2445d8dbe37c2ac
# Parent 15ed52b0a98e77f51c25e0d161c8d8e376fa2307
[leixen] [patch 2 of 2] Adds new model, Leixen VV-898S (tri-power 25W)
Also adds alias for VV-898E. Resolves #3889, #3327, #3065.
diff -r 15ed52b0a98e -r 7d8c6b96f986 chirp/drivers/leixen.py
--- a/chirp/drivers/leixen.py Sun Sep 04 18:19:44 2016 -0700
+++ b/chirp/drivers/leixen.py Sun Sep 04 18:26:49 2016 -0700
@@ -949,3 +949,24 @@
_file_ident = "JET"
_model_ident = 'LX-\x89\x85\x53'
+
+
+class VV898E(chirp_common.Alias):
+ '''Leixen has called this radio both 898E and S historically,
ident is identical'''
+ VENDOR = "Leixen"
+ MODEL = "VV-898E"
+
+
+(a)directory.register
+class LeixenVV898SRadio(LeixenVV898Radio):
+ """Leixen VV-898S, also VV-898E which is identical"""
+ VENDOR = "Leixen"
+ MODEL = "VV-898S"
+ ALIASES = [VV898E, ]
+
+ _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
How comprehensive do we want to be with alias models? Leixen sold the
same exact radio (from everything I can see in the images they are a
binary match) as both the VV-898S and VV-898E. Should I bother making
an alias model for the 898E, or do we just markup the web page to note
that we support the model and it matches the S? Aliases make a lot of
sense when the vendor name or model are grossly different, but I'm not
sure it's worth doing in this case.
--
Brian
5
7
[chirp_devel] [PATCH] [UV-5X3] Add DTMF Settings (RX and TX) to BTech UV-5X3
by Jim Unroe 04 Sep '16
by Jim Unroe 04 Sep '16
04 Sep '16
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1473003258 14400
# Node ID 6400db5ca2b420af20aacbeee51ef766d63c3d76
# Parent 75cb01b8fb0d0a0f523db839a1eb876839861050
[UV-5X3] Add DTMF Settings (RX and TX) to BTech UV-5X3
This patch exposes the structures and adds DTMF related settings:
- PTT-ID codes
- ANI settings and codes
- Master and Vice control IDs
- Control settings and codes (Inspection, Monitor, Stun, Kill, Revive)
- other DTMF related settings
related to #3931
diff -r 75cb01b8fb0d -r 6400db5ca2b4 chirp/drivers/uv5x3.py
--- a/chirp/drivers/uv5x3.py Sat Sep 03 19:54:58 2016 -0400
+++ b/chirp/drivers/uv5x3.py Sun Sep 04 11:34:18 2016 -0400
@@ -50,12 +50,14 @@
LIST_ALMOD = ["Site", "Tone", "Code"]
LIST_BANDWIDTH = ["Wide", "Narrow"]
LIST_COLOR = ["Off", "Blue", "Orange", "Purple"]
+LIST_DELAYPROCTIME = ["%s ms" % x for x in range(100, 4100, 100)]
LIST_DTMFSPEED = ["%s ms" % x for x in range(50, 2010, 10)]
LIST_DTMFST = ["Off", "DT-ST", "ANI-ST", "DT+ANI"]
LIST_MODE = ["Channel", "Name", "Frequency"]
LIST_OFF1TO9 = ["Off"] + list("123456789")
LIST_OFF1TO10 = LIST_OFF1TO9 + ["10"]
LIST_OFFAB = ["Off"] + LIST_AB
+LIST_RESETTIME = ["%s ms" % x for x in range(100, 16100, 100)]
LIST_RESUME = ["TO", "CO", "SE"]
LIST_PONMSG = ["Full", "Message"]
LIST_PTTID = ["Off", "BOT", "EOT", "Both"]
@@ -146,6 +148,53 @@
pttid:2;
} memory[128];
+ #seekto 0x0B00;
+ struct {
+ u8 code[16];
+ } pttid[15];
+
+ #seekto 0x0C80;
+ struct {
+ u8 inspection[8];
+ u8 monitor[8];
+ u8 alarmcode[8];
+ u8 stun[8];
+ u8 kill[8];
+ u8 revive[8];
+ u8 code[7];
+ u8 unknown06;
+ u8 dtmfon;
+ u8 dtmfoff;
+ u8 unused00:6,
+ aniid:2;
+ u8 unknown07[5];
+ u8 masterid[5];
+ u8 unknown08[3];
+ u8 viceid[5];
+ u8 unknown09[3];
+ u8 unused01:7,
+ mastervice:1;
+ u8 unused02:3,
+ mrevive:1,
+ mkill:1,
+ mstun:1,
+ mmonitor:1,
+ minspection:1;
+ u8 unused03:3,
+ vrevive:1,
+ vkill:1,
+ vstun:1,
+ vmonitor:1,
+ vinspection:1;
+ u8 unused04:6,
+ txdisable:1,
+ rxdisable:1;
+ u8 groupcode;
+ u8 spacecode;
+ u8 delayproctime;
+ u8 resettime;
+ } ani;
+
#seekto 0x0E20;
struct {
u8 unused00:4,
@@ -368,8 +417,11 @@
other = RadioSettingGroup("other", "Other Settings")
work = RadioSettingGroup("work", "Work Mode Settings")
fm_preset = RadioSettingGroup("fm_preset", "FM Preset")
+ dtmfe = RadioSettingGroup("dtmfe", "DTMF Encode Settings")
+ dtmfd = RadioSettingGroup("dtmfd", "DTMF Decode Settings")
service = RadioSettingGroup("service", "Service Settings")
- top = RadioSettings(basic, advanced, other, work, fm_preset, service)
+ top = RadioSettings(basic, advanced, other, work, fm_preset, dtmfe,
+ dtmfd, service)
# Basic settings
if _mem.settings.squelch > 0x09:
@@ -826,6 +878,259 @@
RadioSettingValueFloat(65, 108.0, preset, 0.1, 1))
fm_preset.append(rs)
+ # DTMF encode settings
+ for i in range(0, 15):
+ _codeobj = self._memobj.pttid[i].code
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 16, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("pttid/%i.code" % i,
+ "Signal Code %i" % (i + 1), val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 16):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.code = code
+ rs.set_apply_callback(apply_code, self._memobj.pttid[i])
+ dtmfe.append(rs)
+
+ if _mem.ani.dtmfon > 0xC3:
+ val = 0x03
+ else:
+ val = _mem.ani.dtmfon
+ rs = RadioSetting("ani.dtmfon", "DTMF Speed (on)",
+ RadioSettingValueList(LIST_DTMFSPEED,
+ LIST_DTMFSPEED[val]))
+ dtmfe.append(rs)
+
+ if _mem.ani.dtmfoff > 0xC3:
+ val = 0x03
+ else:
+ val = _mem.ani.dtmfoff
+ rs = RadioSetting("ani.dtmfoff", "DTMF Speed (off)",
+ RadioSettingValueList(LIST_DTMFSPEED,
+ LIST_DTMFSPEED[val]))
+ dtmfe.append(rs)
+
+ _codeobj = self._memobj.ani.code
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 7, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.code", "ANI Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 7):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.code = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfe.append(rs)
+
+ rs = RadioSetting("ani.aniid", "When to send ANI ID",
+ RadioSettingValueList(LIST_PTTID,
+ LIST_PTTID[_mem.ani.aniid]))
+ dtmfe.append(rs)
+
+ # DTMF decode settings
+ rs = RadioSetting("ani.mastervice", "Master and Vice ID",
+ RadioSettingValueBoolean(_mem.ani.mastervice))
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.masterid
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 5, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.masterid", "Master Control ID", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 5):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.masterid = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.minspection", "Master Inspection",
+ RadioSettingValueBoolean(_mem.ani.minspection))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.mmonitor", "Master Monitor",
+ RadioSettingValueBoolean(_mem.ani.mmonitor))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.mstun", "Master Stun",
+ RadioSettingValueBoolean(_mem.ani.mstun))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.mkill", "Master Kill",
+ RadioSettingValueBoolean(_mem.ani.mkill))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.mrevive", "Master Revive",
+ RadioSettingValueBoolean(_mem.ani.mrevive))
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.viceid
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 5, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.viceid", "Vice Control ID", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 5):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.viceid = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.vinspection", "Vice Inspection",
+ RadioSettingValueBoolean(_mem.ani.vinspection))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.vmonitor", "Vice Monitor",
+ RadioSettingValueBoolean(_mem.ani.vmonitor))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.vstun", "Vice Stun",
+ RadioSettingValueBoolean(_mem.ani.vstun))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.vkill", "Vice Kill",
+ RadioSettingValueBoolean(_mem.ani.vkill))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.vrevive", "Vice Revive",
+ RadioSettingValueBoolean(_mem.ani.vrevive))
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.inspection
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 8, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.inspection", "Inspection Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 8):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.inspection = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.monitor
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 8, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.monitor", "Monitor Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 8):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.monitor = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.alarmcode
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 8, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.alarm", "Alarm Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 8):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.alarmcode = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.stun
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 8, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.stun", "Stun Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 8):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.stun = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.kill
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 8, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.kill", "Kill Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 8):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.kill = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ _codeobj = _mem.ani.revive
+ _code = "".join([DTMF_CHARS[x] for x in _codeobj if int(x) < 0x1F])
+ val = RadioSettingValueString(0, 8, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.revive", "Revive Code", val)
+
+ def apply_code(setting, obj):
+ code = []
+ for j in range(0, 8):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.revive = code
+ rs.set_apply_callback(apply_code, self._memobj.ani)
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.resettime", "Reset Time",
+ RadioSettingValueList(LIST_RESETTIME,
+ LIST_RESETTIME[
+ _mem.ani.resettime]))
+ dtmfd.append(rs)
+
+ rs = RadioSetting("ani.delayproctime", "Delay Processing Time",
+ RadioSettingValueList(LIST_DELAYPROCTIME,
+ LIST_DELAYPROCTIME[
+ _mem.ani.delayproctime]))
+ dtmfd.append(rs)
+
# Service settings
for band in ["vhf", "uhf"]:
for index in range(0, 10):
1
0
Tested changes:
[Dan Smith <dsmith(a)danplanet.com>] [LT-725UV] Add Test image
#3745
[Jim Unroe <rock.unroe(a)gmail.com>] [LT-725UV] Add Support for LUITON LT-725UV
This patch adds basic support for the LUITON LT-725UV mobile radio.
#3745
[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 161256cc3a33c31b8c1664d133c3b97f378a8f43
[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 161256cc3a33c31b8c1664d133c3b97f378a8f43
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson2037923225659446783.sh
[workspace] $ /bin/sh -xe /tmp/hudson6595993680464644417.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/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.205s
user 0m7.176s
sys 0m0.016s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2016-09-04 08:42:53,899] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.1 LTS (Python 2.7.12)
[2016-09-04 08:42:53,941] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2016-09-04 08:42:53,941] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2016-09-04 08:42:53,941] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2016-09-04 08:42:53,942] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2016-09-04 08:42:53,943] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2016-09-04 08:42:53,943] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2016-09-04 08:42:53,943] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2016-09-04 08:42:53,943] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2016-09-04 08:42:53,943] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2016-09-04 08:42:53,944] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2016-09-04 08:42:53,945] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2016-09-04 08:42:53,945] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2016-09-04 08:42:53,945] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2016-09-04 08:42:53,945] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2016-09-04 08:42:53,945] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2016-09-04 08:42:53,945] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2016-09-04 08:42:53,946] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2016-09-04 08:42:53,946] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2016-09-04 08:42:53,947] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2016-09-04 08:42:53,947] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2016-09-04 08:42:53,947] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2016-09-04 08:42:53,947] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2016-09-04 08:42:53,948] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2016-09-04 08:42:53,949] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2016-09-04 08:42:53,950] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2016-09-04 08:42:53,950] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2016-09-04 08:42:53,950] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2016-09-04 08:42:53,950] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2016-09-04 08:42:53,950] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2016-09-04 08:42:53,950] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2016-09-04 08:42:53,951] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2016-09-04 08:42:53,951] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2016-09-04 08:42:53,952] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2016-09-04 08:42:53,952] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2016-09-04 08:42:53,952] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2016-09-04 08:42:53,953] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2016-09-04 08:42:53,953] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2016-09-04 08:42:53,953] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2016-09-04 08:42:53,953] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2016-09-04 08:42:53,954] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2016-09-04 08:42:53,954] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2016-09-04 08:42:53,954] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2016-09-04 08:42:53,954] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2016-09-04 08:42:53,954] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2016-09-04 08:42:53,955] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2016-09-04 08:42:53,955] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2016-09-04 08:42:53,955] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2016-09-04 08:42:53,956] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2016-09-04 08:42:53,956] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2016-09-04 08:42:53,956] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2016-09-04 08:42:53,963] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2016-09-04 08:42:53,966] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2016-09-04 08:42:53,967] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2016-09-04 08:42:53,967] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2016-09-04 08:42:53,967] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2016-09-04 08:42:53,967] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2016-09-04 08:42:53,967] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2016-09-04 08:42:53,967] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2016-09-04 08:42:53,968] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2016-09-04 08:42:53,968] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2016-09-04 08:42:53,968] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2016-09-04 08:42:53,969] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2016-09-04 08:42:53,969] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2016-09-04 08:42:53,969] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2016-09-04 08:42:53,969] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2016-09-04 08:42:53,970] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2016-09-04 08:42:53,970] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2016-09-04 08:42:53,970] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2016-09-04 08:42:53,970] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2016-09-04 08:42:53,970] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2016-09-04 08:42:53,971] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2016-09-04 08:42:53,971] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2016-09-04 08:42:53,971] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2016-09-04 08:42:53,971] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2016-09-04 08:42:53,972] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2016-09-04 08:42:53,972] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2016-09-04 08:42:53,972] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2016-09-04 08:42:53,972] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2016-09-04 08:42:53,973] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2016-09-04 08:42:53,973] chirp.directory - INFO: Registered LUITON_LT-725UV = LT725UV
[2016-09-04 08:42:53,973] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2016-09-04 08:42:53,973] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2016-09-04 08:42:53,974] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2016-09-04 08:42:53,974] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2016-09-04 08:42:53,974] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2016-09-04 08:42:53,974] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2016-09-04 08:42:53,974] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2016-09-04 08:42:53,974] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2016-09-04 08:42:53,976] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2016-09-04 08:42:53,976] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2016-09-04 08:42:53,976] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2016-09-04 08:42:53,976] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2016-09-04 08:42:53,976] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2016-09-04 08:42:53,976] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2016-09-04 08:42:53,977] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2016-09-04 08:42:53,977] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2016-09-04 08:42:53,977] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2016-09-04 08:42:53,977] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2016-09-04 08:42:53,978] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2016-09-04 08:42:53,979] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2016-09-04 08:42:53,980] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2016-09-04 08:42:53,981] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2016-09-04 08:42:53,982] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2016-09-04 08:42:53,982] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2016-09-04 08:42:53,982] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2016-09-04 08:42:53,982] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2016-09-04 08:42:53,983] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2016-09-04 08:42:53,983] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2016-09-04 08:42:53,983] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2016-09-04 08:42:53,984] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2016-09-04 08:42:53,984] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2016-09-04 08:42:53,984] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2016-09-04 08:42:53,985] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2016-09-04 08:42:53,985] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2016-09-04 08:42:53,985] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2016-09-04 08:42:53,986] chirp.directory - INFO: Registered Yaesu_VX-8_R = VX8Radio
[2016-09-04 08:42:53,986] chirp.directory - INFO: Registered Yaesu_VX-8_DR = VX8DRadio
[2016-09-04 08:42:53,986] chirp.directory - INFO: Registered Yaesu_VX-8_GE = VX8GERadio
[2016-09-04 08:42:53,986] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
+ rm /tmp/Alinco_DJ175_zmydct.img /tmp/Alinco_DJ596_XuBT_U.img /tmp/Alinco_DR235T_TTt72J.img /tmp/AnyTone_OBLTR-8R_xsfs7e.img /tmp/AnyTone_TERMN-8R_09eMOQ.img /tmp/BTECH_UV-2501+220_fKpNZw.img /tmp/BTECH_UV-5001_k4tuqZ.img /tmp/BTECH_UV-50X3_CQ8K_o.img /tmp/BTECH_UV-50X3_Cco6io.img /tmp/BTECH_UV-50X3_fVQ8Pd.img /tmp/BTECH_UV-5X3_ktqnJI.img /tmp/Baofeng_BF-888_EfMfZd.img /tmp/Baofeng_F-11_lXnP99.img /tmp/Baofeng_UV-3R_zh0Otm.img /tmp/Baofeng_UV-5R_KP_XCB.img /tmp/Baofeng_UV-6R_20Xjda.img /tmp/Baofeng_UV-B5_o_IQW_.img /tmp/Baojie_BJ-9900_9btIB0.img /tmp/Baojie_BJ-9900_UI96gA.img /tmp/Baojie_BJ-9900_lE17c3.img /tmp/Feidaxin_FD-268A_jyJwcd.img /tmp/Feidaxin_FD-268B_OyqOaY.img /tmp/Feidaxin_FD-288B_Hcz24V.img /tmp/Icom_IC-208H_OPzZOU.img /tmp/Icom_IC-2100H_lUll_h.img /tmp/Icom_IC-2200H_EHJJjP.img /tmp/Icom_IC-2720H_aYZNxW.img /tmp/Icom_IC-2820H_oS3PJb.img /tmp/Icom_IC-Q7A_65zIvo.img /tmp/Icom_IC-T70_v4HGha.img /tmp/Icom_IC-T7H_L8RvHa.img /tmp/Icom_IC-T8A_UBN8R1.img /tmp/Icom_IC-V82_U82_IjYm2q.img /tmp/Icom_IC-W32A_41wOYB.img /tmp/Icom_IC-W32A_4sKB3r.img /tmp/Icom_IC-W32A_MWjeEy.img /tmp/Icom_IC-W32E_FTBeBM.img /tmp/Icom_IC-W32E_M5k5Y9.img /tmp/Icom_IC-W32E_sKg8vT.img /tmp/Icom_ID-31A_dVsmzK.img /tmp/Icom_ID-51 Plus_U2jmjO.img /tmp/Icom_ID-51_9aWKPT.img /tmp/Icom_ID-800H_9bBiZp.img /tmp/Icom_ID-880H_UA5xkk.img /tmp/Jetstream_JT220M_c9YkLz.img /tmp/Jetstream_JT270M_TEDkU_.img /tmp/KYD_IP-620_kGujS9.img /tmp/Kenwood_TH-D72 (clone mode)_fChn7P.img /tmp/Kenwood_TK-272G_MotfJU.img /tmp/Kenwood_TK-760G_AFhBk4.img /tmp/Kenwood_TK-8102_Nc9tPM.img /tmp/LUITON_LT-725UV_G1_E8J.img /tmp/LUITON_LT-725UV_W6P_Uc.img /tmp/LUITON_LT-725UV_ziruky.img /tmp/Leixen_VV-898_4TIExb.img /tmp/Polmar_DB-50M_Ismjbi.img /tmp/Puxing_PX-2R_SC7CAz.img /tmp/Puxing_PX-777_KMSuML.img /tmp/TYT_TH-7800_vyankQ.img /tmp/TYT_TH-9800_pXMvhz.img /tmp/TYT_TH-UV3R-25_nMOmiD.img /tmp/TYT_TH-UV3R_ARgFVf.img /tmp/TYT_TH-UVF1_exC4Rh.img /tmp/TYT_TH9000_144_CyVfeF.img /tmp/Vertex Standard_VXA-700_IaClqz.img /tmp/WACCOM_MINI-8900_8jH3bD.img /tmp/Wouxun_KG-816_avkoDH.img /tmp/Wouxun_KG-818_U7ruSQ.img /tmp/Wouxun_KG-UV6_5HGwKr.img /tmp/Wouxun_KG-UV8D_B0E6iQ.img /tmp/Wouxun_KG-UVD1P_TSE5C6.img /tmp/Yaesu_FT-1802M_6gWMLq.img /tmp/Yaesu_FT-1D_0kITy6.img /tmp/Yaesu_FT-2800M_N487Yv.img /tmp/Yaesu_FT-2900R_1900R_WaVCsw.img /tmp/Yaesu_FT-50_dLhSeB.img /tmp/Yaesu_FT-60_4ZDRfP.img /tmp/Yaesu_FT-7800_7900_ZyQTNR.img /tmp/Yaesu_FT-817ND (US)_FGO0nA.img /tmp/Yaesu_FT-817ND_IXEjEE.img /tmp/Yaesu_FT-817_hm517X.img /tmp/Yaesu_FT-857_897 (US)_sRU5sz.img /tmp/Yaesu_FT-857_897_izOqne.img /tmp/Yaesu_FT-8800_0BJAv4.img /tmp/Yaesu_FT-8800_70QO5h.img /tmp/Yaesu_FT-8800_jWpdNx.img /tmp/Yaesu_FT-8900_bFt5pH.img /tmp/Yaesu_FTM-350_8dCac_.img /tmp/Yaesu_FTM-350_9wuVI1.img /tmp/Yaesu_FTM-350_FWAgzv.img /tmp/Yaesu_VX-2_NUVJtP.img /tmp/Yaesu_VX-3_LdZKwB.img /tmp/Yaesu_VX-5_tyWPmQ.img /tmp/Yaesu_VX-6_G9PIeT.img /tmp/Yaesu_VX-7_iE5QnQ.img /tmp/Yaesu_VX-8_n7JskV.img
Email was triggered for: Success
Sending email for trigger: Success
1
0
Tested changes:
[Brian Dickman <brian.maybe(a)gmail.com>] [leixen] Revert 94db968fce11, unneeded patch that was refactored
Related to #3899
[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 617ef175811dcf0d49b8dba8769e845972ebf672
[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 617ef175811dcf0d49b8dba8769e845972ebf672
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson6323529516009017340.sh
[workspace] $ /bin/sh -xe /tmp/hudson7501124288616746732.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.054s
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.561s
user 0m7.460s
sys 0m0.036s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2016-09-04 08:37:54,679] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.1 LTS (Python 2.7.12)
[2016-09-04 08:37:54,718] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2016-09-04 08:37:54,719] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2016-09-04 08:37:54,720] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2016-09-04 08:37:54,721] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2016-09-04 08:37:54,721] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2016-09-04 08:37:54,721] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2016-09-04 08:37:54,722] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2016-09-04 08:37:54,722] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2016-09-04 08:37:54,722] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2016-09-04 08:37:54,722] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2016-09-04 08:37:54,722] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2016-09-04 08:37:54,723] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2016-09-04 08:37:54,723] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2016-09-04 08:37:54,723] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2016-09-04 08:37:54,723] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2016-09-04 08:37:54,724] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2016-09-04 08:37:54,724] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2016-09-04 08:37:54,726] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2016-09-04 08:37:54,726] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2016-09-04 08:37:54,728] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2016-09-04 08:37:54,728] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2016-09-04 08:37:54,728] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2016-09-04 08:37:54,728] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2016-09-04 08:37:54,729] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2016-09-04 08:37:54,729] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2016-09-04 08:37:54,729] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2016-09-04 08:37:54,729] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2016-09-04 08:37:54,730] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2016-09-04 08:37:54,731] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2016-09-04 08:37:54,732] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2016-09-04 08:37:54,732] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2016-09-04 08:37:54,733] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2016-09-04 08:37:54,733] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2016-09-04 08:37:54,733] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2016-09-04 08:37:54,734] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2016-09-04 08:37:54,734] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2016-09-04 08:37:54,734] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2016-09-04 08:37:54,734] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2016-09-04 08:37:54,734] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2016-09-04 08:37:54,735] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2016-09-04 08:37:54,735] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2016-09-04 08:37:54,735] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2016-09-04 08:37:54,735] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2016-09-04 08:37:54,736] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2016-09-04 08:37:54,736] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2016-09-04 08:37:54,736] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2016-09-04 08:37:54,737] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2016-09-04 08:37:54,737] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2016-09-04 08:37:54,737] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2016-09-04 08:37:54,737] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2016-09-04 08:37:54,744] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2016-09-04 08:37:54,747] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2016-09-04 08:37:54,748] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2016-09-04 08:37:54,748] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2016-09-04 08:37:54,748] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2016-09-04 08:37:54,748] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2016-09-04 08:37:54,748] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2016-09-04 08:37:54,749] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2016-09-04 08:37:54,749] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2016-09-04 08:37:54,749] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2016-09-04 08:37:54,750] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2016-09-04 08:37:54,750] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2016-09-04 08:37:54,750] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2016-09-04 08:37:54,750] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2016-09-04 08:37:54,750] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2016-09-04 08:37:54,751] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2016-09-04 08:37:54,751] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2016-09-04 08:37:54,751] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2016-09-04 08:37:54,751] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2016-09-04 08:37:54,751] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2016-09-04 08:37:54,752] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2016-09-04 08:37:54,752] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2016-09-04 08:37:54,752] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2016-09-04 08:37:54,752] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2016-09-04 08:37:54,753] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2016-09-04 08:37:54,753] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2016-09-04 08:37:54,753] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2016-09-04 08:37:54,753] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2016-09-04 08:37:54,754] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2016-09-04 08:37:54,754] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2016-09-04 08:37:54,754] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2016-09-04 08:37:54,754] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2016-09-04 08:37:54,754] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2016-09-04 08:37:54,754] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2016-09-04 08:37:54,755] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2016-09-04 08:37:54,755] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2016-09-04 08:37:54,755] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2016-09-04 08:37:54,755] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2016-09-04 08:37:54,755] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2016-09-04 08:37:54,756] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2016-09-04 08:37:54,757] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2016-09-04 08:37:54,757] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2016-09-04 08:37:54,757] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2016-09-04 08:37:54,757] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2016-09-04 08:37:54,757] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2016-09-04 08:37:54,758] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2016-09-04 08:37:54,758] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2016-09-04 08:37:54,758] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2016-09-04 08:37:54,758] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2016-09-04 08:37:54,758] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2016-09-04 08:37:54,759] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2016-09-04 08:37:54,760] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2016-09-04 08:37:54,761] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2016-09-04 08:37:54,762] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2016-09-04 08:37:54,762] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2016-09-04 08:37:54,762] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2016-09-04 08:37:54,762] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2016-09-04 08:37:54,762] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2016-09-04 08:37:54,763] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2016-09-04 08:37:54,763] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2016-09-04 08:37:54,763] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2016-09-04 08:37:54,764] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2016-09-04 08:37:54,764] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2016-09-04 08:37:54,764] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2016-09-04 08:37:54,765] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2016-09-04 08:37:54,765] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2016-09-04 08:37:54,765] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2016-09-04 08:37:54,766] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2016-09-04 08:37:54,766] chirp.directory - INFO: Registered Yaesu_VX-8_R = VX8Radio
[2016-09-04 08:37:54,766] chirp.directory - INFO: Registered Yaesu_VX-8_DR = VX8DRadio
[2016-09-04 08:37:54,766] chirp.directory - INFO: Registered Yaesu_VX-8_GE = VX8GERadio
[2016-09-04 08:37:54,766] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
+ rm /tmp/Alinco_DJ175_87GLr6.img /tmp/Alinco_DJ175_WDbQlB.img /tmp/Alinco_DJ596_ACtvB6.img /tmp/Alinco_DJ596_rAIlde.img /tmp/Alinco_DR235T_YFuius.img /tmp/Alinco_DR235T_jDs0Vc.img /tmp/AnyTone_OBLTR-8R_0mvDCI.img /tmp/AnyTone_OBLTR-8R_T5d2xs.img /tmp/AnyTone_TERMN-8R__98LnZ.img /tmp/AnyTone_TERMN-8R_hjaW8C.img /tmp/BTECH_UV-2501+220_XlbMkA.img /tmp/BTECH_UV-2501+220_Y1ZpuU.img /tmp/BTECH_UV-5001_Wp6W4x.img /tmp/BTECH_UV-5001_iRIaRG.img /tmp/BTECH_UV-50X3_31xWNf.img /tmp/BTECH_UV-50X3_4aWot5.img /tmp/BTECH_UV-50X3_GMpdKQ.img /tmp/BTECH_UV-50X3_LGHgj4.img /tmp/BTECH_UV-50X3_LGKvDy.img /tmp/BTECH_UV-50X3_PM4pWQ.img /tmp/BTECH_UV-5X3_eFS4fZ.img /tmp/BTECH_UV-5X3_pZM8V2.img /tmp/Baofeng_BF-888_5FyW24.img /tmp/Baofeng_BF-888__nWNd_.img /tmp/Baofeng_F-11_CGogD9.img /tmp/Baofeng_F-11_xTu0WO.img /tmp/Baofeng_UV-3R_X50TV7.img /tmp/Baofeng_UV-3R_dlcy4P.img /tmp/Baofeng_UV-5R_9Z8e93.img /tmp/Baofeng_UV-5R_JtJiYT.img /tmp/Baofeng_UV-6R_WBBSw_.img /tmp/Baofeng_UV-6R_loxEkB.img /tmp/Baofeng_UV-B5_UMZsyG.img /tmp/Baofeng_UV-B5_a8uMBW.img /tmp/Baojie_BJ-9900_TlScq4.img /tmp/Baojie_BJ-9900_TzWFXg.img /tmp/Baojie_BJ-9900_UYSk3D.img /tmp/Baojie_BJ-9900_bYtP47.img /tmp/Baojie_BJ-9900_chdYOg.img /tmp/Baojie_BJ-9900_fRKevV.img /tmp/Feidaxin_FD-268A__sm0xl.img /tmp/Feidaxin_FD-268A_hgfuh6.img /tmp/Feidaxin_FD-268B_BNCnvJ.img /tmp/Feidaxin_FD-268B_XGHQyS.img /tmp/Feidaxin_FD-288B_6jBYLv.img /tmp/Feidaxin_FD-288B_8x8X9p.img /tmp/Icom_IC-208H_IaxQWi.img /tmp/Icom_IC-208H_jRBlsQ.img /tmp/Icom_IC-2100H_58Angp.img /tmp/Icom_IC-2100H_Qzxmiq.img /tmp/Icom_IC-2200H_Cm0kFP.img /tmp/Icom_IC-2200H_gKqvMb.img /tmp/Icom_IC-2720H_Al4CFM.img /tmp/Icom_IC-2720H_sQfSaD.img /tmp/Icom_IC-2820H_DKkzC8.img /tmp/Icom_IC-2820H_T_Zuep.img /tmp/Icom_IC-Q7A_2OeS8H.img /tmp/Icom_IC-Q7A_cs40vr.img /tmp/Icom_IC-T70_EvZrCX.img /tmp/Icom_IC-T70_KrfQXV.img /tmp/Icom_IC-T7H_JdhWax.img /tmp/Icom_IC-T7H_m6mBJW.img /tmp/Icom_IC-T8A_7jo9Ur.img /tmp/Icom_IC-T8A_Namw6Z.img /tmp/Icom_IC-V82_U82_hgvG6Q.img /tmp/Icom_IC-V82_U82_s4WkJK.img /tmp/Icom_IC-W32A_Npb1Ef.img /tmp/Icom_IC-W32A_SeKJpG.img /tmp/Icom_IC-W32A_Siotio.img /tmp/Icom_IC-W32A_mt4Bx7.img /tmp/Icom_IC-W32A_nETWqX.img /tmp/Icom_IC-W32A_vsqVOZ.img /tmp/Icom_IC-W32E_723YhC.img /tmp/Icom_IC-W32E_7AXGS1.img /tmp/Icom_IC-W32E_9Ds2wC.img /tmp/Icom_IC-W32E_ilw06b.img /tmp/Icom_IC-W32E_lhC8mz.img /tmp/Icom_IC-W32E_nLJz9t.img /tmp/Icom_ID-31A_Ibb_DE.img /tmp/Icom_ID-31A_tO2oG5.img /tmp/Icom_ID-51 Plus_d_wxDo.img /tmp/Icom_ID-51 Plus_jBBNln.img /tmp/Icom_ID-51_SO0Hdu.img /tmp/Icom_ID-51_TQoQP_.img /tmp/Icom_ID-800H_4ACxO2.img /tmp/Icom_ID-800H_S_DbL1.img /tmp/Icom_ID-880H_fsByHE.img /tmp/Icom_ID-880H_shTipW.img /tmp/Jetstream_JT220M_4BUSwQ.img /tmp/Jetstream_JT220M_tnu7sE.img /tmp/Jetstream_JT270M_ixQ0t7.img /tmp/Jetstream_JT270M_ymyBXe.img /tmp/KYD_IP-620_OGNfgl.img /tmp/KYD_IP-620_eJmvJ7.img /tmp/Kenwood_TH-D72 (clone mode)_AdJS7F.img /tmp/Kenwood_TH-D72 (clone mode)_ihMroE.img /tmp/Kenwood_TK-272G_Zo_WJG.img /tmp/Kenwood_TK-272G_jF04sq.img /tmp/Kenwood_TK-760G_8hXyRG.img /tmp/Kenwood_TK-760G_yp_Wn3.img /tmp/Kenwood_TK-8102_k8h29i.img /tmp/Kenwood_TK-8102_s9z3il.img /tmp/Leixen_VV-898_4TeWel.img /tmp/Leixen_VV-898_pZHsue.img /tmp/Polmar_DB-50M_MCYelQ.img /tmp/Polmar_DB-50M_bI0L97.img /tmp/Puxing_PX-2R_oDA9ip.img /tmp/Puxing_PX-2R_wmTmBf.img /tmp/Puxing_PX-777_NiW4gI.img /tmp/Puxing_PX-777_gmjxz_.img /tmp/TYT_TH-7800_TOTCSN.img /tmp/TYT_TH-7800_TbZHS3.img /tmp/TYT_TH-9800_n0z0OB.img /tmp/TYT_TH-9800_vGRXd9.img /tmp/TYT_TH-UV3R-25_K9Z8PX.img /tmp/TYT_TH-UV3R-25_ocF4Os.img /tmp/TYT_TH-UV3R_Rio1JR.img /tmp/TYT_TH-UV3R_tpTUXQ.img /tmp/TYT_TH-UVF1_02hN64.img /tmp/TYT_TH-UVF1_Q354d2.img /tmp/TYT_TH9000_144_1Oc0pM.img /tmp/TYT_TH9000_144_aom_04.img /tmp/Vertex Standard_VXA-700_d_t5YI.img /tmp/Vertex Standard_VXA-700_epVqjg.img /tmp/WACCOM_MINI-8900_eFLIJO.img /tmp/WACCOM_MINI-8900_fvurCW.img /tmp/Wouxun_KG-816_Krl2ks.img /tmp/Wouxun_KG-816_a7LJc3.img /tmp/Wouxun_KG-818_AmKbYj.img /tmp/Wouxun_KG-818_zCPOea.img /tmp/Wouxun_KG-UV6_iC8DeP.img /tmp/Wouxun_KG-UV6_lVPrHB.img /tmp/Wouxun_KG-UV8D_KPUP1f.img /tmp/Wouxun_KG-UV8D_Yc_ONF.img /tmp/Wouxun_KG-UVD1P_FAzDQz.img /tmp/Wouxun_KG-UVD1P_YYonQk.img /tmp/Yaesu_FT-1802M_I8EEeT.img /tmp/Yaesu_FT-1802M_d7tG16.img /tmp/Yaesu_FT-1D_191PTJ.img /tmp/Yaesu_FT-1D_tbeROy.img /tmp/Yaesu_FT-2800M_szNCDE.img /tmp/Yaesu_FT-2800M_utrqKn.img /tmp/Yaesu_FT-2900R_1900R_6CFqVJ.img /tmp/Yaesu_FT-2900R_1900R_NweHdU.img /tmp/Yaesu_FT-50_ICWHGy.img /tmp/Yaesu_FT-50_WmRGyU.img /tmp/Yaesu_FT-60_EI696W.img /tmp/Yaesu_FT-60_dL3skF.img /tmp/Yaesu_FT-7800_7900_1gyDkO.img /tmp/Yaesu_FT-7800_7900_CXM0jW.img /tmp/Yaesu_FT-817ND (US)_OgPwoF.img /tmp/Yaesu_FT-817ND (US)_Otge0d.img /tmp/Yaesu_FT-817ND_HE0pBr.img /tmp/Yaesu_FT-817ND_VG89uW.img /tmp/Yaesu_FT-817_Fi1qo8.img /tmp/Yaesu_FT-817_OPQEe4.img /tmp/Yaesu_FT-857_897 (US)_Nuv3Mh.img /tmp/Yaesu_FT-857_897 (US)_SKOdO0.img /tmp/Yaesu_FT-857_897_4lfREL.img /tmp/Yaesu_FT-857_897_GZxjsB.img /tmp/Yaesu_FT-8800_K5CDXG.img /tmp/Yaesu_FT-8800_NtPzBN.img /tmp/Yaesu_FT-8800_QFMze3.img /tmp/Yaesu_FT-8800_fzkyWQ.img /tmp/Yaesu_FT-8800_l6f1yP.img /tmp/Yaesu_FT-8800_sdehPX.img /tmp/Yaesu_FT-8900_gL7ELS.img /tmp/Yaesu_FT-8900_jLuxZ6.img /tmp/Yaesu_FTM-350_0p7Cxc.img /tmp/Yaesu_FTM-350_5TBPgU.img /tmp/Yaesu_FTM-350_eoR4yP.img /tmp/Yaesu_FTM-350_k3eocs.img /tmp/Yaesu_FTM-350_pwqh8t.img /tmp/Yaesu_FTM-350_xIw4WA.img /tmp/Yaesu_VX-2_X3mRKl.img /tmp/Yaesu_VX-2_h5V9z_.img /tmp/Yaesu_VX-3_C_pXDR.img /tmp/Yaesu_VX-3_h4V60H.img /tmp/Yaesu_VX-5_RkRYPK.img /tmp/Yaesu_VX-5_s13ixf.img /tmp/Yaesu_VX-6_DvpNC4.img /tmp/Yaesu_VX-6_r5Cw_Q.img /tmp/Yaesu_VX-7_MpNFkT.img /tmp/Yaesu_VX-7_ckNVnj.img /tmp/Yaesu_VX-8_Xbyq8P.img /tmp/Yaesu_VX-8_vwTXX8.img
Email was triggered for: Success
Sending email for trigger: Success
1
0
04 Sep '16
# HG changeset patch
# User Brian Dickman <brian.maybe(a)gmail.com>
# Date 1472935944 25200
# Sat Sep 03 13:52:24 2016 -0700
# Node ID d9eda786d470f7845f96d3ada98e3de65f5213a6
# Parent 3d8359621d43d5713869497d17182d6a43aebd67
[leixen] [ 1 of 2 ] Migrate radio paramters into class to prepare for
multiple models
Parameterize the mmap to account for changes between the 898 and 898S
models. Move power levels into the class out of the global module
level. Extend model matching to additional bytes to tell apart
additional models. Related to #3889, #3327, #3065.
diff -r 3d8359621d43 -r d9eda786d470 chirp/drivers/leixen.py
--- a/chirp/drivers/leixen.py Sat Sep 03 08:37:00 2016 -0700
+++ b/chirp/drivers/leixen.py Sat Sep 03 13:52:24 2016 -0700
@@ -135,14 +135,13 @@
u8 unknown5;
u8 pttidoff:1,
dtmfoff:1,
- unknown6:1,
+ %(unknownormode)s,
tailcut:1,
aliasop:1,
talkaroundoff:1,
voxoff:1,
skip:1;
- u8 power:1,
- mode:1
+ u8 %(modeorpower)s,
reverseoff:1,
blckoff:1,
unknown7:1,
@@ -223,8 +222,6 @@
"Reverse"
]
-POWER_LEVELS = [chirp_common.PowerLevel("Low", watts=4),
- chirp_common.PowerLevel("High", watts=10)]
MODES = ["NFM", "FM"]
WTFTONES = map(float, xrange(56, 64))
TONES = WTFTONES + chirp_common.TONES
@@ -326,7 +323,8 @@
_ranges = [(0x0d00, 0x2000)]
image_ident = _image_ident_from_image(radio)
- if image_ident.startswith(radio._file_ident) and "LX-" in image_ident:
+ if image_ident.startswith(radio._file_ident) and \
+ radio._model_ident in image_ident:
_ranges = radio._ranges
do_ident(radio)
@@ -371,6 +369,8 @@
BAUD_RATE = 9600
_file_ident = "Leixen"
+ _model_ident = 'LX-\x89\x85\x63'
+
_memsize = 0x2000
_ranges = [
(0x0000, 0x013f),
@@ -382,6 +382,11 @@
(0x0d00, 0x2000),
]
+ _mem_formatter = {'unknownormode': 'unknown6:1',
+ 'modeorpower': 'mode:1, power:1'}
+ _power_levels = [chirp_common.PowerLevel("Low", watts=4),
+ chirp_common.PowerLevel("High", watts=10)]
+
def get_features(self):
rf = chirp_common.RadioFeatures()
rf.has_settings = True
@@ -402,7 +407,7 @@
"DTCS->DTCS"]
rf.valid_characters = chirp_common.CHARSET_ASCII
rf.valid_name_length = 7
- rf.valid_power_levels = POWER_LEVELS
+ rf.valid_power_levels = self._power_levels
rf.valid_duplexes = ["", "-", "+", "split", "off"]
rf.valid_skips = ["", "S"]
rf.valid_bands = [(136000000, 174000000),
@@ -419,7 +424,7 @@
self.process_mmap()
def process_mmap(self):
- self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
+ self._memobj = bitwise.parse(MEM_FORMAT %
self._mem_formatter, self._mmap)
def sync_out(self):
try:
@@ -492,12 +497,8 @@
self._get_tone(mem, _mem)
mem.mode = MODES[_mem.mode]
- mem.power = POWER_LEVELS[_mem.power]
- mem.skip = _mem.skip and "S" or ""
-
- self._get_tone(mem, _mem)
- mem.mode = MODES[_mem.mode]
- mem.power = POWER_LEVELS[_mem.power]
+ powerindex = _mem.power if _mem.power < len(self._power_levels) else -1
+ mem.power = self._power_levels[powerindex]
mem.skip = _mem.skip and "S" or ""
mem.extra = RadioSettingGroup("Extra", "extra")
@@ -595,7 +596,7 @@
self._set_tone(mem, _mem)
- _mem.power = mem.power and POWER_LEVELS.index(mem.power) or 0
+ _mem.power = mem.power and self._power_levels.index(mem.power) or 0
_mem.mode = MODES.index(mem.mode)
_mem.skip = mem.skip == "S"
_name.name = mem.name.ljust(7)
@@ -934,9 +935,7 @@
@classmethod
def match_model(cls, filedata, filename):
if filedata[0x168:0x170].startswith(cls._file_ident) and \
- filedata[0x170:0x178].startswith("LX-\x89\x85"):
- return True
- elif filedata[0x900:0x906] == cls.MODEL:
+
filedata[0x170:0x178].startswith(cls._model_ident):
return True
else:
return False
@@ -949,3 +948,4 @@
MODEL = "JT270M"
_file_ident = "JET"
+ _model_ident = 'LX-\x89\x85\x53'
2
1
# 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