Tested changes:
[Tom Hayward tom@tomh.us] [AP510] Disable AP510 driver. In response to #3617
Only a buggy, outdated firmware version is supported by Chirp. Newer firmware revisions changed the programming protocol and are incompatible. To avoid confusion and discourage running buggy firmware, this patch disables the AP510 driver in Chirp.
The code should remain, as it is a great starting point for anyone wishing to write support for the latest AP510 firmware.
[Tom Hayward tom@tomh.us] [IC-T8A] Fix frequency encoding and decoding. Fixes #577
The IC-T8 stores frequencies in three bcd bytes. The last nibble of these three bytes would naturally be the least significant digit in KHz, but this leaves no way to encode frequencies divisible by 2.5 KHz. To account for this, the IC-T8 deviates from its standard bcd encoding for the final nibble. Instead of the nibble representing 1 KHz, it represents 500 Hz: 0x5 is 2.5 KHz, 0xA is 5 KHz, and so on. This patch implements this encoding and decoding in Chirp.
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 95af553dbb2e2ddea5f6fa70a532cf6f4d2747df [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 95af553dbb2e2ddea5f6fa70a532cf6f4d2747df No emails were triggered. [workspace] $ /bin/sh -xe /tmp/hudson5352468027244224457.sh [workspace] $ /bin/sh -xe /tmp/hudson4667964191655001725.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.049s
OK Patch 'tip' is OK Checking for PEP8 regressions... ./chirp/drivers/ft60.py:521:45: W291 trailing whitespace ./chirp/drivers/ft60.py:522:25: E128 continuation line under-indented for visual indent ./chirp/drivers/ft60.py:523:13: E301 expected 1 blank line, found 0 ./chirp/drivers/ft817.py:587:41: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:681:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:685:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:688:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:689:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:692:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:693:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:696:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:699:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:702:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:705:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:708:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:711:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:714:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:717:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:718:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:721:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:722:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:725:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:728:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:729:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:732:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:733:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:736:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:737:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:740:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:741:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:744:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:747:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:750:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:751:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:754:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:755:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:758:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:761:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:764:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:765:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:768:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:769:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:772:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:773:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:776:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:779:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:780:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:783:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:786:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:787:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:790:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:791:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:807:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:808:31: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:811:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:814:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:818:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:824:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:829:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:833:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:837:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:841:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:845:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:890:25: E128 continuation line under-indented for visual indent ./chirp/drivers/thd72.py:188:1: E302 expected 2 blank lines, found 1 ./chirp/drivers/thd72.py:203:23: E201 whitespace after '[' ./chirp/drivers/thd72.py:203:80: E501 line too long (171 > 79 characters) ./chirp/drivers/thd72.py:203:170: E202 whitespace before ']' ./chirp/drivers/thd72.py:204:13: E201 whitespace after '[' ./chirp/drivers/thd72.py:204:61: E202 whitespace before ']' ./chirp/drivers/thd72.py:205:23: E201 whitespace after '[' ./chirp/drivers/thd72.py:205:74: E202 whitespace before ']' ./chirp/drivers/thd72.py:206:18: E201 whitespace after '[' ./chirp/drivers/thd72.py:206:65: E202 whitespace before ']' ./chirp/drivers/thd72.py:591:1: W293 blank line contains whitespace ./chirp/drivers/thd72.py:599:1: W293 blank line contains whitespace ./chirp/ui/mainapp.py:637:13: E128 continuation line under-indented for visual indent ./chirp/ui/mainapp.py:651:5: E303 too many blank lines (2) ./chirp/ui/mainapp.py:1355:80: E501 line too long (81 > 79 characters) ./chirp/ui/mainapp.py:1359:80: E501 line too long (80 > 79 characters) ./chirp/ui/mainapp.py:1637:80: E501 line too long (85 > 79 characters)
real 0m7.468s user 0m7.377s sys 0m0.045s ================================================ Tests FAILED: driver tests Build step 'Execute shell' marked build as failure Email was triggered for: Failure Sending email for trigger: Failure