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
November 2020
- 13 participants
- 49 discussions
[chirp_devel] [PATCH] [AnyTone 5888UV] Add limited squelch mode & fix file identifier
by Brad & Cindy Schuler 20 Nov '20
by Brad & Cindy Schuler 20 Nov '20
20 Nov '20
# HG changeset patch
# User Brad Schuler <brad(a)schuler.ws<mailto:brad@schuler.ws>>
# Date 1604816852 25200
# Sat Nov 07 23:27:32 2020 -0700
# Node ID f13da43b1125af02a6dbc129a6e9e33760adc9a7
# Parent af9c114dd8c5d13c0a1031103900d7db5262bc62
[AnyTone 5888UV] Add limited squelch mode & fix file identifier
Set the radio's squelch mode to CTCSS/DCS Tones instead of Carrier when the receive tone mode is set.
Recognize a file image from this radio when no metadata is present.
Related to issues 2989, 3653, 6633
diff -r af9c114dd8c5 -r f13da43b1125 chirp/drivers/anytone.py
--- a/chirp/drivers/anytone.py Mon Nov 02 16:12:36 2020 -0700
+++ b/chirp/drivers/anytone.py Sat Nov 07 23:27:32 2020 -0700
@@ -68,7 +68,9 @@
u8 txcode;
u8 rxcode;
u8 unknown7[2];
- u8 unknown2[5];
+ u8 unknown9:5,
+ sqlMode:3; // [Carrier, CTCSS/DCS Tones, Opt Sig Only, Tones & Opt Sig, Tones or Opt Sig]
+ u8 unknown2[4];
char name[7];
u8 unknownZ[2];
};
@@ -324,6 +326,7 @@
chirp_common.PowerLevel("Mid1", watts=25),
chirp_common.PowerLevel("Mid2", watts=10),
chirp_common.PowerLevel("Low", watts=5)]
+SQL_MODES = ["Carrier", "CTCSS/DCS", "Opt Sig Only", "Tones AND Sig", "Tones OR Sig"]
@directory.register
@@ -333,7 +336,7 @@
VENDOR = "AnyTone"
MODEL = "5888UV"
BAUD_RATE = 9600
- _file_ident = "QX588UV"
+ _file_ident = "588UVN"
# May try to mirror the OEM behavior later
_ranges = [
@@ -424,6 +427,8 @@
rxtone = txtone = None
rxmode = TMODES[_mem.rxtmode]
+ if _mem.sqlMode == 0 or _mem.sqlMode == 2:
+ rxmode = TMODES.index('')
txmode = TMODES[_mem.txtmode]
if txmode == "Tone":
txtone = TONES[_mem.txtone]
@@ -472,6 +477,10 @@
_mem.txtmode = TMODES.index(txmode)
_mem.rxtmode = TMODES.index(rxmode)
+ if rxmode != '':
+ _mem.sqlMode = SQL_MODES.index("CTCSS/DCS")
+ else:
+ _mem.sqlMode = SQL_MODES.index("Carrier")
if txmode == "Tone":
_mem.txtone = TONES.index(txtone)
elif txmode == "DTCS":
2
5
[chirp_devel] [PATCH] [anytone_iii] Modifications necessary to pass standard CHIRP automated testing
by Brad & Cindy Schuler 20 Nov '20
by Brad & Cindy Schuler 20 Nov '20
20 Nov '20
Below is the Plain Text version of the HTML formatted email sent on 11/16/20.
# HG changeset patch
# User Brad Schuler <brad(a)schuler.ws>
# Date 1605593121 25200
# Mon Nov 16 23:05:21 2020 -0700
# Node ID 2df5ebf6cb44272135be7174f0df8c4325667889
# Parent ea826afbd7489de236b7d1895f4552a32d78fb04
[anytone_iii] Modifications necessary to pass standard CHIRP automated testing
Related to issue #3941
diff -r ea826afbd748 -r 2df5ebf6cb44 chirp/drivers/anytone_iii.py
--- a/chirp/drivers/anytone_iii.py Thu Nov 12 00:09:58 2020 -0700
+++ b/chirp/drivers/anytone_iii.py Mon Nov 16 23:05:21 2020 -0700
@@ -39,7 +39,7 @@
def __init__(self, radio, name='Banks'):
super(ATBankModel, self).__init__(radio, name)
self._banks = []
- self._memBounds = (0, 760)
+ self._memBounds = range(0, 750)
for i in range(0, 10):
self._banks.append(chirp_common.Bank(self, i, string.uppercase[i]))
@@ -53,6 +53,13 @@
self._radio.set_bank(memory.number, bank.get_index())
def remove_memory_from_mapping(self, memory, mapping):
+ # I would argue that removing a memory from a mapping in which it does not exist should not throw an error.
+ # The end result is the requested result. The memory is not in the mapping.
+ # However, to pass the CHIRP TestCaseBanks, I must throw an error. This causes more code to execute than necessary.
+ # I could just call _radio.clr_bank, but now I must get_bank and compare.
+ index = self._radio.get_bank(memory.number)
+ if (index is None or index != mapping.get_index()):
+ raise Exception("Memory %d is not in bank %s" % (memory.number, bank.get_name()))
self._radio.clr_bank(memory.number)
def get_mapping_memories(self, bank):
@@ -765,6 +772,7 @@
rf.has_settings = True
rf.valid_modes = MODES + ['AM']
rf.valid_tmodes = ['', 'Tone', 'TSQL', 'DTCS', 'Cross']
+ rf.valid_cross_modes = ["Tone->Tone", "DTCS->", "->DTCS", "Tone->DTCS", "DTCS->Tone", "->Tone", "DTCS->DTCS"]
rf.valid_duplexes = DUPLEXES
rf.valid_tuning_steps = TUNING_STEPS
rf.valid_bands = BANDS
@@ -1239,6 +1247,8 @@
dtmfId = element.value
elif name == "5ToneId":
fiveToneId = element.value
+ elif isinstance(element.value, _RadioSettingValueOffsetInt):
+ setattr(_emergency, name, int(element.value) + element.value.offset)
else:
setattr(_emergency, name, element.value)
if EMER_ENI_TYPES[_emergency.eniType] == 'DTMF':
1
0
Let me start by saying I'm not trying to be antagonistic about this. I know
the python 3 issue has come up a couple times in the past, and usually not
in a good way.
I've been running off the py3 branch locally with a UV-5R. For the most
part it works. (I had an issue with it saving settings.) I see that there
is a py3 version in the bugtracker (https://chirp.danplanet.com/versions/21)
with some open tickets.
Where would be the best place for me to focus on to get the py3 branch
ready? Or should I just work at fixing anything as I find it and submit
bugs and patches to the bugtracker?
Jim
3
3
Tested changes:
Changes for Build #889
[Jim Unroe <rock.unroe(a)gmail.com>] [H777] Add Alias for Retevis H777
This patch add an alias for the Retevis H777
#8451
[Joe Milbourn <joe(a)milbourn.org.uk>] [AnyTone 778UV] Add support for Yedro YC-M04VUS, an AnyTone 778UV alias. closes #8005.
Thanks to Fernando Sclavo for making it work, I just copied and pasted.
[Jim Unroe <rock.unroe(a)gmail.com>] [TH-UVF1] Add TYT TH-UVF1 Valid Tuning Steps
This patch adds rf.valid_tuning_steps
Fixes #8031
[Joe Milbourn <joe(a)milbourn.org.uk>] [AnyTone 778UV] Fix DTCS support, closes #8327
[Jim Unroe <rock.unroe(a)gmail.com>] [UV-5X3] Add Out-of-Range Limit Checking for Band Limits
This patch adds limit checking for the BTech UV-5X3 band limits.
related to #8393
[Jim Unroe <rock.unroe(a)gmail.com>] [AT-778UV] Fix Mode:02 VHF Band Limit
This patch corrects a typo that affects the Mode:02 VHF lower band limit.
Related to issue #8391
[Jim Unroe <rock.unroe(a)gmail.com>] [UV-5R] Incorrect Tone Values for ANI/PTT-ID
This patch addresses the changes to the "dtmfchars" brought about by the
HN5RV01 firmware.
While making these changes it was also discovered that the ANI code for these
radios is limited to only numeric DTMF characters. This patch also makes this
correction.
Fixes #8321
[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 672 lines...]
test_copy_all (tests.TestCase_YaesuFT7100M)
Testing Yaesu FT-7100M copy all ... ok
test_detect (tests.TestCase_YaesuFT7100M)
Testing Yaesu FT-7100M detect ... ok
test_edges (tests.TestCase_YaesuFT7100M)
Testing Yaesu FT-7100M edges ... ok
test_settings (tests.TestCase_YaesuFT7100M)
Testing Yaesu FT-7100M settings ... ok
test_banks (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M brute force ... ok
test_clone (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M clone ... ok
test_copy_all (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M copy all ... ok
test_detect (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M detect ... ok
test_edges (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M edges ... ok
test_settings (tests.TestCase_YaesuFT1500M)
Testing Yaesu FT-1500M settings ... skipped 'Settings not supported'
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 ... 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_AnyTone5888UV)
Testing AnyTone 5888UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV brute force ... ok
test_clone (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV clone ... ok
test_copy_all (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV copy all ... ok
test_detect (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV detect ... ok
test_edges (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV edges ... ok
test_settings (tests.TestCase_AnyTone5888UV)
Testing AnyTone 5888UV settings ... ok
test_banks (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R banks ... ok
test_brute_force (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R brute force ... ok
test_clone (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R clone ... ok
test_copy_all (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R copy all ... ok
test_detect (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R detect ... ok
test_edges (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R edges ... ok
test_settings (tests.TestCase_YaesuFT25R)
Testing Yaesu FT-25R 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_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_AnyTone778UV)
Testing AnyTone 778UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV brute force ... ok
test_clone (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV clone ... ok
test_copy_all (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV copy all ... ok
test_detect (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV detect ... ok
test_edges (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV edges ... ok
test_settings (tests.TestCase_AnyTone778UV)
Testing AnyTone 778UV settings ... skipped 'Settings not supported'
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_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_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_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_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_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_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_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_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
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_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_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 brute force ... ok
test_clone (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 clone ... ok
test_copy_all (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 copy all ... ok
test_detect (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 detect ... ok
test_edges (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 edges ... ok
test_settings (tests.TestCase_KenwoodTK3180K2)
Testing Kenwood TK-3180K2 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_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_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_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_YaesuFT818)
Testing Yaesu FT-818 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 brute force ... ok
test_clone (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 clone ... ok
test_copy_all (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 copy all ... ok
test_detect (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 detect ... ok
test_edges (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 edges ... ok
test_settings (tests.TestCase_YaesuFT818)
Testing Yaesu FT-818 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_TYTTHUV8000)
Testing TYT TH-UV8000 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 brute force ... ok
test_clone (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 clone ... ok
test_copy_all (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 copy all ... ok
test_detect (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 detect ... ok
test_edges (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 edges ... ok
test_settings (tests.TestCase_TYTTHUV8000)
Testing TYT TH-UV8000 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_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_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_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_YaesuFT450D)
Testing Yaesu FT-450D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D brute force ... ok
test_clone (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D clone ... ok
test_copy_all (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D copy all ... ok
test_detect (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D detect ... ok
test_edges (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D edges ... ok
test_settings (tests.TestCase_YaesuFT450D)
Testing Yaesu FT-450D 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_RadioddityGA510)
Testing Radioddity GA-510 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RadioddityGA510)
Testing Radioddity GA-510 brute force ... ok
test_clone (tests.TestCase_RadioddityGA510)
Testing Radioddity GA-510 clone ... ok
test_copy_all (tests.TestCase_RadioddityGA510)
Testing Radioddity GA-510 copy all ... ok
test_detect (tests.TestCase_RadioddityGA510)
Testing Radioddity GA-510 detect ... ok
test_edges (tests.TestCase_RadioddityGA510)
Testing Radioddity GA-510 edges ... ok
test_settings (tests.TestCase_RadioddityGA510)
Testing Radioddity GA-510 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_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_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_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_RadioddityR2)
Testing Radioddity R2 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_RadioddityR2)
Testing Radioddity R2 brute force ... ok
test_clone (tests.TestCase_RadioddityR2)
Testing Radioddity R2 clone ... ok
test_copy_all (tests.TestCase_RadioddityR2)
Testing Radioddity R2 copy all ... ok
test_detect (tests.TestCase_RadioddityR2)
Testing Radioddity R2 detect ... ok
test_edges (tests.TestCase_RadioddityR2)
Testing Radioddity R2 edges ... ok
test_settings (tests.TestCase_RadioddityR2)
Testing Radioddity R2 settings ... ok
test_banks (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR banks ... ok
test_brute_force (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR brute force ... ok
test_clone (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR clone ... ok
test_copy_all (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR copy all ... ok
test_detect (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR detect ... ok
test_edges (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR edges ... ok
test_settings (tests.TestCase_YaesuFT4VR)
Testing Yaesu FT-4VR settings ... ok
test_banks (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus brute force ... ok
test_clone (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus clone ... ok
test_copy_all (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus copy all ... ok
test_detect (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus detect ... ok
test_edges (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus edges ... ok
test_settings (tests.TestCase_BoblovX3Plus)
Testing Boblov X3Plus settings ... ok
test_banks (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 brute force ... ok
test_clone (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 clone ... ok
test_copy_all (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 copy all ... ok
test_detect (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 detect ... ok
test_edges (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 edges ... ok
test_settings (tests.TestCase_BTECHGMRS50X1)
Testing BTECH GMRS-50X1 settings ... ok
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_YaesuFT4XE)
Testing Yaesu FT-4XE banks ... ok
test_brute_force (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE brute force ... ok
test_clone (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE clone ... ok
test_copy_all (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE copy all ... ok
test_detect (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE detect ... ok
test_edges (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE edges ... ok
test_settings (tests.TestCase_YaesuFT4XE)
Testing Yaesu FT-4XE 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_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_KenwoodTK8180)
Testing Kenwood TK-8180 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 brute force ... ok
test_clone (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 clone ... ok
test_copy_all (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 copy all ... ok
test_detect (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 detect ... ok
test_edges (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 edges ... ok
test_settings (tests.TestCase_KenwoodTK8180)
Testing Kenwood TK-8180 settings ... ok
test_banks (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV brute force ... ok
test_clone (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV clone ... ok
test_copy_all (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV copy all ... ok
test_detect (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV detect ... ok
test_edges (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV edges ... ok
test_settings (tests.TestCase_CRTMicronUV)
Testing CRT Micron UV 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_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_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_YaesuFT4XR)
Testing Yaesu FT-4XR banks ... ok
test_brute_force (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR brute force ... ok
test_clone (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR clone ... ok
test_copy_all (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR copy all ... ok
test_detect (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR detect ... ok
test_edges (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR edges ... ok
test_settings (tests.TestCase_YaesuFT4XR)
Testing Yaesu FT-4XR 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_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_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_BTECHMURSV1)
Testing BTECH MURS-V1 banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_BTECHMURSV1)
Testing BTECH MURS-V1 brute force ... ok
test_clone (tests.TestCase_BTECHMURSV1)
Testing BTECH MURS-V1 clone ... ok
test_copy_all (tests.TestCase_BTECHMURSV1)
Testing BTECH MURS-V1 copy all ... ok
test_detect (tests.TestCase_BTECHMURSV1)
Testing BTECH MURS-V1 detect ... ok
test_edges (tests.TestCase_BTECHMURSV1)
Testing BTECH MURS-V1 edges ... skipped 'No mutable memory locations found'
test_settings (tests.TestCase_BTECHMURSV1)
Testing BTECH MURS-V1 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_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_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode brute force ... ok
test_clone (tests.TestCase_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode clone ... ok
test_copy_all (tests.TestCase_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode copy all ... ok
test_detect (tests.TestCase_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode detect ... ok
test_edges (tests.TestCase_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode edges ... ok
test_settings (tests.TestCase_KenwoodTMD710GCloneMode)
Testing Kenwood TM-D710G_CloneMode 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_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_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_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_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_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_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_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_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_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode brute force ... ok
test_clone (tests.TestCase_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode clone ... ok
test_copy_all (tests.TestCase_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode copy all ... ok
test_detect (tests.TestCase_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode detect ... ok
test_edges (tests.TestCase_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode edges ... ok
test_settings (tests.TestCase_KenwoodTMD710CloneMode)
Testing Kenwood TM-D710_CloneMode 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_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_YaesuFT65E)
Testing Yaesu FT-65E banks ... ok
test_brute_force (tests.TestCase_YaesuFT65E)
Testing Yaesu FT-65E brute force ... ok
test_clone (tests.TestCase_YaesuFT65E)
Testing Yaesu FT-65E clone ... ok
test_copy_all (tests.TestCase_YaesuFT65E)
Testing Yaesu FT-65E copy all ... ok
test_detect (tests.TestCase_YaesuFT65E)
Testing Yaesu FT-65E detect ... ok
test_edges (tests.TestCase_YaesuFT65E)
Testing Yaesu FT-65E edges ... ok
test_settings (tests.TestCase_YaesuFT65E)
Testing Yaesu FT-65E 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 ... ok
test_edges (tests.TestCase_RetevisRT26)
Testing Retevis RT26 edges ... ok
test_settings (tests.TestCase_RetevisRT26)
Testing Retevis RT26 settings ... ok
test_banks (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode brute force ... ok
test_clone (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode clone ... ok
test_copy_all (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode copy all ... ok
test_detect (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode detect ... ok
test_edges (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode edges ... ok
test_settings (tests.TestCase_KenwoodTS480CloneMode)
Testing Kenwood TS-480_CloneMode settings ... ok
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_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_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_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_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_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode brute force ... ok
test_clone (tests.TestCase_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode clone ... ok
test_copy_all (tests.TestCase_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode copy all ... ok
test_detect (tests.TestCase_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode detect ... ok
test_edges (tests.TestCase_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode edges ... ok
test_settings (tests.TestCase_KenwoodTS590SGCloneMode)
Testing Kenwood TS-590SG_CloneMode settings ... ok
test_banks (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D banks ... ok
test_brute_force (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D brute force ... ok
test_clone (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D clone ... ok
test_copy_all (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D copy all ... ok
test_detect (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D detect ... ok
test_edges (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D edges ... ok
test_settings (tests.TestCase_YaesuFT3D)
Testing Yaesu FT3D 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_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_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_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_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_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_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_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_YaesuFTM7250D)
Testing Yaesu FTM-7250D banks ... skipped 'Banks not supported'
test_brute_force (tests.TestCase_YaesuFTM7250D)
Testing Yaesu FTM-7250D brute force ... ok
test_clone (tests.TestCase_YaesuFTM7250D)
Testing Yaesu FTM-7250D clone ... ok
test_copy_all (tests.TestCase_YaesuFTM7250D)
Testing Yaesu FTM-7250D copy all ... ok
test_detect (tests.TestCase_YaesuFTM7250D)
Testing Yaesu FTM-7250D detect ... ok
test_edges (tests.TestCase_YaesuFTM7250D)
Testing Yaesu FTM-7250D edges ... ok
test_settings (tests.TestCase_YaesuFTM7250D)
Testing Yaesu FTM-7250D settings ... skipped 'Settings not supported'
----------------------------------------------------------------------
Ran 1001 tests in 402.888s
OK (skipped=141)
struct memory {
bbcd rx_freq[4];
bbcd tx_freq[4];
lbcd rx_tone[2];
lbcd tx_tone[2];
u8 unknown10:5,
highpower:1,
unknown11:2;
u8 unknown20:4,
narrow:1,
unknown21:3;
u8 unknown31:1,
scanadd:1,
unknown32:6;
u8 unknown4;
};
struct name {
char name[7];
};
#seekto 0x0010;
struct memory channels[128];
#seekto 0x08C0;
struct name names[128];
#seekto 0x2020;
struct memory vfo1;
struct memory vfo2;
style create: /chirp/.tox/style
style installdeps: pep8==1.6.2, future
style inst: /chirp/.tox/.tmp/package/1/chirp-0.3.0dev.zip
style installed: DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.,chirp==0.3.0.dev0,configparser==3.7.4,contextlib2==0.5.5,filelock==3.0.12,future==0.15.2,importlib-metadata==0.18,Mako==1.0.3,MarkupSafe==0.23,mercurial==3.7.3,packaging==19.0,pathlib2==2.3.4,pep8==1.6.2,pluggy==0.12.0,py==1.8.0,pygobject==3.20.0,pyparsing==2.4.0,pyserial==3.0.1,scandir==1.10.0,six==1.12.0,toml==0.10.0,tox==3.13.2,virtualenv==16.6.1,zipp==0.5.2
style run-test-pre: PYTHONHASHSEED='1324379901'
style run-test: commands[0] | python ./tools/cpep8.py
___________________________________ summary ____________________________________
unit: commands succeeded
driver: commands succeeded
style: commands succeeded
congratulations :)
Email was triggered for: Success
Sending email for trigger: Success
1
0
[chirp_devel] [PATCH] [TH-UV88] New Model: TYT TH-UV88 (replacement for previous patch)
by Jim Unroe 19 Nov '20
by Jim Unroe 19 Nov '20
19 Nov '20
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1605729943 18000
# Wed Nov 18 15:05:43 2020 -0500
# Node ID 9379757e3946f6da034d96093ad188c9b93dd622
# Parent d5e496f563fdfc9ea89dea5f119357235b82db6f
[TH-UV88] New Model: TYT TH-UV88 (replacement for previous patch)
This patch adds support for the TYT TH-UV88
Initial radio protocol decode, channels and memory layout
by James Berry <james(a)coppermoth.com>, Summer 2020
Related to #7817
diff -r d5e496f563fd -r 9379757e3946 chirp/drivers/th_uv88.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/th_uv88.py Wed Nov 18 15:05:43 2020 -0500
@@ -0,0 +1,918 @@
+# Version 1.0 for TYT-UV88
+# Initial radio protocol decode, channels and memory layout
+# by James Berry <james(a)coppermoth.com>, Summer 2020
+# Additional configuration and help, 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
+import math
+from chirp import chirp_common, directory, memmap
+from chirp import bitwise, errors, util
+from chirp.settings import RadioSettingGroup, RadioSetting, \
+ RadioSettingValueBoolean, RadioSettingValueList, \
+ RadioSettingValueString, RadioSettingValueInteger, \
+ RadioSettingValueFloat, RadioSettings, InvalidValueError
+from textwrap import dedent
+
+LOG = logging.getLogger(__name__)
+
+MEM_FORMAT = """
+struct chns {
+ ul32 rxfreq;
+ ul32 txfreq;
+ ul16 scramble:4
+ rxtone:12; //decode:12
+ ul16 decodeDSCI:1
+ encodeDSCI:1
+ unk1:1
+ unk2:1
+ txtone:12; //encode:12
+ u8 power:2
+ wide:2
+ b_lock:2
+ unk3:2;
+ u8 unk4:3
+ signal:2
+ displayName:1
+ unk5:2;
+ u8 unk6:2
+ pttid:2
+ step:4; // not required
+ u8 name[6];
+};
+
+struct vfo {
+ ul32 rxfreq;
+ ul32 txfreq; // displayed as an offset
+ ul16 scramble:4
+ rxtone:12; //decode:12
+ ul16 decodeDSCI:1
+ encodeDSCI:1
+ unk1:1
+ unk2:1
+ txtone:12; //encode:12
+ u8 power:2
+ wide:2
+ b_lock:2
+ unk3:2;
+ u8 unk4:3
+ signal:2
+ displayName:1
+ unk5:2;
+ u8 unk6:2
+ pttid:2
+ step:4;
+ u8 name[6];
+};
+
+struct chname {
+ u8 extra_name[10];
+};
+
+#seekto 0x0000;
+struct chns chan_mem[199];
+
+#seekto 0x1960;
+struct chname chan_name[199];
+
+#seekto 0x1180;
+struct {
+ u8 bitmap[26]; // one bit for each channel marked in use
+} chan_avail;
+
+#seekto 0x11A0;
+struct {
+ u8 bitmap[26]; // one bit for each channel skipped
+} chan_skip;
+
+#seekto 0x1140;
+struct {
+ u8 autoKeylock:1, // 0x1140 [18] *OFF, On
+ unk_bit6_5:2, //
+ vfomrmode:1, // *VFO, MR
+ unk_bit3_0:4; //
+ u8 unk_1141; // 0x1141
+ u8 unk_1142; // 0x1142
+ u8 unk_bit7_3:5, //
+ ab:1, // * A, B
+ unk_bit1_0:2; //
+} workmodesettings;
+
+#seekto 0x1160;
+struct {
+ u8 introScreen1[12]; // 0x1160 *Intro Screen Line 1(truncated to 12 alpha
+ // text characters)
+ u8 offFreqVoltage : 3, // 0x116C unknown referred to in code but not on
+ // screen
+ unk_bit4 : 1, //
+ sqlLevel : 4; // [05] *OFF, 1-9
+ u8 beep : 1 // 0x116D [09] *OFF, On
+ callKind : 2, // code says 1750,2100,1000,1450 as options
+ // not on screen
+ introScreen: 2, // [20] *OFF, Voltage, Char String
+ unkstr2: 2, //
+ txChSelect : 1; // [02] *Last CH, Main CH
+ u8 autoPowOff : 3, // 0x116E not on screen? OFF, 30Min, 1HR, 2HR
+ unk : 1, //
+ tot : 4; // [11] *OFF, 30 Second, 60 Second, 90 Second,
+ // ... , 270 Second
+ u8 unk_bit7:1, // 0x116F
+ roger:1, // [14] *OFF, On
+ dailDef:1, // Unknown - 'Volume, Frequency'
+ language:1, // ?Chinese, English
+ unk_bit3:1, //
+ endToneElim:1, // *OFF, Frequency
+ unkCheckBox1:1, //
+ unkCheckBox2:1; //
+ u8 scanResumeTime : 2, // 0x1170 2S, 5S, 10S, 15S (not on screen)
+ disMode : 2, // [33] *Frequency, Channel, Name
+ scanType: 2, // [17] *To, Co, Se
+ ledMode: 2; // [07] *Off, On, Auto
+ u8 unky; // 0x1171
+ u8 str6; // 0x1172 Has flags to do with logging - factory
+ // enabled (bits 16,64,128)
+ u8 unk; // 0x1173
+ u8 swAudio : 1, // 0x1174 [19] *OFF, On
+ radioMoni : 1, // [34]*OFF, On
+ keylock : 1, // *OFF, Auto
+ dualWait : 1, // [06] *OFF, On
+ unk_bit3 : 1, //
+ light : 3; // [08] *1, 2, 3, 4, 5, 6, 7
+ u8 voxSw : 1, // 0x1175 [13] *OFF, On
+ voxDelay: 4, // *0.5S, 1.0S, 1.5S, 2.0S, 2.5S, 3.0S, 3.5S,
+ // 4.0S, 4.5S, 5.0S
+ voxLevel : 3; // [03] *1, 2, 3, 4, 5, 6, 7
+ u8 str9 : 4, // 0x1176
+ saveMode : 2, // [16] *OFF, 1:1, 1:2, 1:4
+ keyMode : 2; // [32] *ALL, PTT, KEY, Key & Side Key
+ u8 unk2; // 0x1177
+ u8 unk3; // 0x1178
+ u8 unk4; // 0x1179
+ u8 name2[6]; // 0x117A unused
+} basicsettings;
+
+#seekto 0x1940;
+struct {
+ char name1[15]; // Intro Screen Line 1 (16 alpha text characters)
+ u8 unk1;
+ char name2[15]; // Intro Screen Line 2 (16 alpha text characters)
+ u8 unk2;
+} openradioname;
+
+"""
+
+MEM_SIZE = 0x22A0
+BLOCK_SIZE = 0x20
+STIMEOUT = 2
+BAUDRATE = 57600
+
+# Channel power: 3 levels
+POWER_LEVELS = [chirp_common.PowerLevel("High", watts=5.00),
+ chirp_common.PowerLevel("Mid", watts=2.50),
+ chirp_common.PowerLevel("Low", watts=0.50)]
+
+SCRAMBLE_LIST = ["OFF", "1", "2", "3", "4", "5", "6", "7", "8"]
+B_LOCK_LIST = ["OFF", "Sub", "Carrier"]
+OPTSIG_LIST = ["OFF", "DTMF", "2TONE", "5TONE"]
+PTTID_LIST = ["Off", "BOT", "EOT", "Both"]
+STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 25.0, 50.0, 100.0]
+LIST_STEPS = [str(x) for x in STEPS]
+
+
+def _clean_buffer(radio):
+ radio.pipe.timeout = 0.005
+ junk = radio.pipe.read(256)
+ radio.pipe.timeout = STIMEOUT
+ if junk:
+ LOG.debug("Got %i bytes of junk before starting" % len(junk))
+
+
+def _rawrecv(radio, amount):
+ """Raw read from the radio device"""
+ data = ""
+ try:
+ data = radio.pipe.read(amount)
+ except Exception:
+ _exit_program_mode(radio)
+ msg = "Generic error reading data from radio; check your cable."
+ raise errors.RadioError(msg)
+
+ if len(data) != amount:
+ _exit_program_mode(radio)
+ msg = "Error reading from radio: not the amount of data we want."
+ raise errors.RadioError(msg)
+
+ return data
+
+
+def _rawsend(radio, data):
+ """Raw send to the radio device"""
+ try:
+ radio.pipe.write(data)
+ except Exception:
+ raise errors.RadioError("Error sending data to radio")
+
+
+def _make_read_frame(addr, length):
+ frame = "\xFE\xFE\xEE\xEF\xEB"
+ """Pack the info in the header format"""
+ frame += struct.pack(">ih", addr, length)
+
+ frame += "\xFD"
+ # Return the data
+ return frame
+
+
+def _make_write_frame(addr, length, data=""):
+ frame = "\xFE\xFE\xEE\xEF\xE4"
+
+ """Pack the info in the header format"""
+ output = struct.pack(">ih", addr, length)
+ # Add the data if set
+ if len(data) != 0:
+ output += data
+
+ frame += output
+ frame += _calculate_checksum(output)
+
+ frame += "\xFD"
+ # Return the data
+ return frame
+
+
+def _calculate_checksum(data):
+ num = 0
+ for x in range(0, len(data)):
+ num = (num + ord(data[x])) % 256
+
+ if num == 0:
+ return chr(0)
+
+ return chr(256 - num)
+
+
+def _recv(radio, addr, length):
+ """Get data from the radio """
+
+ data = _rawrecv(radio, length)
+
+ # DEBUG
+ LOG.info("Response:")
+ LOG.debug(util.hexprint(data))
+
+ return data
+
+
+def _do_ident(radio):
+ """Put the radio in PROGRAM mode & identify it"""
+ radio.pipe.baudrate = BAUDRATE
+ radio.pipe.parity = "N"
+ radio.pipe.timeout = STIMEOUT
+
+ # Flush input buffer
+ _clean_buffer(radio)
+
+ # Ident radio
+ magic = "\xFE\xFE\xEE\xEF\xE0\x55\x56\x38\x38\xFD"
+ _rawsend(radio, magic)
+ ack = _rawrecv(radio, 36)
+
+ if not ack.startswith("\xFE\xFE\xEF\xEE\xE1\x55\x56\x38\x38"
+ ) or not ack.endswith("\xFD"):
+ _exit_program_mode(radio)
+ if ack:
+ LOG.debug(repr(ack))
+ raise errors.RadioError("Radio did not respond as expected (A)")
+
+ return True
+
+
+def _exit_program_mode(radio):
+ # This may be the last part of a read
+ magic = "\xFE\xFE\xEE\xEF\xE5\x55\x56\x38\x38\xFD"
+ _rawsend(radio, magic)
+ ack = _rawrecv(radio, 7)
+ if ack != "\xFE\xFE\xEF\xEE\xE6\x00\xFD":
+ _exit_program_mode(radio)
+ if ack:
+ LOG.debug(repr(ack))
+ raise errors.RadioError("Radio did not respond as expected (B)")
+
+
+def _download(radio):
+ """Get the memory map"""
+
+ # Put radio in program mode and identify it
+ _do_ident(radio)
+
+ # Enter read mode
+ magic = "\xFE\xFE\xEE\xEF\xE2\x55\x56\x38\x38\xFD"
+ _rawsend(radio, magic)
+ ack = _rawrecv(radio, 7)
+ if ack != "\xFE\xFE\xEF\xEE\xE6\x00\xFD":
+ _exit_program_mode(radio)
+ if ack:
+ LOG.debug(repr(ack))
+ raise errors.RadioError("Radio did not respond to enter read mode")
+
+ # UI progress
+ status = chirp_common.Status()
+ status.cur = 0
+ status.max = MEM_SIZE / BLOCK_SIZE
+ status.msg = "Cloning from radio..."
+ radio.status_fn(status)
+
+ data = ""
+ for addr in range(0, MEM_SIZE, BLOCK_SIZE):
+ frame = _make_read_frame(addr, BLOCK_SIZE)
+ # DEBUG
+ LOG.debug("Frame=" + util.hexprint(frame))
+
+ # Sending the read request
+ _rawsend(radio, frame)
+
+ # Now we read data
+ d = _recv(radio, addr, BLOCK_SIZE + 13)
+
+ LOG.debug("Response Data= " + util.hexprint(d))
+
+ if not d.startswith("\xFE\xFE\xEF\xEE\xE4"):
+ LOG.warning("Incorrect start")
+ if not d.endswith("\xFD"):
+ LOG.warning("Incorrect end")
+ # could validate the block data
+
+ # Aggregate the data
+ data += d[11:-2]
+
+ # UI Update
+ status.cur = addr / BLOCK_SIZE
+ status.msg = "Cloning from radio..."
+ radio.status_fn(status)
+
+ _exit_program_mode(radio)
+
+ return data
+
+
+def _upload(radio):
+ """Upload procedure"""
+ # Put radio in program mode and identify it
+ _do_ident(radio)
+
+ magic = "\xFE\xFE\xEE\xEF\xE3\x55\x56\x38\x38\xFD"
+ _rawsend(radio, magic)
+ ack = _rawrecv(radio, 7)
+ if ack != "\xFE\xFE\xEF\xEE\xE6\x00\xFD":
+ _exit_program_mode(radio)
+ if ack:
+ LOG.debug(repr(ack))
+ raise errors.RadioError("Radio did not respond to enter write mode")
+
+ # UI progress
+ status = chirp_common.Status()
+ status.cur = 0
+ status.max = MEM_SIZE / BLOCK_SIZE
+ status.msg = "Cloning to radio..."
+ radio.status_fn(status)
+
+ # The fun starts here
+ for addr in range(0, MEM_SIZE, BLOCK_SIZE):
+ # Official programmer skips writing these memory locations
+ if addr >= 0x1680 and addr < 0x1940:
+ continue
+
+ # Sending the data
+ data = radio.get_mmap()[addr:addr + BLOCK_SIZE]
+
+ frame = _make_write_frame(addr, BLOCK_SIZE, data)
+ LOG.warning("Frame:%s:" % util.hexprint(frame))
+ _rawsend(radio, frame)
+
+ ack = _rawrecv(radio, 7)
+ LOG.debug("Response Data= " + util.hexprint(ack))
+
+ if not ack.startswith("\xFE\xFE\xEF\xEE\xE6\x00\xFD"):
+ LOG.warning("Unexpected response")
+ _exit_program_mode(radio)
+ msg = "Bad ack writing block 0x%04x" % addr
+ raise errors.RadioError(msg)
+
+ # UI Update
+ status.cur = addr / BLOCK_SIZE
+ status.msg = "Cloning to radio..."
+ radio.status_fn(status)
+
+ _exit_program_mode(radio)
+
+
+def _do_map(chn, sclr, mary):
+ """Set or Clear the chn (1-128) bit in mary[] word array map"""
+ # chn is 1-based channel, sclr:1 = set, 0= = clear, 2= return state
+ # mary[] is u8 array, but the map is by nibbles
+ ndx = int(math.floor((chn - 1) / 8))
+ bv = (chn - 1) % 8
+ msk = 1 << bv
+ mapbit = sclr
+ if sclr == 1: # Set the bit
+ mary[ndx] = mary[ndx] | msk
+ elif sclr == 0: # clear
+ mary[ndx] = mary[ndx] & (~ msk) # ~ is complement
+ else: # return current bit state
+ mapbit = 0
+ if (mary[ndx] & msk) > 0:
+ mapbit = 1
+ return mapbit
+
+
+(a)directory.register
+class THUV88Radio(chirp_common.CloneModeRadio):
+ """TYT UV88 Radio"""
+ VENDOR = "TYT"
+ MODEL = "TH-UV88"
+ MODES = ['WFM', 'FM', 'NFM']
+ TONES = chirp_common.TONES
+ DTCS_CODES = chirp_common.DTCS_CODES
+ NAME_LENGTH = 10
+ DTMF_CHARS = list("0123456789ABCD*#")
+ # 136-174, 400-480
+ VALID_BANDS = [(136000000, 174000000), (400000000, 480000000)]
+
+ # Valid chars on the LCD
+ VALID_CHARS = chirp_common.CHARSET_ALPHANUMERIC + \
+ "`!\"#$%&'()*+,-./:;<=>?@[]^_"
+
+ @classmethod
+ def get_prompts(cls):
+ rp = chirp_common.RadioPrompts()
+ rp.info = \
+ ('TYT UV-88\n')
+
+ rp.pre_download = _(dedent("""\
+ This is an early stage beta driver
+ """))
+ rp.pre_upload = _(dedent("""\
+ This is an early stage beta driver - upload at your own risk
+ """))
+ return rp
+
+ def get_features(self):
+ rf = chirp_common.RadioFeatures()
+ rf.has_settings = True
+ rf.has_bank = False
+ rf.has_comment = False
+ rf.has_tuning_step = False # Not as chan feature
+ rf.valid_tuning_steps = STEPS
+ rf.can_odd_split = False
+ rf.has_name = True
+ rf.has_offset = True
+ rf.has_mode = True
+ rf.has_dtcs = True
+ rf.has_rx_dtcs = True
+ rf.has_dtcs_polarity = True
+ rf.has_ctone = True
+ rf.has_cross = True
+ rf.has_sub_devices = False
+ rf.valid_name_length = self.NAME_LENGTH
+ rf.valid_modes = self.MODES
+ rf.valid_characters = self.VALID_CHARS
+ rf.valid_duplexes = ["-", "+", "off", ""]
+ rf.valid_tmodes = ['', 'Tone', 'TSQL', 'DTCS', 'Cross']
+ rf.valid_cross_modes = ["Tone->Tone", "DTCS->", "->DTCS",
+ "Tone->DTCS", "DTCS->Tone", "->Tone",
+ "DTCS->DTCS"]
+ rf.valid_skips = []
+ rf.valid_power_levels = POWER_LEVELS
+ rf.valid_dtcs_codes = chirp_common.ALL_DTCS_CODES # this is just to
+ # get it working, not sure this is right
+ rf.valid_bands = self.VALID_BANDS
+ rf.memory_bounds = (1, 199)
+ rf.valid_skips = ["", "S"]
+ return rf
+
+ def sync_in(self):
+ """Download from radio"""
+ try:
+ data = _download(self)
+ except errors.RadioError:
+ # Pass through any real errors we raise
+ raise
+ except Exception:
+ # If anything unexpected happens, make sure we raise
+ # a RadioError and log the problem
+ LOG.exception('Unexpected error during download')
+ raise errors.RadioError('Unexpected error communicating '
+ 'with the radio')
+ self._mmap = memmap.MemoryMap(data)
+ self.process_mmap()
+
+ def sync_out(self):
+ """Upload to radio"""
+
+ try:
+ _upload(self)
+ except Exception:
+ # If anything unexpected happens, make sure we raise
+ # a RadioError and log the problem
+ LOG.exception('Unexpected error during upload')
+ raise errors.RadioError('Unexpected error communicating '
+ 'with the radio')
+
+ def process_mmap(self):
+ """Process the mem map into the mem object"""
+ self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
+
+ def get_raw_memory(self, number):
+ return repr(self._memobj.memory[number - 1])
+
+ def set_memory(self, memory):
+ """A value in a UI column for chan 'number' has been modified."""
+ # update all raw channel memory values (_mem) from UI (mem)
+ _mem = self._memobj.chan_mem[memory.number - 1]
+ _name = self._memobj.chan_name[memory.number - 1]
+
+ if memory.empty:
+ _do_map(memory.number, 0, self._memobj.chan_avail.bitmap)
+ return
+
+ _do_map(memory.number, 1, self._memobj.chan_avail.bitmap)
+
+ if memory.skip == "":
+ _do_map(memory.number, 1, self._memobj.chan_skip.bitmap)
+ else:
+ _do_map(memory.number, 0, self._memobj.chan_skip.bitmap)
+
+ return self._set_memory(memory, _mem, _name)
+
+ def get_memory(self, number):
+ # radio first channel is 1, mem map is base 0
+ _mem = self._memobj.chan_mem[number - 1]
+ _name = self._memobj.chan_name[number - 1]
+ mem = chirp_common.Memory()
+ mem.number = number
+
+ # Determine if channel is empty
+
+ if _do_map(number, 2, self._memobj.chan_avail.bitmap) == 0:
+ mem.empty = True
+ return mem
+
+ if _do_map(mem.number, 2, self._memobj.chan_skip.bitmap) > 0:
+ mem.skip = ""
+ else:
+ mem.skip = "S"
+
+ return self._get_memory(mem, _mem, _name)
+
+ def _get_memory(self, mem, _mem, _name):
+ """Convert raw channel memory data into UI columns"""
+ mem.extra = RadioSettingGroup("extra", "Extra")
+
+ mem.empty = False
+ # This function process both 'normal' and Freq up/down' entries
+ mem.freq = int(_mem.rxfreq) * 10
+
+ if _mem.txfreq == 0xFFFFFFFF:
+ # TX freq not set
+ mem.duplex = "off"
+ mem.offset = 0
+ elif int(_mem.rxfreq) == int(_mem.txfreq):
+ mem.duplex = ""
+ mem.offset = 0
+ else:
+ mem.duplex = int(_mem.rxfreq) > int(_mem.txfreq) \
+ and "-" or "+"
+ mem.offset = abs(int(_mem.rxfreq) - int(_mem.txfreq)) * 10
+
+ mem.name = ""
+ for i in range(6): # 0 - 6
+ mem.name += chr(_mem.name[i])
+ for i in range(10):
+ mem.name += chr(_name.extra_name[i])
+
+ mem.name = mem.name.rstrip() # remove trailing spaces
+
+ # ########## TONE ##########
+
+ if _mem.txtone > 2600:
+ # All off
+ txmode = ""
+ elif _mem.txtone > 511:
+ txmode = "Tone"
+ mem.rtone = int(_mem.txtone) / 10.0
+ else:
+ # DTSC
+ txmode = "DTCS"
+ mem.dtcs = int(format(int(_mem.txtone), 'o'))
+
+ if _mem.rxtone > 2600:
+ rxmode = ""
+ elif _mem.rxtone > 511:
+ rxmode = "Tone"
+ mem.ctone = int(_mem.rxtone) / 10.0
+ else:
+ rxmode = "DTCS"
+ mem.rx_dtcs = int(format(int(_mem.rxtone), 'o'))
+
+ mem.dtcs_polarity = ("N", "R")[_mem.encodeDSCI] + (
+ "N", "R")[_mem.decodeDSCI]
+
+ mem.tmode = ""
+ if txmode == "Tone" and not rxmode:
+ mem.tmode = "Tone"
+ elif txmode == rxmode and txmode == "Tone" and mem.rtone == mem.ctone:
+ mem.tmode = "TSQL"
+ elif txmode == rxmode and txmode == "DTCS" and mem.dtcs == mem.rx_dtcs:
+ mem.tmode = "DTCS"
+ elif rxmode or txmode:
+ mem.tmode = "Cross"
+ mem.cross_mode = "%s->%s" % (txmode, rxmode)
+
+ # ########## TONE ##########
+
+ mem.mode = self.MODES[_mem.wide]
+ mem.power = POWER_LEVELS[int(_mem.power)]
+
+ b_lock = RadioSetting("b_lock", "B_Lock",
+ RadioSettingValueList(B_LOCK_LIST,
+ B_LOCK_LIST[_mem.b_lock]))
+ mem.extra.append(b_lock)
+
+ b_lock = RadioSetting("step", "Step",
+ RadioSettingValueList(LIST_STEPS,
+ LIST_STEPS[_mem.step]))
+ mem.extra.append(b_lock)
+
+ scramble_value = _mem.scramble
+ if scramble_value >= 8: # Looks like OFF is 0x0f ** CONFIRM
+ scramble_value = 0
+ scramble = RadioSetting("scramble", "Scramble",
+ RadioSettingValueList(SCRAMBLE_LIST,
+ SCRAMBLE_LIST[
+ scramble_value]))
+ mem.extra.append(scramble)
+
+ optsig = RadioSetting("signal", "Optional signaling",
+ RadioSettingValueList(
+ OPTSIG_LIST,
+ OPTSIG_LIST[_mem.signal]))
+ mem.extra.append(optsig)
+
+ rs = RadioSetting("pttid", "PTT ID",
+ RadioSettingValueList(PTTID_LIST,
+ PTTID_LIST[_mem.pttid]))
+ mem.extra.append(rs)
+
+ return mem
+
+ def _set_memory(self, mem, _mem, _name):
+ # """Convert UI column data (mem) into MEM_FORMAT memory (_mem)."""
+
+ _mem.rxfreq = mem.freq / 10
+ if mem.duplex == "off":
+ _mem.txfreq = 0xFFFFFFFF
+ elif mem.duplex == "+":
+ _mem.txfreq = (mem.freq + mem.offset) / 10
+ elif mem.duplex == "-":
+ _mem.txfreq = (mem.freq - mem.offset) / 10
+ else:
+ _mem.txfreq = _mem.rxfreq
+
+ out_name = mem.name.ljust(16)
+
+ for i in range(6): # 0 - 6
+ _mem.name[i] = ord(out_name[i])
+ for i in range(10):
+ _name.extra_name[i] = ord(out_name[i+6])
+
+ if mem.name != "":
+ _mem.displayName = 1 # Name only displayed if this is set on
+ else:
+ _mem.displayName = 0
+
+ rxmode = ""
+ txmode = ""
+
+ if mem.tmode == "Tone":
+ txmode = "Tone"
+ elif mem.tmode == "TSQL":
+ rxmode = "Tone"
+ txmode = "TSQL"
+ elif mem.tmode == "DTCS":
+ rxmode = "DTCSSQL"
+ txmode = "DTCS"
+ elif mem.tmode == "Cross":
+ txmode, rxmode = mem.cross_mode.split("->", 1)
+
+ if mem.dtcs_polarity[1] == "N":
+ _mem.decodeDSCI = 0
+ else:
+ _mem.decodeDSCI = 1
+
+ if rxmode == "":
+ _mem.rxtone = 0xFFF
+ elif rxmode == "Tone":
+ _mem.rxtone = int(float(mem.ctone) * 10)
+ elif rxmode == "DTCSSQL":
+ _mem.rxtone = int(str(mem.dtcs), 8)
+ elif rxmode == "DTCS":
+ _mem.rxtone = int(str(mem.rx_dtcs), 8)
+
+ if mem.dtcs_polarity[0] == "N":
+ _mem.encodeDSCI = 0
+ else:
+ _mem.encodeDSCI = 1
+
+ if txmode == "":
+ _mem.txtone = 0xFFF
+ elif txmode == "Tone":
+ _mem.txtone = int(float(mem.rtone) * 10)
+ elif txmode == "TSQL":
+ _mem.txtone = int(float(mem.ctone) * 10)
+ elif txmode == "DTCS":
+ _mem.txtone = int(str(mem.dtcs), 8)
+
+ _mem.wide = self.MODES.index(mem.mode)
+ _mem.power = 0 if mem.power is None else POWER_LEVELS.index(mem.power)
+
+ for element in mem.extra:
+ setattr(_mem, element.get_name(), element.value)
+
+ return
+
+ def get_settings(self):
+ """Translate the MEM_FORMAT structs into setstuf in the UI"""
+ _settings = self._memobj.basicsettings
+ _workmode = self._memobj.workmodesettings
+
+ basic = RadioSettingGroup("basic", "Basic Settings")
+ group = RadioSettings(basic)
+
+ # Menu 02 - TX Channel Select
+ options = ["Last Channel", "Main Channel"]
+ rx = RadioSettingValueList(options, options[_settings.txChSelect])
+ rset = RadioSetting("basicsettings.txChSelect",
+ "Priority Transmit", rx)
+ basic.append(rset)
+
+ # Menu 03 - VOX Level
+ rx = RadioSettingValueInteger(1, 7, _settings.voxLevel - 1)
+ rset = RadioSetting("basicsettings.voxLevel", "Vox Level", rx)
+ basic.append(rset)
+
+ # Menu 05 - Squelch Level
+ options = ["OFF"] + ["%s" % x for x in range(1, 10)]
+ rx = RadioSettingValueList(options, options[_settings.sqlLevel])
+ rset = RadioSetting("basicsettings.sqlLevel", "Squelch Level", rx)
+ basic.append(rset)
+
+ # Menu 06 - Dual Wait
+ rx = RadioSettingValueBoolean(_settings.dualWait)
+ rset = RadioSetting("basicsettings.dualWait", "Dual Wait/Standby", rx)
+ basic.append(rset)
+
+ # Menu 07 - LED Mode
+ options = ["Off", "On", "Auto"]
+ rx = RadioSettingValueList(options, options[_settings.ledMode])
+ rset = RadioSetting("basicsettings.ledMode", "LED Display Mode", rx)
+ basic.append(rset)
+
+ # Menu 08 - Light
+ options = ["%s" % x for x in range(1, 8)]
+ rx = RadioSettingValueList(options, options[_settings.light])
+ rset = RadioSetting("basicsettings.light",
+ "Background Light Color", rx)
+ basic.append(rset)
+
+ # Menu 09 - Beep
+ rx = RadioSettingValueBoolean(_settings.beep)
+ rset = RadioSetting("basicsettings.beep", "Keypad Beep", rx)
+ basic.append(rset)
+
+ # Menu 11 - TOT
+ options = ["Off"] + ["%s seconds" % x for x in range(30, 300, 30)]
+ rx = RadioSettingValueList(options, options[_settings.tot])
+ rset = RadioSetting("basicsettings.tot",
+ "Transmission Time-out Timer", rx)
+ basic.append(rset)
+
+ # Menu 13 - VOX Switch
+ rx = RadioSettingValueBoolean(_settings.voxSw)
+ rset = RadioSetting("basicsettings.voxSw", "Vox Switch", rx)
+ basic.append(rset)
+
+ # Menu 14 - Roger
+ rx = RadioSettingValueBoolean(_settings.roger)
+ rset = RadioSetting("basicsettings.roger", "Roger Beep", rx)
+ basic.append(rset)
+
+ # Menu 16 - Save Mode
+ options = ["Off", "1:1", "1:2", "1:4"]
+ rx = RadioSettingValueList(options, options[_settings.saveMode])
+ rset = RadioSetting("basicsettings.saveMode", "Battery Save Mode", rx)
+ basic.append(rset)
+
+ # Menu 33 - Display Mode
+ options = ['Frequency', 'Channel', 'Name']
+ rx = RadioSettingValueList(options, options[_settings.disMode])
+ rset = RadioSetting("basicsettings.disMode", "LED Display Mode", rx)
+ basic.append(rset)
+
+ advanced = RadioSettingGroup("advanced", "Advanced Settings")
+ group.append(advanced)
+
+ # software only
+ options = ['0.5S', '1.0S', '1.5S', '2.0S', '2.5S', '3.0S', '3.5S',
+ '4.0S', '4.5S', '5.0S']
+ rx = RadioSettingValueList(options, options[_settings.voxDelay])
+ rset = RadioSetting("basicsettings.voxDelay", "VOX Delay", rx)
+ advanced.append(rset)
+
+ # software only
+ name = ""
+ for i in range(15): # 0 - 15
+ name += chr(self._memobj.openradioname.name1[i])
+ name = name.rstrip() # remove trailing spaces
+
+ rx = RadioSettingValueString(0, 15, name)
+ rset = RadioSetting("openradioname.name1", "Intro Line 1", rx)
+ advanced.append(rset)
+
+ # software only
+ name = ""
+ for i in range(15): # 0 - 15
+ name += chr(self._memobj.openradioname.name2[i])
+ name = name.rstrip() # remove trailing spaces
+
+ rx = RadioSettingValueString(0, 15, name)
+ rset = RadioSetting("openradioname.name2", "Intro Line 2", rx)
+ advanced.append(rset)
+
+ workmode = RadioSettingGroup("workmode", "Work Mode Settings")
+ group.append(workmode)
+
+ # Toggle with [#] key
+ options = ["Frequency", "Channel"]
+ rx = RadioSettingValueList(options, options[_workmode.vfomrmode])
+ rset = RadioSetting("workmodesettings.vfomrmode", "VFO/MR Mode", rx)
+ workmode.append(rset)
+
+ # Toggle with [A/B] key
+ options = ["A", "B"]
+ rx = RadioSettingValueList(options, options[_workmode.ab])
+ rset = RadioSetting("workmodesettings.ab", "A/B Select", rx)
+ workmode.append(rset)
+
+ return group # END get_settings()
+
+ def set_settings(self, settings):
+ _settings = self._memobj.basicsettings
+ _mem = self._memobj
+ for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
+ else:
+ try:
+ name = element.get_name()
+ if "." in name:
+ bits = name.split(".")
+ obj = self._memobj
+ for bit in bits[:-1]:
+ if "/" in bit:
+ bit, index = bit.split("/", 1)
+ index = int(index)
+ obj = getattr(obj, bit)[index]
+ else:
+ obj = getattr(obj, bit)
+ setting = bits[-1]
+ else:
+ obj = _settings
+ setting = element.get_name()
+
+ if element.has_apply_callback():
+ LOG.debug("Using apply callback")
+ element.run_apply_callback()
+ elif setting == "voxLevel":
+ setattr(obj, setting, int(element.value) + 1)
+ elif element.value.get_mutable():
+ LOG.debug("Setting %s = %s" % (setting, element.value))
+ setattr(obj, setting, element.value)
+ except Exception, e:
+ LOG.debug(element.get_name())
+ raise
diff -r d5e496f563fd -r 9379757e3946 tools/cpep8.manifest
--- a/tools/cpep8.manifest Fri Nov 13 08:07:04 2020 -0500
+++ b/tools/cpep8.manifest Wed Nov 18 15:05:43 2020 -0500
@@ -77,6 +77,7 @@
./chirp/drivers/th_uv3r.py
./chirp/drivers/th_uv3r25.py
./chirp/drivers/th_uv8000.py
+./chirp/drivers/th_uv88.py
./chirp/drivers/th_uvf8d.py
./chirp/drivers/thd72.py
./chirp/drivers/thuv1f.py
3
4
Stupid operator saved the revised driver with the Windows EOL instead of
Unix.
Here is the revised patch with Unix EOL and some style corrections.
Driver fix is a simple 100ms delay between download reads.
--
Rick DeWitt
AA0RD
Sequim, Washington, USA 98382
(360) 681-3494
2
1
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1605818908 18000
# Thu Nov 19 15:48:28 2020 -0500
# Node ID fc5a003877d69c859aced7a15963bfb9e0297115
# Parent d85fee6c62662ec28c675ee8128a5758d8f39eda
[H777] Add Alias for Retevis H777
This patch add an alias for the Retevis H777
#8451
diff -r d85fee6c6266 -r fc5a003877d6 chirp/drivers/h777.py
--- a/chirp/drivers/h777.py Wed Nov 04 21:21:54 2020 -0500
+++ b/chirp/drivers/h777.py Thu Nov 19 15:48:28 2020 -0500
@@ -271,6 +271,11 @@
MODEL = 'TW-325'
+class RetevisH777Alias(chirp_common.Alias):
+ VENDOR = 'Retevis'
+ MODEL = 'H777'
+
+
@directory.register
class H777Radio(chirp_common.CloneModeRadio):
"""HST H-777"""
@@ -281,7 +286,7 @@
BAUD_RATE = 9600
ALIASES = [ArcshellAR5, ArcshellAR6, GV8SAlias, GV9SAlias, A8SAlias,
- TenwayTW325Alias]
+ TenwayTW325Alias, RetevisH777Alias]
SIDEKEYFUNCTION_LIST = ["Off", "Monitor", "Transmit Power", "Alarm"]
# This code currently requires that ranges start at 0x0000
1
0
[chirp_devel] [PATCH] [anytone_iii] Modifications necessary to pass standard CHIRP automated testing
by Brad & Cindy Schuler 19 Nov '20
by Brad & Cindy Schuler 19 Nov '20
19 Nov '20
# HG changeset patch
# User Brad Schuler <brad(a)schuler.ws<mailto:brad@schuler.ws>>
# Date 1605593121 25200
# Mon Nov 16 23:05:21 2020 -0700
# Node ID 2df5ebf6cb44272135be7174f0df8c4325667889
# Parent ea826afbd7489de236b7d1895f4552a32d78fb04
[anytone_iii] Modifications necessary to pass standard CHIRP automated testing
Related to issue #3941
diff -r ea826afbd748 -r 2df5ebf6cb44 chirp/drivers/anytone_iii.py
--- a/chirp/drivers/anytone_iii.py Thu Nov 12 00:09:58 2020 -0700
+++ b/chirp/drivers/anytone_iii.py Mon Nov 16 23:05:21 2020 -0700
@@ -39,7 +39,7 @@
def __init__(self, radio, name='Banks'):
super(ATBankModel, self).__init__(radio, name)
self._banks = []
- self._memBounds = (0, 760)
+ self._memBounds = range(0, 750)
for i in range(0, 10):
self._banks.append(chirp_common.Bank(self, i, string.uppercase[i]))
@@ -53,6 +53,13 @@
self._radio.set_bank(memory.number, bank.get_index())
def remove_memory_from_mapping(self, memory, mapping):
+ # I would argue that removing a memory from a mapping in which it does not exist should not throw an error.
+ # The end result is the requested result. The memory is not in the mapping.
+ # However, to pass the CHIRP TestCaseBanks, I must throw an error. This causes more code to execute than necessary.
+ # I could just call _radio.clr_bank, but now I must get_bank and compare.
+ index = self._radio.get_bank(memory.number)
+ if (index is None or index != mapping.get_index()):
+ raise Exception("Memory %d is not in bank %s" % (memory.number, bank.get_name()))
self._radio.clr_bank(memory.number)
def get_mapping_memories(self, bank):
@@ -765,6 +772,7 @@
rf.has_settings = True
rf.valid_modes = MODES + ['AM']
rf.valid_tmodes = ['', 'Tone', 'TSQL', 'DTCS', 'Cross']
+ rf.valid_cross_modes = ["Tone->Tone", "DTCS->", "->DTCS", "Tone->DTCS", "DTCS->Tone", "->Tone", "DTCS->DTCS"]
rf.valid_duplexes = DUPLEXES
rf.valid_tuning_steps = TUNING_STEPS
rf.valid_bands = BANDS
@@ -1239,6 +1247,8 @@
dtmfId = element.value
elif name == "5ToneId":
fiveToneId = element.value
+ elif isinstance(element.value, _RadioSettingValueOffsetInt):
+ setattr(_emergency, name, int(element.value) + element.value.offset)
else:
setattr(_emergency, name, element.value)
if EMER_ENI_TYPES[_emergency.eniType] == 'DTMF':
2
1
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1604713197 18000
# Fri Nov 06 20:39:57 2020 -0500
# Node ID e2087ff853f21377832b5945f1b86cec8744a8bc
# Parent d85fee6c62662ec28c675ee8128a5758d8f39eda
[H777] Add Alias for Retevis H777
This patch add an alial for the Retevis H777
#xxxx
diff -r d85fee6c6266 -r e2087ff853f2 chirp/drivers/h777.py
--- a/chirp/drivers/h777.py Wed Nov 04 21:21:54 2020 -0500
+++ b/chirp/drivers/h777.py Fri Nov 06 20:39:57 2020 -0500
@@ -271,6 +271,11 @@
MODEL = 'TW-325'
+class RetevisH777Alias(chirp_common.Alias):
+ VENDOR = 'Retevis'
+ MODEL = 'H777'
+
+
@directory.register
class H777Radio(chirp_common.CloneModeRadio):
"""HST H-777"""
@@ -281,7 +286,7 @@
BAUD_RATE = 9600
ALIASES = [ArcshellAR5, ArcshellAR6, GV8SAlias, GV9SAlias, A8SAlias,
- TenwayTW325Alias]
+ TenwayTW325Alias, RetevisH777Alias]
SIDEKEYFUNCTION_LIST = ["Off", "Monitor", "Transmit Power", "Alarm"]
# This code currently requires that ranges start at 0x0000
2
2
Patch to Luiton LT-725uv (Baojie BJ-218) fixing garbled downloads.
Added delay between reads.
--
Rick DeWitt
AA0RD
Sequim, Washington, USA 98382
(360) 681-3494
2
1