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
October 2016
- 13 participants
- 33 discussions
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1476134749 14400
# Node ID 2a0b7099f8c6f4bfa01c26e3232deb5972ebc5d8
# Parent ab232a47b2f213448c319d7236cab6e82c75756f
[GMRS-V1] Update Model Name
This patch corrects the model name of the BTech GMRS-V1.
related to #4119
diff -r ab232a47b2f2 -r 2a0b7099f8c6 chirp/drivers/gmrsuv1.py
--- a/chirp/drivers/gmrsuv1.py Sat Oct 08 22:21:27 2016 -0400
+++ b/chirp/drivers/gmrsuv1.py Mon Oct 10 17:25:49 2016 -0400
@@ -33,13 +33,13 @@
##### MAGICS #########################################################
-# BTECH GMRS-UV1 magic string
-MSTRING_GMRSUV1 = "\x50\x5F\x20\x15\x12\x15\x4D"
+# BTECH GMRS-V1 magic string
+MSTRING_GMRSV1 = "\x50\x5F\x20\x15\x12\x15\x4D"
##### ID strings #####################################################
-# BTECH GMRS-UV1
-GMRSUV1_fp1 = "US32411"
+# BTECH GMRS-V1
+GMRSV1_fp1 = "US32411"
DTMF_CHARS = "0123456789 *#ABCD"
STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 20.0, 25.0, 50.0]
@@ -93,14 +93,14 @@
@directory.register
-class GMRSUV1(baofeng_common.BaofengCommonHT):
- """BTech GMRS-UV1"""
+class GMRSV1(baofeng_common.BaofengCommonHT):
+ """BTech GMRS-V1"""
VENDOR = "BTECH"
- MODEL = "GMRS-UV1"
+ MODEL = "GMRS-V1"
- _fileid = [GMRSUV1_fp1, ]
+ _fileid = [GMRSV1_fp1, ]
- _magic = [MSTRING_GMRSUV1, ]
+ _magic = [MSTRING_GMRSV1, ]
_magic_response_length = 8
_fw_ver_start = 0x1EF0
_recv_block_size = 0x40
@@ -376,7 +376,7 @@
def get_prompts(cls):
rp = chirp_common.RadioPrompts()
rp.experimental = \
- ('The BTech GMRS-UV1 driver is a beta version.\n'
+ ('The BTech GMRS-V1 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.'
1
0
Tested changes:
[Dan Smith <dsmith(a)danplanet.com>] Make tests check validate_memory()
This makes the BruteForce test check validate_memory() before trying
to set it in the radio and subsequently failing. If a radio doesn't
validate a memory it may have some weird requirements. Also, make
the edges test try to use the first mode out of the valid_modes list
instead of the default 'FM'.
Related to issue #4119
[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 862dc68beecad824909ad6bd8e612b5eef32fb03
[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 862dc68beecad824909ad6bd8e612b5eef32fb03
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson2090148759455207168.sh
[workspace] $ /bin/sh -xe /tmp/hudson5769355355821103448.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.052s
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:522:45: W291 trailing whitespace
./chirp/drivers/ft60.py:523:25: E128 continuation line under-indented for visual indent
./chirp/drivers/ft60.py:524: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/leixen.py:427:80: E501 line too long (82 > 79 characters)
./chirp/drivers/leixen.py:955:80: E501 line too long (87 > 79 characters)
./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/settings.py:245:80: E501 line too long (81 > 79 characters)
./chirp/settings.py:248:80: E501 line too long (81 > 79 characters)
./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.606s
user 0m7.484s
sys 0m0.028s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2016-10-09 14:57:56,415] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.1 LTS (Python 2.7.12)
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2016-10-09 14:57:56,452] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2016-10-09 14:57:56,453] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2016-10-09 14:57:56,454] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2016-10-09 14:57:56,454] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2016-10-09 14:57:56,454] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2016-10-09 14:57:56,454] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2016-10-09 14:57:56,454] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2016-10-09 14:57:56,454] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2016-10-09 14:57:56,455] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2016-10-09 14:57:56,456] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2016-10-09 14:57:56,456] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2016-10-09 14:57:56,457] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2016-10-09 14:57:56,457] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2016-10-09 14:57:56,457] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2016-10-09 14:57:56,458] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2016-10-09 14:57:56,458] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2016-10-09 14:57:56,458] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2016-10-09 14:57:56,458] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2016-10-09 14:57:56,458] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2016-10-09 14:57:56,458] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2016-10-09 14:57:56,459] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2016-10-09 14:57:56,460] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2016-10-09 14:57:56,461] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2016-10-09 14:57:56,461] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2016-10-09 14:57:56,462] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2016-10-09 14:57:56,462] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2016-10-09 14:57:56,462] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2016-10-09 14:57:56,463] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2016-10-09 14:57:56,463] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2016-10-09 14:57:56,463] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2016-10-09 14:57:56,463] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2016-10-09 14:57:56,464] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2016-10-09 14:57:56,464] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2016-10-09 14:57:56,464] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2016-10-09 14:57:56,464] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2016-10-09 14:57:56,464] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2016-10-09 14:57:56,465] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2016-10-09 14:57:56,465] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2016-10-09 14:57:56,466] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2016-10-09 14:57:56,466] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2016-10-09 14:57:56,466] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2016-10-09 14:57:56,466] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2016-10-09 14:57:56,473] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2016-10-09 14:57:56,476] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2016-10-09 14:57:56,477] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2016-10-09 14:57:56,477] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2016-10-09 14:57:56,477] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2016-10-09 14:57:56,477] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2016-10-09 14:57:56,477] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2016-10-09 14:57:56,478] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2016-10-09 14:57:56,478] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2016-10-09 14:57:56,478] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2016-10-09 14:57:56,479] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2016-10-09 14:57:56,479] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2016-10-09 14:57:56,479] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2016-10-09 14:57:56,479] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2016-10-09 14:57:56,479] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2016-10-09 14:57:56,480] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2016-10-09 14:57:56,480] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2016-10-09 14:57:56,480] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2016-10-09 14:57:56,480] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2016-10-09 14:57:56,480] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2016-10-09 14:57:56,481] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2016-10-09 14:57:56,481] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2016-10-09 14:57:56,481] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2016-10-09 14:57:56,481] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2016-10-09 14:57:56,482] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2016-10-09 14:57:56,482] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2016-10-09 14:57:56,482] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2016-10-09 14:57:56,482] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2016-10-09 14:57:56,483] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2016-10-09 14:57:56,483] chirp.directory - INFO: Registered Leixen_VV-898S = LeixenVV898SRadio
[2016-10-09 14:57:56,483] chirp.directory - INFO: Registered LUITON_LT-725UV = LT725UV
[2016-10-09 14:57:56,483] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2016-10-09 14:57:56,484] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2016-10-09 14:57:56,484] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2016-10-09 14:57:56,484] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2016-10-09 14:57:56,484] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2016-10-09 14:57:56,484] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2016-10-09 14:57:56,485] chirp.directory - INFO: Registered Puxing_PX-888K = Puxing_PX888K_Radio
[2016-10-09 14:57:56,486] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2016-10-09 14:57:56,486] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2016-10-09 14:57:56,486] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2016-10-09 14:57:56,486] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2016-10-09 14:57:56,486] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2016-10-09 14:57:56,487] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2016-10-09 14:57:56,487] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2016-10-09 14:57:56,487] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2016-10-09 14:57:56,487] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2016-10-09 14:57:56,487] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2016-10-09 14:57:56,488] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2016-10-09 14:57:56,488] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2016-10-09 14:57:56,488] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2016-10-09 14:57:56,488] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2016-10-09 14:57:56,488] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2016-10-09 14:57:56,489] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2016-10-09 14:57:56,490] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2016-10-09 14:57:56,491] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2016-10-09 14:57:56,492] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2016-10-09 14:57:56,492] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2016-10-09 14:57:56,492] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2016-10-09 14:57:56,492] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2016-10-09 14:57:56,492] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2016-10-09 14:57:56,493] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2016-10-09 14:57:56,493] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2016-10-09 14:57:56,493] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2016-10-09 14:57:56,494] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2016-10-09 14:57:56,494] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2016-10-09 14:57:56,494] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2016-10-09 14:57:56,495] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2016-10-09 14:57:56,495] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2016-10-09 14:57:56,495] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2016-10-09 14:57:56,496] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2016-10-09 14:57:56,496] chirp.directory - INFO: Registered Yaesu_VX-8_R = VX8Radio
[2016-10-09 14:57:56,496] chirp.directory - INFO: Registered Yaesu_VX-8_DR = VX8DRadio
[2016-10-09 14:57:56,496] chirp.directory - INFO: Registered Yaesu_VX-8_GE = VX8GERadio
[2016-10-09 14:57:56,497] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
+ rm /tmp/Alinco_DJ175_2uwQZ1.img /tmp/Alinco_DJ175_5B7G4m.img /tmp/Alinco_DJ175_6n9PoC.img /tmp/Alinco_DJ175_CTdpyM.img /tmp/Alinco_DJ175_Kns5xe.img /tmp/Alinco_DJ175_NfXj1O.img /tmp/Alinco_DJ175_O_Wejw.img /tmp/Alinco_DJ175_UY8iO7.img /tmp/Alinco_DJ175_W3LDp5.img /tmp/Alinco_DJ175_xgEGlM.img /tmp/Alinco_DJ175_xuSS5k.img /tmp/Alinco_DJ596_4OAgj8.img /tmp/Alinco_DJ596_5Wjvbo.img /tmp/Alinco_DJ596_RjECqR.img /tmp/Alinco_DJ596_XJ4GEY.img /tmp/Alinco_DJ596_g0Ex2C.img /tmp/Alinco_DJ596_nsqQij.img /tmp/Alinco_DJ596_sgUxeW.img /tmp/Alinco_DJ596_ws9pTw.img /tmp/Alinco_DR235T_1hV73b.img /tmp/Alinco_DR235T_Gez6j8.img /tmp/Alinco_DR235T_HKkjKJ.img /tmp/Alinco_DR235T_Ryq6g6.img /tmp/Alinco_DR235T_giyktM.img /tmp/Alinco_DR235T_hYpJiw.img /tmp/AnyTone_OBLTR-8R_2tP4ko.img /tmp/AnyTone_OBLTR-8R_779xv0.img /tmp/AnyTone_OBLTR-8R_Di2Lrt.img /tmp/AnyTone_OBLTR-8R_ICc6BE.img /tmp/AnyTone_OBLTR-8R__Q3gxb.img /tmp/AnyTone_OBLTR-8R_e0Hrjy.img /tmp/AnyTone_TERMN-8R_QoFmAX.img /tmp/AnyTone_TERMN-8R__974eD.img /tmp/AnyTone_TERMN-8R__PbsvB.img /tmp/AnyTone_TERMN-8R_efWCw7.img /tmp/AnyTone_TERMN-8R_em7trH.img /tmp/BTECH_GMRS-UV1_2of8a7.img /tmp/BTECH_GMRS-UV1_he_OeB.img /tmp/BTECH_GMRS-UV1_xNILf6.img /tmp/BTECH_UV-2501+220_0uyq6p.img /tmp/BTECH_UV-2501+220_VcVX4d.img /tmp/BTECH_UV-2501+220_gThGtE.img /tmp/BTECH_UV-2501+220_lzL3h7.img /tmp/BTECH_UV-2501+220_vLwgk8.img /tmp/BTECH_UV-5001_4YeBw_.img /tmp/BTECH_UV-5001_A8TFHZ.img /tmp/BTECH_UV-5001_F5Pvi1.img /tmp/BTECH_UV-5001_aLaat0.img /tmp/BTECH_UV-5001_oH81bp.img /tmp/BTECH_UV-50X3_15cmg5.img /tmp/BTECH_UV-50X3_3Qjjjs.img /tmp/BTECH_UV-50X3_43ihAl.img /tmp/BTECH_UV-50X3_6LsKnh.img /tmp/BTECH_UV-50X3_78eqpE.img /tmp/BTECH_UV-50X3_8YjsxZ.img /tmp/BTECH_UV-50X3_Af3B_i.img /tmp/BTECH_UV-50X3_C2yeF2.img /tmp/BTECH_UV-50X3_H7j_zU.img /tmp/BTECH_UV-50X3_IskI_R.img /tmp/BTECH_UV-50X3_WsvNk4.img /tmp/BTECH_UV-50X3_fzVkGQ.img /tmp/BTECH_UV-50X3_osV4vF.img /tmp/BTECH_UV-50X3_uVmzzg.img /tmp/BTECH_UV-50X3_wGHTRe.img /tmp/BTECH_UV-5X3_6sUiWI.img /tmp/BTECH_UV-5X3_8wK1lW.img /tmp/BTECH_UV-5X3_C5SZys.img /tmp/BTECH_UV-5X3_D9MYpy.img /tmp/BTECH_UV-5X3_qo0rqO.img /tmp/Baofeng_BF-888_SxyNtM.img /tmp/Baofeng_BF-888_WPGG6M.img /tmp/Baofeng_BF-888_XXgqsF.img /tmp/Baofeng_BF-888_dsPYVe.img /tmp/Baofeng_BF-888_z3RBDG.img /tmp/Baofeng_F-11_8oJE8h.img /tmp/Baofeng_F-11_IJWkEB.img /tmp/Baofeng_F-11_jv1Kak.img /tmp/Baofeng_F-11_tWPtgn.img /tmp/Baofeng_F-11_u5gJvt.img /tmp/Baofeng_UV-3R_3bfGq8.img /tmp/Baofeng_UV-3R_9xe6Dr.img /tmp/Baofeng_UV-3R_Hc6kjk.img /tmp/Baofeng_UV-3R_PyIwBF.img /tmp/Baofeng_UV-3R_mdGJXH.img /tmp/Baofeng_UV-5R_0It00i.img /tmp/Baofeng_UV-5R_6vPRtT.img /tmp/Baofeng_UV-5R_IIiYrI.img /tmp/Baofeng_UV-5R_jlZriZ.img /tmp/Baofeng_UV-5R_rWF62I.img /tmp/Baofeng_UV-6R_AlPKSd.img /tmp/Baofeng_UV-6R_FKGtEF.img /tmp/Baofeng_UV-6R_PH_4UH.img /tmp/Baofeng_UV-6R_PvGdzn.img /tmp/Baofeng_UV-6R_wgvdJh.img /tmp/Baofeng_UV-B5_F1B70E.img /tmp/Baofeng_UV-B5_LEI9Bo.img /tmp/Baofeng_UV-B5_szoRr9.img /tmp/Baofeng_UV-B5_va_Sj6.img /tmp/Baofeng_UV-B5_wAc4XV.img /tmp/Baojie_BJ-9900_8QURdO.img /tmp/Baojie_BJ-9900_8aNidX.img /tmp/Baojie_BJ-9900_FkkDAn.img /tmp/Baojie_BJ-9900_O7hX3M.img /tmp/Baojie_BJ-9900_Z__xqd.img /tmp/Baojie_BJ-9900_aSH6k8.img /tmp/Baojie_BJ-9900_eWI6rc.img /tmp/Baojie_BJ-9900_ghJXJu.img /tmp/Baojie_BJ-9900_hMHykG.img /tmp/Baojie_BJ-9900_jN2HUl.img /tmp/Baojie_BJ-9900_p5Invz.img /tmp/Baojie_BJ-9900_vXJEYs.img /tmp/Baojie_BJ-9900_wbWz4X.img /tmp/Baojie_BJ-9900_zGFnVp.img /tmp/Baojie_BJ-9900_zZVPys.img /tmp/Feidaxin_FD-268A_9nnTZ5.img /tmp/Feidaxin_FD-268A_KPW336.img /tmp/Feidaxin_FD-268A_bEBjny.img /tmp/Feidaxin_FD-268A_cfZBme.img /tmp/Feidaxin_FD-268A_xl8drB.img /tmp/Feidaxin_FD-268B_Ezt6ya.img /tmp/Feidaxin_FD-268B_W8EfoN.img /tmp/Feidaxin_FD-268B__1zSnN.img /tmp/Feidaxin_FD-268B_eWwK72.img /tmp/Feidaxin_FD-268B_lP_0jj.img /tmp/Feidaxin_FD-288B_2_5PVT.img /tmp/Feidaxin_FD-288B_ITN0JF.img /tmp/Feidaxin_FD-288B_dBb5IT.img /tmp/Feidaxin_FD-288B_feFWbY.img /tmp/Feidaxin_FD-288B_tcqXJi.img /tmp/Icom_IC-208H_3p6nvO.img /tmp/Icom_IC-208H_4B_UQQ.img /tmp/Icom_IC-208H_FaUPNQ.img /tmp/Icom_IC-208H_TywrZx.img /tmp/Icom_IC-208H_U8qKax.img /tmp/Icom_IC-2100H_5fB50m.img /tmp/Icom_IC-2100H_VedyLB.img /tmp/Icom_IC-2100H_cOcC8u.img /tmp/Icom_IC-2100H_kj1jwp.img /tmp/Icom_IC-2100H_x4IhXi.img /tmp/Icom_IC-2200H_69pGfQ.img /tmp/Icom_IC-2200H_EOcYue.img /tmp/Icom_IC-2200H_OYdPkc.img /tmp/Icom_IC-2200H_s6M3we.img /tmp/Icom_IC-2720H_JUUiwZ.img /tmp/Icom_IC-2720H_Qmrl5O.img /tmp/Icom_IC-2720H_uY8SDW.img /tmp/Icom_IC-2720H_zM7TDr.img /tmp/Icom_IC-2820H_JjIwZF.img /tmp/Icom_IC-2820H_ciZmp7.img /tmp/Icom_IC-2820H_o8lTmU.img /tmp/Icom_IC-2820H_roWubZ.img /tmp/Icom_IC-Q7A_6mZlE6.img /tmp/Icom_IC-Q7A_UcYW5k.img /tmp/Icom_IC-Q7A_cf4CkB.img /tmp/Icom_IC-Q7A_q46YvP.img /tmp/Icom_IC-T70_BMsWUc.img /tmp/Icom_IC-T70_hc6blk.img /tmp/Icom_IC-T70_qq5fgd.img /tmp/Icom_IC-T70_ycB72d.img /tmp/Icom_IC-T7H_C2kLlE.img /tmp/Icom_IC-T7H_CBV4je.img /tmp/Icom_IC-T7H_Ev99Mb.img /tmp/Icom_IC-T7H_yU0z14.img /tmp/Icom_IC-T8A_5j4DWK.img /tmp/Icom_IC-T8A_C2HsPR.img /tmp/Icom_IC-T8A__9iNao.img /tmp/Icom_IC-T8A_fkgRDu.img /tmp/Icom_IC-V82_U82_MnJtYY.img /tmp/Icom_IC-V82_U82_SPIARg.img /tmp/Icom_IC-V82_U82_TFCV0O.img /tmp/Icom_IC-V82_U82_esflJw.img /tmp/Icom_IC-W32A_5dLF6w.img /tmp/Icom_IC-W32A_7vxNZi.img /tmp/Icom_IC-W32A_Dr6hfY.img /tmp/Icom_IC-W32A_HgYwjo.img /tmp/Icom_IC-W32A_LHLWR8.img /tmp/Icom_IC-W32A_PKuJS7.img /tmp/Icom_IC-W32A_PLf_zT.img /tmp/Icom_IC-W32A_RG6H85.img /tmp/Icom_IC-W32A_VcB6GE.img /tmp/Icom_IC-W32A__Cj0WQ.img /tmp/Icom_IC-W32A_sWtVUZ.img /tmp/Icom_IC-W32A_v3JEul.img /tmp/Icom_IC-W32E_8Vdlcr.img /tmp/Icom_IC-W32E_B0poZv.img /tmp/Icom_IC-W32E_D__Gxc.img /tmp/Icom_IC-W32E_JOwS9q.img /tmp/Icom_IC-W32E_Q8foNS.img /tmp/Icom_IC-W32E_UtYk1G.img /tmp/Icom_IC-W32E__np4DO.img /tmp/Icom_IC-W32E_c2keft.img /tmp/Icom_IC-W32E_lb2ZFG.img /tmp/Icom_IC-W32E_rVlEHd.img /tmp/Icom_IC-W32E_xEdIJo.img /tmp/Icom_IC-W32E_xkvla2.img /tmp/Icom_ID-31A_0boo4X.img /tmp/Icom_ID-31A_7fcSFq.img /tmp/Icom_ID-31A_lCuaPh.img /tmp/Icom_ID-31A_u7r0bB.img /tmp/Icom_ID-51 Plus_5O0cAc.img /tmp/Icom_ID-51 Plus_ePhCNC.img /tmp/Icom_ID-51 Plus_ls75lu.img /tmp/Icom_ID-51 Plus_nFmWOW.img /tmp/Icom_ID-51_Kleyvw.img /tmp/Icom_ID-51_X5vLWh.img /tmp/Icom_ID-51_tmDlh1.img /tmp/Icom_ID-51_xw55ly.img /tmp/Icom_ID-800H_JzIgTZ.img /tmp/Icom_ID-800H_O0jp42.img /tmp/Icom_ID-800H_OwIThN.img /tmp/Icom_ID-800H_yY88Hn.img /tmp/Icom_ID-880H_V9ak5L.img /tmp/Icom_ID-880H_X0sACF.img /tmp/Icom_ID-880H_obta0v.img /tmp/Icom_ID-880H_sPWyZ4.img /tmp/Jetstream_JT220M_0ALmkw.img /tmp/Jetstream_JT220M_Cmu6Ld.img /tmp/Jetstream_JT220M_CxntoU.img /tmp/Jetstream_JT220M_xdk_Ao.img /tmp/Jetstream_JT270M_NRgFxL.img /tmp/Jetstream_JT270M__qnaeW.img /tmp/Jetstream_JT270M_fDl0dR.img /tmp/Jetstream_JT270M_yIt47R.img /tmp/KYD_IP-620_XZy6v8.img /tmp/KYD_IP-620__5Koow.img /tmp/KYD_IP-620_gge0YA.img /tmp/KYD_IP-620_iqoE_n.img /tmp/Kenwood_TH-D72 (clone mode)_9eQf4r.img /tmp/Kenwood_TH-D72 (clone mode)_DAzV8r.img /tmp/Kenwood_TH-D72 (clone mode)_NqPg9x.img /tmp/Kenwood_TH-D72 (clone mode)_O9xbM4.img /tmp/Kenwood_TK-272G_kyXIa4.img /tmp/Kenwood_TK-272G_l3fvf4.img /tmp/Kenwood_TK-272G_mKKMhW.img /tmp/Kenwood_TK-272G_seFSwM.img /tmp/Kenwood_TK-760G_ITTbDw.img /tmp/Kenwood_TK-760G_uy8Ctk.img /tmp/Kenwood_TK-760G_xSfkxI.img /tmp/Kenwood_TK-760G_yAjaxG.img /tmp/Kenwood_TK-8102_Z9xnpS.img /tmp/Kenwood_TK-8102_avbhz1.img /tmp/Kenwood_TK-8102_ib_tZc.img /tmp/Kenwood_TK-8102_ln0CZZ.img /tmp/LUITON_LT-725UV_0TE44e.img /tmp/LUITON_LT-725UV_0xe6oO.img /tmp/LUITON_LT-725UV_N88HQn.img /tmp/LUITON_LT-725UV_Tpt70P.img /tmp/LUITON_LT-725UV_XdBmZ9.img /tmp/LUITON_LT-725UV_a8G0mY.img /tmp/LUITON_LT-725UV_exYhue.img /tmp/LUITON_LT-725UV_jjHfgO.img /tmp/LUITON_LT-725UV_ntBVWF.img /tmp/LUITON_LT-725UV_pHnleK.img /tmp/LUITON_LT-725UV_we0g68.img /tmp/LUITON_LT-725UV_zjyxI5.img /tmp/Leixen_VV-898S_cQuAtX.img /tmp/Leixen_VV-898S_oyMvRn.img /tmp/Leixen_VV-898S_s1Yyeq.img /tmp/Leixen_VV-898S_v6OPa0.img /tmp/Leixen_VV-898_517kkz.img /tmp/Leixen_VV-898_BZX7Gm.img /tmp/Leixen_VV-898_RuPil9.img /tmp/Leixen_VV-898_d5TLKM.img /tmp/Polmar_DB-50M_ArtO7u.img /tmp/Polmar_DB-50M_DYnzbK.img /tmp/Polmar_DB-50M_VZVzA0.img /tmp/Polmar_DB-50M_s_5CcI.img /tmp/Puxing_PX-2R_4U5fBr.img /tmp/Puxing_PX-2R_5AjMT1.img /tmp/Puxing_PX-2R_WDRDCP.img /tmp/Puxing_PX-2R_zeSnzP.img /tmp/Puxing_PX-777_69lHJh.img /tmp/Puxing_PX-777_HN57EL.img /tmp/Puxing_PX-777_hb9VVK.img /tmp/Puxing_PX-777_yd0JUS.img /tmp/Puxing_PX-888K_FAsfmY.img /tmp/Puxing_PX-888K_FbigNt.img /tmp/Puxing_PX-888K_TRFL7B.img /tmp/Puxing_PX-888K_aQ8kTE.img /tmp/TYT_TH-7800_WjjBC9.img /tmp/TYT_TH-7800_ensDPW.img /tmp/TYT_TH-7800_ql80Y0.img /tmp/TYT_TH-7800_shYqqe.img /tmp/TYT_TH-9800_1DOL97.img /tmp/TYT_TH-9800_2NXWh_.img /tmp/TYT_TH-9800_bcLdq3.img /tmp/TYT_TH-9800_smiqjp.img /tmp/TYT_TH-UV3R-25_88Ie5q.img /tmp/TYT_TH-UV3R-25_EyTwcR.img /tmp/TYT_TH-UV3R-25_gYLFuZ.img /tmp/TYT_TH-UV3R-25_pRV6M6.img /tmp/TYT_TH-UV3R_4IJjt9.img /tmp/TYT_TH-UV3R_MzJl7X.img /tmp/TYT_TH-UV3R_RVt0eT.img /tmp/TYT_TH-UV3R_UcMcgE.img /tmp/TYT_TH-UVF1_7sS82n.img /tmp/TYT_TH-UVF1_FErTni.img /tmp/TYT_TH-UVF1_oAcYub.img /tmp/TYT_TH-UVF1_w9hVrU.img /tmp/TYT_TH-UVF8D_8Cv2DD.img /tmp/TYT_TH-UVF8D_wcWLnd.img /tmp/TYT_TH9000_144_648ZuT.img /tmp/TYT_TH9000_144_XwHS2S.img /tmp/TYT_TH9000_144_cC2uSJ.img /tmp/TYT_TH9000_144_m32eEV.img /tmp/Vertex Standard_VXA-700_3aej5T.img /tmp/Vertex Standard_VXA-700_6XzFEy.img /tmp/Vertex Standard_VXA-700_cJ4yRJ.img /tmp/Vertex Standard_VXA-700_isL0eh.img /tmp/WACCOM_MINI-8900_HK0Sv2.img /tmp/WACCOM_MINI-8900_K7CvIx.img /tmp/WACCOM_MINI-8900_b9hosH.img /tmp/WACCOM_MINI-8900_fHgMyq.img /tmp/Wouxun_KG-816_5rzfUy.img /tmp/Wouxun_KG-816_NP6Y7Q.img /tmp/Wouxun_KG-816_QmnKLx.img /tmp/Wouxun_KG-816_X8AXvx.img /tmp/Wouxun_KG-818_5oKF6K.img /tmp/Wouxun_KG-818_kJeSr_.img /tmp/Wouxun_KG-818_mB1vNc.img /tmp/Wouxun_KG-818_vwd98q.img /tmp/Wouxun_KG-UV6_M6o61d.img /tmp/Wouxun_KG-UV6_NuDQB8.img /tmp/Wouxun_KG-UV6_QIV9Gd.img /tmp/Wouxun_KG-UV6_zVbFmj.img /tmp/Wouxun_KG-UV8D_4IuKdu.img /tmp/Wouxun_KG-UV8D_XEaTX1.img /tmp/Wouxun_KG-UV8D_sOU2TA.img /tmp/Wouxun_KG-UV8D_spwXrt.img /tmp/Wouxun_KG-UVD1P_F4vnJ3.img /tmp/Wouxun_KG-UVD1P_I1sU2u.img /tmp/Wouxun_KG-UVD1P_fQerTC.img /tmp/Wouxun_KG-UVD1P_mmlkoF.img /tmp/Yaesu_FT-1802M_JX_NdX.img /tmp/Yaesu_FT-1802M_NHwA3g.img /tmp/Yaesu_FT-1802M_hVfMHx.img /tmp/Yaesu_FT-1802M_wXWmOG.img /tmp/Yaesu_FT-1D_35qqSL.img /tmp/Yaesu_FT-1D_B6a3dj.img /tmp/Yaesu_FT-1D_crKwv2.img /tmp/Yaesu_FT-1D_ualeY2.img /tmp/Yaesu_FT-2800M_1ANdzv.img /tmp/Yaesu_FT-2800M_J6dTCC.img /tmp/Yaesu_FT-2800M_PGS_A2.img /tmp/Yaesu_FT-2800M__oFd0C.img /tmp/Yaesu_FT-2900R_1900R_9wUHJO.img /tmp/Yaesu_FT-2900R_1900R_MJFuR4.img /tmp/Yaesu_FT-2900R_1900R_aRnrtU.img /tmp/Yaesu_FT-2900R_1900R_nzifON.img /tmp/Yaesu_FT-50_C4NjZU.img /tmp/Yaesu_FT-50_OGg3YC.img /tmp/Yaesu_FT-50_QhpADp.img /tmp/Yaesu_FT-50_jnHNTk.img /tmp/Yaesu_FT-60_GDMwsh.img /tmp/Yaesu_FT-60_MZ7llF.img /tmp/Yaesu_FT-60_d7OWdI.img /tmp/Yaesu_FT-60_dVCvh2.img /tmp/Yaesu_FT-7800_7900_1QzRNQ.img /tmp/Yaesu_FT-7800_7900_PRGzbN.img /tmp/Yaesu_FT-7800_7900_qYYuAY.img /tmp/Yaesu_FT-7800_7900_tmlvl3.img /tmp/Yaesu_FT-817ND (US)_57wV_2.img /tmp/Yaesu_FT-817ND (US)_B7K4W4.img /tmp/Yaesu_FT-817ND (US)_Gx7GfX.img /tmp/Yaesu_FT-817ND (US)_Wy0GLW.img /tmp/Yaesu_FT-817ND_6ldY2w.img /tmp/Yaesu_FT-817ND_IFlaSy.img /tmp/Yaesu_FT-817ND_KtfJGE.img /tmp/Yaesu_FT-817ND_t8ADrl.img /tmp/Yaesu_FT-817_CI3hHa.img /tmp/Yaesu_FT-817_UGKQOL.img /tmp/Yaesu_FT-817__Lqa8Y.img /tmp/Yaesu_FT-817__qkQZx.img /tmp/Yaesu_FT-857_897 (US)_PSlOzB.img /tmp/Yaesu_FT-857_897 (US)_gqokHk.img /tmp/Yaesu_FT-857_897 (US)_v8MW6R.img /tmp/Yaesu_FT-857_897 (US)_wSGm56.img /tmp/Yaesu_FT-857_897_H7Rfqy.img /tmp/Yaesu_FT-857_897_cdNf_D.img /tmp/Yaesu_FT-857_897_hqqYM_.img /tmp/Yaesu_FT-857_897_iLCGFh.img /tmp/Yaesu_FT-8800_9Dc9yt.img /tmp/Yaesu_FT-8800_9FEDfC.img /tmp/Yaesu_FT-8800_CnMpI6.img /tmp/Yaesu_FT-8800_JgGMCb.img /tmp/Yaesu_FT-8800_KNrGja.img /tmp/Yaesu_FT-8800_Qfc68l.img /tmp/Yaesu_FT-8800_XIgezW.img /tmp/Yaesu_FT-8800__pBvum.img /tmp/Yaesu_FT-8800_s9M9lY.img /tmp/Yaesu_FT-8800_uKc0mG.img /tmp/Yaesu_FT-8800_vzCjV2.img /tmp/Yaesu_FT-8800_wzAyTb.img /tmp/Yaesu_FT-8900_7ArBES.img /tmp/Yaesu_FT-8900_Amy6iA.img /tmp/Yaesu_FT-8900_lEWRKk.img /tmp/Yaesu_FT-8900_mr05wC.img /tmp/Yaesu_FTM-350_3GA1JY.img /tmp/Yaesu_FTM-350_7Vmrvc.img /tmp/Yaesu_FTM-350_Px7_Ek.img /tmp/Yaesu_FTM-350_UyBLOX.img /tmp/Yaesu_FTM-350_dNQTPU.img /tmp/Yaesu_FTM-350_lIPM7M.img /tmp/Yaesu_FTM-350_lftBe4.img /tmp/Yaesu_FTM-350_n9b8b4.img /tmp/Yaesu_FTM-350_o3JaWA.img /tmp/Yaesu_FTM-350_s7ibWm.img /tmp/Yaesu_FTM-350_vgicOC.img /tmp/Yaesu_FTM-350_zm2LPQ.img /tmp/Yaesu_VX-2_CdrCFf.img /tmp/Yaesu_VX-2_QPuTQm.img /tmp/Yaesu_VX-2_VKlqJH.img /tmp/Yaesu_VX-2_YrA4ZI.img /tmp/Yaesu_VX-3_1xamEp.img /tmp/Yaesu_VX-3_3f912Y.img /tmp/Yaesu_VX-3_9Mo4W_.img /tmp/Yaesu_VX-3_lsHT4O.img /tmp/Yaesu_VX-5_1hCGwj.img /tmp/Yaesu_VX-5_7ewo8c.img /tmp/Yaesu_VX-5_IoVqQn.img /tmp/Yaesu_VX-5_VMNYr_.img /tmp/Yaesu_VX-6_1k6ncf.img /tmp/Yaesu_VX-6_XaCpMk.img /tmp/Yaesu_VX-6_Yzfg0P.img /tmp/Yaesu_VX-6_rnjYxO.img /tmp/Yaesu_VX-7_5p3D62.img /tmp/Yaesu_VX-7_5xYZL6.img /tmp/Yaesu_VX-7_718U9h.img /tmp/Yaesu_VX-7_ul5zZ8.img /tmp/Yaesu_VX-8_GODB4w.img /tmp/Yaesu_VX-8_Qizs28.img /tmp/Yaesu_VX-8_WhOgbs.img /tmp/Yaesu_VX-8_d4isOJ.img
rm: cannot remove '/tmp/Alinco_DJ175_2uwQZ1.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_6n9PoC.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_CTdpyM.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_Kns5xe.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_O_Wejw.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_UY8iO7.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_W3LDp5.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_xgEGlM.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ175_xuSS5k.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ596_4OAgj8.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ596_XJ4GEY.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ596_g0Ex2C.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ596_nsqQij.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ596_sgUxeW.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DJ596_ws9pTw.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DR235T_1hV73b.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DR235T_HKkjKJ.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DR235T_giyktM.img': Operation not permitted
rm: cannot remove '/tmp/Alinco_DR235T_hYpJiw.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_OBLTR-8R_2tP4ko.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_OBLTR-8R_779xv0.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_OBLTR-8R_ICc6BE.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_OBLTR-8R__Q3gxb.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_TERMN-8R_QoFmAX.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_TERMN-8R__974eD.img': Operation not permitted
rm: cannot remove '/tmp/AnyTone_TERMN-8R_efWCw7.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_GMRS-UV1_2of8a7.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_GMRS-UV1_he_OeB.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_GMRS-UV1_xNILf6.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-2501+220_gThGtE.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-2501+220_lzL3h7.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-2501+220_vLwgk8.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-5001_4YeBw_.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-5001_A8TFHZ.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-5001_F5Pvi1.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_15cmg5.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_3Qjjjs.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_43ihAl.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_78eqpE.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_8YjsxZ.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_Af3B_i.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_fzVkGQ.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_osV4vF.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-50X3_uVmzzg.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-5X3_6sUiWI.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-5X3_8wK1lW.img': Operation not permitted
rm: cannot remove '/tmp/BTECH_UV-5X3_C5SZys.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_BF-888_SxyNtM.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_BF-888_WPGG6M.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_BF-888_dsPYVe.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_F-11_IJWkEB.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_F-11_jv1Kak.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_F-11_u5gJvt.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-3R_3bfGq8.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-3R_9xe6Dr.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-3R_PyIwBF.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-5R_0It00i.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-5R_6vPRtT.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-5R_jlZriZ.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-6R_AlPKSd.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-6R_PH_4UH.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-6R_PvGdzn.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-B5_F1B70E.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-B5_va_Sj6.img': Operation not permitted
rm: cannot remove '/tmp/Baofeng_UV-B5_wAc4XV.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_8QURdO.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_8aNidX.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_FkkDAn.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_O7hX3M.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_Z__xqd.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_aSH6k8.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_hMHykG.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_jN2HUl.img': Operation not permitted
rm: cannot remove '/tmp/Baojie_BJ-9900_vXJEYs.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-268A_9nnTZ5.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-268A_cfZBme.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-268A_xl8drB.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-268B_Ezt6ya.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-268B__1zSnN.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-268B_eWwK72.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-288B_2_5PVT.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-288B_ITN0JF.img': Operation not permitted
rm: cannot remove '/tmp/Feidaxin_FD-288B_dBb5IT.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-208H_3p6nvO.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-208H_FaUPNQ.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-208H_TywrZx.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2100H_5fB50m.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2100H_kj1jwp.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2100H_x4IhXi.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2200H_69pGfQ.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2200H_s6M3we.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2720H_Qmrl5O.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2720H_zM7TDr.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2820H_JjIwZF.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-2820H_o8lTmU.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-Q7A_cf4CkB.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-Q7A_q46YvP.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-T70_BMsWUc.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-T70_qq5fgd.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-T7H_C2kLlE.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-T7H_Ev99Mb.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-T8A_C2HsPR.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-T8A_fkgRDu.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-V82_U82_SPIARg.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-V82_U82_TFCV0O.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32A_5dLF6w.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32A_Dr6hfY.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32A_HgYwjo.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32A_PLf_zT.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32A__Cj0WQ.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32A_v3JEul.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32E_8Vdlcr.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32E_B0poZv.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32E_Q8foNS.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32E_UtYk1G.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32E_c2keft.img': Operation not permitted
rm: cannot remove '/tmp/Icom_IC-W32E_xEdIJo.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-31A_7fcSFq.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-31A_lCuaPh.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-51 Plus_ePhCNC.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-51 Plus_nFmWOW.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-51_X5vLWh.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-51_tmDlh1.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-800H_JzIgTZ.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-800H_yY88Hn.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-880H_X0sACF.img': Operation not permitted
rm: cannot remove '/tmp/Icom_ID-880H_obta0v.img': Operation not permitted
rm: cannot remove '/tmp/Jetstream_JT220M_0ALmkw.img': Operation not permitted
rm: cannot remove '/tmp/Jetstream_JT220M_xdk_Ao.img': Operation not permitted
rm: cannot remove '/tmp/Jetstream_JT270M__qnaeW.img': Operation not permitted
rm: cannot remove '/tmp/Jetstream_JT270M_fDl0dR.img': Operation not permitted
rm: cannot remove '/tmp/KYD_IP-620__5Koow.img': Operation not permitted
rm: cannot remove '/tmp/KYD_IP-620_iqoE_n.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TH-D72 (clone mode)_9eQf4r.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TH-D72 (clone mode)_NqPg9x.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TK-272G_kyXIa4.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TK-272G_seFSwM.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TK-760G_uy8Ctk.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TK-760G_xSfkxI.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TK-8102_Z9xnpS.img': Operation not permitted
rm: cannot remove '/tmp/Kenwood_TK-8102_ib_tZc.img': Operation not permitted
rm: cannot remove '/tmp/LUITON_LT-725UV_0TE44e.img': Operation not permitted
rm: cannot remove '/tmp/LUITON_LT-725UV_Tpt70P.img': Operation not permitted
rm: cannot remove '/tmp/LUITON_LT-725UV_XdBmZ9.img': Operation not permitted
rm: cannot remove '/tmp/LUITON_LT-725UV_a8G0mY.img': Operation not permitted
rm: cannot remove '/tmp/LUITON_LT-725UV_ntBVWF.img': Operation not permitted
rm: cannot remove '/tmp/LUITON_LT-725UV_zjyxI5.img': Operation not permitted
rm: cannot remove '/tmp/Leixen_VV-898S_cQuAtX.img': Operation not permitted
rm: cannot remove '/tmp/Leixen_VV-898S_oyMvRn.img': Operation not permitted
rm: cannot remove '/tmp/Leixen_VV-898_RuPil9.img': Operation not permitted
rm: cannot remove '/tmp/Leixen_VV-898_d5TLKM.img': Operation not permitted
rm: cannot remove '/tmp/Polmar_DB-50M_DYnzbK.img': Operation not permitted
rm: cannot remove '/tmp/Polmar_DB-50M_s_5CcI.img': Operation not permitted
rm: cannot remove '/tmp/Puxing_PX-2R_5AjMT1.img': Operation not permitted
rm: cannot remove '/tmp/Puxing_PX-2R_WDRDCP.img': Operation not permitted
rm: cannot remove '/tmp/Puxing_PX-777_69lHJh.img': Operation not permitted
rm: cannot remove '/tmp/Puxing_PX-777_yd0JUS.img': Operation not permitted
rm: cannot remove '/tmp/Puxing_PX-888K_TRFL7B.img': Operation not permitted
rm: cannot remove '/tmp/Puxing_PX-888K_aQ8kTE.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-7800_ensDPW.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-7800_shYqqe.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-9800_bcLdq3.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-9800_smiqjp.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UV3R-25_EyTwcR.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UV3R-25_gYLFuZ.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UV3R_RVt0eT.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UV3R_UcMcgE.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UVF1_FErTni.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UVF1_oAcYub.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UVF8D_8Cv2DD.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH-UVF8D_wcWLnd.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH9000_144_cC2uSJ.img': Operation not permitted
rm: cannot remove '/tmp/TYT_TH9000_144_m32eEV.img': Operation not permitted
rm: cannot remove '/tmp/Vertex Standard_VXA-700_3aej5T.img': Operation not permitted
rm: cannot remove '/tmp/Vertex Standard_VXA-700_cJ4yRJ.img': Operation not permitted
rm: cannot remove '/tmp/WACCOM_MINI-8900_HK0Sv2.img': Operation not permitted
rm: cannot remove '/tmp/WACCOM_MINI-8900_K7CvIx.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-816_QmnKLx.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-816_X8AXvx.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-818_5oKF6K.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-818_mB1vNc.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-UV6_M6o61d.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-UV6_NuDQB8.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-UV8D_4IuKdu.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-UV8D_sOU2TA.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-UVD1P_I1sU2u.img': Operation not permitted
rm: cannot remove '/tmp/Wouxun_KG-UVD1P_mmlkoF.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-1802M_NHwA3g.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-1802M_wXWmOG.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-1D_B6a3dj.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-1D_crKwv2.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-2800M_1ANdzv.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-2800M_J6dTCC.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-2900R_1900R_9wUHJO.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-2900R_1900R_aRnrtU.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-50_C4NjZU.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-50_OGg3YC.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-60_d7OWdI.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-60_dVCvh2.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-7800_7900_1QzRNQ.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-7800_7900_qYYuAY.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-817ND (US)_57wV_2.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-817ND (US)_Wy0GLW.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-817ND_IFlaSy.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-817ND_t8ADrl.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-817__Lqa8Y.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-817__qkQZx.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-857_897 (US)_gqokHk.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-857_897 (US)_v8MW6R.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-857_897_H7Rfqy.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-857_897_cdNf_D.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8800_9Dc9yt.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8800_9FEDfC.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8800__pBvum.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8800_uKc0mG.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8800_vzCjV2.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8800_wzAyTb.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8900_7ArBES.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FT-8900_mr05wC.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FTM-350_7Vmrvc.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FTM-350_UyBLOX.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FTM-350_lIPM7M.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FTM-350_n9b8b4.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FTM-350_vgicOC.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_FTM-350_zm2LPQ.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-2_QPuTQm.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-2_YrA4ZI.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-3_1xamEp.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-3_lsHT4O.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-5_1hCGwj.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-5_VMNYr_.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-6_1k6ncf.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-6_XaCpMk.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-7_5p3D62.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-7_ul5zZ8.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-8_GODB4w.img': Operation not permitted
rm: cannot remove '/tmp/Yaesu_VX-8_Qizs28.img': Operation not permitted
Build step 'Execute shell' marked build as failure
Email was triggered for: Failure
Sending email for trigger: Failure
1
1
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1475979687 14400
# Node ID af5905988e562b5016f8d6646ad7a0112984d46e
# Parent da89d22c40f15be87ba2dacc0a1ce28f276e354e
[New Model] BTech GMRS-UV1
This patch adds support for the BTech GMRS-UV1
#4119
diff -r da89d22c40f1 -r af5905988e56 chirp/drivers/gmrsuv1.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/gmrsuv1.py Sat Oct 08 22:21:27 2016 -0400
@@ -0,0 +1,828 @@
+# 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.drivers import baofeng_common
+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, \
+ InvalidValueError
+from textwrap import dedent
+
+##### MAGICS #########################################################
+
+# BTECH GMRS-UV1 magic string
+MSTRING_GMRSUV1 = "\x50\x5F\x20\x15\x12\x15\x4D"
+
+##### ID strings #####################################################
+
+# BTECH GMRS-UV1
+GMRSUV1_fp1 = "US32411"
+
+DTMF_CHARS = "0123456789 *#ABCD"
+STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 20.0, 25.0, 50.0]
+
+LIST_AB = ["A", "B"]
+LIST_ALMOD = ["Off", "Site", "Tone", "Code"]
+LIST_BANDWIDTH = ["Wide", "Narrow"]
+LIST_COLOR = ["Off", "Blue", "Orange", "Purple"]
+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_RESUME = ["TO", "CO", "SE"]
+LIST_PONMSG = ["Full", "Message"]
+LIST_PTTID = ["Off", "BOT", "EOT", "Both"]
+LIST_SCODE = ["%s" % x for x in range(1, 16)]
+LIST_RPSTE = ["Off"] + ["%s" % x for x in range(1, 11)]
+LIST_RTONE = ["1000 Hz", "1450 Hz", "1750 Hz", "2100 Hz"]
+LIST_SAVE = ["Off", "1:1", "1:2", "1:3", "1:4"]
+LIST_SHIFTD = ["Off", "+", "-"]
+LIST_STEDELAY = ["Off"] + ["%s ms" % x for x in range(100, 1100, 100)]
+LIST_STEP = [str(x) for x in STEPS]
+LIST_TIMEOUT = ["%s sec" % x for x in range(15, 615, 15)]
+LIST_TXPOWER = ["High", "Low"]
+LIST_VOICE = ["Off", "English", "Chinese"]
+LIST_WORKMODE = ["Frequency", "Channel"]
+
+def model_match(cls, data):
+ """Match the opened/downloaded image to the correct version"""
+ rid = data[0x1EF0:0x1EF7]
+
+ if rid in cls._fileid:
+ return True
+
+ return False
+
+
+class MyRadioFeatures(chirp_common.RadioFeatures):
+ def validate_memory(self, mem):
+ # Run the normal validation
+ msgs = chirp_common.RadioFeatures.validate_memory(self, mem)
+
+ # Run my validation
+ if mem.number <= 6 and mem.mode != "NFM":
+ msgs.append(chirp_common.ValidationError(
+ 'Only NFM is supported on this channel'))
+
+ return msgs
+
+
+(a)directory.register
+class GMRSUV1(baofeng_common.BaofengCommonHT):
+ """BTech GMRS-UV1"""
+ VENDOR = "BTECH"
+ MODEL = "GMRS-UV1"
+
+ _fileid = [GMRSUV1_fp1, ]
+
+ _magic = [MSTRING_GMRSUV1, ]
+ _magic_response_length = 8
+ _fw_ver_start = 0x1EF0
+ _recv_block_size = 0x40
+ _mem_size = 0x2000
+ _ack_block = True
+
+ _ranges = [(0x0000, 0x0DF0),
+ (0x0E00, 0x1800),
+ (0x1EE0, 0x1EF0),
+ (0x1F60, 0x1F70),
+ (0x1F80, 0x1F90),
+ (0x1FC0, 0x1FD0)]
+ _send_block_size = 0x10
+
+ MODES = ["NFM", "FM"]
+ VALID_CHARS = chirp_common.CHARSET_ALPHANUMERIC + \
+ "!@#$%^&*()+-=[]:\";'<>?,./"
+ LENGTH_NAME = 7
+ SKIP_VALUES = ["", "S"]
+ DTCS_CODES = sorted(chirp_common.DTCS_CODES + [645])
+ POWER_LEVELS = [chirp_common.PowerLevel("High", watts=5.00),
+ chirp_common.PowerLevel("Low", watts=2.00)]
+ VALID_BANDS = [(130000000, 180000000),
+ (400000000, 521000000)]
+ PTTID_LIST = LIST_PTTID
+ SCODE_LIST = LIST_SCODE
+
+
+ def get_features(self):
+ """Get the radio's features"""
+
+ rf = MyRadioFeatures()
+ rf.has_settings = True
+ rf.has_bank = False
+ rf.has_tuning_step = False
+ rf.can_odd_split = False
+ rf.has_name = True
+ rf.has_offset = False
+ 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.valid_modes = self.MODES
+ rf.valid_characters = self.VALID_CHARS
+ rf.valid_name_length = self.LENGTH_NAME
+ rf.valid_duplexes = []
+ 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 = self.SKIP_VALUES
+ rf.valid_dtcs_codes = self.DTCS_CODES
+ rf.memory_bounds = (0, 127)
+ rf.valid_power_levels = self.POWER_LEVELS
+ rf.valid_bands = self.VALID_BANDS
+
+ return rf
+
+
+ MEM_FORMAT = """
+ #seekto 0x0000;
+ struct {
+ lbcd rxfreq[4];
+ lbcd txfreq[4];
+ ul16 rxtone;
+ ul16 txtone;
+ u8 unknown0:4,
+ scode:4;
+ u8 unknown1;
+ u8 unknown2:7,
+ lowpower:1;
+ u8 unknown3:1,
+ wide:1,
+ unknown4:2,
+ bcl:1,
+ scan:1,
+ pttid:2;
+ } memory[128];
+
+ #seekto 0x0B00;
+ struct {
+ u8 code[5];
+ u8 unused[11];
+ } pttid[15];
+
+ #seekto 0x0CAA;
+ struct {
+ u8 code[5];
+ u8 unused1:6,
+ aniid:2;
+ u8 unknown[2];
+ u8 dtmfon;
+ u8 dtmfoff;
+ } ani;
+
+ #seekto 0x0E20;
+ struct {
+ u8 unused01:4,
+ squelch:4;
+ u8 unused02;
+ u8 unused03;
+ u8 unused04:5,
+ save:3;
+ u8 unused05:4,
+ vox:4;
+ u8 unused06;
+ u8 unused07:4,
+ abr:4;
+ u8 unused08:7,
+ tdr:1;
+ u8 unused09:7,
+ beep:1;
+ u8 unused10:2,
+ timeout:6;
+ u8 unused11[4];
+ u8 unused12:6,
+ voice:2;
+ u8 unused13;
+ u8 unused14:6,
+ dtmfst:2;
+ u8 unused15;
+ u8 unused16:6,
+ screv:2;
+ u8 unused17:6,
+ pttid:2;
+ u8 unused18:2,
+ pttlt:6;
+ u8 unused19:6,
+ mdfa:2;
+ u8 unused20:6,
+ mdfb:2;
+ u8 unused21;
+ u8 unused22:7,
+ sync:1;
+ u8 unused23[4];
+ u8 unused24:6,
+ wtled:2;
+ u8 unused25:6,
+ rxled:2;
+ u8 unused26:6,
+ txled:2;
+ u8 unused27:6,
+ almod:2;
+ u8 unused28:7,
+ dbptt:1;
+ u8 unused29:6,
+ tdrab:2;
+ u8 unused30:7,
+ ste:1;
+ u8 unused31:4,
+ rpste:4;
+ u8 unused32:4,
+ rptrl:4;
+ u8 unused33:7,
+ ponmsg:1;
+ u8 unused34:7,
+ roger:1;
+ u8 unused35:6,
+ rtone:2;
+ u8 unused36;
+ u8 unused37:6,
+ rogerrx:2;
+ u8 unused38;
+ u8 displayab:1,
+ unknown1:2,
+ fmradio:1,
+ alarm:1,
+ unknown2:1,
+ reset:1,
+ menu:1;
+ u8 unused39;
+ u8 workmode;
+ u8 keylock;
+ u8 cht;
+ } settings;
+
+ #seekto 0x0E76;
+ struct {
+ u8 unused1:1,
+ mrcha:7;
+ u8 unused2:1,
+ mrchb:7;
+ } wmchannel;
+
+ struct vfo {
+ u8 unknown0[8];
+ u8 freq[8];
+ u8 unknown1;
+ u8 offset[4];
+ u8 unknown2;
+ ul16 rxtone;
+ ul16 txtone;
+ u8 unused1:7,
+ band:1;
+ u8 unknown3;
+ u8 unused2:2,
+ sftd:2,
+ scode:4;
+ u8 unknown4;
+ u8 unused3:1
+ step:3,
+ unused4:4;
+ u8 txpower:1,
+ widenarr:1,
+ unknown5:4,
+ txpower3:2;
+ };
+
+ #seekto 0x0F00;
+ struct {
+ struct vfo a;
+ struct vfo b;
+ } vfo;
+
+ #seekto 0x0F4E;
+ u16 fm_presets;
+
+ #seekto 0x1000;
+ struct {
+ char name[7];
+ u8 unknown1[9];
+ } names[128];
+
+ #seekto 0x1ED0;
+ struct {
+ char line1[7];
+ char line2[7];
+ } sixpoweron_msg;
+
+ #seekto 0x1EE0;
+ struct {
+ char line1[7];
+ char line2[7];
+ } poweron_msg;
+
+ #seekto 0x1EF0;
+ struct {
+ char line1[7];
+ char line2[7];
+ } firmware_msg;
+
+ struct squelch {
+ u8 sql0;
+ u8 sql1;
+ u8 sql2;
+ u8 sql3;
+ u8 sql4;
+ u8 sql5;
+ u8 sql6;
+ u8 sql7;
+ u8 sql8;
+ u8 sql9;
+ };
+
+ #seekto 0x1F60;
+ struct {
+ struct squelch vhf;
+ u8 unknown1[6];
+ u8 unknown2[16];
+ struct squelch uhf;
+ } squelch;
+
+ """
+
+ @classmethod
+ def get_prompts(cls):
+ rp = chirp_common.RadioPrompts()
+ rp.experimental = \
+ ('The BTech GMRS-UV1 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 these 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 process_mmap(self):
+ """Process the mem map into the mem object"""
+ self._memobj = bitwise.parse(self.MEM_FORMAT, self._mmap)
+
+ def get_settings(self):
+ """Translate the bit in the mem_struct into settings in the UI"""
+ _mem = self._memobj
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ advanced = RadioSettingGroup("advanced", "Advanced Settings")
+ other = RadioSettingGroup("other", "Other Settings")
+ work = RadioSettingGroup("work", "Work Mode Settings")
+ fm_preset = RadioSettingGroup("fm_preset", "FM Preset")
+ dtmfe = RadioSettingGroup("dtmfe", "DTMF Encode Settings")
+ service = RadioSettingGroup("service", "Service Settings")
+ top = RadioSettings(basic, advanced, other, work, fm_preset, dtmfe,
+ service)
+
+ # Basic settings
+ if _mem.settings.squelch > 0x09:
+ val = 0x00
+ else:
+ val = _mem.settings.squelch
+ rs = RadioSetting("settings.squelch", "Squelch",
+ RadioSettingValueList(
+ LIST_OFF1TO9, LIST_OFF1TO9[val]))
+ basic.append(rs)
+
+ if _mem.settings.save > 0x04:
+ val = 0x00
+ else:
+ val = _mem.settings.save
+ rs = RadioSetting("settings.save", "Battery Saver",
+ RadioSettingValueList(
+ LIST_SAVE, LIST_SAVE[val]))
+ basic.append(rs)
+
+ if _mem.settings.vox > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.vox
+ rs = RadioSetting("settings.vox", "Vox",
+ RadioSettingValueList(
+ LIST_OFF1TO10, LIST_OFF1TO10[val]))
+ basic.append(rs)
+
+ if _mem.settings.abr > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.abr
+ rs = RadioSetting("settings.abr", "Backlight Timeout",
+ RadioSettingValueList(
+ LIST_OFF1TO10, LIST_OFF1TO10[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.tdr", "Dual Watch",
+ RadioSettingValueBoolean(_mem.settings.tdr))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.beep", "Beep",
+ RadioSettingValueBoolean(_mem.settings.beep))
+ basic.append(rs)
+
+ if _mem.settings.timeout > 0x27:
+ val = 0x03
+ else:
+ val = _mem.settings.timeout
+ rs = RadioSetting("settings.timeout", "Timeout Timer",
+ RadioSettingValueList(
+ LIST_TIMEOUT, LIST_TIMEOUT[val]))
+ basic.append(rs)
+
+ if _mem.settings.voice > 0x02:
+ val = 0x01
+ else:
+ val = _mem.settings.voice
+ rs = RadioSetting("settings.voice", "Voice Prompt",
+ RadioSettingValueList(
+ LIST_VOICE, LIST_VOICE[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.dtmfst", "DTMF Sidetone",
+ RadioSettingValueList(LIST_DTMFST, LIST_DTMFST[
+ _mem.settings.dtmfst]))
+ basic.append(rs)
+
+ if _mem.settings.screv > 0x02:
+ val = 0x01
+ else:
+ val = _mem.settings.screv
+ rs = RadioSetting("settings.screv", "Scan Resume",
+ RadioSettingValueList(
+ LIST_RESUME, LIST_RESUME[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.pttid", "When to send PTT ID",
+ RadioSettingValueList(LIST_PTTID, LIST_PTTID[
+ _mem.settings.pttid]))
+ basic.append(rs)
+
+ if _mem.settings.pttlt > 0x1E:
+ val = 0x05
+ else:
+ val = _mem.settings.pttlt
+ rs = RadioSetting("pttlt", "PTT ID Delay",
+ RadioSettingValueInteger(0, 50, val))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.mdfa", "Display Mode (A)",
+ RadioSettingValueList(LIST_MODE, LIST_MODE[
+ _mem.settings.mdfa]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.mdfb", "Display Mode (B)",
+ RadioSettingValueList(LIST_MODE, LIST_MODE[
+ _mem.settings.mdfb]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.sync", "Sync A & B",
+ RadioSettingValueBoolean(_mem.settings.sync))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.wtled", "Standby LED Color",
+ RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_mem.settings.wtled]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.rxled", "RX LED Color",
+ RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_mem.settings.rxled]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.txled", "TX LED Color",
+ RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_mem.settings.txled]))
+ basic.append(rs)
+
+ val = _mem.settings.almod
+ rs = RadioSetting("settings.almod", "Alarm Mode",
+ RadioSettingValueList(
+ LIST_ALMOD, LIST_ALMOD[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.dbptt", "Double PTT",
+ RadioSettingValueBoolean(_mem.settings.dbptt))
+ basic.append(rs)
+
+ if _mem.settings.tdrab > 0x02:
+ val = 0x00
+ else:
+ val = _mem.settings.tdrab
+ rs = RadioSetting("settings.tdrab", "Dual Watch TX Priority",
+ RadioSettingValueList(
+ LIST_OFFAB, LIST_OFFAB[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.ste", "Squelch Tail Eliminate (HT to HT)",
+ RadioSettingValueBoolean(_mem.settings.ste))
+ basic.append(rs)
+
+ if _mem.settings.rpste > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.rpste
+ rs = RadioSetting("settings.rpste",
+ "Squelch Tail Eliminate (repeater)",
+ RadioSettingValueList(
+ LIST_RPSTE, LIST_RPSTE[val]))
+ basic.append(rs)
+
+ if _mem.settings.rptrl > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.rptrl
+ rs = RadioSetting("settings.rptrl", "STE Repeater Delay",
+ RadioSettingValueList(
+ LIST_STEDELAY, LIST_STEDELAY[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.ponmsg", "Power-On Message",
+ RadioSettingValueList(LIST_PONMSG, LIST_PONMSG[
+ _mem.settings.ponmsg]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.roger", "Roger Beep",
+ RadioSettingValueBoolean(_mem.settings.roger))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.rtone", "Tone Burst Frequency",
+ RadioSettingValueList(LIST_RTONE, LIST_RTONE[
+ _mem.settings.rtone]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.rogerrx", "Roger Beep (RX)",
+ RadioSettingValueList(
+ LIST_OFFAB, LIST_OFFAB[
+ _mem.settings.rogerrx]))
+ basic.append(rs)
+
+ # Advanced settings
+ rs = RadioSetting("settings.reset", "RESET Menu",
+ RadioSettingValueBoolean(_mem.settings.reset))
+ advanced.append(rs)
+
+ rs = RadioSetting("settings.menu", "All Menus",
+ RadioSettingValueBoolean(_mem.settings.menu))
+ advanced.append(rs)
+
+ rs = RadioSetting("settings.fmradio", "Broadcast FM Radio",
+ RadioSettingValueBoolean(_mem.settings.fmradio))
+ advanced.append(rs)
+
+ rs = RadioSetting("settings.alarm", "Alarm Sound",
+ RadioSettingValueBoolean(_mem.settings.alarm))
+ advanced.append(rs)
+
+ # Other settings
+ def _filter(name):
+ filtered = ""
+ for char in str(name):
+ if char in chirp_common.CHARSET_ASCII:
+ filtered += char
+ else:
+ filtered += " "
+ return filtered
+
+ _msg = _mem.firmware_msg
+ val = RadioSettingValueString(0, 7, _filter(_msg.line1))
+ val.set_mutable(False)
+ rs = RadioSetting("firmware_msg.line1", "Firmware Message 1", val)
+ other.append(rs)
+
+ val = RadioSettingValueString(0, 7, _filter(_msg.line2))
+ val.set_mutable(False)
+ rs = RadioSetting("firmware_msg.line2", "Firmware Message 2", val)
+ other.append(rs)
+
+ _msg = _mem.sixpoweron_msg
+ val = RadioSettingValueString(0, 7, _filter(_msg.line1))
+ val.set_mutable(False)
+ rs = RadioSetting("sixpoweron_msg.line1", "6+Power-On Message 1", val)
+ other.append(rs)
+ val = RadioSettingValueString(0, 7, _filter(_msg.line2))
+ val.set_mutable(False)
+ rs = RadioSetting("sixpoweron_msg.line2", "6+Power-On Message 2", val)
+ other.append(rs)
+
+ _msg = _mem.poweron_msg
+ rs = RadioSetting("poweron_msg.line1", "Power-On Message 1",
+ RadioSettingValueString(
+ 0, 7, _filter(_msg.line1)))
+ other.append(rs)
+ rs = RadioSetting("poweron_msg.line2", "Power-On Message 2",
+ RadioSettingValueString(
+ 0, 7, _filter(_msg.line2)))
+ other.append(rs)
+
+ # Work mode settings
+ rs = RadioSetting("settings.displayab", "Display",
+ RadioSettingValueList(
+ LIST_AB, LIST_AB[_mem.settings.displayab]))
+ work.append(rs)
+
+ rs = RadioSetting("settings.workmode", "VFO/MR Mode",
+ RadioSettingValueList(
+ LIST_WORKMODE,
+ LIST_WORKMODE[_mem.settings.workmode]))
+ work.append(rs)
+
+ rs = RadioSetting("settings.keylock", "Keypad Lock",
+ RadioSettingValueBoolean(_mem.settings.keylock))
+ work.append(rs)
+
+ rs = RadioSetting("wmchannel.mrcha", "MR A Channel",
+ RadioSettingValueInteger(0, 127,
+ _mem.wmchannel.mrcha))
+ work.append(rs)
+
+ rs = RadioSetting("wmchannel.mrchb", "MR B Channel",
+ RadioSettingValueInteger(0, 127,
+ _mem.wmchannel.mrchb))
+ work.append(rs)
+
+ def convert_bytes_to_freq(bytes):
+ real_freq = 0
+ for byte in bytes:
+ real_freq = (real_freq * 10) + byte
+ return chirp_common.format_freq(real_freq * 10)
+
+ def my_validate(value):
+ value = chirp_common.parse_freq(value)
+ msg = ("Can't be less than %i.0000")
+ if value > 99000000 and value < 130 * 1000000:
+ raise InvalidValueError(msg % (130))
+ msg = ("Can't be between %i.9975-%i.0000")
+ if (179 + 1) * 1000000 <= value and value < 400 * 1000000:
+ raise InvalidValueError(msg % (179, 400))
+ msg = ("Can't be greater than %i.9975")
+ if value > 99000000 and value > (520 + 1) * 1000000:
+ raise InvalidValueError(msg % (520))
+ return chirp_common.format_freq(value)
+
+ def apply_freq(setting, obj):
+ value = chirp_common.parse_freq(str(setting.value)) / 10
+ for i in range(7, -1, -1):
+ obj.freq[i] = value % 10
+ value /= 10
+
+ val1a = RadioSettingValueString(0, 10,
+ convert_bytes_to_freq(_mem.vfo.a.freq))
+ val1a.set_validate_callback(my_validate)
+ rs = RadioSetting("vfo.a.freq", "VFO A Frequency", val1a)
+ rs.set_apply_callback(apply_freq, _mem.vfo.a)
+ work.append(rs)
+
+ val1b = RadioSettingValueString(0, 10,
+ convert_bytes_to_freq(_mem.vfo.b.freq))
+ val1b.set_validate_callback(my_validate)
+ rs = RadioSetting("vfo.b.freq", "VFO B Frequency", val1b)
+ rs.set_apply_callback(apply_freq, _mem.vfo.b)
+ work.append(rs)
+
+ rs = RadioSetting("vfo.a.step", "VFO A Tuning Step",
+ RadioSettingValueList(
+ LIST_STEP, LIST_STEP[_mem.vfo.a.step]))
+ work.append(rs)
+ rs = RadioSetting("vfo.b.step", "VFO B Tuning Step",
+ RadioSettingValueList(
+ LIST_STEP, LIST_STEP[_mem.vfo.b.step]))
+ work.append(rs)
+
+ # broadcast FM settings
+ _fm_presets = self._memobj.fm_presets
+ if _fm_presets <= 108.0 * 10 - 650:
+ preset = _fm_presets / 10.0 + 65
+ elif _fm_presets >= 65.0 * 10 and _fm_presets <= 108.0 * 10:
+ preset = _fm_presets / 10.0
+ else:
+ preset = 76.0
+ rs = RadioSetting("fm_presets", "FM Preset(MHz)",
+ RadioSettingValueFloat(65, 108.0, preset, 0.1, 1))
+ fm_preset.append(rs)
+
+ # DTMF settings
+ def apply_code(setting, obj, length):
+ code = []
+ for j in range(0, length):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.code = code
+
+ 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, 5, _code, False)
+ val.set_charset(DTMF_CHARS)
+ pttid = RadioSetting("pttid/%i.code" % i,
+ "Signal Code %i" % (i + 1), val)
+ pttid.set_apply_callback(apply_code, self._memobj.pttid[i], 5)
+ dtmfe.append(pttid)
+
+ 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, 5, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.code", "ANI Code", val)
+ rs.set_apply_callback(apply_code, self._memobj.ani, 5)
+ dtmfe.append(rs)
+
+ rs = RadioSetting("ani.aniid", "When to send ANI ID",
+ RadioSettingValueList(LIST_PTTID,
+ LIST_PTTID[_mem.ani.aniid]))
+ dtmfe.append(rs)
+
+ # Service settings
+ for band in ["vhf", "uhf"]:
+ for index in range(0, 10):
+ key = "squelch.%s.sql%i" % (band, index)
+ if band == "vhf":
+ _obj = self._memobj.squelch.vhf
+ elif band == "uhf":
+ _obj = self._memobj.squelch.uhf
+ val = RadioSettingValueInteger(0, 123,
+ getattr(_obj, "sql%i" % (index)))
+ if index == 0:
+ val.set_mutable(False)
+ name = "%s Squelch %i" % (band.upper(), index)
+ rs = RadioSetting(key, name, val)
+ service.append(rs)
+
+ return top
+
+ @classmethod
+ def match_model(cls, filedata, filename):
+ match_size = False
+ match_model = False
+
+ # testing the file data size
+ if len(filedata) == 0x2008:
+ 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
1
0
[chirp_devel] [PATCH] [New Model] BTech GMRS-UV1(test patch only - not apply)
by Jim Unroe 09 Oct '16
by Jim Unroe 09 Oct '16
09 Oct '16
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1475979687 14400
# Node ID db45c73a447db253f58460aea0edd062fbfc620f
# Parent bf333aae5305af483b29fb49db3f29e165f823d5
[New Model] BTech GMRS-UV1(test patch only - not apply)
This patch adds support for the BTech GMRS-UV1
#4119
diff -r bf333aae5305 -r db45c73a447d chirp/drivers/gmrsuv1.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/gmrsuv1.py Sat Oct 08 22:21:27 2016 -0400
@@ -0,0 +1,828 @@
+# 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.drivers import baofeng_common
+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, \
+ InvalidValueError
+from textwrap import dedent
+
+##### MAGICS #########################################################
+
+# BTECH GMRS-UV1 magic string
+MSTRING_GMRSUV1 = "\x50\x5F\x20\x15\x12\x15\x4D"
+
+##### ID strings #####################################################
+
+# BTECH GMRS-UV1
+GMRSUV1_fp1 = "US32411"
+
+DTMF_CHARS = "0123456789 *#ABCD"
+STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 20.0, 25.0, 50.0]
+
+LIST_AB = ["A", "B"]
+LIST_ALMOD = ["Off", "Site", "Tone", "Code"]
+LIST_BANDWIDTH = ["Wide", "Narrow"]
+LIST_COLOR = ["Off", "Blue", "Orange", "Purple"]
+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_RESUME = ["TO", "CO", "SE"]
+LIST_PONMSG = ["Full", "Message"]
+LIST_PTTID = ["Off", "BOT", "EOT", "Both"]
+LIST_SCODE = ["%s" % x for x in range(1, 16)]
+LIST_RPSTE = ["Off"] + ["%s" % x for x in range(1, 11)]
+LIST_RTONE = ["1000 Hz", "1450 Hz", "1750 Hz", "2100 Hz"]
+LIST_SAVE = ["Off", "1:1", "1:2", "1:3", "1:4"]
+LIST_SHIFTD = ["Off", "+", "-"]
+LIST_STEDELAY = ["Off"] + ["%s ms" % x for x in range(100, 1100, 100)]
+LIST_STEP = [str(x) for x in STEPS]
+LIST_TIMEOUT = ["%s sec" % x for x in range(15, 615, 15)]
+LIST_TXPOWER = ["High", "Low"]
+LIST_VOICE = ["Off", "English", "Chinese"]
+LIST_WORKMODE = ["Frequency", "Channel"]
+
+def model_match(cls, data):
+ """Match the opened/downloaded image to the correct version"""
+ rid = data[0x1EF0:0x1EF7]
+
+ if rid in cls._fileid:
+ return True
+
+ return False
+
+
+class MyRadioFeatures(chirp_common.RadioFeatures):
+ def validate_memory(self, mem):
+ # Run the normal validation
+ msgs = chirp_common.RadioFeatures.validate_memory(self, mem)
+
+ # Run my validation
+ if mem.number <= 6 and mem.mode != "NFM":
+ msgs.append(chirp_common.ValidationError(
+ 'Only NFM is supported on this channel'))
+
+ return msgs
+
+
+(a)directory.register
+class GMRSUV1(baofeng_common.BaofengCommonHT):
+ """BTech GMRS-UV1"""
+ VENDOR = "BTECH"
+ MODEL = "GMRS-UV1"
+
+ _fileid = [GMRSUV1_fp1, ]
+
+ _magic = [MSTRING_GMRSUV1, ]
+ _magic_response_length = 8
+ _fw_ver_start = 0x1EF0
+ _recv_block_size = 0x40
+ _mem_size = 0x2000
+ _ack_block = True
+
+ _ranges = [(0x0000, 0x0DF0),
+ (0x0E00, 0x1800),
+ (0x1EE0, 0x1EF0),
+ (0x1F60, 0x1F70),
+ (0x1F80, 0x1F90),
+ (0x1FC0, 0x1FD0)]
+ _send_block_size = 0x10
+
+ MODES = ["NFM", "FM"]
+ VALID_CHARS = chirp_common.CHARSET_ALPHANUMERIC + \
+ "!@#$%^&*()+-=[]:\";'<>?,./"
+ LENGTH_NAME = 7
+ SKIP_VALUES = ["", "S"]
+ DTCS_CODES = sorted(chirp_common.DTCS_CODES + [645])
+ POWER_LEVELS = [chirp_common.PowerLevel("High", watts=5.00),
+ chirp_common.PowerLevel("Low", watts=2.00)]
+ VALID_BANDS = [(130000000, 180000000),
+ (400000000, 521000000)]
+ PTTID_LIST = LIST_PTTID
+ SCODE_LIST = LIST_SCODE
+
+
+ def get_features(self):
+ """Get the radio's features"""
+
+ rf = MyRadioFeatures()
+ rf.has_settings = True
+ rf.has_bank = False
+ rf.has_tuning_step = False
+ rf.can_odd_split = False #True
+ rf.has_name = True
+ rf.has_offset = False #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.valid_modes = self.MODES
+ rf.valid_characters = self.VALID_CHARS
+ rf.valid_name_length = self.LENGTH_NAME
+ 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 = self.SKIP_VALUES
+ rf.valid_dtcs_codes = self.DTCS_CODES
+ rf.memory_bounds = (0, 127)
+ rf.valid_power_levels = self.POWER_LEVELS
+ rf.valid_bands = self.VALID_BANDS
+
+ return rf
+
+
+ MEM_FORMAT = """
+ #seekto 0x0000;
+ struct {
+ lbcd rxfreq[4];
+ lbcd txfreq[4];
+ ul16 rxtone;
+ ul16 txtone;
+ u8 unknown0:4,
+ scode:4;
+ u8 unknown1;
+ u8 unknown2:7,
+ lowpower:1;
+ u8 unknown3:1,
+ wide:1,
+ unknown4:2,
+ bcl:1,
+ scan:1,
+ pttid:2;
+ } memory[128];
+
+ #seekto 0x0B00;
+ struct {
+ u8 code[5];
+ u8 unused[11];
+ } pttid[15];
+
+ #seekto 0x0CAA;
+ struct {
+ u8 code[5];
+ u8 unused1:6,
+ aniid:2;
+ u8 unknown[2];
+ u8 dtmfon;
+ u8 dtmfoff;
+ } ani;
+
+ #seekto 0x0E20;
+ struct {
+ u8 unused01:4,
+ squelch:4;
+ u8 unused02;
+ u8 unused03;
+ u8 unused04:5,
+ save:3;
+ u8 unused05:4,
+ vox:4;
+ u8 unused06;
+ u8 unused07:4,
+ abr:4;
+ u8 unused08:7,
+ tdr:1;
+ u8 unused09:7,
+ beep:1;
+ u8 unused10:2,
+ timeout:6;
+ u8 unused11[4];
+ u8 unused12:6,
+ voice:2;
+ u8 unused13;
+ u8 unused14:6,
+ dtmfst:2;
+ u8 unused15;
+ u8 unused16:6,
+ screv:2;
+ u8 unused17:6,
+ pttid:2;
+ u8 unused18:2,
+ pttlt:6;
+ u8 unused19:6,
+ mdfa:2;
+ u8 unused20:6,
+ mdfb:2;
+ u8 unused21;
+ u8 unused22:7,
+ sync:1;
+ u8 unused23[4];
+ u8 unused24:6,
+ wtled:2;
+ u8 unused25:6,
+ rxled:2;
+ u8 unused26:6,
+ txled:2;
+ u8 unused27:6,
+ almod:2;
+ u8 unused28:7,
+ dbptt:1;
+ u8 unused29:6,
+ tdrab:2;
+ u8 unused30:7,
+ ste:1;
+ u8 unused31:4,
+ rpste:4;
+ u8 unused32:4,
+ rptrl:4;
+ u8 unused33:7,
+ ponmsg:1;
+ u8 unused34:7,
+ roger:1;
+ u8 unused35:6,
+ rtone:2;
+ u8 unused36;
+ u8 unused37:6,
+ rogerrx:2;
+ u8 unused38;
+ u8 displayab:1,
+ unknown1:2,
+ fmradio:1,
+ alarm:1,
+ unknown2:1,
+ reset:1,
+ menu:1;
+ u8 unused39;
+ u8 workmode;
+ u8 keylock;
+ u8 cht;
+ } settings;
+
+ #seekto 0x0E76;
+ struct {
+ u8 unused1:1,
+ mrcha:7;
+ u8 unused2:1,
+ mrchb:7;
+ } wmchannel;
+
+ struct vfo {
+ u8 unknown0[8];
+ u8 freq[8];
+ u8 unknown1;
+ u8 offset[4];
+ u8 unknown2;
+ ul16 rxtone;
+ ul16 txtone;
+ u8 unused1:7,
+ band:1;
+ u8 unknown3;
+ u8 unused2:2,
+ sftd:2,
+ scode:4;
+ u8 unknown4;
+ u8 unused3:1
+ step:3,
+ unused4:4;
+ u8 txpower:1,
+ widenarr:1,
+ unknown5:4,
+ txpower3:2;
+ };
+
+ #seekto 0x0F00;
+ struct {
+ struct vfo a;
+ struct vfo b;
+ } vfo;
+
+ #seekto 0x0F4E;
+ u16 fm_presets;
+
+ #seekto 0x1000;
+ struct {
+ char name[7];
+ u8 unknown1[9];
+ } names[128];
+
+ #seekto 0x1ED0;
+ struct {
+ char line1[7];
+ char line2[7];
+ } sixpoweron_msg;
+
+ #seekto 0x1EE0;
+ struct {
+ char line1[7];
+ char line2[7];
+ } poweron_msg;
+
+ #seekto 0x1EF0;
+ struct {
+ char line1[7];
+ char line2[7];
+ } firmware_msg;
+
+ struct squelch {
+ u8 sql0;
+ u8 sql1;
+ u8 sql2;
+ u8 sql3;
+ u8 sql4;
+ u8 sql5;
+ u8 sql6;
+ u8 sql7;
+ u8 sql8;
+ u8 sql9;
+ };
+
+ #seekto 0x1F60;
+ struct {
+ struct squelch vhf;
+ u8 unknown1[6];
+ u8 unknown2[16];
+ struct squelch uhf;
+ } squelch;
+
+ """
+
+ @classmethod
+ def get_prompts(cls):
+ rp = chirp_common.RadioPrompts()
+ rp.experimental = \
+ ('The BTech GMRS-UV1 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 these 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 process_mmap(self):
+ """Process the mem map into the mem object"""
+ self._memobj = bitwise.parse(self.MEM_FORMAT, self._mmap)
+
+ def get_settings(self):
+ """Translate the bit in the mem_struct into settings in the UI"""
+ _mem = self._memobj
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ advanced = RadioSettingGroup("advanced", "Advanced Settings")
+ other = RadioSettingGroup("other", "Other Settings")
+ work = RadioSettingGroup("work", "Work Mode Settings")
+ fm_preset = RadioSettingGroup("fm_preset", "FM Preset")
+ dtmfe = RadioSettingGroup("dtmfe", "DTMF Encode Settings")
+ service = RadioSettingGroup("service", "Service Settings")
+ top = RadioSettings(basic, advanced, other, work, fm_preset, dtmfe,
+ service)
+
+ # Basic settings
+ if _mem.settings.squelch > 0x09:
+ val = 0x00
+ else:
+ val = _mem.settings.squelch
+ rs = RadioSetting("settings.squelch", "Squelch",
+ RadioSettingValueList(
+ LIST_OFF1TO9, LIST_OFF1TO9[val]))
+ basic.append(rs)
+
+ if _mem.settings.save > 0x04:
+ val = 0x00
+ else:
+ val = _mem.settings.save
+ rs = RadioSetting("settings.save", "Battery Saver",
+ RadioSettingValueList(
+ LIST_SAVE, LIST_SAVE[val]))
+ basic.append(rs)
+
+ if _mem.settings.vox > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.vox
+ rs = RadioSetting("settings.vox", "Vox",
+ RadioSettingValueList(
+ LIST_OFF1TO10, LIST_OFF1TO10[val]))
+ basic.append(rs)
+
+ if _mem.settings.abr > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.abr
+ rs = RadioSetting("settings.abr", "Backlight Timeout",
+ RadioSettingValueList(
+ LIST_OFF1TO10, LIST_OFF1TO10[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.tdr", "Dual Watch",
+ RadioSettingValueBoolean(_mem.settings.tdr))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.beep", "Beep",
+ RadioSettingValueBoolean(_mem.settings.beep))
+ basic.append(rs)
+
+ if _mem.settings.timeout > 0x27:
+ val = 0x03
+ else:
+ val = _mem.settings.timeout
+ rs = RadioSetting("settings.timeout", "Timeout Timer",
+ RadioSettingValueList(
+ LIST_TIMEOUT, LIST_TIMEOUT[val]))
+ basic.append(rs)
+
+ if _mem.settings.voice > 0x02:
+ val = 0x01
+ else:
+ val = _mem.settings.voice
+ rs = RadioSetting("settings.voice", "Voice Prompt",
+ RadioSettingValueList(
+ LIST_VOICE, LIST_VOICE[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.dtmfst", "DTMF Sidetone",
+ RadioSettingValueList(LIST_DTMFST, LIST_DTMFST[
+ _mem.settings.dtmfst]))
+ basic.append(rs)
+
+ if _mem.settings.screv > 0x02:
+ val = 0x01
+ else:
+ val = _mem.settings.screv
+ rs = RadioSetting("settings.screv", "Scan Resume",
+ RadioSettingValueList(
+ LIST_RESUME, LIST_RESUME[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.pttid", "When to send PTT ID",
+ RadioSettingValueList(LIST_PTTID, LIST_PTTID[
+ _mem.settings.pttid]))
+ basic.append(rs)
+
+ if _mem.settings.pttlt > 0x1E:
+ val = 0x05
+ else:
+ val = _mem.settings.pttlt
+ rs = RadioSetting("pttlt", "PTT ID Delay",
+ RadioSettingValueInteger(0, 50, val))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.mdfa", "Display Mode (A)",
+ RadioSettingValueList(LIST_MODE, LIST_MODE[
+ _mem.settings.mdfa]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.mdfb", "Display Mode (B)",
+ RadioSettingValueList(LIST_MODE, LIST_MODE[
+ _mem.settings.mdfb]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.sync", "Sync A & B",
+ RadioSettingValueBoolean(_mem.settings.sync))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.wtled", "Standby LED Color",
+ RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_mem.settings.wtled]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.rxled", "RX LED Color",
+ RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_mem.settings.rxled]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.txled", "TX LED Color",
+ RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_mem.settings.txled]))
+ basic.append(rs)
+
+ val = _mem.settings.almod
+ rs = RadioSetting("settings.almod", "Alarm Mode",
+ RadioSettingValueList(
+ LIST_ALMOD, LIST_ALMOD[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.dbptt", "Double PTT",
+ RadioSettingValueBoolean(_mem.settings.dbptt))
+ basic.append(rs)
+
+ if _mem.settings.tdrab > 0x02:
+ val = 0x00
+ else:
+ val = _mem.settings.tdrab
+ rs = RadioSetting("settings.tdrab", "Dual Watch TX Priority",
+ RadioSettingValueList(
+ LIST_OFFAB, LIST_OFFAB[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.ste", "Squelch Tail Eliminate (HT to HT)",
+ RadioSettingValueBoolean(_mem.settings.ste))
+ basic.append(rs)
+
+ if _mem.settings.rpste > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.rpste
+ rs = RadioSetting("settings.rpste",
+ "Squelch Tail Eliminate (repeater)",
+ RadioSettingValueList(
+ LIST_RPSTE, LIST_RPSTE[val]))
+ basic.append(rs)
+
+ if _mem.settings.rptrl > 0x0A:
+ val = 0x00
+ else:
+ val = _mem.settings.rptrl
+ rs = RadioSetting("settings.rptrl", "STE Repeater Delay",
+ RadioSettingValueList(
+ LIST_STEDELAY, LIST_STEDELAY[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.ponmsg", "Power-On Message",
+ RadioSettingValueList(LIST_PONMSG, LIST_PONMSG[
+ _mem.settings.ponmsg]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.roger", "Roger Beep",
+ RadioSettingValueBoolean(_mem.settings.roger))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.rtone", "Tone Burst Frequency",
+ RadioSettingValueList(LIST_RTONE, LIST_RTONE[
+ _mem.settings.rtone]))
+ basic.append(rs)
+
+ rs = RadioSetting("settings.rogerrx", "Roger Beep (RX)",
+ RadioSettingValueList(
+ LIST_OFFAB, LIST_OFFAB[
+ _mem.settings.rogerrx]))
+ basic.append(rs)
+
+ # Advanced settings
+ rs = RadioSetting("settings.reset", "RESET Menu",
+ RadioSettingValueBoolean(_mem.settings.reset))
+ advanced.append(rs)
+
+ rs = RadioSetting("settings.menu", "All Menus",
+ RadioSettingValueBoolean(_mem.settings.menu))
+ advanced.append(rs)
+
+ rs = RadioSetting("settings.fmradio", "Broadcast FM Radio",
+ RadioSettingValueBoolean(_mem.settings.fmradio))
+ advanced.append(rs)
+
+ rs = RadioSetting("settings.alarm", "Alarm Sound",
+ RadioSettingValueBoolean(_mem.settings.alarm))
+ advanced.append(rs)
+
+ # Other settings
+ def _filter(name):
+ filtered = ""
+ for char in str(name):
+ if char in chirp_common.CHARSET_ASCII:
+ filtered += char
+ else:
+ filtered += " "
+ return filtered
+
+ _msg = _mem.firmware_msg
+ val = RadioSettingValueString(0, 7, _filter(_msg.line1))
+ val.set_mutable(False)
+ rs = RadioSetting("firmware_msg.line1", "Firmware Message 1", val)
+ other.append(rs)
+
+ val = RadioSettingValueString(0, 7, _filter(_msg.line2))
+ val.set_mutable(False)
+ rs = RadioSetting("firmware_msg.line2", "Firmware Message 2", val)
+ other.append(rs)
+
+ _msg = _mem.sixpoweron_msg
+ val = RadioSettingValueString(0, 7, _filter(_msg.line1))
+ val.set_mutable(False)
+ rs = RadioSetting("sixpoweron_msg.line1", "6+Power-On Message 1", val)
+ other.append(rs)
+ val = RadioSettingValueString(0, 7, _filter(_msg.line2))
+ val.set_mutable(False)
+ rs = RadioSetting("sixpoweron_msg.line2", "6+Power-On Message 2", val)
+ other.append(rs)
+
+ _msg = _mem.poweron_msg
+ rs = RadioSetting("poweron_msg.line1", "Power-On Message 1",
+ RadioSettingValueString(
+ 0, 7, _filter(_msg.line1)))
+ other.append(rs)
+ rs = RadioSetting("poweron_msg.line2", "Power-On Message 2",
+ RadioSettingValueString(
+ 0, 7, _filter(_msg.line2)))
+ other.append(rs)
+
+ # Work mode settings
+ rs = RadioSetting("settings.displayab", "Display",
+ RadioSettingValueList(
+ LIST_AB, LIST_AB[_mem.settings.displayab]))
+ work.append(rs)
+
+ rs = RadioSetting("settings.workmode", "VFO/MR Mode",
+ RadioSettingValueList(
+ LIST_WORKMODE,
+ LIST_WORKMODE[_mem.settings.workmode]))
+ work.append(rs)
+
+ rs = RadioSetting("settings.keylock", "Keypad Lock",
+ RadioSettingValueBoolean(_mem.settings.keylock))
+ work.append(rs)
+
+ rs = RadioSetting("wmchannel.mrcha", "MR A Channel",
+ RadioSettingValueInteger(0, 127,
+ _mem.wmchannel.mrcha))
+ work.append(rs)
+
+ rs = RadioSetting("wmchannel.mrchb", "MR B Channel",
+ RadioSettingValueInteger(0, 127,
+ _mem.wmchannel.mrchb))
+ work.append(rs)
+
+ def convert_bytes_to_freq(bytes):
+ real_freq = 0
+ for byte in bytes:
+ real_freq = (real_freq * 10) + byte
+ return chirp_common.format_freq(real_freq * 10)
+
+ def my_validate(value):
+ value = chirp_common.parse_freq(value)
+ msg = ("Can't be less than %i.0000")
+ if value > 99000000 and value < 130 * 1000000:
+ raise InvalidValueError(msg % (130))
+ msg = ("Can't be between %i.9975-%i.0000")
+ if (179 + 1) * 1000000 <= value and value < 400 * 1000000:
+ raise InvalidValueError(msg % (179, 400))
+ msg = ("Can't be greater than %i.9975")
+ if value > 99000000 and value > (520 + 1) * 1000000:
+ raise InvalidValueError(msg % (520))
+ return chirp_common.format_freq(value)
+
+ def apply_freq(setting, obj):
+ value = chirp_common.parse_freq(str(setting.value)) / 10
+ for i in range(7, -1, -1):
+ obj.freq[i] = value % 10
+ value /= 10
+
+ val1a = RadioSettingValueString(0, 10,
+ convert_bytes_to_freq(_mem.vfo.a.freq))
+ val1a.set_validate_callback(my_validate)
+ rs = RadioSetting("vfo.a.freq", "VFO A Frequency", val1a)
+ rs.set_apply_callback(apply_freq, _mem.vfo.a)
+ work.append(rs)
+
+ val1b = RadioSettingValueString(0, 10,
+ convert_bytes_to_freq(_mem.vfo.b.freq))
+ val1b.set_validate_callback(my_validate)
+ rs = RadioSetting("vfo.b.freq", "VFO B Frequency", val1b)
+ rs.set_apply_callback(apply_freq, _mem.vfo.b)
+ work.append(rs)
+
+ rs = RadioSetting("vfo.a.step", "VFO A Tuning Step",
+ RadioSettingValueList(
+ LIST_STEP, LIST_STEP[_mem.vfo.a.step]))
+ work.append(rs)
+ rs = RadioSetting("vfo.b.step", "VFO B Tuning Step",
+ RadioSettingValueList(
+ LIST_STEP, LIST_STEP[_mem.vfo.b.step]))
+ work.append(rs)
+
+ # broadcast FM settings
+ _fm_presets = self._memobj.fm_presets
+ if _fm_presets <= 108.0 * 10 - 650:
+ preset = _fm_presets / 10.0 + 65
+ elif _fm_presets >= 65.0 * 10 and _fm_presets <= 108.0 * 10:
+ preset = _fm_presets / 10.0
+ else:
+ preset = 76.0
+ rs = RadioSetting("fm_presets", "FM Preset(MHz)",
+ RadioSettingValueFloat(65, 108.0, preset, 0.1, 1))
+ fm_preset.append(rs)
+
+ # DTMF settings
+ def apply_code(setting, obj, length):
+ code = []
+ for j in range(0, length):
+ try:
+ code.append(DTMF_CHARS.index(str(setting.value)[j]))
+ except IndexError:
+ code.append(0xFF)
+ obj.code = code
+
+ 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, 5, _code, False)
+ val.set_charset(DTMF_CHARS)
+ pttid = RadioSetting("pttid/%i.code" % i,
+ "Signal Code %i" % (i + 1), val)
+ pttid.set_apply_callback(apply_code, self._memobj.pttid[i], 5)
+ dtmfe.append(pttid)
+
+ 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, 5, _code, False)
+ val.set_charset(DTMF_CHARS)
+ rs = RadioSetting("ani.code", "ANI Code", val)
+ rs.set_apply_callback(apply_code, self._memobj.ani, 5)
+ dtmfe.append(rs)
+
+ rs = RadioSetting("ani.aniid", "When to send ANI ID",
+ RadioSettingValueList(LIST_PTTID,
+ LIST_PTTID[_mem.ani.aniid]))
+ dtmfe.append(rs)
+
+ # Service settings
+ for band in ["vhf", "uhf"]:
+ for index in range(0, 10):
+ key = "squelch.%s.sql%i" % (band, index)
+ if band == "vhf":
+ _obj = self._memobj.squelch.vhf
+ elif band == "uhf":
+ _obj = self._memobj.squelch.uhf
+ val = RadioSettingValueInteger(0, 123,
+ getattr(_obj, "sql%i" % (index)))
+ if index == 0:
+ val.set_mutable(False)
+ name = "%s Squelch %i" % (band.upper(), index)
+ rs = RadioSetting(key, name, val)
+ service.append(rs)
+
+ return top
+
+ @classmethod
+ def match_model(cls, filedata, filename):
+ match_size = False
+ match_model = False
+
+ # testing the file data size
+ if len(filedata) == 0x2008:
+ 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
1
0
Apparently the firmware wizards at Leixen have decided to update the
featureset in the VV-898S/E, and the new 1.05 firmware adds a crazy
vfo-based bank system to the memories. Basically, instead of a single
unbanked set of 200 memories, now there are 100 memories each assigned
to VFO A and VFO B. To keep things really interesting, these memories
are interleaved.
The old layout had all 200 memory's data structs all in series, then
all 200 memory's name/labels all in series after that. Roughly
speaking, it looks like:
struct mem_data memories[200];
struct mem_name names[200];
The new layout has "memory data 1A (first memory for VFO A)", then
"memory data 1B (first mem VFO B)", then 2A, 2B, etc. Then it starts
all over with the same interleaving of label/names.
I don't think this would actually work, but the way I vizualize it
right now is something like:
struct mem_interleaved_data { mem_data a, mem_data b };
struct mem_interleaved_name { mem_name a, mem_name b };
struct mem_interleaved_data memories[100];
struct mem_interleaved_name mem_names[100];
My question is: will I need to do indexed banks in order to resolve
the interleaving, or is there a way to resolve the interleaving with
nested structs? I could certainly make a struct that contains both the
A and B for a given memory index, but I'm not sure how I would resolve
those down to single banks for each VFO.
Can I "re-seek" in a memory map? Create ante-padded structures for A
memories, re-seek and use fore-padded structs for B memories?
I've been looking around at other drivers but haven't found an
obviously similar case yet.
Thanks,
--
Brian
2
1
# HG changeset patch
# User Dan Smith <dsmith(a)danplanet.com>
# Date 1475978023 25200
# Sat Oct 08 18:53:43 2016 -0700
# Node ID 6b50c7f7235329124e81499c8eed4539a18b15b4
# Parent 862dc68beecad824909ad6bd8e612b5eef32fb03
Make tests check validate_memory()
This makes the BruteForce test check validate_memory() before trying
to set it in the radio and subsequently failing. If a radio doesn't
validate a memory it may have some weird requirements. Also, make
the edges test try to use the first mode out of the valid_modes list
instead of the default 'FM'.
Related to issue #4119
diff -r 862dc68beeca -r 6b50c7f72353 tests/run_tests
--- a/tests/run_tests Mon Oct 03 21:25:05 2016 -0400
+++ b/tests/run_tests Sat Oct 08 18:53:43 2016 -0700
@@ -425,6 +425,7 @@
return True
return False
+ successes = 0
for mode in rf.valid_modes:
if mode not in chirp_common.MODES:
continue
@@ -442,7 +443,18 @@
m.freq += 100000000
m.mode = mode
+
+ if rf.validate_memory(m):
+ # A result (of error messages) from validate means the radio
+ # thinks this is invalid, so don't fail the test
+ continue
+
self.set_and_compare(m)
+ successes += 1
+
+ if (not successes) and rf.valid_modes:
+ raise TestFailedError("All modes were skipped, "
+ "something went wrong")
def run(self):
rf = self._wrapper.do("get_features")
@@ -489,6 +501,11 @@
m.freq = rf.valid_bands[0][0] + 1000000
if m.freq < 30000000 and "AM" in rf.valid_modes:
m.mode = "AM"
+ else:
+ try:
+ m.mode = rf.valid_modes[0]
+ except IndexError:
+ pass
return m
def do_longname(self, rf):
1
0
Excellent. I will try to get a working script and test it across a few versions. I think in your case, simply using the PowerShell script is the better choice, considering Ketarin is meant to be run continuously as a monitor.
You would have to install a program into the image (Chocolatey), and also remember to run the script (or include it in your build script).
-Philip Arola
-KG7VAM
-philiparola(a)hotmail.com<mailto:philiparola@hotmail.com>
From: Dan Smith via chirp_devel<mailto:chirp_devel@intrepid.danplanet.com>
Sent: Saturday, October 8, 2016 11:38 AM
To: chirp_devel(a)intrepid.danplanet.com<mailto:chirp_devel@intrepid.danplanet.com>
Subject: Re: [chirp_devel] Windows Server availability
> Yes. Essentially my question is if Windows compilation/testing is done
> on a Windows machine, or on some other OS. If the compilation is done
> on a Windows server, then the process is fairly easy. Either process
> outlined here (https://chocolatey.org/docs/automatic-packages) would work.
Yeah, I spin up a windows instance to do the builds, and could
potentially work this into the process as well. Updating the image that
I use for the build isn't a huge deal, but it's not as simple as just
tweaking an always-on server. That, and I loathe every time I need to
mess with that stuff :)
--Dan
_______________________________________________
chirp_devel mailing list
chirp_devel(a)intrepid.danplanet.com
http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
2
1
Yes. Essentially my question is if Windows compilation/testing is done on a Windows machine, or on some other OS. If the compilation is done on a Windows server, then the process is fairly easy. Either process outlined here (https://chocolatey.org/docs/automatic-packages) would work.
-Philip Arola
-KG7VAM
-philiparola(a)hotmail.com<mailto:philiparola@hotmail.com>
From: Patrick Lang<mailto:stickpatrick@gmail.com>
Sent: Saturday, October 8, 2016 9:20 AM
To: Philip Arola<mailto:philiparola@hotmail.com>; chirp_devel(a)intrepid.danplanet.com<mailto:chirp_devel@intrepid.danplanet.com>
Subject: Re: [chirp_devel] Windows Server availability
It sounds like this could be just another post build script that could be run on the same build server. Is that true?
Otherwise I think this could be done as an Azure automation job using the free tier of service.
https://azure.microsoft.com/en-us/pricing/details/automation/
Cheers,
Patrick ae7pl
Sent from a tiny keyboard
> On Oct 5, 2016, at 3:41 PM, Philip Arola via chirp_devel <chirp_devel(a)intrepid.danplanet.com> wrote:
>
> Hello all,
>
> I have been maintaining the CHIRP installation package for Windows at https://chocolatey.org/packages/chirp.install. The source files for the package is https://github.com/philiparola/chocolatey-packages. For those unfamiliar with Chocolatey, it’s basically ‘apt-get’ for Windows.
>
> So far, I’ve been manually updating packages when there is a new release. There is an automated method to do this, and CHIRP is one of those few packages that is perfect for this, particularly because you have a download folder called ‘latest’ AND an email notification. I would set this up in a heartbeat, but alas, I have no Windows Server to run this on, and leaving my desktop on perpetually isn’t the best solution.
>
> I am unfamiliar with your compilation process and your development process, so excuse the potentially dumb question. Is there some sort of Windows Server installation dedicated to CHIRP? It doesn’t even have to be a server, it could be desktop Windows; as long as it is running, connected, and running an application whenever a release is coming up, it will work. I would need access to the server, or I would have to delegate access to someone else to administrate the Chocolatey package (which I am totally fine with).
>
> -Philip Arola
> -KG7VAM
> -philiparola(a)hotmail.com
>
> _______________________________________________
> chirp_devel mailing list
> chirp_devel(a)intrepid.danplanet.com
> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
> Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
2
1
Hello all,
I have been maintaining the CHIRP installation package for Windows at https://chocolatey.org/packages/chirp.install. The source files for the package is https://github.com/philiparola/chocolatey-packages. For those unfamiliar with Chocolatey, it’s basically ‘apt-get’ for Windows.
So far, I’ve been manually updating packages when there is a new release. There is an automated method to do this, and CHIRP is one of those few packages that is perfect for this, particularly because you have a download folder called ‘latest’ AND an email notification. I would set this up in a heartbeat, but alas, I have no Windows Server to run this on, and leaving my desktop on perpetually isn’t the best solution.
I am unfamiliar with your compilation process and your development process, so excuse the potentially dumb question. Is there some sort of Windows Server installation dedicated to CHIRP? It doesn’t even have to be a server, it could be desktop Windows; as long as it is running, connected, and running an application whenever a release is coming up, it will work. I would need access to the server, or I would have to delegate access to someone else to administrate the Chocolatey package (which I am totally fine with).
-Philip Arola
-KG7VAM
-philiparola(a)hotmail.com
2
1
Tested changes:
[Jim Unroe <rock.unroe(a)gmail.com>] [QYT KT-8900] Add Support for a New MCU-Version
This patch adds support for a newly discovered MCU-Version for
QYT KT-8900 and variants like the Juentai JT-6188 Mini.
related to #4101
[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 0b46a0792d32d0a1f80dd5238dad3f3173048b75
[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 0b46a0792d32d0a1f80dd5238dad3f3173048b75
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson6065763362500335248.sh
[workspace] $ /bin/sh -xe /tmp/hudson8801279949341440754.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:522:45: W291 trailing whitespace
./chirp/drivers/ft60.py:523:25: E128 continuation line under-indented for visual indent
./chirp/drivers/ft60.py:524: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/leixen.py:427:80: E501 line too long (82 > 79 characters)
./chirp/drivers/leixen.py:955:80: E501 line too long (87 > 79 characters)
./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/settings.py:245:80: E501 line too long (81 > 79 characters)
./chirp/settings.py:248:80: E501 line too long (81 > 79 characters)
./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.619s
user 0m7.524s
sys 0m0.028s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2016-10-04 08:48:01,641] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.1 LTS (Python 2.7.12)
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2016-10-04 08:48:01,679] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2016-10-04 08:48:01,680] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2016-10-04 08:48:01,681] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2016-10-04 08:48:01,681] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2016-10-04 08:48:01,681] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2016-10-04 08:48:01,681] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2016-10-04 08:48:01,681] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2016-10-04 08:48:01,682] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2016-10-04 08:48:01,683] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2016-10-04 08:48:01,683] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2016-10-04 08:48:01,684] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2016-10-04 08:48:01,684] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2016-10-04 08:48:01,685] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2016-10-04 08:48:01,686] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2016-10-04 08:48:01,687] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2016-10-04 08:48:01,688] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2016-10-04 08:48:01,688] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2016-10-04 08:48:01,689] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2016-10-04 08:48:01,689] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2016-10-04 08:48:01,689] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2016-10-04 08:48:01,690] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2016-10-04 08:48:01,690] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2016-10-04 08:48:01,690] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2016-10-04 08:48:01,690] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2016-10-04 08:48:01,691] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2016-10-04 08:48:01,691] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2016-10-04 08:48:01,691] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2016-10-04 08:48:01,691] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2016-10-04 08:48:01,692] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2016-10-04 08:48:01,692] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2016-10-04 08:48:01,692] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2016-10-04 08:48:01,692] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2016-10-04 08:48:01,693] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2016-10-04 08:48:01,693] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2016-10-04 08:48:01,693] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2016-10-04 08:48:01,693] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2016-10-04 08:48:01,700] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2016-10-04 08:48:01,704] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2016-10-04 08:48:01,704] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2016-10-04 08:48:01,704] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2016-10-04 08:48:01,704] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2016-10-04 08:48:01,704] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2016-10-04 08:48:01,705] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2016-10-04 08:48:01,705] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2016-10-04 08:48:01,705] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2016-10-04 08:48:01,706] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2016-10-04 08:48:01,706] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2016-10-04 08:48:01,706] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2016-10-04 08:48:01,706] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2016-10-04 08:48:01,706] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2016-10-04 08:48:01,706] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2016-10-04 08:48:01,707] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2016-10-04 08:48:01,707] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2016-10-04 08:48:01,707] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2016-10-04 08:48:01,707] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2016-10-04 08:48:01,708] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2016-10-04 08:48:01,708] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2016-10-04 08:48:01,708] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2016-10-04 08:48:01,708] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2016-10-04 08:48:01,708] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2016-10-04 08:48:01,709] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2016-10-04 08:48:01,709] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2016-10-04 08:48:01,709] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2016-10-04 08:48:01,710] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2016-10-04 08:48:01,710] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2016-10-04 08:48:01,710] chirp.directory - INFO: Registered Leixen_VV-898S = LeixenVV898SRadio
[2016-10-04 08:48:01,710] chirp.directory - INFO: Registered LUITON_LT-725UV = LT725UV
[2016-10-04 08:48:01,711] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2016-10-04 08:48:01,711] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2016-10-04 08:48:01,711] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2016-10-04 08:48:01,711] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2016-10-04 08:48:01,711] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2016-10-04 08:48:01,711] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2016-10-04 08:48:01,713] chirp.directory - INFO: Registered Puxing_PX-888K = Puxing_PX888K_Radio
[2016-10-04 08:48:01,713] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2016-10-04 08:48:01,713] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2016-10-04 08:48:01,713] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2016-10-04 08:48:01,714] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2016-10-04 08:48:01,714] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2016-10-04 08:48:01,714] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2016-10-04 08:48:01,714] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2016-10-04 08:48:01,714] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2016-10-04 08:48:01,714] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2016-10-04 08:48:01,715] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2016-10-04 08:48:01,715] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2016-10-04 08:48:01,715] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2016-10-04 08:48:01,716] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2016-10-04 08:48:01,717] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2016-10-04 08:48:01,717] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2016-10-04 08:48:01,717] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2016-10-04 08:48:01,717] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2016-10-04 08:48:01,717] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2016-10-04 08:48:01,717] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2016-10-04 08:48:01,718] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2016-10-04 08:48:01,719] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2016-10-04 08:48:01,720] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2016-10-04 08:48:01,720] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2016-10-04 08:48:01,721] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2016-10-04 08:48:01,721] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2016-10-04 08:48:01,721] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2016-10-04 08:48:01,722] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2016-10-04 08:48:01,722] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2016-10-04 08:48:01,722] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2016-10-04 08:48:01,722] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2016-10-04 08:48:01,723] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2016-10-04 08:48:01,723] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2016-10-04 08:48:01,724] chirp.directory - INFO: Registered Yaesu_VX-8_R = VX8Radio
[2016-10-04 08:48:01,724] chirp.directory - INFO: Registered Yaesu_VX-8_DR = VX8DRadio
[2016-10-04 08:48:01,724] chirp.directory - INFO: Registered Yaesu_VX-8_GE = VX8GERadio
[2016-10-04 08:48:01,724] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
+ rm /tmp/Alinco_DJ175_8PE1pH.img /tmp/Alinco_DJ175_wyyv5O.img /tmp/Alinco_DJ596_ePoUf4.img /tmp/Alinco_DJ596_mXXeUZ.img /tmp/Alinco_DR235T_DIA1b3.img /tmp/Alinco_DR235T_uM4pPF.img /tmp/AnyTone_OBLTR-8R_5_Ho26.img /tmp/AnyTone_OBLTR-8R_wjGXzl.img /tmp/AnyTone_TERMN-8R_cszbDI.img /tmp/AnyTone_TERMN-8R_mZvDoU.img /tmp/BTECH_UV-2501+220_6uVZD5.img /tmp/BTECH_UV-2501+220_o7SB67.img /tmp/BTECH_UV-5001_TDqx6c.img /tmp/BTECH_UV-5001_cilYCj.img /tmp/BTECH_UV-50X3_01S6Nb.img /tmp/BTECH_UV-50X3_68ZFc3.img /tmp/BTECH_UV-50X3_8TQt4p.img /tmp/BTECH_UV-50X3_Qqswkq.img /tmp/BTECH_UV-50X3_ajvX67.img /tmp/BTECH_UV-50X3_fz4mZD.img /tmp/BTECH_UV-5X3_2asFdv.img /tmp/BTECH_UV-5X3_jWUrz0.img /tmp/Baofeng_BF-888_8no318.img /tmp/Baofeng_BF-888_zqpdQP.img /tmp/Baofeng_F-11_UJ5wdU.img /tmp/Baofeng_F-11_lJ7jCf.img /tmp/Baofeng_UV-3R_PWddyX.img /tmp/Baofeng_UV-3R_X1dOsM.img /tmp/Baofeng_UV-5R_LjJSAC.img /tmp/Baofeng_UV-5R_p4wTWl.img /tmp/Baofeng_UV-6R_HVluci.img /tmp/Baofeng_UV-6R_sFoXqC.img /tmp/Baofeng_UV-B5_42MyFE.img /tmp/Baofeng_UV-B5_EXISfJ.img /tmp/Baojie_BJ-9900_FkvgJm.img /tmp/Baojie_BJ-9900_Kly180.img /tmp/Baojie_BJ-9900_PP2yA8.img /tmp/Baojie_BJ-9900_gT9ZfK.img /tmp/Baojie_BJ-9900_ixKFty.img /tmp/Baojie_BJ-9900_zB9ra7.img /tmp/Feidaxin_FD-268A_Nw_bps.img /tmp/Feidaxin_FD-268A_dBBNk7.img /tmp/Feidaxin_FD-268B_JzqIpP.img /tmp/Feidaxin_FD-268B_phE8Dc.img /tmp/Feidaxin_FD-288B_cKbhei.img /tmp/Feidaxin_FD-288B_s7GBZg.img /tmp/Icom_IC-208H_TlCZ7_.img /tmp/Icom_IC-208H_yD8xAb.img /tmp/Icom_IC-2100H_CN68Sa.img /tmp/Icom_IC-2100H_GdBgwH.img /tmp/Icom_IC-2200H_8tHTBx.img /tmp/Icom_IC-2200H_oLIOIk.img /tmp/Icom_IC-2720H_r9D_ba.img /tmp/Icom_IC-2720H_xxYZNp.img /tmp/Icom_IC-2820H_9j4g0Y.img /tmp/Icom_IC-2820H_Q6aFiD.img /tmp/Icom_IC-Q7A_XNOTjK.img /tmp/Icom_IC-Q7A_Y8R_rX.img /tmp/Icom_IC-T70_0yqd8u.img /tmp/Icom_IC-T70_DrMGgC.img /tmp/Icom_IC-T7H_S3dotC.img /tmp/Icom_IC-T7H_aXLRRt.img /tmp/Icom_IC-T8A_4Dk7bi.img /tmp/Icom_IC-T8A_jKMWtp.img /tmp/Icom_IC-V82_U82_1z31BO.img /tmp/Icom_IC-V82_U82_Be7mTT.img /tmp/Icom_IC-W32A_H3kO1P.img /tmp/Icom_IC-W32A_NO5lId.img /tmp/Icom_IC-W32A_WGdjr_.img /tmp/Icom_IC-W32A_dchjVr.img /tmp/Icom_IC-W32A_jFmUfh.img /tmp/Icom_IC-W32A_mD03dK.img /tmp/Icom_IC-W32E_5F81Xo.img /tmp/Icom_IC-W32E_PvZ3SG.img /tmp/Icom_IC-W32E_VliUyB.img /tmp/Icom_IC-W32E_YrMfXN.img /tmp/Icom_IC-W32E_eBUo00.img /tmp/Icom_IC-W32E_tOrwHi.img /tmp/Icom_ID-31A_46OARy.img /tmp/Icom_ID-31A_HTQKOL.img /tmp/Icom_ID-51 Plus_3Er4B2.img /tmp/Icom_ID-51 Plus_NOoT_x.img /tmp/Icom_ID-51_ARZMHB.img /tmp/Icom_ID-51_IRzKL3.img /tmp/Icom_ID-800H_aBZLQF.img /tmp/Icom_ID-800H_fyOlNI.img /tmp/Icom_ID-880H_5esUqQ.img /tmp/Icom_ID-880H_iZWoUM.img /tmp/Jetstream_JT220M_YV5kI0.img /tmp/Jetstream_JT220M_ogBgAP.img /tmp/Jetstream_JT270M_AMPESP.img /tmp/Jetstream_JT270M_LD3KEM.img /tmp/KYD_IP-620_RLZ2fp.img /tmp/KYD_IP-620_hmYKWO.img /tmp/Kenwood_TH-D72 (clone mode)_YfcWfV.img /tmp/Kenwood_TH-D72 (clone mode)_cW2NHj.img /tmp/Kenwood_TK-272G_EYgOpn.img /tmp/Kenwood_TK-272G_uNZaSi.img /tmp/Kenwood_TK-760G_5F1gFX.img /tmp/Kenwood_TK-760G_vgrcLO.img /tmp/Kenwood_TK-8102_5Jn2gm.img /tmp/Kenwood_TK-8102_zehynA.img /tmp/LUITON_LT-725UV_7QThrQ.img /tmp/LUITON_LT-725UV_9JZade.img /tmp/LUITON_LT-725UV_HbNgaf.img /tmp/LUITON_LT-725UV_chDLAY.img /tmp/LUITON_LT-725UV_ftmfeJ.img /tmp/LUITON_LT-725UV_vM2VYr.img /tmp/Leixen_VV-898S_1rvaY2.img /tmp/Leixen_VV-898S_Mo9obX.img /tmp/Leixen_VV-898_QNmYgh.img /tmp/Leixen_VV-898_V6jsmh.img /tmp/Polmar_DB-50M_M3v1Ct.img /tmp/Polmar_DB-50M_Ra1dO2.img /tmp/Puxing_PX-2R_3OHfCr.img /tmp/Puxing_PX-2R_vLbnS1.img /tmp/Puxing_PX-777_qfrjC_.img /tmp/Puxing_PX-777_w9wYvb.img /tmp/Puxing_PX-888K_M3femE.img /tmp/Puxing_PX-888K_wMiQ28.img /tmp/TYT_TH-7800_TsMM95.img /tmp/TYT_TH-7800_eNd4NZ.img /tmp/TYT_TH-9800_p45QSs.img /tmp/TYT_TH-9800_rzgnm2.img /tmp/TYT_TH-UV3R-25_5PJmMB.img /tmp/TYT_TH-UV3R-25_QSL8RY.img /tmp/TYT_TH-UV3R_hQIWCx.img /tmp/TYT_TH-UV3R_zTeMC_.img /tmp/TYT_TH-UVF1_WBzQog.img /tmp/TYT_TH-UVF1_avaHX4.img /tmp/TYT_TH9000_144_17UkUW.img /tmp/TYT_TH9000_144_a7U5ex.img /tmp/Vertex Standard_VXA-700_cPUWgf.img /tmp/Vertex Standard_VXA-700_gWgu5r.img /tmp/WACCOM_MINI-8900_4jjYQA.img /tmp/WACCOM_MINI-8900_bkZwyV.img /tmp/Wouxun_KG-816_ibgix6.img /tmp/Wouxun_KG-816_u2o6NW.img /tmp/Wouxun_KG-818_0c5m4W.img /tmp/Wouxun_KG-818_UFNHgZ.img /tmp/Wouxun_KG-UV6_O1Ae6B.img /tmp/Wouxun_KG-UV6_aQ4DQh.img /tmp/Wouxun_KG-UV8D_J2uOJu.img /tmp/Wouxun_KG-UV8D_R0V4fI.img /tmp/Wouxun_KG-UVD1P_MZau7O.img /tmp/Wouxun_KG-UVD1P_q29jEJ.img /tmp/Yaesu_FT-1802M_7Fr9Ew.img /tmp/Yaesu_FT-1802M_qxOGkv.img /tmp/Yaesu_FT-1D_jYf8th.img /tmp/Yaesu_FT-1D_t5ZyA6.img /tmp/Yaesu_FT-2800M_J3Qr0N.img /tmp/Yaesu_FT-2800M_bPXmgX.img /tmp/Yaesu_FT-2900R_1900R_moTeg6.img /tmp/Yaesu_FT-2900R_1900R_yLoFDY.img /tmp/Yaesu_FT-50_2PfNaO.img /tmp/Yaesu_FT-50_ZRMcVZ.img /tmp/Yaesu_FT-60_578iTQ.img /tmp/Yaesu_FT-60_lo_eXa.img /tmp/Yaesu_FT-7800_7900_3kw_Ql.img /tmp/Yaesu_FT-7800_7900_ExCC0S.img /tmp/Yaesu_FT-817ND (US)_Nixwv_.img /tmp/Yaesu_FT-817ND (US)_wKzV2f.img /tmp/Yaesu_FT-817ND_HTkHVb.img /tmp/Yaesu_FT-817ND_KDdzqd.img /tmp/Yaesu_FT-817_n2U9Hp.img /tmp/Yaesu_FT-817_sQg9yv.img /tmp/Yaesu_FT-857_897 (US)_N08EZY.img /tmp/Yaesu_FT-857_897 (US)_hJB6Mq.img /tmp/Yaesu_FT-857_897_Lssz_I.img /tmp/Yaesu_FT-857_897_NLv9QO.img /tmp/Yaesu_FT-8800_1KKCLU.img /tmp/Yaesu_FT-8800_B5Fmve.img /tmp/Yaesu_FT-8800_FZnij7.img /tmp/Yaesu_FT-8800_vKOvtV.img /tmp/Yaesu_FT-8800_vNcRwt.img /tmp/Yaesu_FT-8800_xQHkfx.img /tmp/Yaesu_FT-8900_XYUIZY.img /tmp/Yaesu_FT-8900_kXCDNe.img /tmp/Yaesu_FTM-350_7owSok.img /tmp/Yaesu_FTM-350_7zr3oV.img /tmp/Yaesu_FTM-350_APldgU.img /tmp/Yaesu_FTM-350_Vjdfv5.img /tmp/Yaesu_FTM-350_WpoJT1.img /tmp/Yaesu_FTM-350__kURiR.img /tmp/Yaesu_VX-2_5bWn35.img /tmp/Yaesu_VX-2_Sf2J5J.img /tmp/Yaesu_VX-3_D_rY0b.img /tmp/Yaesu_VX-3_lPx1mq.img /tmp/Yaesu_VX-5_63iI2c.img /tmp/Yaesu_VX-5_QlLgws.img /tmp/Yaesu_VX-6_cSX1Go.img /tmp/Yaesu_VX-6_ou7awb.img /tmp/Yaesu_VX-7_cOmLXX.img /tmp/Yaesu_VX-7_yiAeRf.img /tmp/Yaesu_VX-8_J3aDTO.img /tmp/Yaesu_VX-8_sDkB1F.img
Email was triggered for: Success
Sending email for trigger: Success
1
0