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
June 2017
- 17 participants
- 28 discussions
Anyone interested in providing support for Yaesu FT-65R? I have available
memory map and a python3 script to read/write the radio and image file. I’m
not interested in adding it to Chirp. Anyone who wants to work on it can
eMail me and I’ll send you what I have. If you find any errors or
omissions please let me know. The documentation is in MS Word 2010, should
be able to open it in LibreOffice formatting may get messed up.
The memory map and r/w protocol for FT-65R is not like any other Yaesu I
have looked at. You can query for ID and the memory map is record based
with a checksum for each record. The protocol is documented in the python
script.
I expect that the FT-25R is very similar. At this time no plans to ‘map’
it, out any interest?
Did very little testing on Linux (Archlinux)
I’m interested in mapping out the FT-70DR when it is released.
I think it will a lot like FT-1DR and FT-2DR.
Fred
dropkick23(a)gmail.com
1
0
Tested changes:
[Jim Unroe <rock.unroe(a)gmail.com>] [New Model] Add Support for Retevis RT23 Radio
This patch adds basic support for the Retevis RT23 radio.
Note: This patch removes the "sleep" delays that were in the previously
submitted patch.
#4619
[Tom Hayward <tom(a)tomh.us>] [id880] Fix typo in charset definition. #281
[Tom Hayward <tom(a)tomh.us>] [thf6a] Support full charset (ASCII). Fixes #141
[Tom Hayward <tom(a)tomh.us>] [id880] Support full charset. Fixes #281
[Tom Hayward <tom(a)tomh.us>] [vx5] Support full charset (ASCII). Fixes #292
[Tom Hayward <tom(a)tomh.us>] [id31a] set used bit when creating new memory, clear when deleting. Fixes #269
[Tom Hayward <tom(a)tomh.us>] Support PyGTK < 2.22 in bank edit. Fixes #231
[Tom Hayward <tom(a)tomh.us>] [d710] [v71] [d72] Fix tone list (not all tones are supported). Fixes #212
[Dan Smith <dsmith(a)danplanet.com>] [vx7] Fix setting memory power levels on 220MHz band
Fixes #214
[Dan Smith <dsmith(a)danplanet.com>] fips: Pennsylvania FIPS code was wrong. #117
[Marco Filippi <iz3gme.marco(a)gmail.com>] Consider lower bound frequency of each valid_band as valid
Fix bug #181
[Tom Hayward <tom(a)tomh.us>] tmd700: allow 8-char names. Fixes #176
[Dan Smith <dsmith(a)danplanet.com>] Fix the "blind deletion" problem, as well as properly direct copy/paste
Fixes #172
[David Griffith <dave(a)661.org>] Bug #155 fix: VX-7 1.25m power levels
[David Griffith <dave(a)661.org>] New INSTALL and README files
Fixes #122
[Tom Hayward <tom(a)tomh.us>] thd72: only use hardware flow on OS X. Fixes #166
[Marco Filippi <iz3gme.marco(a)gmail.com>] [FT817] Tone freq not set correctly
Same as #88 for FT857, to avoid code duplication fix code have been moved from
ft857 to its ancestor class
Fix bug #163
[Tom Hayward <tom(a)tomh.us>] Fix Mac .app so paths with spaces work. Fixes Bug #145
Full log:
Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace
[workspace] $ hg showconfig paths.default
[workspace] $ hg pull --rev default
[workspace] $ hg update --clean --rev default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev fa2ef4dedc56b786c2ff94d70a5a9b2c94785973
[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 fa2ef4dedc56b786c2ff94d70a5a9b2c94785973
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson8256871000385903113.sh
[workspace] $ /bin/sh -xe /tmp/hudson567029702524144700.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.060s
OK
Patch 'tip' is OK
Checking for PEP8 regressions...
./chirp/platform.py:255:80: E501 line too long (82 > 79 characters)
./chirp/ui/mainapp.py:1909:80: E501 line too long (82 > 79 characters)
./chirp/ui/mainapp.py:1965:80: E501 line too long (82 > 79 characters)
real 0m9.206s
user 0m9.012s
sys 0m0.072s
================================================
Tests OK
+ cat /var/lib/jenkins/.chirp/debug.log
[2017-06-16 12:38:59,586] chirp.logger - DEBUG: CHIRP 0.3.0dev on Linux - Ubuntu 16.04.2 LTS (Python 2.7.12)
[2017-06-16 12:38:59,602] chirp.directory - INFO: Registered Kenwood_TH-D7 = THD7Radio
[2017-06-16 12:38:59,602] chirp.directory - INFO: Registered Kenwood_TH-D7G = THD7GRadio
[2017-06-16 12:38:59,602] chirp.directory - INFO: Registered Kenwood_TM-D700 = TMD700Radio
[2017-06-16 12:38:59,602] chirp.directory - INFO: Registered Kenwood_TM-V7 = TMV7Radio
[2017-06-16 12:38:59,602] chirp.directory - INFO: Registered Kenwood_TM-G707 = TMG707Radio
[2017-06-16 12:38:59,602] chirp.directory - INFO: Registered Kenwood_TH-G71 = THG71Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TH-F6 = THF6ARadio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TH-F7 = THF7ERadio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TM-D710 = TMD710Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TH-D72_live_mode = THD72Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TM-V71 = TMV71Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TM-D710G = TMD710GRadio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TH-K2 = THK2Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TM-271 = TM271Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TM-281 = TM281Radio
[2017-06-16 12:38:59,603] chirp.directory - INFO: Registered Kenwood_TM-471 = TM471Radio
[2017-06-16 12:38:59,604] chirp.directory - INFO: Registered Icom_7200 = Icom7200Radio
[2017-06-16 12:38:59,604] chirp.directory - INFO: Registered Icom_IC-7000 = Icom7000Radio
[2017-06-16 12:38:59,604] chirp.directory - INFO: Registered Icom_IC-7100 = Icom7100Radio
[2017-06-16 12:38:59,604] chirp.directory - INFO: Registered Icom_746 = Icom746Radio
[2017-06-16 12:38:59,607] chirp.directory - INFO: Registered Alinco_DR03T = DR03Radio
[2017-06-16 12:38:59,607] chirp.directory - INFO: Registered Alinco_DR06T = DR06Radio
[2017-06-16 12:38:59,607] chirp.directory - INFO: Registered Alinco_DR135T = DR135Radio
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered Alinco_DR235T = DR235Radio
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered Alinco_DR435T = DR435Radio
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered Alinco_DJ596 = DJ596Radio
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered Jetstream_JT220M = JT220MRadio
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered Alinco_DJ175 = DJ175Radio
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered Alinco_DJ-G7EG = AlincoDJG7EG
[2017-06-16 12:38:59,608] chirp.directory - INFO: Registered AnyTone_5888UV = AnyTone5888UVRadio
[2017-06-16 12:38:59,609] chirp.directory - INFO: Registered Intek_HR-2040 = IntekHR2040Radio
[2017-06-16 12:38:59,609] chirp.directory - INFO: Registered Polmar_DB-50M = PolmarDB50MRadio
[2017-06-16 12:38:59,609] chirp.directory - INFO: Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
[2017-06-16 12:38:59,609] chirp.directory - INFO: Registered AnyTone_TERMN-8R = AnyToneTERMN8RRadio
[2017-06-16 12:38:59,609] chirp.directory - INFO: Registered AnyTone_OBLTR-8R = AnyToneOBLTR8RRadio
[2017-06-16 12:38:59,610] chirp.directory - INFO: Registered Baofeng_UV-3R = UV3RRadio
[2017-06-16 12:38:59,611] chirp.directory - INFO: Registered Baofeng_BF-A58 = BFA58
[2017-06-16 12:38:59,611] chirp.directory - INFO: Registered Baofeng_UV-82WP = UV82WP
[2017-06-16 12:38:59,611] chirp.directory - INFO: Registered Baofeng_GT-3WP = GT3WP
[2017-06-16 12:38:59,611] chirp.directory - INFO: Registered Retevis_RT6 = RT6
[2017-06-16 12:38:59,611] chirp.directory - INFO: Registered Baojie_BJ-9900 = BJ9900Radio
[2017-06-16 12:38:59,612] chirp.directory - INFO: Registered Baofeng_UV-5R = BaofengUV5RGeneric
[2017-06-16 12:38:59,612] chirp.directory - INFO: Registered Baofeng_F-11 = BaofengF11Radio
[2017-06-16 12:38:59,612] chirp.directory - INFO: Registered Baofeng_UV-82 = BaofengUV82Radio
[2017-06-16 12:38:59,612] chirp.directory - INFO: Registered Baofeng_UV-6 = BaofengUV6Radio
[2017-06-16 12:38:59,613] chirp.directory - INFO: Registered Intek_KT-980HP = IntekKT980Radio
[2017-06-16 12:38:59,613] chirp.directory - INFO: Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
[2017-06-16 12:38:59,613] chirp.directory - INFO: Registered Baofeng_UV-82HP = BaofengUV82HPRadio
[2017-06-16 12:38:59,613] chirp.directory - INFO: Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered BTECH_UV-2501 = UV2501
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered BTECH_UV-2501+220 = UV2501_220
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered BTECH_UV-5001 = UV5001
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered WACCOM_MINI-8900 = MINI8900
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered QYT_KT-UV980 = KTUV980
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered QYT_KT8900 = KT9800
[2017-06-16 12:38:59,614] chirp.directory - INFO: Registered QYT_KT8900R = KT9800R
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered LUITON_LT-588UV = LT588UV
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered BTECH_UV-25X2 = UV25X2
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered BTECH_UV-25X4 = UV25X4
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered BTECH_UV-50X2 = UV50X2
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered QYT_KT7900D = KT7900D
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered QYT_KT8900D = KT8900D
[2017-06-16 12:38:59,615] chirp.directory - INFO: Registered Feidaxin_FD-268A = FD268ARadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-268B = FD268BRadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-288A = FD288ARadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-288B = FD288BRadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-150A = FD150ARadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-160A = FD160ARadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-450A = FD450ARadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-460A = FD460ARadio
[2017-06-16 12:38:59,616] chirp.directory - INFO: Registered Feidaxin_FD-460UH = FD460UHRadio
[2017-06-16 12:38:59,617] chirp.directory - INFO: Registered Yaesu_FT-1802M = FT1802Radio
[2017-06-16 12:38:59,618] chirp.directory - INFO: Registered Yaesu_FT-1D_R = FT1Radio
[2017-06-16 12:38:59,618] chirp.directory - INFO: Registered Yaesu_FT-2800M = FT2800Radio
[2017-06-16 12:38:59,618] chirp.directory - INFO: Registered Yaesu_FT-2900R_1900R = FT2900Radio
[2017-06-16 12:38:59,619] chirp.directory - INFO: Registered Yaesu_FT-50 = FT50Radio
[2017-06-16 12:38:59,619] chirp.directory - INFO: Registered Yaesu_FT-60 = FT60Radio
[2017-06-16 12:38:59,620] chirp.directory - INFO: Registered Yaesu_FT-7800_7900 = FT7800Radio
[2017-06-16 12:38:59,620] chirp.directory - INFO: Registered Yaesu_FT-8800 = FT8800Radio
[2017-06-16 12:38:59,620] chirp.directory - INFO: Registered Yaesu_FT-8900 = FT8900Radio
[2017-06-16 12:38:59,620] chirp.directory - INFO: Registered Yaesu_FT-8100 = FT8100Radio
[2017-06-16 12:38:59,621] chirp.directory - INFO: Registered Yaesu_FT-817 = FT817Radio
[2017-06-16 12:38:59,621] chirp.directory - INFO: Registered Yaesu_FT-817ND = FT817NDRadio
[2017-06-16 12:38:59,621] chirp.directory - INFO: Registered Yaesu_FT-817ND_US = FT817NDUSRadio
[2017-06-16 12:38:59,621] chirp.directory - INFO: Registered Yaesu_FT-857_897 = FT857Radio
[2017-06-16 12:38:59,621] chirp.directory - INFO: Registered Yaesu_FT-857_897_US = FT857USRadio
[2017-06-16 12:38:59,622] chirp.directory - INFO: Registered Yaesu_FT-90 = FT90Radio
[2017-06-16 12:38:59,622] chirp.directory - INFO: Registered Yaesu_FTM-3200D_R = FTM3200Radio
[2017-06-16 12:38:59,622] chirp.directory - INFO: Registered Yaesu_FTM-350 = FTM350Radio
[2017-06-16 12:38:59,623] chirp.directory - INFO: Registered Generic_CSV = CSVRadio
[2017-06-16 12:38:59,623] chirp.directory - INFO: Registered Commander_KG-UV = CommanderCSVRadio
[2017-06-16 12:38:59,623] chirp.directory - INFO: Registered RT_Systems_CSV = RTCSVRadio
[2017-06-16 12:38:59,624] chirp.directory - INFO: Registered ARRL_Travel_Plus = TpeRadio
[2017-06-16 12:38:59,633] chirp.directory - INFO: Registered Generic_XML = XMLRadio
[2017-06-16 12:38:59,633] chirp.directory - INFO: Registered BTECH_GMRS-V1 = GMRSV1
[2017-06-16 12:38:59,637] chirp.directory - INFO: Registered Baofeng_BF-888 = H777Radio
[2017-06-16 12:38:59,637] chirp.directory - INFO: Registered HobbyPCB_RS-UV3 = HobbyPCBRSUV3Radio
[2017-06-16 12:38:59,637] chirp.directory - INFO: Registered Icom_IC-208H = IC208Radio
[2017-06-16 12:38:59,638] chirp.directory - INFO: Registered Icom_IC-2100H = IC2100Radio
[2017-06-16 12:38:59,638] chirp.directory - INFO: Registered Icom_IC-2200H = IC2200Radio
[2017-06-16 12:38:59,638] chirp.directory - INFO: Registered Icom_IC-2720H = IC2720Radio
[2017-06-16 12:38:59,638] chirp.directory - INFO: Registered Icom_IC-2820H = IC2820Radio
[2017-06-16 12:38:59,639] chirp.directory - INFO: Registered Icom_IC-91_92AD = IC9xRadio
[2017-06-16 12:38:59,639] chirp.directory - INFO: Registered Icom_IC-P7 = ICP7Radio
[2017-06-16 12:38:59,639] chirp.directory - INFO: Registered Icom_IC-Q7A = ICQ7Radio
[2017-06-16 12:38:59,640] chirp.directory - INFO: Registered Icom_IC-T70 = ICT70Radio
[2017-06-16 12:38:59,640] chirp.directory - INFO: Registered Icom_IC-T7H = ICT7HRadio
[2017-06-16 12:38:59,640] chirp.directory - INFO: Registered Icom_IC-T8A = ICT8ARadio
[2017-06-16 12:38:59,640] chirp.directory - INFO: Registered Icom_IC-W32A = ICW32ARadio
[2017-06-16 12:38:59,640] chirp.directory - INFO: Registered Icom_IC-W32E = ICW32ERadio
[2017-06-16 12:38:59,641] chirp.directory - INFO: Registered Icom_IC-V82_U82 = ICx8xRadio
[2017-06-16 12:38:59,641] chirp.directory - INFO: Registered Icom_ID-31A = ID31Radio
[2017-06-16 12:38:59,641] chirp.directory - INFO: Registered Icom_ID-51 = ID51Radio
[2017-06-16 12:38:59,641] chirp.directory - INFO: Registered Icom_ID-51_Plus = ID51PLUSRadio
[2017-06-16 12:38:59,642] chirp.directory - INFO: Registered Icom_ID-800H_v2 = ID800v2Radio
[2017-06-16 12:38:59,642] chirp.directory - INFO: Registered Icom_ID-880H = ID880Radio
[2017-06-16 12:38:59,642] chirp.directory - INFO: Registered Icom_ID-80H = ID80Radio
[2017-06-16 12:38:59,642] chirp.directory - INFO: Registered Kenwood_HMK = HMKRadio
[2017-06-16 12:38:59,643] chirp.directory - INFO: Registered Kenwood_ITM = ITMRadio
[2017-06-16 12:38:59,643] chirp.directory - INFO: Registered Wouxun_KG-UV8D = KGUV8DRadio
[2017-06-16 12:38:59,643] chirp.directory - INFO: Registered KYD_NC-630A = NC630aRadio
[2017-06-16 12:38:59,644] chirp.directory - INFO: Registered KYD_IP-620 = IP620Radio
[2017-06-16 12:38:59,645] chirp.directory - INFO: Registered Leixen_VV-898 = LeixenVV898Radio
[2017-06-16 12:38:59,645] chirp.directory - INFO: Registered Jetstream_JT270M = JetstreamJT270MRadio
[2017-06-16 12:38:59,645] chirp.directory - INFO: Registered Jetstream_JT270MH = JetstreamJT270MHRadio
[2017-06-16 12:38:59,645] chirp.directory - INFO: Registered Leixen_VV-898S = LeixenVV898SRadio
[2017-06-16 12:38:59,646] chirp.directory - INFO: Registered LUITON_LT-725UV = LT725UV
[2017-06-16 12:38:59,646] chirp.directory - INFO: Registered Wouxun_KG-UVD1P = KGUVD1PRadio
[2017-06-16 12:38:59,646] chirp.directory - INFO: Registered Wouxun_KG-UV6 = KGUV6DRadio
[2017-06-16 12:38:59,646] chirp.directory - INFO: Registered Wouxun_KG-816 = KG816Radio
[2017-06-16 12:38:59,646] chirp.directory - INFO: Registered Wouxun_KG-818 = KG818Radio
[2017-06-16 12:38:59,647] chirp.directory - INFO: Registered Puxing_PX-777 = Puxing777Radio
[2017-06-16 12:38:59,647] chirp.directory - INFO: Registered Puxing_PX-2R = Puxing2RRadio
[2017-06-16 12:38:59,647] chirp.directory - INFO: Registered Puxing_PX-888K = Puxing_PX888K_Radio
[2017-06-16 12:38:59,648] chirp.directory - INFO: Registered Retevis_RT1 = RT1Radio
[2017-06-16 12:38:59,648] chirp.directory - INFO: Registered Retevis_RT21 = RT21Radio
[2017-06-16 12:38:59,649] chirp.directory - INFO: Registered Retevis_RT22 = RT22Radio
[2017-06-16 12:38:59,649] chirp.directory - INFO: Registered WLN_KD-C1 = KDC1
[2017-06-16 12:38:59,649] chirp.directory - INFO: Registered Zastone_ZT-X6 = ZTX6
[2017-06-16 12:38:59,649] chirp.directory - INFO: Registered LUITON_LT-316 = LT316
[2017-06-16 12:38:59,649] chirp.directory - INFO: Registered TID_TD-M8 = TDM8
[2017-06-16 12:38:59,649] chirp.directory - INFO: Registered Retevis_RT23 = RT23Radio
[2017-06-16 12:38:59,650] chirp.directory - INFO: Registered Rugged_RH5R-V2 = RH5RV2
[2017-06-16 12:38:59,650] chirp.directory - INFO: Registered TDXone_TD-Q8A = TDXoneTDQ8A
[2017-06-16 12:38:59,651] chirp.directory - INFO: Registered TYT_TH-7800_File = TYTTH7800File
[2017-06-16 12:38:59,651] chirp.directory - INFO: Registered TYT_TH-7800 = TYTTH7800Radio
[2017-06-16 12:38:59,651] chirp.directory - INFO: Registered TYT_TH9000_220 = Th9000220Radio
[2017-06-16 12:38:59,651] chirp.directory - INFO: Registered TYT_TH9000_144 = Th9000144Radio
[2017-06-16 12:38:59,651] chirp.directory - INFO: Registered TYT_TH9000_440 = Th9000440Radio
[2017-06-16 12:38:59,652] chirp.directory - INFO: Registered TYT_TH-9800_File = TYTTH9800File
[2017-06-16 12:38:59,652] chirp.directory - INFO: Registered TYT_TH-9800 = TYTTH9800Radio
[2017-06-16 12:38:59,652] chirp.directory - INFO: Registered TYT_TH-UV3R = TYTUV3RRadio
[2017-06-16 12:38:59,652] chirp.directory - INFO: Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
[2017-06-16 12:38:59,653] chirp.directory - INFO: Registered TYT_TH-UVF8D = TYTUVF8DRadio
[2017-06-16 12:38:59,653] chirp.directory - INFO: Registered Kenwood_TH-D72_clone_mode = THD72Radio
[2017-06-16 12:38:59,653] chirp.directory - INFO: Registered TYT_TH-UVF1 = TYTTHUVF1Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-260 = TK260_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-270 = TK270_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-272 = TK272_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-278 = TK278_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-360 = TK360_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-370 = TK370_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-372 = TK372_Radio
[2017-06-16 12:38:59,654] chirp.directory - INFO: Registered Kenwood_TK-378 = TK378_Radio
[2017-06-16 12:38:59,655] chirp.directory - INFO: Registered Kenwood_TK-760 = TK760_Radio
[2017-06-16 12:38:59,655] chirp.directory - INFO: Registered Kenwood_TK-762 = TK762_Radio
[2017-06-16 12:38:59,655] chirp.directory - INFO: Registered Kenwood_TK-768 = TK768_Radio
[2017-06-16 12:38:59,655] chirp.directory - INFO: Registered Kenwood_TK-860 = TK860_Radio
[2017-06-16 12:38:59,655] chirp.directory - INFO: Registered Kenwood_TK-862 = TK862_Radio
[2017-06-16 12:38:59,655] chirp.directory - INFO: Registered Kenwood_TK-868 = TK868_Radio
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-868G = TK868G_Radios
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-862G = TK862G_Radios
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-860G = TK860G_Radios
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-768G = TK768G_Radios
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-762G = TK762G_Radios
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-760G = TK760G_Radios
[2017-06-16 12:38:59,656] chirp.directory - INFO: Registered Kenwood_TK-388G = TK388G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-378G = TK378G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-372G = TK372G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-370G = TK370G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-360G = TK360G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-278G = TK278G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-272G = TK272G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-270G = TK270G_Radios
[2017-06-16 12:38:59,657] chirp.directory - INFO: Registered Kenwood_TK-260G = TK260G_Radios
[2017-06-16 12:38:59,658] chirp.directory - INFO: Registered Kenwood_TK-7102 = KenwoodTK7102Radio
[2017-06-16 12:38:59,658] chirp.directory - INFO: Registered Kenwood_TK-8102 = KenwoodTK8102Radio
[2017-06-16 12:38:59,658] chirp.directory - INFO: Registered Kenwood_TK-7108 = KenwoodTK7108Radio
[2017-06-16 12:38:59,658] chirp.directory - INFO: Registered Kenwood_TK-8108 = KenwoodTK8108Radio
[2017-06-16 12:38:59,658] chirp.directory - INFO: Registered Kenwood_TS-2000 = TS2000Radio
[2017-06-16 12:38:59,659] chirp.directory - INFO: Registered BTECH_UV-5X3 = UV5X3
[2017-06-16 12:38:59,659] chirp.directory - INFO: Registered Baofeng_UV-6R = UV6R
[2017-06-16 12:38:59,660] chirp.directory - INFO: Registered Baofeng_UV-B5 = BaofengUVB5
[2017-06-16 12:38:59,660] chirp.directory - INFO: Registered BTECH_UV-50X3 = UV50X3
[2017-06-16 12:38:59,660] chirp.directory - INFO: Registered Yaesu_VX-170 = VX170Radio
[2017-06-16 12:38:59,661] chirp.directory - INFO: Registered Yaesu_VX-2 = VX2Radio
[2017-06-16 12:38:59,661] chirp.directory - INFO: Registered Yaesu_VX-3 = VX3Radio
[2017-06-16 12:38:59,661] chirp.directory - INFO: Registered Yaesu_VX-5 = VX5Radio
[2017-06-16 12:38:59,662] chirp.directory - INFO: Registered Yaesu_VX-6 = VX6Radio
[2017-06-16 12:38:59,662] chirp.directory - INFO: Registered Yaesu_VX-7 = VX7Radio
[2017-06-16 12:38:59,663] chirp.directory - INFO: Registered Yaesu_VX-8R = VX8Radio
[2017-06-16 12:38:59,663] chirp.directory - INFO: Registered Yaesu_VX-8DR = VX8DRadio
[2017-06-16 12:38:59,663] chirp.directory - INFO: Registered Yaesu_VX-8GE = VX8GERadio
[2017-06-16 12:38:59,663] chirp.directory - INFO: Registered Vertex_Standard_VXA-700 = VXA700Radio
Email was triggered for: Success
Sending email for trigger: Success
1
0
15 Jun '17
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1497570964 14400
# Node ID ee6bbbff016566ee4581c72c5993bd687a137a68
# Parent fa2ef4dedc56b786c2ff94d70a5a9b2c94785973
[New Model] Add Support for Retevis RT23 Radio
This patch adds basic support for the Retevis RT23 radio.
Note: This patch removes the "sleep" delays that were in the previously
submitted patch.
#4619
diff -r fa2ef4dedc56 -r ee6bbbff0165 chirp/drivers/retevis_rt23.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/retevis_rt23.py Thu Jun 15 19:56:04 2017 -0400
@@ -0,0 +1,867 @@
+# Copyright 2017 Jim Unroe <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 os
+import struct
+import re
+import logging
+
+from chirp import chirp_common, directory, memmap
+from chirp import bitwise, errors, util
+from chirp.settings import RadioSetting, RadioSettingGroup, \
+ RadioSettingValueInteger, RadioSettingValueList, \
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
+
+LOG = logging.getLogger(__name__)
+
+MEM_FORMAT = """
+struct memory {
+ lbcd rxfreq[4];
+ lbcd txfreq[4];
+ lbcd rxtone[2];
+ lbcd txtone[2];
+ u8 unknown1;
+ u8 pttid:2, // PTT-ID
+ unknown2:1,
+ signaling:1, // Signaling(ANI)
+ unknown3:1,
+ bcl:1, // Busy Channel Lockout
+ unknown4:2;
+ u8 unknown5:3,
+ highpower:1, // Power Level
+ isnarrow:1, // Bandwidth
+ scan:1, // Scan Add
+ unknown6:2;
+ u8 unknown7;
+};
+
+#seekto 0x0010;
+struct memory channels[128];
+
+#seekto 0x0810;
+struct memory vfo_a;
+struct memory vfo_b;
+
+#seekto 0x0830;
+struct {
+ u8 unknown_0830_1:4,
+ color:2, // Background Color
+ dst:1, // DTMF Side Tone
+ txsel:1; // Priority TX Channel Select
+ u8 scans:2, // Scan Mode
+ unknown_0831:1,
+ autolk:1, // Auto Key Lock
+ save:1, // Battery Save
+ beep:1, // Key Beep
+ voice:2; // Voice Prompt
+ u8 vfomr_fm:1, // FM Radio Display Mode
+ led:2, // Background Light
+ unknown_0832_2:1,
+ dw:1, // FM Radio Dual Watch
+ name:1, // Display Names
+ vfomr_a:2; // Display Mode A
+ u8 opnset:2, // Power On Message
+ unknown_0833_1:3,
+ dwait:1, // Dual Standby
+ vfomr_b:2; // Display Mode B
+ u8 mrcha; // mr a ch num
+ u8 mrchb; // mr b ch num
+ u8 fmch; // fm radio ch num
+ u8 unknown_0837_1:1,
+ ste:1, // Squelch Tail Eliminate
+ roger:1, // Roger Beep
+ unknown_0837_2:1,
+ vox:4; // VOX
+ u8 step:4, // Step
+ unknown_0838_1:4;
+ u8 squelch; // Squelch
+ u8 tot; // Time Out Timer
+ u8 rptmod:1, // Repeater Mode
+ volmod:2, // Volume Mode
+ rptptt:1, // Repeater PTT Switch
+ rptspk:1, // Repeater Speaker
+ relay:3; // Cross Band Repeater Enable
+ u8 unknown_083C:4, // 0x083C
+ rptrl:4; // Repeater TX Delay
+ u8 pf1:4, // Function Key 1
+ pf2:4; // Function Key 2
+ u8 vot; // VOX Delay Time
+} settings;
+
+#seekto 0x0848;
+struct {
+ char line1[7];
+} poweron_msg;
+
+struct limit {
+ bbcd lower[2];
+ bbcd upper[2];
+};
+
+#seekto 0x0850;
+struct {
+ struct limit vhf;
+ struct limit uhf;
+} limits;
+
+#seekto 0x08D0;
+struct {
+ char name[7];
+ u8 unknown2[1];
+} names[128];
+
+#seekto 0x0D20;
+u8 usedflags[16];
+u8 scanflags[16];
+
+#seekto 0x0FA0;
+struct {
+ u8 unknown_0FA0_1:4,
+ dispab:1, // select a/b
+ unknown_0FA0_2:3;
+} settings2;
+"""
+
+CMD_ACK = "\x06"
+BLOCK_SIZE = 0x10
+
+RT23_POWER_LEVELS = [chirp_common.PowerLevel("Low", watts=1.00),
+ chirp_common.PowerLevel("High", watts=2.50)]
+
+
+RT23_DTCS = sorted(chirp_common.DTCS_CODES +
+ [17, 50, 55, 135, 217, 254, 305, 645, 765])
+
+RT23_CHARSET = chirp_common.CHARSET_UPPER_NUMERIC + \
+ ":;<=>?@ !\"#$%&'()*+,-./"
+
+LIST_COLOR = ["Blue", "Orange", "Purple"]
+LIST_LED = ["Off", "On", "Auto"]
+LIST_OPNSET = ["Full", "Voltage", "Message"]
+LIST_PFKEY = [
+ "Radio",
+ "Sub-channel Sent",
+ "Scan",
+ "Alarm",
+ "DTMF",
+ "Squelch Off Momentarily",
+ "Battery Power Indicator",
+ "Tone 1750",
+ "Tone 2100",
+ "Tone 1000",
+ "Tone 1450"]
+LIST_PTTID = ["Off", "BOT", "EOT", "Both"]
+LIST_RPTMOD = ["Single", "Double"]
+LIST_RPTRL = ["0.5S", "1.0S", "1.5S", "2.0S", "2.5S", "3.0S", "3.5S", "4.0S",
+ "4.5S"]
+LIST_SCANS = ["Time Operated", "Carrier Operated", "Search"]
+LIST_SIGNALING = ["No", "DTMF"]
+LIST_TOT = ["OFF"] + ["%s seconds" % x for x in range(30, 300, 30)]
+LIST_TXSEL = ["Edit", "Busy"]
+LIST_STEP = ["2.50K", "5.00K", "6.25K", "10.00K", "12,50K", "20.00K", "25.00K",
+ "50.00K"]
+LIST_VFOMR = ["VFO", "MR(Frequency)", "MR(Channel #/Name)"]
+LIST_VFOMRFM = ["VFO", "Channel"]
+LIST_VOICE = ["Off", "Chinese", "English"]
+LIST_VOLMOD = ["Off", "Sub", "Main"]
+LIST_VOT = ["0.5S", "1.0S", "1.5S", "2.0S", "3.0S"]
+LIST_VOX = ["OFF"] + ["%s" % x for x in range(1, 6)]
+
+
+def _rt23_enter_programming_mode(radio):
+ serial = radio.pipe
+
+ magic = "PROIUAM"
+ exito = False
+ for i in range(0, 5):
+ for j in range(0, len(magic)):
+ time.sleep(0.005)
+ serial.write(magic[j])
+ ack = serial.read(1)
+
+ try:
+ if ack == CMD_ACK:
+ exito = True
+ break
+ except:
+ LOG.debug("Attempt #%s, failed, trying again" % i)
+ pass
+
+ # check if we had EXITO
+ if exito is False:
+ msg = "The radio did not accept program mode after five tries.\n"
+ msg += "Check you interface cable and power cycle your radio."
+ raise errors.RadioError(msg)
+
+ try:
+ serial.write("\x02")
+ ident = serial.read(8)
+ except:
+ raise errors.RadioError("Error communicating with radio")
+
+ if not ident.startswith("P31183"):
+ LOG.debug(util.hexprint(ident))
+ raise errors.RadioError("Radio returned unknown identification string")
+
+ try:
+ serial.write(CMD_ACK)
+ ack = serial.read(1)
+ except:
+ raise errors.RadioError("Error communicating with radio")
+
+ if ack != CMD_ACK:
+ raise errors.RadioError("Radio refused to enter programming mode")
+
+
+def _rt23_exit_programming_mode(radio):
+ serial = radio.pipe
+ try:
+ serial.write("E")
+ except:
+ raise errors.RadioError("Radio refused to exit programming mode")
+
+
+def _rt23_read_block(radio, block_addr, block_size):
+ serial = radio.pipe
+
+ cmd = struct.pack(">cHb", 'R', block_addr, BLOCK_SIZE)
+ expectedresponse = "W" + cmd[1:]
+ LOG.debug("Reading block %04x..." % (block_addr))
+
+ try:
+ serial.write(cmd)
+ response = serial.read(4 + BLOCK_SIZE + 1)
+ if response[:4] != expectedresponse:
+ raise Exception("Error reading block %04x." % (block_addr))
+
+ chunk = response[4:]
+
+ cs = 0
+ for byte in chunk[:-1]:
+ cs += ord(byte)
+ if ord(chunk[-1]) != (cs & 0xFF):
+ raise Exception("Block failed checksum!")
+
+ block_data = chunk[:-1]
+ except:
+ raise errors.RadioError("Failed to read block at %04x" % block_addr)
+
+ return block_data
+
+
+def _rt23_write_block(radio, block_addr, block_size):
+ serial = radio.pipe
+
+ cmd = struct.pack(">cHb", 'W', block_addr, BLOCK_SIZE)
+ data = radio.get_mmap()[block_addr:block_addr + BLOCK_SIZE]
+ cs = 0
+ for byte in data:
+ cs += ord(byte)
+ data += chr(cs & 0xFF)
+
+ LOG.debug("Writing Data:")
+ LOG.debug(util.hexprint(cmd + data))
+
+ try:
+ serial.write(cmd + data)
+ if serial.read(1) != CMD_ACK:
+ raise Exception("No ACK")
+ except:
+ raise errors.RadioError("Failed to send block "
+ "to radio at %04x" % block_addr)
+
+
+def do_download(radio):
+ LOG.debug("download")
+ _rt23_enter_programming_mode(radio)
+
+ data = ""
+
+ status = chirp_common.Status()
+ status.msg = "Cloning from radio"
+
+ status.cur = 0
+ status.max = radio._memsize
+
+ for addr in range(0, radio._memsize, BLOCK_SIZE):
+ status.cur = addr + BLOCK_SIZE
+ radio.status_fn(status)
+
+ block = _rt23_read_block(radio, addr, BLOCK_SIZE)
+ if addr == 0 and block.startswith("\xFF" * 6):
+ block = "P31183" + "\xFF" * 10
+ data += block
+
+ LOG.debug("Address: %04x" % addr)
+ LOG.debug(util.hexprint(block))
+
+ _rt23_exit_programming_mode(radio)
+
+ return memmap.MemoryMap(data)
+
+
+def do_upload(radio):
+ status = chirp_common.Status()
+ status.msg = "Uploading to radio"
+
+ _rt23_enter_programming_mode(radio)
+
+ status.cur = 0
+ status.max = radio._memsize
+
+ for start_addr, end_addr in radio._ranges:
+ for addr in range(start_addr, end_addr, BLOCK_SIZE):
+ status.cur = addr + BLOCK_SIZE
+ radio.status_fn(status)
+ _rt23_write_block(radio, addr, BLOCK_SIZE)
+
+
+def model_match(cls, data):
+ """Match the opened/downloaded image to the correct version"""
+
+ if len(data) == 0x1000:
+ rid = data[0x0000:0x0006]
+ return rid == "P31183"
+ else:
+ return False
+
+
+def _split(rf, f1, f2):
+ """Returns False if the two freqs are in the same band (no split)
+ or True otherwise"""
+
+ # determine if the two freqs are in the same band
+ for low, high in rf.valid_bands:
+ if f1 >= low and f1 <= high and \
+ f2 >= low and f2 <= high:
+ # if the two freqs are on the same Band this is not a split
+ return False
+
+ # if you get here is because the freq pairs are split
+ return True
+
+
+(a)directory.register
+class RT23Radio(chirp_common.CloneModeRadio):
+ """RETEVIS RT23"""
+ VENDOR = "Retevis"
+ MODEL = "RT23"
+ BAUD_RATE = 9600
+
+ _ranges = [
+ (0x0000, 0x0EC0),
+ ]
+ _memsize = 0x1000
+
+ def get_features(self):
+ rf = chirp_common.RadioFeatures()
+ rf.has_settings = True
+ rf.has_bank = False
+ rf.has_ctone = True
+ rf.has_cross = True
+ rf.has_rx_dtcs = True
+ rf.has_tuning_step = False
+ rf.can_odd_split = True
+ rf.valid_name_length = 7
+ rf.valid_characters = RT23_CHARSET
+ rf.has_name = True
+ rf.valid_skips = ["", "S"]
+ rf.valid_tmodes = ["", "Tone", "TSQL", "DTCS", "Cross"]
+ rf.valid_cross_modes = ["Tone->Tone", "Tone->DTCS", "DTCS->Tone",
+ "->Tone", "->DTCS", "DTCS->", "DTCS->DTCS"]
+ rf.valid_power_levels = RT23_POWER_LEVELS
+ rf.valid_duplexes = ["", "-", "+", "split", "off"]
+ rf.valid_modes = ["FM", "NFM"] # 25 KHz, 12.5 KHz.
+ rf.memory_bounds = (1, 128)
+ rf.valid_bands = [
+ (136000000, 174000000),
+ (400000000, 480000000)]
+
+ return rf
+
+ def process_mmap(self):
+ self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
+
+ def sync_in(self):
+ """Download from radio"""
+ try:
+ data = do_download(self)
+ except errors.RadioError:
+ # Pass through any real errors we raise
+ raise
+ except:
+ # If anything unexpected happens, make sure we raise
+ # a RadioError and log the problem
+ LOG.exception('Unexpected error during download')
+ raise errors.RadioError('Unexpected error communicating '
+ 'with the radio')
+ self._mmap = data
+ self.process_mmap()
+
+ def sync_out(self):
+ """Upload to radio"""
+ try:
+ do_upload(self)
+ except:
+ # If anything unexpected happens, make sure we raise
+ # a RadioError and log the problem
+ LOG.exception('Unexpected error during upload')
+ raise errors.RadioError('Unexpected error communicating '
+ 'with the radio')
+
+ def get_raw_memory(self, number):
+ return repr(self._memobj.memory[number - 1])
+
+ def decode_tone(self, val):
+ """Parse the tone data to decode from mem, it returns:
+ Mode (''|DTCS|Tone), Value (None|###), Polarity (None,N,R)"""
+ if val.get_raw() == "\xFF\xFF":
+ return '', None, None
+
+ val = int(val)
+ if val >= 12000:
+ a = val - 12000
+ return 'DTCS', a, 'R'
+ elif val >= 8000:
+ a = val - 8000
+ return 'DTCS', a, 'N'
+ else:
+ a = val / 10.0
+ return 'Tone', a, None
+
+ def encode_tone(self, memval, mode, value, pol):
+ """Parse the tone data to encode from UI to mem"""
+ if mode == '':
+ memval[0].set_raw(0xFF)
+ memval[1].set_raw(0xFF)
+ elif mode == 'Tone':
+ memval.set_value(int(value * 10))
+ elif mode == 'DTCS':
+ flag = 0x80 if pol == 'N' else 0xC0
+ memval.set_value(value)
+ memval[1].set_bits(flag)
+ else:
+ raise Exception("Internal error: invalid mode `%s'" % mode)
+
+ def get_memory(self, number):
+ mem = chirp_common.Memory()
+ _mem = self._memobj.channels[number-1]
+ _nam = self._memobj.names[number - 1]
+ mem.number = number
+ bitpos = (1 << ((number - 1) % 8))
+ bytepos = ((number - 1) / 8)
+ _scn = self._memobj.scanflags[bytepos]
+ _usd = self._memobj.usedflags[bytepos]
+ isused = bitpos & int(_usd)
+ isscan = bitpos & int(_scn)
+
+ if not isused:
+ mem.empty = True
+ return mem
+
+ mem.freq = int(_mem.rxfreq) * 10
+
+ # We'll consider any blank (i.e. 0MHz frequency) to be empty
+ if mem.freq == 0:
+ mem.empty = True
+ return mem
+
+ if _mem.rxfreq.get_raw() == "\xFF\xFF\xFF\xFF":
+ mem.empty = True
+ return mem
+
+ if _mem.get_raw() == ("\xFF" * 16):
+ LOG.debug("Initializing empty memory")
+ _mem.set_raw("\x00" * 16)
+
+ # Freq and offset
+ mem.freq = int(_mem.rxfreq) * 10
+ # tx freq can be blank
+ if _mem.get_raw()[4] == "\xFF":
+ # TX freq not set
+ mem.offset = 0
+ mem.duplex = "off"
+ else:
+ # TX freq set
+ offset = (int(_mem.txfreq) * 10) - mem.freq
+ if offset != 0:
+ if _split(self.get_features(), mem.freq, int(_mem.txfreq) * 10):
+ mem.duplex = "split"
+ mem.offset = int(_mem.txfreq) * 10
+ elif offset < 0:
+ mem.offset = abs(offset)
+ mem.duplex = "-"
+ elif offset > 0:
+ mem.offset = offset
+ mem.duplex = "+"
+ else:
+ mem.offset = 0
+
+ for char in _nam.name:
+ if str(char) == "\xFF":
+ char = " "
+ mem.name += str(char)
+ mem.name = mem.name.rstrip()
+
+ mem.mode = _mem.isnarrow and "NFM" or "FM"
+
+ rxtone = txtone = None
+ txtone = self.decode_tone(_mem.txtone)
+ rxtone = self.decode_tone(_mem.rxtone)
+ chirp_common.split_tone_decode(mem, txtone, rxtone)
+
+ mem.power = RT23_POWER_LEVELS[_mem.highpower]
+
+ if not isscan:
+ mem.skip = "S"
+
+ mem.extra = RadioSettingGroup("Extra", "extra")
+
+ rs = RadioSetting("bcl", "BCL",
+ RadioSettingValueBoolean(_mem.bcl))
+ mem.extra.append(rs)
+
+ rs = RadioSetting("pttid", "PTT ID",
+ RadioSettingValueList(
+ LIST_PTTID, LIST_PTTID[_mem.pttid]))
+ mem.extra.append(rs)
+
+ rs = RadioSetting("signaling", "Optional Signaling",
+ RadioSettingValueList(LIST_SIGNALING,
+ LIST_SIGNALING[_mem.signaling]))
+ mem.extra.append(rs)
+
+ return mem
+
+ def set_memory(self, mem):
+ LOG.debug("Setting %i(%s)" % (mem.number, mem.extd_number))
+ _mem = self._memobj.channels[mem.number - 1]
+ _nam = self._memobj.names[mem.number - 1]
+ bitpos = (1 << ((mem.number - 1) % 8))
+ bytepos = ((mem.number - 1) / 8)
+ _scn = self._memobj.scanflags[bytepos]
+ _usd = self._memobj.usedflags[bytepos]
+
+ if mem.empty:
+ _mem.set_raw("\xFF" * 16)
+ _nam.name = ("\xFF" * 7)
+ _usd &= ~bitpos
+ _scn &= ~bitpos
+ return
+ else:
+ _usd |= bitpos
+
+ if _mem.get_raw() == ("\xFF" * 16):
+ LOG.debug("Initializing empty memory")
+ _mem.set_raw("\x00" * 16)
+ _scn |= bitpos
+
+ _mem.rxfreq = mem.freq / 10
+
+ if mem.duplex == "off":
+ for i in range(0, 4):
+ _mem.txfreq[i].set_raw("\xFF")
+ elif mem.duplex == "split":
+ _mem.txfreq = mem.offset / 10
+ elif mem.duplex == "+":
+ _mem.txfreq = (mem.freq + mem.offset) / 10
+ elif mem.duplex == "-":
+ _mem.txfreq = (mem.freq - mem.offset) / 10
+ else:
+ _mem.txfreq = mem.freq / 10
+
+ _namelength = self.get_features().valid_name_length
+ for i in range(_namelength):
+ try:
+ _nam.name[i] = mem.name[i]
+ except IndexError:
+ _nam.name[i] = "\xFF"
+
+ _mem.scan = mem.skip != "S"
+ if mem.skip == "S":
+ _scn &= ~bitpos
+ else:
+ _scn |= bitpos
+ _mem.isnarrow = mem.mode == "NFM"
+
+ ((txmode, txtone, txpol), (rxmode, rxtone, rxpol)) = \
+ chirp_common.split_tone_encode(mem)
+ self.encode_tone(_mem.txtone, txmode, txtone, txpol)
+ self.encode_tone(_mem.rxtone, rxmode, rxtone, rxpol)
+
+ _mem.highpower = mem.power == RT23_POWER_LEVELS[1]
+
+ for setting in mem.extra:
+ setattr(_mem, setting.get_name(), setting.value)
+
+ def get_settings(self):
+ _settings = self._memobj.settings
+ _mem = self._memobj
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ advanced = RadioSettingGroup("advanced", "Advanced Settings")
+ other = RadioSettingGroup("other", "Other Settings")
+ workmode = RadioSettingGroup("workmode", "Workmode Settings")
+ fmradio = RadioSettingGroup("fmradio", "FM Radio Settings")
+ top = RadioSettings(basic, advanced, other, workmode, fmradio)
+
+ save = RadioSetting("save", "Battery Saver",
+ RadioSettingValueBoolean(_settings.save))
+ basic.append(save)
+
+ vox = RadioSetting("vox", "VOX Gain",
+ RadioSettingValueList(
+ LIST_VOX, LIST_VOX[_settings.vox]))
+ basic.append(vox)
+
+ squelch = RadioSetting("squelch", "Squelch Level",
+ RadioSettingValueInteger(
+ 0, 9, _settings.squelch))
+ basic.append(squelch)
+
+ relay = RadioSetting("relay", "Repeater",
+ RadioSettingValueBoolean(_settings.relay))
+ basic.append(relay)
+
+ tot = RadioSetting("tot", "Time-out timer", RadioSettingValueList(
+ LIST_TOT, LIST_TOT[_settings.tot]))
+ basic.append(tot)
+
+ beep = RadioSetting("beep", "Key Beep",
+ RadioSettingValueBoolean(_settings.beep))
+ basic.append(beep)
+
+ color = RadioSetting("color", "Background Color", RadioSettingValueList(
+ LIST_COLOR, LIST_COLOR[_settings.color - 1]))
+ basic.append(color)
+
+ vot = RadioSetting("vot", "VOX Delay Time", RadioSettingValueList(
+ LIST_VOT, LIST_VOT[_settings.vot]))
+ basic.append(vot)
+
+ dwait = RadioSetting("dwait", "Dual Standby",
+ RadioSettingValueBoolean(_settings.dwait))
+ basic.append(dwait)
+
+ led = RadioSetting("led", "Background Light", RadioSettingValueList(
+ LIST_LED, LIST_LED[_settings.led]))
+ basic.append(led)
+
+ voice = RadioSetting("voice", "Voice Prompt", RadioSettingValueList(
+ LIST_VOICE, LIST_VOICE[_settings.voice]))
+ basic.append(voice)
+
+ roger = RadioSetting("roger", "Roger Beep",
+ RadioSettingValueBoolean(_settings.roger))
+ basic.append(roger)
+
+ autolk = RadioSetting("autolk", "Auto Key Lock",
+ RadioSettingValueBoolean(_settings.autolk))
+ basic.append(autolk)
+
+ opnset = RadioSetting("opnset", "Open Mode Set",
+ RadioSettingValueList(
+ LIST_OPNSET, LIST_OPNSET[_settings.opnset]))
+ basic.append(opnset)
+
+ def _filter(name):
+ filtered = ""
+ for char in str(name):
+ if char in chirp_common.CHARSET_ASCII:
+ filtered += char
+ else:
+ filtered += " "
+ return filtered
+
+ _msg = self._memobj.poweron_msg
+ ponmsg = RadioSetting("poweron_msg.line1", "Power-On Message",
+ RadioSettingValueString(
+ 0, 7, _filter(_msg.line1)))
+ basic.append(ponmsg)
+
+
+ scans = RadioSetting("scans", "Scan Mode", RadioSettingValueList(
+ LIST_SCANS, LIST_SCANS[_settings.scans]))
+ basic.append(scans)
+
+ dw = RadioSetting("dw", "FM Radio Dual Watch",
+ RadioSettingValueBoolean(_settings.dw))
+ basic.append(dw)
+
+ name = RadioSetting("name", "Display Names",
+ RadioSettingValueBoolean(_settings.name))
+ basic.append(name)
+
+ rptrl = RadioSetting("rptrl", "Repeater TX Delay",
+ RadioSettingValueList(LIST_RPTRL, LIST_RPTRL[
+ _settings.rptrl]))
+ basic.append(rptrl)
+
+ rptspk = RadioSetting("rptspk", "Repeater Speaker",
+ RadioSettingValueBoolean(_settings.rptspk))
+ basic.append(rptspk)
+
+ rptptt = RadioSetting("rptptt", "Repeater PTT Switch",
+ RadioSettingValueBoolean(_settings.rptptt))
+ basic.append(rptptt)
+
+ rptmod = RadioSetting("rptmod", "Repeater Mode",
+ RadioSettingValueList(
+ LIST_RPTMOD, LIST_RPTMOD[_settings.rptmod]))
+ basic.append(rptmod)
+
+ volmod = RadioSetting("volmod", "Volume Mode",
+ RadioSettingValueList(
+ LIST_VOLMOD, LIST_VOLMOD[_settings.volmod]))
+ basic.append(volmod)
+
+ dst = RadioSetting("dst", "DTMF Side Tone",
+ RadioSettingValueBoolean(_settings.dst))
+ basic.append(dst)
+
+ txsel = RadioSetting("txsel", "Priority TX Channel",
+ RadioSettingValueList(
+ LIST_TXSEL, LIST_TXSEL[_settings.txsel]))
+ basic.append(txsel)
+
+ ste = RadioSetting("ste", "Squelch Tail Eliminate",
+ RadioSettingValueBoolean(_settings.ste))
+ basic.append(ste)
+
+ #advanced
+ if _settings.pf1 > 0x0A:
+ val = 0x00
+ else:
+ val = _settings.pf1
+ pf1 = RadioSetting("pf1", "PF1 Key",
+ RadioSettingValueList(
+ LIST_PFKEY, LIST_PFKEY[val]))
+ advanced.append(pf1)
+
+ if _settings.pf2 > 0x0A:
+ val = 0x00
+ else:
+ val = _settings.pf2
+ pf2 = RadioSetting("pf2", "PF2 Key",
+ RadioSettingValueList(
+ LIST_PFKEY, LIST_PFKEY[val]))
+ advanced.append(pf2)
+
+ # other
+ _limit = str(int(_mem.limits.vhf.lower) / 10)
+ val = RadioSettingValueString(0, 3, _limit)
+ val.set_mutable(False)
+ rs = RadioSetting("limits.vhf.lower", "VHF low", val)
+ other.append(rs)
+
+ _limit = str(int(_mem.limits.vhf.upper) / 10)
+ val = RadioSettingValueString(0, 3, _limit)
+ val.set_mutable(False)
+ rs = RadioSetting("limits.vhf.upper", "VHF high", val)
+ other.append(rs)
+
+ _limit = str(int(_mem.limits.uhf.lower) / 10)
+ val = RadioSettingValueString(0, 3, _limit)
+ val.set_mutable(False)
+ rs = RadioSetting("limits.uhf.lower", "UHF low", val)
+ other.append(rs)
+
+ _limit = str(int(_mem.limits.uhf.upper) / 10)
+ val = RadioSettingValueString(0, 3, _limit)
+ val.set_mutable(False)
+ rs = RadioSetting("limits.uhf.upper", "UHF high", val)
+ other.append(rs)
+
+ #work mode
+ vfomr_a = RadioSetting("vfomr_a", "Display Mode A",
+ RadioSettingValueList(
+ LIST_VFOMR, LIST_VFOMR[_settings.vfomr_a]))
+ workmode.append(vfomr_a)
+
+ vfomr_b = RadioSetting("vfomr_b", "Display Mode B",
+ RadioSettingValueList(
+ LIST_VFOMR, LIST_VFOMR[_settings.vfomr_b]))
+ workmode.append(vfomr_b)
+
+ mrcha = RadioSetting("mrcha", "Channel # A",
+ RadioSettingValueInteger(
+ 1, 128, _settings.mrcha))
+ workmode.append(mrcha)
+
+ mrchb = RadioSetting("mrchb", "Channel # B",
+ RadioSettingValueInteger(
+ 1, 128, _settings.mrchb))
+ workmode.append(mrchb)
+
+ #fm radio
+ vfomr_fm = RadioSetting("vfomr_fm", "FM Radio Display Mode",
+ RadioSettingValueList(
+ LIST_VFOMRFM, LIST_VFOMRFM[
+ _settings.vfomr_fm]))
+ fmradio.append(vfomr_fm)
+
+ fmch = RadioSetting("fmch", "FM Radio Channel #",
+ RadioSettingValueInteger(
+ 1, 25, _settings.fmch))
+ fmradio.append(fmch)
+
+ return top
+
+ def set_settings(self, settings):
+ for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
+ else:
+ try:
+ if "." in element.get_name():
+ bits = element.get_name().split(".")
+ obj = self._memobj
+ for bit in bits[:-1]:
+ obj = getattr(obj, bit)
+ setting = bits[-1]
+ else:
+ obj = self._memobj.settings
+ setting = element.get_name()
+
+ if element.has_apply_callback():
+ LOG.debug("Using apply callback")
+ element.run_apply_callback()
+ elif setting == "color":
+ setattr(obj, setting, int(element.value) + 1)
+ elif element.value.get_mutable():
+ LOG.debug("Setting %s = %s" % (setting, element.value))
+ setattr(obj, setting, element.value)
+ except Exception, e:
+ LOG.debug(element.get_name())
+ raise
+
+ @classmethod
+ def match_model(cls, filedata, filename):
+ match_size = False
+ match_model = False
+
+ # testing the file data size
+ if len(filedata) in [0x1000, ]:
+ match_size = True
+
+ # testing the model fingerprint
+ match_model = model_match(cls, filedata)
+
+ if match_size and match_model:
+ return True
+ else:
+ return False
1
0
[chirp_devel] FT2D quasi-success (meaning I simply had to try it and it partially worked)
by NNN Wx 09 Jun '17
by NNN Wx 09 Jun '17
09 Jun '17
I can read the Yaesu FT2D into chirp by telling chirp it’s an FT-1D. The memory “Name” field displayed by chirp is wrong, although the Browser shows correctly-encoded characters. The “Name” field looks more like a data field printed as ASCII (entries like “:”, “@“, “@p ;”, “^?q&#!W:;”) Has anybody any clue what may be causing that, or how I can start a debug process?
— a few more details. I’m doing this on Macintosh OS X;
I finally gave up using the straight USB cable (Yaesu had told me, in writing, that it wouldn’t work) and got the appropriate cable for FT2D (SCU-19). Using Prolific drivers on my Macintosh allows the serial port to show as
/dev/cu.usbserial.
The distributed chirp (not the daily build) reads my FT2D by telling chirp to use [now old] FT-1D model. The basic memory functions are there in the correct order and meaning. It does not get the memory location name correctly, nor does it correctly handle memory banks. I may simply be able to do much as was done with the FTM3200D, and clone Ainslie and others' good work with only a few amendments in memory model to get the banks to decipher correctly. I’ve not gone very far into other settings, but it’s clear to me that most of the APRS data structures are already handled correctly as well.
Declan Rieb WD5EQY
1
0
Tested changes:
[Keith Williamson <hkwilliamson(a)gmail.com>] [vx8] Mod to radio memory layout to accommodate diffs between models. Fixes #4881
Split the memobj aprs struct into three structs: shorter aprs struct, aprs_msg_macro
struct and aprs2 struct. The aprs_msg_macro[] struct and aprs2 struct are parameterized
differently in the VX8Radio class and VX8DRadio class _mem_params. Updated all
dereferences of memory elements formerly part of the aprs struct that are now part
of either the aprs2 struct or the aprs_msg_macro[] struct. There are no behavioral
changes to Chirp with this patch.
[Keith Williamson <hkwilliamson(a)gmail.com>] [vx8] Simple refactor that moves most VXDRadio class functions to VXRadio parent class. Fixes #4881
This is the first of two groundwork patches for adding Settings support for the VX-8R. This patch
produces no change in functionality.
[Keith Williamson <hkwilliamson(a)gmail.com>] [vx8] Fix issue with VX-8R download from radio. Fixes #4883
This patch ensures that the functions from the correct radio class are called
when downloading from the radio. This is achieved by defining distinct MODELs
for the VX-8R, VX-8DR, and VX-8GE and deleting their VARIANTs. This patch is
also accompanied (out-of-band) with test image files for each of the radios.
[Pavel Milanes (CO7WT) <pavelmc(a)gmail.com>] [PATCH][tk270.py] Increase OEM band edges by 4.0%, fix #4709
Some of this model's variants are in ranges near ham bands but outside them
by the OEM stated range, for example from 150 to 174 Mhz, or 148 to 174 Mhz,
in the case of the UHF we has the variants in the 450 to 490 Mhz or
the 406 to 430 Mhz.
I make some characterizations and most of the radios can work safely
with a 4% increment of the stated range safely and will allow to work
near ham bands. (real range is bigger but we stick to a safe value)
Related also to #4789, see this for real edges data measurements.
With improvements an corrections suggested on the chirp_devel mailing list
[Pavel Milanes (CO7WT) <pavelmc(a)gmail.com>] [tk760.py] Increase OEM band edges by 4.0%, fix #4789
Some of this model's variants are in ranges near ham bands but outside them
by the OEM stated range, for example from 150 to 174 Mhz, or 148 to 174 Mhz,
in the case of the UHF we has the variants in the 450 to 490 Mhz or
the 406 to 430 Mhz.
I make some characterizations and most of the radios can work safely
with a 4% of the stated range safely and will allow to work
near ham bands. (real range is bigger but we stick to a safe value)
This patch was based on the discussions about issue #4709 and improvements
from the chirp_devel mailing list comments.
[Pavel Milanes (CO7WT) <pavelmc(a)gmail.com>] [tk760g.py] Increase OEM band edges by 4.0%, fix #4789
Some of this model's variants are in ranges near ham bands but outside them
by the OEM stated range, for example from 150 to 174 Mhz, or 148 to 174 Mhz,
in the case of the UHF we has the variants in the 450 to 490 Mhz or
the 406 to 430 Mhz.
I make some characterizations and most of the radios can work safely
with a 4% of the stated range safely and will allow to work
near ham bands. (real range is bigger but we stick to a safe value)
This patch was based on the discussions about issue #4709 and fixes
due to chirp_devel recomendations
[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
7 files updated, 0 files merged, 1 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev bce7268580f053fc2d447bcdb512b0ca1f517749
[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 bce7268580f053fc2d447bcdb512b0ca1f517749
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson2707325390968597071.sh
[workspace] $ /bin/sh -xe /tmp/hudson6931433012051191668.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.071s
OK
FAIL: Please keep commit message lines to <80 columns
Checking for PEP8 regressions...
./chirp/drivers/vx8.py:1089:80: E501 line too long (80 > 79 characters)
./chirp/platform.py:255:80: E501 line too long (82 > 79 characters)
./chirp/ui/mainapp.py:1909:80: E501 line too long (82 > 79 characters)
./chirp/ui/mainapp.py:1965:80: E501 line too long (82 > 79 characters)
real 0m8.459s
user 0m8.280s
sys 0m0.048s
================================================
Tests FAILED: style tests
Build step 'Execute shell' marked build as failure
Email was triggered for: Failure
Sending email for trigger: Failure
3
6
Hi,
I'm trying to add support for Settings for the original VX-8R. I just
recently have been switching over to chirp for all of my radios and was
surprised to find that the Settings tab was empty after downloading from my
VX-8R. After a few modifications to the vx8.py driver, I have settings
coming up properly for my radio but have doubtless broken support for the
VX-8DR.
The VX8-DR has expanded APRS features such as SmartBeaconing, more Message
Macros, more DigiPaths, etc. These affect the memory layout some. To fix it
(temporarily), I corrected the memory layout to align with the VX-8R and
commented out the calls that referenced the now missing memory elements.
I'd like to contribute the changes back but I'm not sure how to handle
support for both the VX-8R and VX-8DR (and VX-8GER). With differences in
memory layout, should the VX-8R have a separate driver or can the memory
layout differences be somehow accommodated within the same driver?
73's,
Keith
KF7DRV
4
17
[chirp_devel] [PATCH][tk270.py] Increase OEM band edges by 4.0%, fix #4709
by Pavel Milanes 05 Jun '17
by Pavel Milanes 05 Jun '17
05 Jun '17
Some of this model's variants are in ranges near ham bands but outside them
by the OEM stated range, for example from 150 to 174 Mhz, or 148 to 174 Mhz,
in the case of the UHF we has the variants in the 450 to 490 Mhz or
the 406 to 430 Mhz.
I make some characterizations and most of the radios can work safely
with a 4% increment of the stated range safely and will allow to work
near ham bands. (real range is bigger but we stick to a safe value)
Related also to #4789, see this for real edges data measurements.
With improvements an corrections suggested on the chirp_devel mailing list
1
0
05 Jun '17
Some of this model's variants are in ranges near ham bands but outside them
by the OEM stated range, for example from 150 to 174 Mhz, or 148 to 174 Mhz,
in the case of the UHF we has the variants in the 450 to 490 Mhz or
the 406 to 430 Mhz.
I make some characterizations and most of the radios can work safely
with a 4% of the stated range safely and will allow to work
near ham bands. (real range is bigger but we stick to a safe value)
This patch was based on the discussions about issue #4709 and improvements
from the chirp_devel mailing list comments.
1
0
[chirp_devel] [PATCH][tk760g.py] Increase OEM band edges by 4.0%, fix #4789
by Pavel Milanes 05 Jun '17
by Pavel Milanes 05 Jun '17
05 Jun '17
Some of this model's variants are in ranges near ham bands but outside them
by the OEM stated range, for example from 150 to 174 Mhz, or 148 to 174 Mhz,
in the case of the UHF we has the variants in the 450 to 490 Mhz or
the 406 to 430 Mhz.
I make some characterizations and most of the radios can work safely
with an 4% of the stated range safely and will allow to work
near ham bands. (real range is bigger but we stick to a safe value)
This patch was based on the discussions about issue #4709 and fixes
due to chirp_devel recomendations.
1
0
Tested changes:
[Angus Ainslie <angus(a)akkea.ca>] [FT1D] Add support for setting backtrack targets - issue #4877
[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 d4222df0000cdde3311e54df02edf80858720316
[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 d4222df0000cdde3311e54df02edf80858720316
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson1657361280180118056.sh
[workspace] $ /bin/sh -xe /tmp/hudson748180592891479250.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.053s
OK
Patch 'tip' is OK
Checking for PEP8 regressions...
./chirp/drivers/ft1d.py:395:1: E302 expected 2 blank lines, found 1
./chirp/drivers/ft1d.py:1484:34: E201 whitespace after '('
./chirp/drivers/ft1d.py:1488:22: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1490:22: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1492:22: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1496:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1503:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1504:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1506:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1511:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1512:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1514:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1517:35: E127 continuation line over-indented for visual indent
./chirp/drivers/ft1d.py:1519:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1520:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1522:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1524:49: W291 trailing whitespace
./chirp/drivers/ft1d.py:1525:35: E127 continuation line over-indented for visual indent
./chirp/drivers/ft1d.py:1528:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1530:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1533:35: E127 continuation line over-indented for visual indent
./chirp/drivers/ft1d.py:1535:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1536:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1538:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1541:35: E127 continuation line over-indented for visual indent
./chirp/drivers/ft1d.py:1544:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1545:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1546:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1547:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1548:80: E501 line too long (82 > 79 characters)
./chirp/drivers/ft1d.py:1549:56: E202 whitespace before ')'
./chirp/drivers/ft1d.py:1552:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1553:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1554:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1555:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1557:13: E265 block comment should start with '# '
./chirp/drivers/ft1d.py:1559:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1560:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1563:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1564:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1565:80: E501 line too long (86 > 79 characters)
./chirp/drivers/ft1d.py:1566:13: E265 block comment should start with '# '
./chirp/drivers/ft1d.py:1568:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1569:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1572:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1573:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1574:80: E501 line too long (98 > 79 characters)
./chirp/drivers/ft1d.py:1575:13: E265 block comment should start with '# '
./chirp/drivers/ft1d.py:1577:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1578:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1581:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1582:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1583:80: E501 line too long (82 > 79 characters)
./chirp/drivers/ft1d.py:1584:56: E202 whitespace before ')'
./chirp/drivers/ft1d.py:1587:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1590:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1591:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1593:13: E265 block comment should start with '# '
./chirp/drivers/ft1d.py:1595:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1596:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1599:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1600:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1601:80: E501 line too long (87 > 79 characters)
./chirp/drivers/ft1d.py:1602:13: E265 block comment should start with '# '
./chirp/drivers/ft1d.py:1604:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1605:30: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1608:17: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1609:47: E201 whitespace after '('
./chirp/drivers/ft1d.py:1610:80: E501 line too long (99 > 79 characters)
./chirp/drivers/ft1d.py:1611:13: E265 block comment should start with '# '
./chirp/drivers/ft1d.py:1613:1: W293 blank line contains whitespace
./chirp/drivers/ft1d.py:1853:39: E202 whitespace before ')'
./chirp/drivers/ft1d.py:1856:39: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1858:36: E202 whitespace before ')'
./chirp/drivers/ft1d.py:1860:39: E202 whitespace before ')'
./chirp/drivers/ft1d.py:1863:39: E203 whitespace before ':'
./chirp/drivers/ft1d.py:1865:36: E202 whitespace before ')'
./chirp/platform.py:255:80: E501 line too long (82 > 79 characters)
./chirp/ui/mainapp.py:1909:80: E501 line too long (82 > 79 characters)
./chirp/ui/mainapp.py:1965:80: E501 line too long (82 > 79 characters)
real 0m8.234s
user 0m8.084s
sys 0m0.036s
================================================
Tests FAILED: driver tests
Build step 'Execute shell' marked build as failure
Email was triggered for: Failure
Sending email for trigger: Failure
1
2