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
December 2017
- 9 participants
- 20 discussions
[chirp_devel] [New Model][Baofeng BF-T1] Basic support for BF-T1 Radio, fix #4933
by Pavel Milanes 16 Dec '17
by Pavel Milanes 16 Dec '17
16 Dec '17
Basic support for the Baofeng BF-T1 also known as BF MINI or BF-9100
Just channel data, no settings yet.
--
73 CO7WT, Pavel.
1
1
Hi to all.
I have expressed my concern about USB-serial driver in the past on
Windows OS, with strange behaviors that makes Chirp behaves differently
on windows than Linux.
Yesterday a user helping me on the development of a driver for Chirp,
found a bug/feature that may be of interest of the Chirp developers.
Details on this issue (https://chirp.danplanet.com/issues/4933), exact
details on this post (https://chirp.danplanet.com/issues/4933#note-102)
--
73 CO7WT, Pavel.
1
0
Hi,
Some of you may have noticed my efforts in supporting the Baofeng BF-T1
radio by the flow of posts in the issue page
[https://chirp.danplanet.com/issues/4933], I decided to take that radio
as all the evidence point that may be trivial to implement, but practice
- as always - proven it otherwise.
I don't have the radio in my hands (yes I now that it will be very
difficult in this way... but I haven't a project to spend time in this
winter season ;) ) at a glance the comm protocol seemed trivial as also
the mem layout, but then the radio refused to talk back to the PC after
it entered program mode and exchange its ID and make a handshake.
Can any of you take a peek in the tread details and suggest any new
curse of action, test it or even help me in a direct way?
PS: the .spm files are made with "Eltima Serial Monitor software" and
are the most detailed source of relevant info, .pcap files are
USB<>Serial protocol capture and can be reviewed with the software
"wireshark".
--
73 CO7WT, Pavel.
1
0
Hello fellow CHIRP contributors,
I'm working on CHIRP support for the Kenwood TH-D74A, and it's turning
out to be far more difficult than I expected. The memory layout is
straightforward enough, but the serial protocol seems to have some
quirks to it. I'm pretty sure my code is having the same exchange as
the Kenwood MCP software is with the radio, but when CHIRP uploads to
the radio it glitches at page 1280 and the radio factory resets. It
also sometimes glitches at the beginning of the upload, though I
haven't been able to isolate and reproduce that yet.
Does anybody have ideas for what I might be missing here, or what I
should investigate? I'm reduced at this point to writing a tool that
replays sessions recorded using Device Monitoring Studio (and the
replay works), and then diffing it against what CHIRP is doing. Is
there some more well-trodden path for doing this sort of protocol
comparison?
https://chirp.danplanet.com/issues/4129
2
2
> A “broken” image from my FT2D. Bank 24 has entries from the immutable fixed special locations, one from each of weather, marine VHF and SW broadcast. I entered them manually into the radio.
Okay, just now getting around to looking at this. It would really help if you could be more descriptive with your reporting of this stuff, as it’s really difficult for me to follow. I haven’t looked at this code in a really long time, don’t really use any Yaesu radios (with their weird bank system) and definitely not any of the newer ones.
IIRC, I was going to use this broken image to reproduce the behavior you describe, which is that once you’ve touched a bad bank (with immutable memories in it), then the UI is unable to make any other changes.
Loading your image, I can’t really tell which affected bank or memory I should use to reproduce the issue. Trying to add memory 1 to bank 4 yields the “index out of range” error. Then trying to add memory 2 to bank 5 gives me the same. In fact, adding any memory to any bank seems to yield the same result. The UI never seems to get stuck, which I think is what you said was happening, and which I said would be a big problem.
So, can you try to again describe, with specific actions what I need to do to reproduce the issue that affects just the banks with immutable memories (or whatever it is)? Specifically “open the memory, go to banks tab, click check box on memory X for bank Y”, etc.
Thanks,
—Dan
1
0
Tested changes:
Changes for Build #712
[Jim Unroe <rock.unroe(a)gmail.com>] [RT26] Retevis RT-26 UHF Radio
This patch adds memory and settings support for the Retevis RT-26.
#5413
[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:
[...truncated 96 lines...]
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
unit runtests: commands[1] | python ./share/make_supported.py /dev/null
driver inst-nodeps: /var/lib/jenkins/jobs/chirp-test/workspace/.tox/dist/chirp-0.3.0dev.zip
driver installed: ----------------------------------------,Error when trying to get requirement for VCS system Command "git config --get-regexp remote\..*\.url" failed with error code 1 in /danplanet/users/dan/automation/donatello_events, falling back to uneditable format,Could not determine repository location of /danplanet/users/dan/automation/donatello_events,Warning: cannot find svn location for soaplib===0.8.1dev-r0,aiohttp==0.15.2,alabaster==0.7.7,aniso8601==0.92,ansible==2.2.1.0,appdirs==1.4.0,astral==1.2,astroid==1.3.4,asyncio==3.4.1,attrs==15.2.0,Babel==1.3,beautifulsoup4==4.4.1,carbon==0.9.15,CDDB==1.4,cffi==1.9.1,chardet==2.3.0,chirp==0.3.0.dev0,colorama==0.2.7,cryptography==1.7.2,Django==1.8.7,django-tagging==0.4,dnspython==1.12.0,docutils==0.12,## !! Could not determine repository location,Donatello==1.0,## !! Could not determine repository location,donatello-events==1.0,ecdsa==0.13,enum34==1.1.6,extras==0.0.3,eyeD3==0.7.4,fixtures==1.3.1,Flask==0.10.1,Flask-RESTful==0.3.1,gear==0.5.8,gearman==2.0.2,gevent==1.0.1,gevent-socketio==0.3.6,gevent-websocket==0.9.3,git-review==1.24,graphite-web==0.9.15,greenlet==0.4.5,gyp==0.1,hachoir-core==1.3.3,hachoir-metadata==1.3.3,hachoir-parser==1.3.4,html5lib==0.999,httplib2==0.9.1,idna==2.2,iniparse==0.4,iotop==0.6,ipaddr==2.1.11,ipaddress==1.0.18,iso8601==0.1.11,itsdangerous==0.24,Jinja2==2.8.1,junitxml==0.6,keyring==7.3,launchpadlib==1.10.3,lazr.restfulclient==0.13.4,lazr.uri==1.0.3,libvirt-python==1.3.1,linecache2==1.0.0,lockfile==0.9.1,logilab-common==0.63.2,lxml==3.5.0,M2Crypto==0.22.6rc4,MarkupSafe==0.23,mechanize==0.2.5,meld==3.14.2,mercurial==3.7.3,mock==1.0.1,mox==0.5.3,musicbrainzngs==0.5,mutagen==1.31,mysqlclient==1.3.7,ndg-httpsclient==0.4.0,netaddr==0.7.18,oauth==1.0.1,packaging==16.8,paho-mqtt==1.1,PAM==0.4.2,paramiko==2.1.1,pbr==1.8.1,pep8==1.6.2,phue==0.8,Pillow==3.1.2,pluggy==0.5.2,ply==3.10,prettytable==0.7.2,puredaemon==0.1.0,py==1.4.34,pyasn1==0.2.3,pyasn1-modules==0.0.7,pycparser==2.17,pycrypto==2.6.1,pycryptodome==3.4.5,pycurl==7.43.0,Pygments==2.1,pygobject==3.20.0,pylast==1.0.0,pyliblzma==0.5.3,pylint==1.4.1,pynoc==1.4.2,pyOpenSSL==0.15.1,pyparsing==2.1.10,pyrit==0.4.0,pyserial==3.0.1,pysignals==0.1.2,pysmi==0.0.7,pysnmp==4.3.4,pysqlite==2.7.0,python-apt==1.1.0b1,python-daemon==1.6,python-debian==0.1.27,python-keyczar==0.715,python-magic==0.4.6,python-mimeparse==0.1.4,python-mpd==0.3.0,python-subunit==1.1.0,pytz==2014.10,pyvera==1.0,pywemo==0.4.0,pyxdg==0.25,pyxmpp==1.1.2,PyYAML==3.12,requests==2.9.1,retrying==1.3.3,roman==2.0.0,rpm-python==4.12.0.1,scapy==2.3.1,SecretStorage==2.1.3,service-identity==16.0.0,setproctitle==1.1.8,simplejson==3.8.1,six==1.10.0,snmpy==1.0.0,## FIXME: could not find svn URL in dependency_links for this package:,soaplib===0.8.1dev-r0,Sphinx==1.3.6,sphinx-rtd-theme==0.1.9,SQLAlchemy==1.0.11,sqlparse==0.1.18,stevedore==1.10.0,termcolor==1.1.0,testrepository==0.0.20,testtools==1.8.1,tmdb3==0.7.2,tox==2.8.2,traceback2==1.4.0,tvdb-api==1.10,Twisted==12.0.0,twitter==1.16.0,txAMQP==0.6.2,unifi==1.2.5,unittest2==1.1.0,urlgrabber==3.9.1,urllib3==1.13.1,uvcclient==0.10.0,virtualenv==15.1.0,wadllib==1.3.2,Werkzeug==0.9.6,whisper==0.9.12,xmldiff==0.6.10,yum-metadata-parser==1.1.4,zope.interface==4.1.1
driver runtests: PYTHONHASHSEED='2119847612'
driver runtests: commands[0] | python -munittest -vb tests
test_banks (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A brute force ... ok
test_clone (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A clone ... ok
test_copy_all (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A copy all ... ok
test_detect (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A detect ... ok
test_edges (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A edges ... ok
test_settings (tests.TestCase_IcomICT8A)
Testing Icom IC-T8A settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 brute force ... ok
test_clone (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 clone ... ok
test_copy_all (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 copy all ... ok
test_detect (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 detect ... ok
test_edges (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 edges ... ok
test_settings (tests.TestCase_TYTTH9800)
Testing TYT TH-9800 settings ... ok
test_banks (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 brute force ... ok
test_clone (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 clone ... ok
test_copy_all (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 copy all ... ok
test_detect (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 detect ... ok
test_edges (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 edges ... ok
test_settings (tests.TestCase_KenwoodTK8102)
Testing Kenwood TK-8102 settings ... ok
test_banks (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus banks ... ok
test_brute_force (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus brute force ... ok
test_clone (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus clone ... ok
test_copy_all (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus copy all ... ok
test_detect (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus detect ... ok
test_edges (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus edges ... ok
test_settings (tests.TestCase_IcomID51Plus)
Testing Icom ID-51 Plus settings ... ok
test_banks (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M brute force ... ok
test_clone (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M clone ... ok
test_copy_all (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M copy all ... ok
test_detect (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M detect ... ok
test_edges (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M edges ... ok
test_settings (tests.TestCase_YaesuFT2800M)
Testing Yaesu FT-2800M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 brute force ... ok
test_clone (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 clone ... ok
test_copy_all (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 copy all ... ok
test_detect (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 detect ... ok
test_edges (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 edges ... ok
test_settings (tests.TestCase_BTECHUV5001)
Testing BTECH UV-5001 settings ... ok
test_banks (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 brute force ... ok
test_clone (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 clone ... ok
test_copy_all (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 copy all ... ok
test_detect (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 detect ... ok
test_edges (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 edges ... ok
test_settings (tests.TestCase_BTECHUV25X2)
Testing BTECH UV-25X2 settings ... ok
test_banks (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 brute force ... ok
test_clone (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 clone ... ok
test_copy_all (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 copy all ... ok
test_detect (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 detect ... ok
test_edges (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 edges ... ok
test_settings (tests.TestCase_TYTTHUV3R25)
Testing TYT TH-UV3R-25 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomID880H)
Testing Icom ID-880H banks ... ok
test_brute_force (tests.TestCase_IcomID880H)
Testing Icom ID-880H brute force ... ok
test_clone (tests.TestCase_IcomID880H)
Testing Icom ID-880H clone ... ok
test_copy_all (tests.TestCase_IcomID880H)
Testing Icom ID-880H copy all ... ok
test_detect (tests.TestCase_IcomID880H)
Testing Icom ID-880H detect ... ok
test_edges (tests.TestCase_IcomID880H)
Testing Icom ID-880H edges ... ok
test_settings (tests.TestCase_IcomID880H)
Testing Icom ID-880H settings ... ok
test_banks (tests.TestCase_RetevisRT26)
Testing Retevis RT26 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT26)
Testing Retevis RT26 brute force ... ok
test_clone (tests.TestCase_RetevisRT26)
Testing Retevis RT26 clone ... ok
test_copy_all (tests.TestCase_RetevisRT26)
Testing Retevis RT26 copy all ... ok
test_detect (tests.TestCase_RetevisRT26)
Testing Retevis RT26 detect ... ERROR
test_edges (tests.TestCase_RetevisRT26)
Testing Retevis RT26 edges ... ok
test_settings (tests.TestCase_RetevisRT26)
Testing Retevis RT26 settings ... ok
test_banks (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R brute force ... ok
test_clone (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R clone ... ok
test_copy_all (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R copy all ... ok
test_detect (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R detect ... ok
test_edges (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R edges ... ok
test_settings (tests.TestCase_BaofengUV6R)
Testing Baofeng UV-6R settings ... ok
test_banks (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 brute force ... ok
test_clone (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 clone ... ok
test_copy_all (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 copy all ... ok
test_detect (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 detect ... ok
test_edges (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 edges ... ok
test_settings (tests.TestCase_WouxunKGUV6)
Testing Wouxun KG-UV6 settings ... ok
test_banks (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R brute force ... ok
test_clone (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R clone ... ok
test_copy_all (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R copy all ... ok
test_detect (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R detect ... ok
test_edges (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R edges ... ok
test_settings (tests.TestCase_PuxingPX2R)
Testing Puxing PX-2R settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND brute force ... ok
test_clone (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND clone ... ok
test_copy_all (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND copy all ... ok
test_detect (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND detect ... ok
test_edges (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND edges ... ok
test_settings (tests.TestCase_YaesuFT817ND)
Testing Yaesu FT-817ND settings ... ok
test_banks (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H banks ... ok
test_brute_force (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H brute force ... ok
test_clone (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H clone ... ok
test_copy_all (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H copy all ... ok
test_detect (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H detect ... ok
test_edges (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H edges ... ok
test_settings (tests.TestCase_IcomIC2820H)
Testing Icom IC-2820H settings ... ok
test_banks (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M brute force ... ok
test_clone (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M clone ... ok
test_copy_all (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M copy all ... ok
test_detect (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M detect ... ok
test_edges (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M edges ... ok
test_settings (tests.TestCase_JetstreamJT220M)
Testing Jetstream JT220M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 brute force ... ok
test_clone (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 clone ... ok
test_copy_all (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 copy all ... ok
test_detect (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 detect ... ok
test_edges (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 edges ... ok
test_settings (tests.TestCase_AlincoDJ596)
Testing Alinco DJ596 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH brute force ... ok
test_clone (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH clone ... ok
test_copy_all (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH copy all ... ok
test_detect (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH detect ... ok
test_edges (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH edges ... ok
test_settings (tests.TestCase_JetstreamJT270MH)
Testing Jetstream JT270MH settings ... ok
test_banks (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 brute force ... ok
test_clone (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 clone ... ok
test_copy_all (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 copy all ... ok
test_detect (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 detect ... ok
test_edges (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 edges ... ok
test_settings (tests.TestCase_BTECHUV2501220)
Testing BTECH UV-2501+220 settings ... ok
test_banks (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 brute force ... ok
test_clone (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 clone ... ok
test_copy_all (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 copy all ... ok
test_detect (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 detect ... ok
test_edges (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 edges ... ok
test_settings (tests.TestCase_BTECHUV50X2)
Testing BTECH UV-50X2 settings ... ok
test_banks (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H brute force ... ok
test_clone (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H clone ... ok
test_copy_all (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H copy all ... ok
test_detect (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H detect ... ok
test_edges (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H edges ... ok
test_settings (tests.TestCase_IcomICT7H)
Testing Icom IC-T7H settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 brute force ... ok
test_clone (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 clone ... ok
test_copy_all (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 copy all ... ok
test_detect (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 detect ... ok
test_edges (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 edges ... ok
test_settings (tests.TestCase_BaojieBJ9900)
Testing Baojie BJ-9900 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H banks ... ok
test_brute_force (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H brute force ... ok
test_clone (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H clone ... ok
test_copy_all (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H copy all ... ok
test_detect (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H detect ... ok
test_edges (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H edges ... ok
test_settings (tests.TestCase_IcomIC2300H)
Testing Icom IC-2300H settings ... ok
test_banks (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 banks ... ok
test_brute_force (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 brute force ... ok
test_clone (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 clone ... ok
test_copy_all (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 copy all ... ok
test_detect (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 detect ... ok
test_edges (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 edges ... ok
test_settings (tests.TestCase_YaesuVX7)
Testing Yaesu VX-7 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A brute force ... ok
test_clone (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A clone ... ok
test_copy_all (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A copy all ... ok
test_detect (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A detect ... ok
test_edges (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A edges ... ok
test_settings (tests.TestCase_TDXoneTDQ8A)
Testing TDXone TD-Q8A settings ... ok
test_banks (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 brute force ... ok
test_clone (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 clone ... ok
test_copy_all (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 copy all ... ok
test_detect (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 detect ... ok
test_edges (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 edges ... ok
test_settings (tests.TestCase_WouxunKG818)
Testing Wouxun KG-818 settings ... ok
test_banks (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 brute force ... ok
test_clone (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 clone ... ok
test_copy_all (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 copy all ... ok
test_detect (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 detect ... ok
test_edges (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 edges ... ok
test_settings (tests.TestCase_WACCOMMINI8900)
Testing WACCOM MINI-8900 settings ... ok
test_banks (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R brute force ... ok
test_clone (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R clone ... ok
test_copy_all (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R copy all ... ok
test_detect (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R detect ... ok
test_edges (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R edges ... ok
test_settings (tests.TestCase_BaofengUV3R)
Testing Baofeng UV-3R settings ... ok
test_banks (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R brute force ... ok
test_clone (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R clone ... ok
test_copy_all (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R copy all ... ok
test_detect (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R detect ... ok
test_edges (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R edges ... ok
test_settings (tests.TestCase_AnyToneTERMN8R)
Testing AnyTone TERMN-8R settings ... ok
test_banks (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 brute force ... ok
test_clone (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 clone ... ok
test_copy_all (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 copy all ... ok
test_detect (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 detect ... ok
test_edges (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 edges ... ok
test_settings (tests.TestCase_YaesuFT50)
Testing Yaesu FT-50 settings ... ok
test_banks (tests.TestCase_IcomICP7)
Testing Icom IC-P7 banks ... ok
test_brute_force (tests.TestCase_IcomICP7)
Testing Icom IC-P7 brute force ... ok
test_clone (tests.TestCase_IcomICP7)
Testing Icom IC-P7 clone ... ok
test_copy_all (tests.TestCase_IcomICP7)
Testing Icom IC-P7 copy all ... ok
test_detect (tests.TestCase_IcomICP7)
Testing Icom IC-P7 detect ... ok
test_edges (tests.TestCase_IcomICP7)
Testing Icom IC-P7 edges ... ok
test_settings (tests.TestCase_IcomICP7)
Testing Icom IC-P7 settings ... ok
test_banks (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E brute force ... ok
test_clone (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E clone ... ok
test_copy_all (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E copy all ... ok
test_detect (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E detect ... ok
test_edges (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E edges ... ok
test_settings (tests.TestCase_IcomICW32E)
Testing Icom IC-W32E settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M brute force ... ok
test_clone (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M clone ... ok
test_copy_all (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M copy all ... ok
test_detect (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M detect ... ok
test_edges (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M edges ... ok
test_settings (tests.TestCase_JetstreamJT270M)
Testing Jetstream JT270M settings ... ok
test_banks (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 brute force ... ok
test_clone (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 clone ... ok
test_copy_all (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 copy all ... ok
test_detect (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 detect ... ok
test_edges (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 edges ... ok
test_settings (tests.TestCase_YaesuFT8900)
Testing Yaesu FT-8900 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 brute force ... ok
test_clone (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 clone ... ok
test_copy_all (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 copy all ... ok
test_detect (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 detect ... ok
test_edges (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 edges ... ok
test_settings (tests.TestCase_TYTTH9000144)
Testing TYT TH9000_144 settings ... ok
test_banks (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 brute force ... ok
test_clone (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 clone ... ok
test_copy_all (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 copy all ... ok
test_detect (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 detect ... ok
test_edges (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 edges ... ok
test_settings (tests.TestCase_TYTTHUVF1)
Testing TYT TH-UVF1 settings ... ok
test_banks (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D banks ... ok
test_brute_force (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D brute force ... ok
test_clone (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D clone ... ok
test_copy_all (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D copy all ... ok
test_detect (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D detect ... ok
test_edges (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D edges ... ok
test_settings (tests.TestCase_YaesuFT2D)
Testing Yaesu FT2D settings ... ok
test_banks (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) brute force ... ok
test_clone (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) clone ... ok
test_copy_all (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) copy all ... ok
test_detect (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) detect ... ok
test_edges (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) edges ... ok
test_settings (tests.TestCase_YaesuFT857897US)
Testing Yaesu FT-857/897 (US) settings ... ok
test_banks (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D brute force ... ok
test_clone (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D clone ... ok
test_copy_all (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D copy all ... ok
test_detect (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D detect ... ok
test_edges (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D edges ... ok
test_settings (tests.TestCase_YaesuFTM3200D)
Testing Yaesu FTM-3200D settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 banks ... ok
test_brute_force (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 brute force ... ok
test_clone (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 clone ... ok
test_copy_all (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 copy all ... ok
test_detect (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 detect ... ok
test_edges (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 edges ... ok
test_settings (tests.TestCase_YaesuFT60)
Testing Yaesu FT-60 settings ... ok
test_banks (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H brute force ... ok
test_clone (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H clone ... ok
test_copy_all (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H copy all ... ok
test_detect (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H detect ... ok
test_edges (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H edges ... ok
test_settings (tests.TestCase_IcomIC2100H)
Testing Icom IC-2100H settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 brute force ... ok
test_clone (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 clone ... ok
test_copy_all (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 copy all ... ok
test_detect (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 detect ... ok
test_edges (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 edges ... ok
test_settings (tests.TestCase_YaesuFTM350)
Testing Yaesu FTM-350 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 brute force ... ok
test_clone (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 clone ... ok
test_copy_all (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 copy all ... ok
test_detect (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 detect ... ok
test_edges (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 edges ... ok
test_settings (tests.TestCase_LeixenVV898)
Testing Leixen VV-898 settings ... ok
test_banks (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D brute force ... ok
test_clone (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D clone ... ok
test_copy_all (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D copy all ... ok
test_detect (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D detect ... ok
test_edges (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D edges ... ok
test_settings (tests.TestCase_QYTKT7900D)
Testing QYT KT7900D settings ... ok
test_banks (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P brute force ... ok
test_clone (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P clone ... ok
test_copy_all (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P copy all ... ok
test_detect (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P detect ... ok
test_edges (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P edges ... ok
test_settings (tests.TestCase_WouxunKGUVD1P)
Testing Wouxun KG-UVD1P settings ... ok
test_banks (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 banks ... ok
test_brute_force (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 brute force ... ok
test_clone (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 clone ... ok
test_copy_all (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 copy all ... ok
test_detect (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 detect ... ok
test_edges (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 edges ... ok
test_settings (tests.TestCase_IcomICV82U82)
Testing Icom IC-V82/U82 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A brute force ... ok
test_clone (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A clone ... ok
test_copy_all (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A copy all ... ok
test_detect (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A detect ... ok
test_edges (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A edges ... ok
test_settings (tests.TestCase_IcomICW32A)
Testing Icom IC-W32A settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 banks ... ok
test_brute_force (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 brute force ... ok
test_clone (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 clone ... ok
test_copy_all (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 copy all ... ok
test_detect (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 detect ... ok
test_edges (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 edges ... ok
test_settings (tests.TestCase_YaesuVX3)
Testing Yaesu VX-3 settings ... ok
test_banks (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B brute force ... ok
test_clone (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B clone ... ok
test_copy_all (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B copy all ... ok
test_detect (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B detect ... ok
test_edges (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B edges ... ok
test_settings (tests.TestCase_FeidaxinFD268B)
Testing Feidaxin FD-268B settings ... ok
test_banks (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R brute force ... ok
test_clone (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R clone ... ok
test_copy_all (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R copy all ... ok
test_detect (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R detect ... ok
test_edges (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R edges ... ok
test_settings (tests.TestCase_BaofengUV5R)
Testing Baofeng UV-5R settings ... ok
test_banks (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 brute force ... ok
test_clone (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 clone ... ok
test_copy_all (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 copy all ... ok
test_detect (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 detect ... ok
test_edges (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 edges ... ok
test_settings (tests.TestCase_BaofengUVB5)
Testing Baofeng UV-B5 settings ... ok
test_banks (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 brute force ... ok
test_clone (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 clone ... ok
test_copy_all (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 copy all ... ok
test_detect (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 detect ... ok
test_edges (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 edges ... ok
test_settings (tests.TestCase_BaofengBF888)
Testing Baofeng BF-888 settings ... ok
test_banks (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV brute force ... ok
test_clone (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV clone ... ok
test_copy_all (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV copy all ... ok
test_detect (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV detect ... ok
test_edges (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV edges ... ok
test_settings (tests.TestCase_LUITONLT725UV)
Testing LUITON LT-725UV settings ... ok
test_banks (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 brute force ... ok
test_clone (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 clone ... ok
test_copy_all (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 copy all ... ok
test_detect (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 detect ... ok
test_edges (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 edges ... ok
test_settings (tests.TestCase_YaesuFT817)
Testing Yaesu FT-817 settings ... ok
test_banks (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M brute force ... ok
test_clone (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M clone ... ok
test_copy_all (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M copy all ... ok
test_detect (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M detect ... ok
test_edges (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M edges ... ok
test_settings (tests.TestCase_PolmarDB50M)
Testing Polmar DB-50M settings ... ok
test_banks (tests.TestCase_KYDNC630A)
Testing KYD NC-630A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KYDNC630A)
Testing KYD NC-630A brute force ... ok
test_clone (tests.TestCase_KYDNC630A)
Testing KYD NC-630A clone ... ok
test_copy_all (tests.TestCase_KYDNC630A)
Testing KYD NC-630A copy all ... ok
test_detect (tests.TestCase_KYDNC630A)
Testing KYD NC-630A detect ... ok
test_edges (tests.TestCase_KYDNC630A)
Testing KYD NC-630A edges ... ok
test_settings (tests.TestCase_KYDNC630A)
Testing KYD NC-630A settings ... ok
test_banks (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 brute force ... ok
test_clone (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 clone ... ok
test_copy_all (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 copy all ... ok
test_detect (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 detect ... ok
test_edges (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 edges ... ok
test_settings (tests.TestCase_BTECHUV5X3)
Testing BTECH UV-5X3 settings ... ok
test_banks (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 brute force ... ok
test_clone (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 clone ... ok
test_copy_all (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 copy all ... ok
test_detect (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 detect ... ok
test_edges (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 edges ... ok
test_settings (tests.TestCase_BTECHUV50X3)
Testing BTECH UV-50X3 settings ... ok
test_banks (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 brute force ... ok
test_clone (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 clone ... ok
test_copy_all (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 copy all ... ok
test_detect (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 detect ... ok
test_edges (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 edges ... ok
test_settings (tests.TestCase_VertexStandardVXA700)
Testing Vertex Standard VXA-700 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M brute force ... ok
test_clone (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M clone ... ok
test_copy_all (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M copy all ... ok
test_detect (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M detect ... ok
test_edges (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M edges ... ok
test_settings (tests.TestCase_YaesuFT1802M)
Testing Yaesu FT-1802M settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H banks ... ok
test_brute_force (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H brute force ... ok
test_clone (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H clone ... ok
test_copy_all (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H copy all ... ok
test_detect (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H detect ... ok
test_edges (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H edges ... ok
test_settings (tests.TestCase_IcomIC2720H)
Testing Icom IC-2720H settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 brute force ... ok
test_clone (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 clone ... ok
test_copy_all (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 copy all ... ok
test_detect (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 detect ... ok
test_edges (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 edges ... ok
test_settings (tests.TestCase_BTECHUV25X4)
Testing BTECH UV-25X4 settings ... ok
test_banks (tests.TestCase_IcomID51)
Testing Icom ID-51 banks ... ok
test_brute_force (tests.TestCase_IcomID51)
Testing Icom ID-51 brute force ... ok
test_clone (tests.TestCase_IcomID51)
Testing Icom ID-51 clone ... ok
test_copy_all (tests.TestCase_IcomID51)
Testing Icom ID-51 copy all ... ok
test_detect (tests.TestCase_IcomID51)
Testing Icom ID-51 detect ... ok
test_edges (tests.TestCase_IcomID51)
Testing Icom ID-51 edges ... ok
test_settings (tests.TestCase_IcomID51)
Testing Icom ID-51 settings ... ok
test_banks (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) brute force ... ok
test_clone (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) clone ... ok
test_copy_all (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) copy all ... ok
test_detect (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) detect ... ok
test_edges (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) edges ... ok
test_settings (tests.TestCase_KenwoodTHD72clonemode)
Testing Kenwood TH-D72 (clone mode) settings ... ok
test_banks (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR banks ... ok
test_brute_force (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR brute force ... ok
test_clone (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR clone ... ok
test_copy_all (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR copy all ... ok
test_detect (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR detect ... ok
test_edges (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR edges ... ok
test_settings (tests.TestCase_YaesuVX8DR)
Testing Yaesu VX-8DR settings ... ok
test_banks (tests.TestCase_RadtelT18)
Testing Radtel T18 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RadtelT18)
Testing Radtel T18 brute force ... ok
test_clone (tests.TestCase_RadtelT18)
Testing Radtel T18 clone ... ok
test_copy_all (tests.TestCase_RadtelT18)
Testing Radtel T18 copy all ... ok
test_detect (tests.TestCase_RadtelT18)
Testing Radtel T18 detect ... ok
test_edges (tests.TestCase_RadtelT18)
Testing Radtel T18 edges ... ok
test_settings (tests.TestCase_RadtelT18)
Testing Radtel T18 settings ... ok
test_banks (tests.TestCase_BaofengF11)
Testing Baofeng F-11 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BaofengF11)
Testing Baofeng F-11 brute force ... ok
test_clone (tests.TestCase_BaofengF11)
Testing Baofeng F-11 clone ... ok
test_copy_all (tests.TestCase_BaofengF11)
Testing Baofeng F-11 copy all ... ok
test_detect (tests.TestCase_BaofengF11)
Testing Baofeng F-11 detect ... ok
test_edges (tests.TestCase_BaofengF11)
Testing Baofeng F-11 edges ... ok
test_settings (tests.TestCase_BaofengF11)
Testing Baofeng F-11 settings ... ok
test_banks (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A brute force ... ok
test_clone (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A clone ... ok
test_copy_all (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A copy all ... ok
test_detect (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A detect ... ok
test_edges (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A edges ... ok
test_settings (tests.TestCase_FeidaxinFD268A)
Testing Feidaxin FD-268A settings ... ok
test_banks (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 brute force ... ok
test_clone (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 clone ... ok
test_copy_all (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 copy all ... ok
test_detect (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 detect ... ok
test_edges (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 edges ... ok
test_settings (tests.TestCase_AlincoDJ175)
Testing Alinco DJ175 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 brute force ... ok
test_clone (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 clone ... ok
test_copy_all (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 copy all ... ok
test_detect (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 detect ... ok
test_edges (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 edges ... ok
test_settings (tests.TestCase_BTECHGMRSV1)
Testing BTECH GMRS-V1 settings ... ok
test_banks (tests.TestCase_RetevisRT22)
Testing Retevis RT22 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT22)
Testing Retevis RT22 brute force ... ok
test_clone (tests.TestCase_RetevisRT22)
Testing Retevis RT22 clone ... ok
test_copy_all (tests.TestCase_RetevisRT22)
Testing Retevis RT22 copy all ... ok
test_detect (tests.TestCase_RetevisRT22)
Testing Retevis RT22 detect ... ok
test_edges (tests.TestCase_RetevisRT22)
Testing Retevis RT22 edges ... ok
test_settings (tests.TestCase_RetevisRT22)
Testing Retevis RT22 settings ... ok
test_banks (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R banks ... ok
test_brute_force (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R brute force ... ok
test_clone (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R clone ... ok
test_copy_all (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R copy all ... ok
test_detect (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R detect ... ok
test_edges (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R edges ... ok
test_settings (tests.TestCase_YaesuVX8R)
Testing Yaesu VX-8R settings ... ok
test_banks (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG brute force ... ok
test_clone (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG clone ... ok
test_copy_all (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG copy all ... ok
test_detect (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG detect ... ok
test_edges (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG edges ... ok
test_settings (tests.TestCase_AlincoDJG7EG)
Testing Alinco DJ-G7EG settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S brute force ... ok
test_clone (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S clone ... ok
test_copy_all (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S copy all ... ok
test_detect (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S detect ... ok
test_edges (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S edges ... ok
test_settings (tests.TestCase_LeixenVV898S)
Testing Leixen VV-898S settings ... ok
test_banks (tests.TestCase_KYDIP620)
Testing KYD IP-620 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KYDIP620)
Testing KYD IP-620 brute force ... ok
test_clone (tests.TestCase_KYDIP620)
Testing KYD IP-620 clone ... ok
test_copy_all (tests.TestCase_KYDIP620)
Testing KYD IP-620 copy all ... ok
test_detect (tests.TestCase_KYDIP620)
Testing KYD IP-620 detect ... ok
test_edges (tests.TestCase_KYDIP620)
Testing KYD IP-620 edges ... ok
test_settings (tests.TestCase_KYDIP620)
Testing KYD IP-620 settings ... ok
test_banks (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 banks ... ok
test_brute_force (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 brute force ... ok
test_clone (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 clone ... ok
test_copy_all (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 copy all ... ok
test_detect (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 detect ... ok
test_edges (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 edges ... ok
test_settings (tests.TestCase_YaesuFT78007900)
Testing Yaesu FT-7800/7900 settings ... ok
test_banks (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 banks ... ok
test_brute_force (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 brute force ... ok
test_clone (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 clone ... ok
test_copy_all (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 copy all ... ok
test_detect (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 detect ... ok
test_edges (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 edges ... ok
test_settings (tests.TestCase_YaesuVX2)
Testing Yaesu VX-2 settings ... ok
test_banks (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus brute force ... ok
test_clone (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus clone ... ok
test_copy_all (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus copy all ... ok
test_detect (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus detect ... ok
test_edges (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus edges ... ok
test_settings (tests.TestCase_WouxunKGUV8DPlus)
Testing Wouxun KG-UV8D Plus settings ... ok
test_banks (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D brute force ... ok
test_clone (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D clone ... ok
test_copy_all (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D copy all ... ok
test_detect (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D detect ... ok
test_edges (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D edges ... ok
test_settings (tests.TestCase_WouxunKGUV8D)
Testing Wouxun KG-UV8D settings ... ok
test_banks (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G banks ... ok
test_brute_force (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G brute force ... ok
test_clone (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G clone ... ok
test_copy_all (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G copy all ... ok
test_detect (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G detect ... ok
test_edges (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G edges ... ok
test_settings (tests.TestCase_KenwoodTK272G)
Testing Kenwood TK-272G settings ... ok
test_banks (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D brute force ... ok
test_clone (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D clone ... ok
test_copy_all (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D copy all ... ok
test_detect (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D detect ... ok
test_edges (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D edges ... ok
test_settings (tests.TestCase_QYTKT8900D)
Testing QYT KT8900D settings ... ok
test_banks (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G banks ... ok
test_brute_force (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G brute force ... ok
test_clone (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G clone ... ok
test_copy_all (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G copy all ... ok
test_detect (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G detect ... ok
test_edges (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G edges ... ok
test_settings (tests.TestCase_KenwoodTK760G)
Testing Kenwood TK-760G settings ... ok
test_banks (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 banks ... ok
test_brute_force (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 brute force ... ok
test_clone (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 clone ... ok
test_copy_all (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 copy all ... ok
test_detect (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 detect ... ok
test_edges (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 edges ... ok
test_settings (tests.TestCase_YaesuVX6)
Testing Yaesu VX-6 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomIC208H)
Testing Icom IC-208H banks ... ok
test_brute_force (tests.TestCase_IcomIC208H)
Testing Icom IC-208H brute force ... ok
test_clone (tests.TestCase_IcomIC208H)
Testing Icom IC-208H clone ... ok
test_copy_all (tests.TestCase_IcomIC208H)
Testing Icom IC-208H copy all ... ok
test_detect (tests.TestCase_IcomIC208H)
Testing Icom IC-208H detect ... ok
test_edges (tests.TestCase_IcomIC208H)
Testing Icom IC-208H edges ... ok
test_settings (tests.TestCase_IcomIC208H)
Testing Icom IC-208H settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomID31A)
Testing Icom ID-31A banks ... ok
test_brute_force (tests.TestCase_IcomID31A)
Testing Icom ID-31A brute force ... ok
test_clone (tests.TestCase_IcomID31A)
Testing Icom ID-31A clone ... ok
test_copy_all (tests.TestCase_IcomID31A)
Testing Icom ID-31A copy all ... ok
test_detect (tests.TestCase_IcomID31A)
Testing Icom ID-31A detect ... ok
test_edges (tests.TestCase_IcomID31A)
Testing Icom ID-31A edges ... ok
test_settings (tests.TestCase_IcomID31A)
Testing Icom ID-31A settings ... ok
test_banks (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 brute force ... ok
test_clone (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 clone ... ok
test_copy_all (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 copy all ... ok
test_detect (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 detect ... ok
test_edges (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 edges ... ok
test_settings (tests.TestCase_TYTTH7800)
Testing TYT TH-7800 settings ... ok
test_banks (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H banks ... ok
test_brute_force (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H brute force ... ok
test_clone (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H clone ... ok
test_copy_all (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H copy all ... ok
test_detect (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H detect ... ok
test_edges (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H edges ... ok
test_settings (tests.TestCase_IcomIC2200H)
Testing Icom IC-2200H settings ... ok
test_banks (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K brute force ... ok
test_clone (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K clone ... ok
test_copy_all (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K copy all ... ok
test_detect (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K detect ... ok
test_edges (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K edges ... ok
test_settings (tests.TestCase_PuxingPX888K)
Testing Puxing PX-888K settings ... ok
test_banks (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 brute force ... ok
test_clone (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 clone ... ok
test_copy_all (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 copy all ... ok
test_detect (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 detect ... ok
test_edges (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 edges ... ok
test_settings (tests.TestCase_YaesuFT857897)
Testing Yaesu FT-857/897 settings ... ok
test_banks (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R brute force ... ok
test_clone (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R clone ... ok
test_copy_all (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R copy all ... ok
test_detect (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R detect ... ok
test_edges (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R edges ... ok
test_settings (tests.TestCase_AnyToneOBLTR8R)
Testing AnyTone OBLTR-8R settings ... ok
test_banks (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 brute force ... ok
test_clone (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 clone ... ok
test_copy_all (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 copy all ... ok
test_detect (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 detect ... ok
test_edges (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 edges ... ok
test_settings (tests.TestCase_WouxunKG816)
Testing Wouxun KG-816 settings ... ok
test_banks (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 banks ... ok
test_brute_force (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 brute force ... ok
test_clone (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 clone ... ok
test_copy_all (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 copy all ... ok
test_detect (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 detect ... ok
test_edges (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 edges ... ok
test_settings (tests.TestCase_YaesuFT8800)
Testing Yaesu FT-8800 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A brute force ... ok
test_clone (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A clone ... ok
test_copy_all (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A copy all ... ok
test_detect (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A detect ... ok
test_edges (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A edges ... ok
test_settings (tests.TestCase_IcomICQ7A)
Testing Icom IC-Q7A settings ... ok
test_banks (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE banks ... ok
test_brute_force (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE brute force ... ok
test_clone (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE clone ... ok
test_copy_all (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE copy all ... ok
test_detect (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE detect ... ok
test_edges (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE edges ... ok
test_settings (tests.TestCase_YaesuVX8GE)
Testing Yaesu VX-8GE settings ... ok
test_banks (tests.TestCase_IcomICT70)
Testing Icom IC-T70 banks ... ok
test_brute_force (tests.TestCase_IcomICT70)
Testing Icom IC-T70 brute force ... ok
test_clone (tests.TestCase_IcomICT70)
Testing Icom IC-T70 clone ... ok
test_copy_all (tests.TestCase_IcomICT70)
Testing Icom IC-T70 copy all ... ok
test_detect (tests.TestCase_IcomICT70)
Testing Icom IC-T70 detect ... ok
test_edges (tests.TestCase_IcomICT70)
Testing Icom IC-T70 edges ... ok
test_settings (tests.TestCase_IcomICT70)
Testing Icom IC-T70 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R brute force ... ok
test_clone (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R clone ... ok
test_copy_all (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R copy all ... ok
test_detect (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R detect ... ok
test_edges (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R edges ... ok
test_settings (tests.TestCase_TYTTHUV3R)
Testing TYT TH-UV3R settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D banks ... ok
test_brute_force (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D brute force ... ok
test_clone (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D clone ... ok
test_copy_all (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D copy all ... ok
test_detect (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D detect ... ok
test_edges (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D edges ... ok
test_settings (tests.TestCase_YaesuFT1D)
Testing Yaesu FT-1D settings ... ok
test_banks (tests.TestCase_RetevisRT23)
Testing Retevis RT23 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT23)
Testing Retevis RT23 brute force ... ok
test_clone (tests.TestCase_RetevisRT23)
Testing Retevis RT23 clone ... ok
test_copy_all (tests.TestCase_RetevisRT23)
Testing Retevis RT23 copy all ... ok
test_detect (tests.TestCase_RetevisRT23)
Testing Retevis RT23 detect ... ok
test_edges (tests.TestCase_RetevisRT23)
Testing Retevis RT23 edges ... ok
test_settings (tests.TestCase_RetevisRT23)
Testing Retevis RT23 settings ... ok
test_banks (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 brute force ... ok
test_clone (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 clone ... ok
test_copy_all (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 copy all ... ok
test_detect (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 detect ... ok
test_edges (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 edges ... ok
test_settings (tests.TestCase_PuxingPX777)
Testing Puxing PX-777 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_IcomID800H)
Testing Icom ID-800H banks ... ok
test_brute_force (tests.TestCase_IcomID800H)
Testing Icom ID-800H brute force ... ok
test_clone (tests.TestCase_IcomID800H)
Testing Icom ID-800H clone ... ok
test_copy_all (tests.TestCase_IcomID800H)
Testing Icom ID-800H copy all ... ok
test_detect (tests.TestCase_IcomID800H)
Testing Icom ID-800H detect ... ok
test_edges (tests.TestCase_IcomID800H)
Testing Icom ID-800H edges ... ok
test_settings (tests.TestCase_IcomID800H)
Testing Icom ID-800H settings ... ok
test_banks (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T brute force ... ok
test_clone (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T clone ... ok
test_copy_all (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T copy all ... ok
test_detect (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T detect ... ok
test_edges (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T edges ... ok
test_settings (tests.TestCase_AlincoDR235T)
Testing Alinco DR235T settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 banks ... ok
test_brute_force (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 brute force ... ok
test_clone (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 clone ... ok
test_copy_all (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 copy all ... ok
test_detect (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 detect ... ok
test_edges (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 edges ... ok
test_settings (tests.TestCase_YaesuVX5)
Testing Yaesu VX-5 settings ... skipped 'Settings not supported'
test_banks (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B brute force ... ok
test_clone (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B clone ... ok
test_copy_all (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B copy all ... ok
test_detect (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B detect ... ok
test_edges (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B edges ... ok
test_settings (tests.TestCase_FeidaxinFD288B)
Testing Feidaxin FD-288B settings ... ok
test_banks (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R banks ... ok
test_brute_force (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R brute force ... ok
test_clone (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R clone ... ok
test_copy_all (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R copy all ... ok
test_detect (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R detect ... ok
test_edges (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R edges ... ok
test_settings (tests.TestCase_YaesuFT2900R1900R)
Testing Yaesu FT-2900R/1900R settings ... ok
test_banks (tests.TestCase_RetevisRT21)
Testing Retevis RT21 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RetevisRT21)
Testing Retevis RT21 brute force ... ok
test_clone (tests.TestCase_RetevisRT21)
Testing Retevis RT21 clone ... ok
test_copy_all (tests.TestCase_RetevisRT21)
Testing Retevis RT21 copy all ... ok
test_detect (tests.TestCase_RetevisRT21)
Testing Retevis RT21 detect ... ok
test_edges (tests.TestCase_RetevisRT21)
Testing Retevis RT21 edges ... ok
test_settings (tests.TestCase_RetevisRT21)
Testing Retevis RT21 settings ... ok
test_banks (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) brute force ... ok
test_clone (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) clone ... ok
test_copy_all (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) copy all ... ok
test_detect (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) detect ... ok
test_edges (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) edges ... ok
test_settings (tests.TestCase_YaesuFT817NDUS)
Testing Yaesu FT-817ND (US) settings ... ok
======================================================================
ERROR: test_detect (tests.TestCase_RetevisRT26)
Testing Retevis RT26 detect
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/__init__.py", line 62, in test_detect
self._runtest(run_tests.TestCaseDetect)
File "tests/__init__.py", line 40, in _runtest
testcase.run()
File "tests/run_tests.py", line 814, in run
(self._wrapper._dstclass, radio.__class__))
TestFailedError: <class 'chirp.drivers.retevis_rt26.RT26Radio'> detected as <class 'chirp.drivers.retevis_rt21.RT21Radio'>
----------------------------------------------------------------------
Ran 742 tests in 169.832s
FAILED (errors=1, skipped=106)
ERROR: InvocationError: '/var/lib/jenkins/jobs/chirp-test/workspace/.tox/driver/bin/python -munittest -vb tests'
style inst-nodeps: /var/lib/jenkins/jobs/chirp-test/workspace/.tox/dist/chirp-0.3.0dev.zip
style installed: ----------------------------------------,Error when trying to get requirement for VCS system Command "git config --get-regexp remote\..*\.url" failed with error code 1 in /danplanet/users/dan/automation/donatello_events, falling back to uneditable format,Could not determine repository location of /danplanet/users/dan/automation/donatello_events,Warning: cannot find svn location for soaplib===0.8.1dev-r0,aiohttp==0.15.2,alabaster==0.7.7,aniso8601==0.92,ansible==2.2.1.0,appdirs==1.4.0,astral==1.2,astroid==1.3.4,asyncio==3.4.1,attrs==15.2.0,Babel==1.3,beautifulsoup4==4.4.1,carbon==0.9.15,CDDB==1.4,cffi==1.9.1,chardet==2.3.0,chirp==0.3.0.dev0,colorama==0.2.7,cryptography==1.7.2,Django==1.8.7,django-tagging==0.4,dnspython==1.12.0,docutils==0.12,## !! Could not determine repository location,Donatello==1.0,## !! Could not determine repository location,donatello-events==1.0,ecdsa==0.13,enum34==1.1.6,extras==0.0.3,eyeD3==0.7.4,fixtures==1.3.1,Flask==0.10.1,Flask-RESTful==0.3.1,gear==0.5.8,gearman==2.0.2,gevent==1.0.1,gevent-socketio==0.3.6,gevent-websocket==0.9.3,git-review==1.24,graphite-web==0.9.15,greenlet==0.4.5,gyp==0.1,hachoir-core==1.3.3,hachoir-metadata==1.3.3,hachoir-parser==1.3.4,html5lib==0.999,httplib2==0.9.1,idna==2.2,iniparse==0.4,iotop==0.6,ipaddr==2.1.11,ipaddress==1.0.18,iso8601==0.1.11,itsdangerous==0.24,Jinja2==2.8.1,junitxml==0.6,keyring==7.3,launchpadlib==1.10.3,lazr.restfulclient==0.13.4,lazr.uri==1.0.3,libvirt-python==1.3.1,linecache2==1.0.0,lockfile==0.9.1,logilab-common==0.63.2,lxml==3.5.0,M2Crypto==0.22.6rc4,MarkupSafe==0.23,mechanize==0.2.5,meld==3.14.2,mercurial==3.7.3,mock==1.0.1,mox==0.5.3,musicbrainzngs==0.5,mutagen==1.31,mysqlclient==1.3.7,ndg-httpsclient==0.4.0,netaddr==0.7.18,oauth==1.0.1,packaging==16.8,paho-mqtt==1.1,PAM==0.4.2,paramiko==2.1.1,pbr==1.8.1,pep8==1.6.2,phue==0.8,Pillow==3.1.2,pluggy==0.5.2,ply==3.10,prettytable==0.7.2,puredaemon==0.1.0,py==1.4.34,pyasn1==0.2.3,pyasn1-modules==0.0.7,pycparser==2.17,pycrypto==2.6.1,pycryptodome==3.4.5,pycurl==7.43.0,Pygments==2.1,pygobject==3.20.0,pylast==1.0.0,pyliblzma==0.5.3,pylint==1.4.1,pynoc==1.4.2,pyOpenSSL==0.15.1,pyparsing==2.1.10,pyrit==0.4.0,pyserial==3.0.1,pysignals==0.1.2,pysmi==0.0.7,pysnmp==4.3.4,pysqlite==2.7.0,python-apt==1.1.0b1,python-daemon==1.6,python-debian==0.1.27,python-keyczar==0.715,python-magic==0.4.6,python-mimeparse==0.1.4,python-mpd==0.3.0,python-subunit==1.1.0,pytz==2014.10,pyvera==1.0,pywemo==0.4.0,pyxdg==0.25,pyxmpp==1.1.2,PyYAML==3.12,requests==2.9.1,retrying==1.3.3,roman==2.0.0,rpm-python==4.12.0.1,scapy==2.3.1,SecretStorage==2.1.3,service-identity==16.0.0,setproctitle==1.1.8,simplejson==3.8.1,six==1.10.0,snmpy==1.0.0,## FIXME: could not find svn URL in dependency_links for this package:,soaplib===0.8.1dev-r0,Sphinx==1.3.6,sphinx-rtd-theme==0.1.9,SQLAlchemy==1.0.11,sqlparse==0.1.18,stevedore==1.10.0,termcolor==1.1.0,testrepository==0.0.20,testtools==1.8.1,tmdb3==0.7.2,tox==2.8.2,traceback2==1.4.0,tvdb-api==1.10,Twisted==12.0.0,twitter==1.16.0,txAMQP==0.6.2,unifi==1.2.5,unittest2==1.1.0,urlgrabber==3.9.1,urllib3==1.13.1,uvcclient==0.10.0,virtualenv==15.1.0,wadllib==1.3.2,Werkzeug==0.9.6,whisper==0.9.12,xmldiff==0.6.10,yum-metadata-parser==1.1.4,zope.interface==4.1.1
style runtests: PYTHONHASHSEED='2119847612'
style runtests: commands[0] | python ./tools/cpep8.py
___________________________________ summary ____________________________________
unit: commands succeeded
ERROR: driver: commands failed
style: commands succeeded
Build step 'Execute shell' marked build as failure
Email was triggered for: Failure
Sending email for trigger: Failure
3
7
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1512343051 18000
# Node ID 15510909d882976b16985438796d6a8b7ab0b61e
# Parent 4d0380ebabaf418fdca10bb5979fb29886271cef
[RT21] Tigthen Image Detection
The RT26 images are inadvertenly detected as an RT21 image. This patch
tightens up the image detection of the RT21 driver.
#5415
diff -r 4d0380ebabaf -r 15510909d882 chirp/drivers/retevis_rt21.py
--- a/chirp/drivers/retevis_rt21.py Sun Dec 03 13:53:30 2017 -0500
+++ b/chirp/drivers/retevis_rt21.py Sun Dec 03 18:17:31 2017 -0500
@@ -232,6 +232,13 @@
_rt21_exit_programming_mode(radio)
+def model_match(cls, data):
+ """Match the opened/downloaded image to the correct version"""
+ rid = data[0x01B8:0x01BE]
+
+ return rid.startswith("P3207")
+
+
@directory.register
class RT21Radio(chirp_common.CloneModeRadio):
"""RETEVIS RT21"""
@@ -556,3 +563,21 @@
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 [0x0400, ]:
+ 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
Here’s a chirp* run with a “bad” FT2D image. I’ve elided most of the "Bandplan … duplicates" warnings. The traceback occurs after loading the image, navigating to the Banks tab, when I try to click on a box in the second bank, which the radio’s user had defined with an immutable special memory location. The UI gives a modal error dialog “Failed to add # to mapping: list index out of range”, where # is the memory “Loc” I touched. The UI will never add or delete any instance in the selected bank thereafter. If one never touches a checkbox in the bank, all is OK. Chirp does not crash, but it won’t allow access to that memory bank. I believe it also does not change the entry in the bank location, so it’s not “corrupting” the memory image.
When I look at the browser, the entry for the “bad” bank is 0x1801, which is clearly too large for a 1000-entry memory. I’ve determined that the “18” bits are actually flags defining which immutable address to use for that location. They are [usually?] not in the memory image that chirp can access.
The easy changes will special-case those entries and prevent the UI from ever seeing them. I will also add the non-immutable special memory entries so that they can be displayed and changed in memedit.py. I do not think that the radio will allow those entries to be included in a bank, so they should have no effect on bankedit.py. If I could figure out the syntax, it’d probably be best to make the image actually acknowledge the top bit as an “unused” flag,
Since I do not have FT1D, I cannot test these changes on that radio. By reading the Yaesu manuals, it’s clear to me that the FT1D also has the problem that a radio can put a special memory into a bank reference, and that will cause FT1D users the same problem as an FT2D. The FTM-3200D also inherits from the FT1D. That will also need to be checked, although that radio shouldn’t be capable of getting into the special memory situation (according to its manual.)
$ chirp
2017-12-03 14:26:37.923 python2.7[17267:1313234] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead.
/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/mainapp.py:1971: Warning: invalid cast from 'GtkMenuBar' to 'GtkWindow'
macapp.set_menu_bar(menu_bar)
/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/mainapp.py:1971: GtkWarning: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed
macapp.set_menu_bar(menu_bar)
WARNING: Bandplan North American Band Plan has duplicates [1800000-2000000 160 Meter Band simplex , 1800000-2000000 160 Meter Band simplex mode: CW ]
…
WARNING: Bandplan North American Band Plan has duplicates [29300000-29510000 Satellite downlink simplex , 29300000-29510000 Satellite Downlinks simplex ]
/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/settingsedit.py:126: Warning: value "0" of type 'guint' is invalid or out of range for property 'n-rows' of type 'guint'
table = gtk.Table(len(group), 2, False)
ERROR: Exception running RadioJob: list index out of range
ERROR: -- Exception: --
ERROR: Traceback (most recent call last):
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/common.py", line 116, in _execute
result = func(*self.args, **self.kwargs)
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/drivers/ft1d.py", line 503, in add_memory_to_mapping
self.update_vfo()
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/drivers/ft1d.py", line 452, in update_vfo
if not flags[channel].nosubvfo:
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/bitwise.py", line 208, in __getitem__
return self.__items[index]
IndexError: list index out of range
ERROR: ----------------
ERROR: Job Args: (Memory[6], FT2Bank-1)
ERROR: Job KWArgs: {}
ERROR: Job Called from:
File "/usr/local/bin/chirp", line 143, in <module>
gtk.main()
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/bankedit.py", line 229, in do_mapping_adjustment
job = common.RadioJob(do_mapping_index, fn, memory, mapping)
* I used the latest chirp from “brew” for Macintosh:
CHIRP daily-20170714 on Darwin XXXXX 17.2.0 Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64 x86_64 (Python 2.7.14)
2
1
I’m stumped again and am looking for some guidance; this time I’m planning UI changes. (YIKES! That might affect EVERYBODY!) I’ve not had a response on freenode #chirp.
Background: The Yaesu FT1D and FT2D are able to define and use special memory locations and also define some preset special memories that are not part of the memory image.
These radios can reference the locations in the memory banks. IF THE RADIO DEFINES SUCH BANK, then CHIRP WILL FAIL to access that bank forevermore, until the radio manually deletes the association
I’m on my way to managing the special memories in the FT1D driver. I’ve already added basic access to the FT1D’s scan-limit registers. I found that other Yaesu drivers seem to have similar functionality already.
Problem:
The only way I can imagine to permanently fix the problem is to enable special memory access in bankedit.py. I envision having a button similar to the memedit.py “Show Special” button, which will increase the number of memory locations that are shown in the Bank tab.
I’m woefully ignorant of the python -> gtk and chirp/ui -> python activity. I find the memedit.py and bankedit.py structures to be so dissimilar that it’s difficult to simply copy’n’paste. So in the handholding department, PLEASE:
Questions:
- How to add functional buttons to bankedit.py?
- How to effect displaying more memory locations in the bankedit.py when the button is selected? The present matrix display seems OK, I’d just like to add (many) more active rows.
— Because of the multitude of memories available, it’d be nice to also remove empty entries among the rows (meaning that “show empty” toggle would also be desirable.)
- The display will also need to be active, so both ‘get’ and ‘set’ functionality will be needed.
Declan Rieb WD5EQY
wd5eqy(a)arrl.net
1
0
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1512327210 18000
# Node ID ab3a54530478e0185bb0544359b819444c7377fd
# Parent f46de87ab42813b7360f03eea8350a852e766a73
[RT26] Retevis RT-26 UHF Radio
This patch adds memory and settings support for the Retevis RT-26.
#5413
diff -r f46de87ab428 -r ab3a54530478 chirp/drivers/retevis_rt26.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/retevis_rt26.py Sun Dec 03 13:53:30 2017 -0500
@@ -0,0 +1,918 @@
+# 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 struct
+import logging
+import re
+
+from chirp import chirp_common, directory, memmap
+from chirp import bitwise, errors, util
+from chirp.settings import RadioSetting, RadioSettingGroup, \
+ RadioSettingValueInteger, RadioSettingValueList, \
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ InvalidValueError, RadioSettings
+
+LOG = logging.getLogger(__name__)
+
+MEM_FORMAT = """
+#seekto 0x0010;
+struct {
+ lbcd rxfreq[4];
+ lbcd txfreq[4];
+ lbcd rxtone[2];
+ lbcd txtone[2];
+ u8 unknown1:1,
+ pttid:2, // PTT ID
+ skip:1, // Scan Add
+ wide:1, // Bandwidth
+ bcl:1, // Busy Lock
+ epilogue:1, // Epilogue (STE)
+ highpower:1; // Power Level
+ u8 unknown2[3];
+} memory[16];
+
+#seekto 0x0120;
+struct {
+ u8 hivoltnotx:1, // TX Inhibit when voltage too high
+ lovoltnotx:1, // TX Inhibit when voltage too low
+ unknown1:1,
+ fmradio:1, // Broadcast FM Radio
+ unknown2:1,
+ tone:1, // Tone
+ voice:2; // Voice
+ u8 unknown3:1,
+ save:3, // Battery Save
+ squelch:4; // Squelch
+ u8 tot; // Time Out Timer
+ u8 voxi:1, // VOX Inhibit on Receive
+ voxd:2, // VOX Delay
+ vox:1, // VOX
+ voxg:4; // VOX Gain
+ u8 unknown4;
+ u8 unknown5:4,
+ scanspeed:4; // Scan Speed
+ u8 unknown6:3,
+ scandelay:5; // Scan Delay
+ u8 k1longp:4, // Key 1 Long Press
+ k1shortp:4; // Key 1 Short Press
+ u8 k2longp:4, // Key 2 Long Press
+ k2shortp:4; // Key 2 Short Press
+ u8 unknown7:4,
+ ssave:4; // Super Battery Save
+} settings;
+
+#seekto 0x0140;
+struct {
+ u8 unknown1:4,
+ dtmfspd:4; // DTMF Speed
+ u8 digdelay:4, // 1st Digit Delay
+ digtime:4; // 1st Digit Time
+ u8 stuntype:1, // Stun Type
+ sidetone:1, // DTMF Sidetone
+ starhash:2, // * and # Time
+ decodetone:1, // Decode Tone
+ txdecode:1, // TX Decode
+ unknown2:2;
+ u8 unknown3;
+ u8 unknown4:4,
+ groupcode:4; // Group Code
+ u8 unknown5:1,
+ resettone:1, // Reset Tone
+ resettime:6; // Reset Time
+ u8 codespace:4, // Code Space Time
+ decodeto:4; // Decode Tome Out
+ u8 unknown6;
+ u8 idcode[3]; // ID Code
+ u8 unknown7[2];
+ u8 code1_len; // PTT ID length(begging of TX)
+ u8 code2_len; // PTT ID length(end of TX)
+ u8 unknown8;
+ u8 code3_len; // Stun Code length
+ u8 code3[5]; // Stun Code
+ u8 unknown9[10];
+ u8 code1[8]; // PTT ID(beggining of TX)
+ u8 code2[8]; // PTT ID(end of TX)
+} dtmf;
+
+#seekto 0x0170;
+struct {
+ char fp[8];
+} fingerprint;
+"""
+
+CMD_ACK = "\x06"
+
+NUMERIC_CHARSET = list("0123456789")
+DTMF_CHARSET = NUMERIC_CHARSET + list("ABCD*#")
+
+RT26_POWER_LEVELS = [chirp_common.PowerLevel("Low", watts=5.00),
+ chirp_common.PowerLevel("High", watts=10.00)]
+
+RT26_DTCS = sorted(chirp_common.DTCS_CODES + [645])
+
+LIST_PTTID = ["Off", "BOT", "EOT", "Both"]
+LIST_SHORT_PRESS = ["Off", "Monitor On/Off", "", "Scan", "Alarm",
+ "Power High/Low"]
+LIST_LONG_PRESS = ["Off", "Monitor On/Off", "Monitor(momentary)",
+ "Scan", "Alarm", "Power High/Low"]
+LIST_VOXDELAY = ["0.5", "1.0", "2.0", "3.0"]
+LIST_VOICE = ["Off", "English", "Chinese"]
+LIST_TIMEOUTTIMER = ["Off"] + ["%s" % x for x in range(15, 615, 15)]
+LIST_SAVE = ["Off", "1:1", "1:2", "1:3", "1:4"]
+LIST_SSAVE = ["Off"] + ["%s" % x for x in range(1, 10)]
+LIST_SCANSPEED = ["%s" % x for x in range(100, 550, 50)]
+LIST_SCANDELAY = ["%s" % x for x in range(3, 31)]
+LIST_DIGTIME = ["%s" % x for x in range(0, 1100, 100)]
+LIST_DIGDELAY = ["%s" % x for x in range(100, 1100, 100)]
+LIST_STARHASH = ["100", "500", "1000", "0"]
+LIST_CODESPACE = ["None"] + ["%s" % x for x in range(600, 2100, 100)]
+LIST_GROUPCODE = ["Off", "A", "B", "C", "D", "#", "*"]
+LIST_RESETTIME = ["Off"] + ["%s" % x for x in range(1, 61)]
+LIST_DECODETO = ["%s" % x for x in range(500, 1000, 50)] + \
+ ["%s" % x for x in range(1000, 1600, 100)]
+LIST_STUNTYPE = ["TX/RX Inhibit", "TX Inhibit"]
+
+SETTING_LISTS = {
+ "k1shortp": LIST_SHORT_PRESS,
+ "k1longp": LIST_LONG_PRESS,
+ "k2shortp": LIST_SHORT_PRESS,
+ "k2longp": LIST_LONG_PRESS,
+ "voxd": LIST_VOXDELAY,
+ "voice": LIST_VOICE,
+ "tot": LIST_TIMEOUTTIMER,
+ "save": LIST_SAVE,
+ "ssave": LIST_SSAVE,
+ "scanspeed": LIST_SCANSPEED,
+ "scandelay": LIST_SCANDELAY,
+ "digtime": LIST_DIGTIME,
+ "digdelay": LIST_DIGDELAY,
+ "starhash" : LIST_STARHASH,
+ "codespace" : LIST_CODESPACE,
+ "groupcode" : LIST_GROUPCODE,
+ "resettime" : LIST_RESETTIME,
+ "decodeto" : LIST_DECODETO,
+ "stuntype" : LIST_STUNTYPE,
+ }
+
+# Retevis RT26 fingerprints
+RT26_UHF_fp = "PDK80" + "\xF3\x00\x00" # RT26 UHF model
+
+MODELS = [RT26_UHF_fp,]
+
+
+def _model_from_data(data):
+ return data[0x0170:0x0178]
+
+
+def _model_from_image(radio):
+ return _model_from_data(radio.get_mmap())
+
+
+def _get_radio_model(radio):
+ block = _rt26_read_block(radio, 0x0170, 0x10)
+ version = block[0:8]
+ return version
+
+
+def _rt26_enter_programming_mode(radio):
+ serial = radio.pipe
+
+ magic = ["PROGRAMa", "PROGRAMb"]
+ for i in range(0, 2):
+
+ try:
+ LOG.debug("sending " + magic[i])
+ serial.write(magic[i])
+ ack = serial.read(1)
+ except:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Error communicating with radio")
+
+ if not ack:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("No response from radio")
+ elif ack != CMD_ACK:
+ LOG.debug("Incorrect response, got this:\n\n" + util.hexprint(ack))
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Radio refused to enter programming mode")
+
+ try:
+ LOG.debug("sending " + util.hexprint("\x02"))
+ serial.write("\x02")
+ ident = serial.read(16)
+ except:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Error communicating with radio")
+
+ if not ident.startswith("PDK80"):
+ LOG.debug("Incorrect response, got this:\n\n" + util.hexprint(ident))
+ _rt26_exit_programming_mode(radio)
+ LOG.debug(util.hexprint(ident))
+ raise errors.RadioError("Radio returned unknown identification string")
+
+ try:
+ LOG.debug("sending " + util.hexprint("MDK8ECUMHS1X7BN/"))
+ serial.write("MXT8KCUMHS1X7BN/")
+ ack = serial.read(1)
+ except:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Error communicating with radio")
+
+ if ack != "\xB2":
+ LOG.debug("Incorrect response, got this:\n\n" + util.hexprint(ack))
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Radio refused to enter programming mode")
+
+ try:
+ LOG.debug("sending " + util.hexprint(CMD_ACK))
+ serial.write(CMD_ACK)
+ ack = serial.read(1)
+ except:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Error communicating with radio")
+
+ if ack != CMD_ACK:
+ LOG.debug("Incorrect response, got this:\n\n" + util.hexprint(ack))
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Radio refused to enter programming mode")
+
+ # DEBUG
+ LOG.info("Positive ident, this is a %s %s" % (radio.VENDOR, radio.MODEL))
+
+
+def _rt26_exit_programming_mode(radio):
+ serial = radio.pipe
+ try:
+ serial.write("E")
+ except:
+ raise errors.RadioError("Radio refused to exit programming mode")
+
+
+def _rt26_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)
+ if response[:4] != expectedresponse:
+ _rt26_exit_programming_mode(radio)
+ raise Exception("Error reading block %04x." % (block_addr))
+
+ block_data = response[4:]
+
+ serial.write(CMD_ACK)
+ ack = serial.read(1)
+ except:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Failed to read block at %04x" % block_addr)
+
+ if ack != CMD_ACK:
+ _rt26_exit_programming_mode(radio)
+ raise Exception("No ACK reading block %04x." % (block_addr))
+
+ return block_data
+
+
+def _rt26_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]
+
+ 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:
+ _rt26_exit_programming_mode(radio)
+ raise errors.RadioError("Failed to send block "
+ "to radio at %04x" % block_addr)
+
+
+def do_download(radio):
+ LOG.debug("download")
+ _rt26_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, radio._block_size):
+ status.cur = addr + radio._block_size
+ radio.status_fn(status)
+
+ block = _rt26_read_block(radio, addr, radio._block_size)
+ data += block
+
+ LOG.debug("Address: %04x" % addr)
+ LOG.debug(util.hexprint(block))
+
+ _rt26_exit_programming_mode(radio)
+
+ return memmap.MemoryMap(data)
+
+
+def do_upload(radio):
+ status = chirp_common.Status()
+ status.msg = "Uploading to radio"
+
+ _rt26_enter_programming_mode(radio)
+
+ status.cur = 0
+ status.max = 0x0190
+
+ for start_addr, end_addr, block_size in radio._ranges:
+ for addr in range(start_addr, end_addr, block_size):
+ status.cur = addr + block_size
+ radio.status_fn(status)
+ _rt26_write_block(radio, addr, block_size)
+
+ _rt26_exit_programming_mode(radio)
+
+
+def model_match(cls, data):
+ """Match the opened/downloaded image to the correct version"""
+ rid = data[0x0170:0x0176]
+
+ return rid.startswith("PDK80")
+
+
+(a)directory.register
+class RT26Radio(chirp_common.CloneModeRadio):
+ """Retevis RT26"""
+ VENDOR = "Retevis"
+ MODEL = "RT26"
+ BAUD_RATE = 4800
+
+ _ranges = [
+ (0x0000, 0x0190, 0x10),
+ ]
+ _memsize = 0x0400
+ _block_size = 0x10
+
+ 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.has_name = False
+ 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 = RT26_POWER_LEVELS
+ rf.valid_duplexes = ["", "-", "+", "split", "off"]
+ rf.valid_modes = ["NFM", "FM"] # 12.5 KHz, 25 kHz.
+ rf.memory_bounds = (1, 16)
+ rf.valid_bands = [(400000000, 520000000)]
+
+ return rf
+
+ def process_mmap(self):
+ self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
+
+ def sync_in(self):
+ self._mmap = do_download(self)
+ self.process_mmap()
+
+ def sync_out(self):
+ do_upload(self)
+
+ 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 _my_band(self):
+ model_tag = _model_from_image(self)
+ return model_tag
+
+ def get_memory(self, number):
+ _mem = self._memobj.memory[number - 1]
+
+ mem = chirp_common.Memory()
+
+ mem.number = number
+ 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.freq = 0
+ mem.empty = True
+ return mem
+
+ if int(_mem.rxfreq) == int(_mem.txfreq):
+ mem.duplex = ""
+ mem.offset = 0
+ else:
+ mem.duplex = int(_mem.rxfreq) > int(_mem.txfreq) and "-" or "+"
+ mem.offset = abs(int(_mem.rxfreq) - int(_mem.txfreq)) * 10
+
+ mem.mode = _mem.wide and "FM" or "NFM"
+
+ 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 = RT26_POWER_LEVELS[_mem.highpower]
+
+ if _mem.skip:
+ mem.skip = "S"
+
+ mem.extra = RadioSettingGroup("Extra", "extra")
+
+ rs = RadioSetting("bcl", "BCL",
+ RadioSettingValueBoolean(not _mem.bcl))
+ mem.extra.append(rs)
+
+ rs = RadioSetting("epilogue", "Epilogue(STE)",
+ RadioSettingValueBoolean(_mem.epilogue))
+ mem.extra.append(rs)
+
+ val = 3 - _mem.pttid
+ rs = RadioSetting("pttid", "PTT ID",
+ RadioSettingValueList(
+ LIST_PTTID, LIST_PTTID[val]))
+ mem.extra.append(rs)
+
+ return mem
+
+ def set_memory(self, mem):
+ _mem = self._memobj.memory[mem.number - 1]
+
+ if mem.empty:
+ _mem.set_raw("\xFF" * (_mem.size() / 8))
+ return
+
+ _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
+
+ _mem.wide = mem.mode == "FM"
+
+ ((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 == RT26_POWER_LEVELS[1]
+
+ _mem.skip = mem.skip == "S"
+
+ for setting in mem.extra:
+ if setting.get_name() == "bcl":
+ setattr(_mem, setting.get_name(), not int(setting.value))
+ elif setting.get_name() == "pttid":
+ setattr(_mem, setting.get_name(), 3 - int(setting.value))
+ else:
+ setattr(_mem, setting.get_name(), int(setting.value))
+
+ def _bbcd2dtmf(self, bcdarr, strlen=16):
+ # doing bbcd, but with support for ABCD*#
+ LOG.debug(bcdarr.get_value())
+ string = ''.join("%02X" % b for b in bcdarr)
+ LOG.debug("@_bbcd2dtmf, received: %s" % string)
+ string = string.replace('E', '#').replace('F', '*')
+ if strlen <= 16:
+ string = string[:strlen]
+ return string
+
+ def _dtmf2bbcd(self, value, strlen):
+ dtmfstr = value.get_value()
+ dtmfstr = dtmfstr.replace('#', 'E').replace('*', 'F')
+ dtmfstr = str.ljust(dtmfstr.strip(), strlen, "F")
+ bcdarr = list(bytearray.fromhex(dtmfstr))
+ LOG.debug("@_dtmf2bbcd, sending: %s" % bcdarr)
+ return bcdarr
+
+ def _bbcd2num(self, bcdarr, strlen=6):
+ # doing bbcd
+ LOG.debug(bcdarr.get_value())
+ string = ''.join("%02X" % b for b in bcdarr)
+ LOG.debug("@_bbcd2num, received: %s" % string)
+ if strlen <= 6:
+ string = string[:strlen]
+ return string
+
+ def _num2bbcd(self, value):
+ numstr = value.get_value()
+ numstr = str.ljust(numstr.strip(), 6, "F")
+ bcdarr = list(bytearray.fromhex(numstr))
+ LOG.debug("@_num2bbcd, sending: %s" % bcdarr)
+ return bcdarr
+
+ def get_settings(self):
+ _settings = self._memobj.settings
+ _mem = self._memobj
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ dtmf = RadioSettingGroup("dtmf", "DTMF Settings")
+ top = RadioSettings(basic, dtmf)
+
+ if _settings.k1shortp > 5:
+ val = 4
+ else:
+ val = _settings.k1shortp
+ rs = RadioSetting("k1shortp", "Key 1 Short Press",
+ RadioSettingValueList(
+ LIST_SHORT_PRESS,
+ LIST_SHORT_PRESS[val]))
+ basic.append(rs)
+
+ if _settings.k1longp > 5:
+ val = 5
+ else:
+ val = _settings.k1longp
+ rs = RadioSetting("k1longp", "Key 1 Long Press",
+ RadioSettingValueList(
+ LIST_LONG_PRESS,
+ LIST_LONG_PRESS[val]))
+ basic.append(rs)
+
+ if _settings.k2shortp > 5:
+ val = 1
+ else:
+ val = _settings.k2shortp
+ rs = RadioSetting("k2shortp", "Key 2 Short Press",
+ RadioSettingValueList(
+ LIST_SHORT_PRESS,
+ LIST_SHORT_PRESS[val]))
+ basic.append(rs)
+
+ if _settings.k2longp > 5:
+ val = 3
+ else:
+ val = _settings.k2longp
+ rs = RadioSetting("k2longp", "Key 2 Long Press",
+ RadioSettingValueList(
+ LIST_LONG_PRESS,
+ LIST_LONG_PRESS[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("vox", "VOX",
+ RadioSettingValueBoolean(not _settings.vox))
+ basic.append(rs)
+
+ if _settings.voxg > 8:
+ val = 4
+ else:
+ val = _settings.voxg + 1
+ rs = RadioSetting("voxg", "VOX Gain",
+ RadioSettingValueInteger(1, 9, val))
+ basic.append(rs)
+
+ rs = RadioSetting("voxd", "VOX Delay Time",
+ RadioSettingValueList(
+ LIST_VOXDELAY,
+ LIST_VOXDELAY[_settings.voxd]))
+ basic.append(rs)
+
+ rs = RadioSetting("voxi", "VOX Inhibit on Receive",
+ RadioSettingValueBoolean(_settings.voxi))
+ basic.append(rs)
+
+ if _settings.squelch > 9:
+ val = 5
+ else:
+ val = _settings.squelch
+ rs = RadioSetting("squelch", "Squelch Level",
+ RadioSettingValueInteger(0, 9, val))
+ basic.append(rs)
+
+ if _settings.voice == 3:
+ val = 1
+ else:
+ val = _settings.voice
+ rs = RadioSetting("voice", "Voice Prompts",
+ RadioSettingValueList(
+ LIST_VOICE,
+ LIST_VOICE[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("tone", "Tone",
+ RadioSettingValueBoolean(_settings.tone))
+ basic.append(rs)
+
+ rs = RadioSetting("lovoltnotx", "TX Inhibit (when battery < 6 volts)",
+ RadioSettingValueBoolean(_settings.lovoltnotx))
+ basic.append(rs)
+
+ rs = RadioSetting("hivoltnotx", "TX Inhibit (when battery > 9 volts)",
+ RadioSettingValueBoolean(_settings.hivoltnotx))
+ basic.append(rs)
+
+ if _settings.tot > 0x28:
+ val = 6
+ else:
+ val = _settings.tot
+ rs = RadioSetting("tot", "Time-out Timer[s]",
+ RadioSettingValueList(
+ LIST_TIMEOUTTIMER,
+ LIST_TIMEOUTTIMER[val]))
+ basic.append(rs)
+
+ if _settings.save < 3:
+ val = 0
+ else:
+ val = _settings.save - 3
+ rs = RadioSetting("save", "Battery Saver",
+ RadioSettingValueList(
+ LIST_SAVE,
+ LIST_SAVE[val]))
+ basic.append(rs)
+
+ rs = RadioSetting("ssave", "Super Battery Saver[s]",
+ RadioSettingValueList(
+ LIST_SSAVE,
+ LIST_SSAVE[_settings.ssave]))
+ basic.append(rs)
+
+ rs = RadioSetting("fmradio", "Broadcast FM",
+ RadioSettingValueBoolean(_settings.fmradio))
+ basic.append(rs)
+
+ if _settings.scanspeed > 8:
+ val = 4
+ else:
+ val = _settings.scanspeed
+ rs = RadioSetting("scanspeed", "Scan Speed[ms]",
+ RadioSettingValueList(
+ LIST_SCANSPEED,
+ LIST_SCANSPEED[val]))
+ basic.append(rs)
+
+ if _settings.scandelay > 27:
+ val = 12
+ else:
+ val = _settings.scandelay
+ rs = RadioSetting("scandelay", "Scan Droupout Delay Time[s]",
+ RadioSettingValueList(
+ LIST_SCANDELAY,
+ LIST_SCANDELAY[val]))
+ basic.append(rs)
+
+ if _mem.dtmf.dtmfspd > 11:
+ val = 2
+ else:
+ val = _mem.dtmf.dtmfspd + 4
+ rs = RadioSetting("dtmf.dtmfspd", "DTMF Speed[digit/s]",
+ RadioSettingValueInteger(4, 15, val))
+ dtmf.append(rs)
+
+ if _mem.dtmf.digtime > 10:
+ val = 0
+ else:
+ val = _mem.dtmf.digtime
+ rs = RadioSetting("dtmf.digtime", "1st Digit Time[ms]",
+ RadioSettingValueList(
+ LIST_DIGTIME,
+ LIST_DIGTIME[val]))
+ dtmf.append(rs)
+
+ if _mem.dtmf.digdelay > 9:
+ val = 0
+ else:
+ val = _mem.dtmf.digdelay
+ rs = RadioSetting("dtmf.digdelay", "1st Digit Delay[ms]",
+ RadioSettingValueList(
+ LIST_DIGDELAY,
+ LIST_DIGDELAY[val]))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.starhash", "* and # Time[ms]",
+ RadioSettingValueList(
+ LIST_STARHASH,
+ LIST_STARHASH[_mem.dtmf.starhash]))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.codespace", "Code Space Time[ms]",
+ RadioSettingValueList(
+ LIST_CODESPACE,
+ LIST_CODESPACE[_mem.dtmf.codespace]))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.sidetone", "DTMF Sidetone",
+ RadioSettingValueBoolean(_mem.dtmf.sidetone))
+ dtmf.append(rs)
+
+ # setup pttid entries
+ for i in range(0, 2):
+ objname = "code" + str(i + 1)
+ names = ["PTT ID(BOT)", "PTT ID(EOT)"]
+ strname = str(names[i])
+ dtmfsetting = getattr(_mem.dtmf, objname)
+ dtmflen = getattr(_mem.dtmf, objname + "_len")
+ dtmfstr = self._bbcd2dtmf(dtmfsetting, dtmflen)
+ code = RadioSettingValueString(0, 16, dtmfstr)
+ code.set_charset(DTMF_CHARSET + list(" "))
+ rs = RadioSetting("dtmf." + objname, strname, code)
+ dtmf.append(rs)
+
+ def _filter(name):
+ filtered = ""
+ for char in str(name):
+ if char in NUMERIC_CHARSET:
+ filtered += char
+ else:
+ filtered += " "
+ return filtered
+
+ # setup id code entry
+ codesetting = getattr(_mem.dtmf, "idcode")
+ codestr = self._bbcd2num(codesetting, 6)
+ code = RadioSettingValueString(0, 6, _filter(codestr))
+ code.set_charset(NUMERIC_CHARSET + list(" "))
+ rs = RadioSetting("dtmf.idcode", "ID Code", code)
+ dtmf.append(rs)
+
+ if _mem.dtmf.groupcode > 6:
+ val = 0
+ else:
+ val = _mem.dtmf.groupcode
+ rs = RadioSetting("dtmf.groupcode", "Group Code",
+ RadioSettingValueList(
+ LIST_GROUPCODE,
+ LIST_GROUPCODE[val]))
+ dtmf.append(rs)
+
+ if _mem.dtmf.resettime > 60:
+ val = 0
+ else:
+ val = _mem.dtmf.resettime
+ rs = RadioSetting("dtmf.resettime", "Auto Reset Time[s]",
+ RadioSettingValueList(
+ LIST_RESETTIME,
+ LIST_RESETTIME[_mem.dtmf.resettime]))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.txdecode", "TX Decode",
+ RadioSettingValueBoolean(_mem.dtmf.txdecode))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.decodeto", "Decode Time Out[ms]",
+ RadioSettingValueList(
+ LIST_DECODETO,
+ LIST_DECODETO[_mem.dtmf.decodeto]))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.decodetone", "Decode Tone",
+ RadioSettingValueBoolean(_mem.dtmf.decodetone))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.resettone", "Reset Tone",
+ RadioSettingValueBoolean(_mem.dtmf.resettone))
+ dtmf.append(rs)
+
+ rs = RadioSetting("dtmf.stuntype", "Stun Type",
+ RadioSettingValueList(
+ LIST_STUNTYPE,
+ LIST_STUNTYPE[_mem.dtmf.stuntype]))
+ dtmf.append(rs)
+
+ ## setup stun entry
+ objname = "code3"
+ strname = "Stun Code"
+ dtmfsetting = getattr(_mem.dtmf, objname)
+ dtmflen = getattr(_mem.dtmf, objname + "_len")
+ dtmfstr = self._bbcd2dtmf(dtmfsetting, dtmflen)
+ code = RadioSettingValueString(0, 10, dtmfstr)
+ code.set_charset(DTMF_CHARSET + list(" "))
+ rs = RadioSetting("dtmf." + objname, strname, code)
+ dtmf.append(rs)
+
+ return top
+
+ def set_settings(self, settings):
+ _mem = self._memobj
+ 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 setting == "vox":
+ setattr(obj, setting, not int(element.value))
+ elif setting == "voxg":
+ setattr(obj, setting, int(element.value) - 1)
+ elif setting == "save":
+ setattr(obj, setting, int(element.value) + 3)
+ elif setting == "dtmfspd":
+ setattr(obj, setting, int(element.value) - 4)
+ elif re.match('code\d', setting):
+ # set dtmf length field and then get bcd dtmf
+ if setting == "code3":
+ strlen = 10
+ else:
+ strlen = 16
+ codelen = len(str(element.value).strip())
+ setattr(_mem.dtmf, setting + "_len", codelen)
+ dtmfstr = self._dtmf2bbcd(element.value, strlen)
+ setattr(_mem.dtmf, setting, dtmfstr)
+ elif setting == "idcode":
+ numstr = self._num2bbcd(element.value)
+ setattr(_mem.dtmf, setting, numstr)
+ 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 [0x0400, ]:
+ 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
1