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
- 3 participants
- 2964 discussions
04 Sep '13
# HG changeset patch
# User Marco Filippi <iz3gme.marco(a)gmail.com>
# Date 1378304892 -7200
# Node ID 58c9c182fd3b13b7cdb644961eb343674f927f89
# Parent c9fba5fb96fc6342df68228e6c98e4f1743c0baf
[kg-uv6] support fm presets in settings
implement #1109
diff --git a/chirp/wouxun.py b/chirp/wouxun.py
--- a/chirp/wouxun.py
+++ b/chirp/wouxun.py
@@ -20,7 +20,8 @@
from chirp import util, chirp_common, bitwise, memmap, errors, directory
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueBoolean, RadioSettingValueList, \
- RadioSettingValueInteger, RadioSettingValueString
+ RadioSettingValueInteger, RadioSettingValueString, \
+ RadioSettingValueFloat
from chirp.wouxun_common import wipe_memory, do_download, do_upload
FREQ_ENCODE_TABLE = [ 0x7, 0xa, 0x0, 0x9, 0xb, 0x2, 0xe, 0x1, 0x3, 0xf ]
@@ -686,7 +687,8 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges")
- top = RadioSettingGroup("top", "All Settings", freqranges)
+ fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
+ top = RadioSettingGroup("top", "All Settings", freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
@@ -914,9 +916,76 @@
except Exception:
print ("Your ANI code is not six digits, which is not currently"
" supported in CHIRP.")
+
+ for i in range(0, 9):
+ if self._memobj.fm_presets_0[i] != 0xFFFF:
+ rs = RadioSetting("fm_presets_0_%1i" % i, "Bank 0 Location %i" % i,
+ RadioSettingValueBoolean(True),
+ RadioSettingValueFloat(76, 108, self._memobj.fm_presets_0[i]/10.0+76, 0.1, 1))
+ else:
+ rs = RadioSetting("fm_presets_0_%1i" % i, "Bank 0 Location %i" % i,
+ RadioSettingValueBoolean(False),
+ RadioSettingValueFloat(76, 108, 76, 0.1, 1))
+ fm_preset.append(rs)
+ for i in range(0, 9):
+ if self._memobj.fm_presets_1[i] != 0xFFFF:
+ rs = RadioSetting("fm_presets_1_%1i" % i, "Bank 1 Location %i" % i,
+ RadioSettingValueBoolean(True),
+ RadioSettingValueFloat(76, 108, self._memobj.fm_presets_1[i]/10.0+76, 0.1, 1))
+ else:
+ rs = RadioSetting("fm_presets_1_%1i" % i, "Bank 1 Location %i" % i,
+ RadioSettingValueBoolean(False),
+ RadioSettingValueFloat(76, 108, 76, 0.1, 1))
+ fm_preset.append(rs)
return top
+ def set_settings(self, settings):
+ for element in settings:
+ if not isinstance(element, RadioSetting):
+ if element.get_name() == "freqranges" :
+ self._set_freq_settings(element)
+ elif element.get_name() == "fm_preset" :
+ self._set_fm_preset(element)
+ else:
+ self.set_settings(element)
+ else:
+ try:
+ if "." in element.get_name():
+ bits = element.get_name().split(".")
+ obj = self._memobj
+ for bit in bits[:-1]:
+ obj = getattr(obj, bit)
+ setting = bits[-1]
+ else:
+ obj = self._memobj.settings
+ setting = element.get_name()
+ print "Setting %s = %s" % (setting, element.value)
+ setattr(obj, setting, element.value)
+ except Exception, e:
+ print element.get_name()
+ raise
+
+ def _set_fm_preset(self, settings):
+ obj = self._memobj
+ for element in settings:
+ try:
+ (bank, index) = (int(a) for a in element.get_name().split("_")[-2:])
+ val = element.value
+ if val[0].get_value():
+ value = int(val[1].get_value()*10-760)
+ else:
+ value = 0xffff
+ print "Setting fm_presets_%1i[%1i] = %s" % (bank, index, value)
+ if bank == 0:
+ setting = self._memobj.fm_presets_0
+ else:
+ setting = self._memobj.fm_presets_1
+ setting[index] = value
+ except Exception, e:
+ print element.get_name()
+ raise
+
@classmethod
def match_model(cls, filedata, filename):
if len(filedata) == 8192 and \
1
0
# HG changeset patch
# User Marco Filippi <iz3gme.marco(a)gmail.com>
# Date 1377772353 -7200
# Node ID c9fba5fb96fc6342df68228e6c98e4f1743c0baf
# Parent 208026ed42fcccd1e92bd92d6bb6775db81e04d6
[kg-uv6] support new model V2
fix #1041
diff --git a/chirp/wouxun.py b/chirp/wouxun.py
--- a/chirp/wouxun.py
+++ b/chirp/wouxun.py
@@ -525,7 +525,7 @@
"""Wouxun KG-UV6 (D and X variants)"""
MODEL = "KG-UV6"
- _querymodel = "HiWXUVD1\x02"
+ _querymodel = ("HiWXUVD1\x02", "HiKGUVD1\x02")
_MEM_FORMAT = """
#seekto 0x0010;
1
0
Tested changes:
[Jens Jensen <kd4tjx(a)yahoo.com>] initial support for Yaesu FT-90R channel editing. started framework for special channels and settings. #1089
Full log:
Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace
[workspace] $ hg showconfig paths.default
[workspace] $ hg pull --rev default
[workspace] $ hg update --clean --rev default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev 86910885e998d559dfdd6ba4c5fb0bf520fdee31
[workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune 86910885e998d559dfdd6ba4c5fb0bf520fdee31
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson9038866009444497288.sh
+ cd tests
+ ./run_tests
Registered Icom_IC-2820H = IC2820Radio
Registered AnyTone_5888UV = AnyTone5888UVRadio
Registered Icom_IC-2200H = IC2200Radio
Registered Yaesu_FT-2800M = FT2800Radio
Registered Yaesu_VX-3 = VX3Radio
Registered Icom_IC-2100H = IC2100Radio
Registered Yaesu_FTM-350 = FTM350Radio
Registered Icom_IC-91_92AD_ICF_File = IC9xICFRadio
Registered Icom_IC-V82_U82 = ICx8xRadio
Registered Yaesu_VX-6 = VX6Radio
Registered Yaesu_VX-5 = VX5Radio
Registered Yaesu_FT-60 = FT60Radio
Registered Yaesu_VX-7 = VX7Radio
Registered Baofeng_UV-5R = BaofengUV5R
Registered Baofeng_F-11 = BaofengF11Radio
Registered Baofeng_UV-82 = BaofengUV82Radio
Registered Yaesu_FT-1802M = FT1802Radio
Registered Kenwood_TK-7102 = KenwoodTK7102Radio
Registered Kenwood_TK-8102 = KenwoodTK8102Radio
Registered Kenwood_TK-7108 = KenwoodTK7108Radio
Registered Kenwood_TK-8108 = KenwoodTK8108Radio
Registered Icom_ID-31A = ID31Radio
Registered Icom_ID-51A = ID51Radio
Registered Icom_IC-2720H = IC2720Radio
Registered Icom_IC-T8A = ICT8ARadio
Registered Wouxun_KG-UVD1P = KGUVD1PRadio
Registered Wouxun_KG-UV6 = KGUV6DRadio
Registered Wouxun_KG-816 = KG816Radio
Registered Wouxun_KG-818 = KG818Radio
Registered TYT_TH-UVF1 = TYTTHUVF1Radio
Registered Yaesu_FT-90 = FT90Radio
Registered Generic_CSV = CSVRadio
Registered RT_Systems_CSV = RTCSVRadio
Registered Kenwood_ITM = ITMRadio
Registered Alinco_DR03T = DR03Radio
Registered Alinco_DR06T = DR06Radio
Registered Alinco_DR135T = DR135Radio
Registered Alinco_DR235T = DR235Radio
Registered Alinco_DR435T = DR435Radio
Registered Alinco_DJ596 = DJ596Radio
Registered Jetstream_JT220M = JT220MRadio
Registered Alinco_DJ175 = DJ175Radio
Registered Kenwood_TH-D7 = THD7Radio
Registered Kenwood_TH-D7G = THD7GRadio
Registered Kenwood_TM-D700 = TMD700Radio
Registered Kenwood_TM-V7 = TMV7Radio
Registered Kenwood_TM-G707 = TMG707Radio
Registered Kenwood_TH-G71 = THG71Radio
Registered Kenwood_TH-F6 = THF6ARadio
Registered Kenwood_TH-F7 = THF7ERadio
Registered Kenwood_TM-D710 = TMD710Radio
Registered Kenwood_TH-D72_live_mode = THD72Radio
Registered Kenwood_TM-V71 = TMV71Radio
Registered Kenwood_TH-K2 = THK2Radio
Registered Kenwood_TM-271 = TM271Radio
Registered Kenwood_TM-471 = TM471Radio
Registered Yaesu_VX-8_R = VX8Radio
Registered Yaesu_VX-8_DR = VX8DRadio
Registered Yaesu_VX-8_GE = VX8GERadio
Registered Icom_IC-T7H = ICT7HRadio
Registered Icom_IC-Q7A = ICQ7Radio
Registered Baofeng_UV-B5 = BaofengUVB5
Registered Generic_XML = XMLRadio
Registered Kenwood_HMK = HMKRadio
Registered Kenwood_TH-D72_clone_mode = THD72Radio
Registered Icom_IC-91_92AD = IC9xRadio
Registered Icom_IC-T70 = ICT70Radio
Registered Icom_IC-208H = IC208Radio
Registered Icom_ID-800H_v2 = ID800v2Radio
Registered Icom_7200 = Icom7200Radio
Registered Icom_7000 = Icom7000Radio
Registered Icom_746 = Icom746Radio
Registered ARRL_Travel_Plus = TpeRadio
Registered Vertex_Standard_VXA-700 = VXA700Radio
Registered Icom_IC-W32A = ICW32ARadio
Registered Baofeng_UV-3R = UV3RRadio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Yaesu_FT-7800 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered Yaesu_FT-817 = FT817Radio
Registered Yaesu_FT-817ND = FT817NDRadio
Registered Yaesu_FT-817ND_US = FT817NDUSRadio
Registered Yaesu_FT-857_897 = FT857Radio
Registered Yaesu_FT-857_897_US = FT857USRadio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
Registered TYT_TH-UV3R = TYTUV3RRadio
Alinco DJ175 Detect PASSED: All tests
Alinco DJ175 CopyAll PASSED: All tests
Alinco DJ175 Clone PASSED: All tests
Alinco DJ175 BruteForce PASSED: All tests
Alinco DJ175 Edges PASSED: All tests
Alinco DJ175 Banks SKIPPED: Banks not supported
Alinco DJ596 Detect PASSED: All tests
Alinco DJ596 CopyAll PASSED: All tests
Alinco DJ596 Clone PASSED: All tests
Alinco DJ596 BruteForce PASSED: All tests
Alinco DJ596 Edges PASSED: All tests
Alinco DJ596 Banks SKIPPED: Banks not supported
Alinco DR235T Detect PASSED: All tests
Alinco DR235T CopyAll PASSED: All tests
Alinco DR235T Clone PASSED: All tests
Alinco DR235T BruteForce PASSED: All tests
Alinco DR235T Edges PASSED: All tests
Alinco DR235T Banks SKIPPED: Banks not supported
Baofeng F-11 Detect PASSED: All tests
Baofeng F-11 CopyAll PASSED: All tests
Baofeng F-11 Clone PASSED: All tests
Baofeng F-11 BruteForce PASSED: All tests
Baofeng F-11 Edges PASSED: All tests
Baofeng F-11 Banks SKIPPED: Banks not supported
Baofeng UV-3R Detect PASSED: All tests
Baofeng UV-3R CopyAll PASSED: All tests
Baofeng UV-3R Clone PASSED: All tests
Baofeng UV-3R BruteForce PASSED: All tests
Baofeng UV-3R Edges PASSED: All tests
Baofeng UV-3R Banks SKIPPED: Banks not supported
Baofeng UV-5R Detect PASSED: All tests
Baofeng UV-5R CopyAll PASSED: All tests
Baofeng UV-5R Clone PASSED: All tests
Baofeng UV-5R BruteForce PASSED: All tests
Baofeng UV-5R Edges PASSED: All tests
Baofeng UV-5R Banks SKIPPED: Banks not supported
Baofeng UV-B5 Detect PASSED: All tests
Baofeng UV-B5 CopyAll PASSED: All tests
Baofeng UV-B5 Clone PASSED: All tests
Baofeng UV-B5 BruteForce PASSED: All tests
Baofeng UV-B5 Edges PASSED: All tests
Baofeng UV-B5 Banks SKIPPED: Banks not supported
Icom IC-208H Detect PASSED: All tests
Icom IC-208H CopyAll PASSED: All tests
Icom IC-208H Clone PASSED: All tests
Icom IC-208H BruteForce PASSED: All tests
Icom IC-208H Edges PASSED: All tests
Icom IC-208H Banks PASSED: All tests
Icom IC-2100H Detect PASSED: All tests
Icom IC-2100H CopyAll PASSED: All tests
Icom IC-2100H Clone PASSED: All tests
Icom IC-2100H BruteForce PASSED: All tests
Icom IC-2100H Edges PASSED: All tests
Icom IC-2100H Banks SKIPPED: Banks not supported
Icom IC-2200H Detect PASSED: All tests
Icom IC-2200H CopyAll PASSED: All tests
Icom IC-2200H Clone PASSED: All tests
Icom IC-2200H BruteForce PASSED: All tests
Icom IC-2200H Edges PASSED: All tests
Icom IC-2200H Banks PASSED: All tests
Icom IC-2720H Detect PASSED: All tests
Icom IC-2720H CopyAll PASSED: All tests
Icom IC-2720H Clone PASSED: All tests
Icom IC-2720H BruteForce PASSED: All tests
Icom IC-2720H Edges PASSED: All tests
Icom IC-2720H Banks PASSED: All tests
Icom IC-2820H Detect PASSED: All tests
Icom IC-2820H CopyAll PASSED: All tests
Icom IC-2820H Clone PASSED: All tests
Icom IC-2820H BruteForce PASSED: All tests
Icom IC-2820H Edges PASSED: All tests
Icom IC-2820H Banks PASSED: All tests
Icom IC-Q7A Detect PASSED: All tests
Icom IC-Q7A CopyAll PASSED: All tests
Icom IC-Q7A Clone PASSED: All tests
Icom IC-Q7A BruteForce PASSED: All tests
Icom IC-Q7A Edges PASSED: All tests
Icom IC-Q7A Banks SKIPPED: Banks not supported
Icom IC-T70 Detect PASSED: All tests
Icom IC-T70 CopyAll PASSED: All tests
Icom IC-T70 Clone PASSED: All tests
Icom IC-T70 BruteForce PASSED: All tests
Icom IC-T70 Edges PASSED: All tests
Icom IC-T70 Banks PASSED: All tests
Icom IC-T7H Detect PASSED: All tests
Icom IC-T7H CopyAll PASSED: All tests
Icom IC-T7H Clone PASSED: All tests
Icom IC-T7H BruteForce PASSED: All tests
Icom IC-T7H Edges PASSED: All tests
Icom IC-T7H Banks SKIPPED: Banks not supported
Icom IC-T8A Detect PASSED: All tests
Icom IC-T8A CopyAll PASSED: All tests
Icom IC-T8A Clone PASSED: All tests
Icom IC-T8A BruteForce PASSED: All tests
Icom IC-T8A Edges PASSED: All tests
Icom IC-T8A Banks SKIPPED: Banks not supported
Icom IC-V82/U82 Detect PASSED: All tests
Icom IC-V82/U82 CopyAll PASSED: All tests
Icom IC-V82/U82 Clone PASSED: All tests
Icom IC-V82/U82 BruteForce PASSED: All tests
Icom IC-V82/U82 Edges PASSED: All tests
Icom IC-V82/U82 Banks PASSED: All tests
Icom IC-W32A VHF Detect PASSED: All tests
Icom IC-W32A VHF CopyAll PASSED: All tests
Icom IC-W32A VHF Clone PASSED: All tests
Icom IC-W32A VHF BruteForce PASSED: All tests
Icom IC-W32A VHF Edges PASSED: All tests
Icom IC-W32A VHF Banks SKIPPED: Banks not supported
Icom IC-W32A UHF Detect PASSED: All tests
Icom IC-W32A UHF CopyAll PASSED: All tests
Icom IC-W32A UHF Clone PASSED: All tests
Icom IC-W32A UHF BruteForce PASSED: All tests
Icom IC-W32A UHF Edges PASSED: All tests
Icom IC-W32A UHF Banks SKIPPED: Banks not supported
Icom ID-31A Detect PASSED: All tests
Icom ID-31A CopyAll PASSED: All tests
Icom ID-31A Clone PASSED: All tests
Icom ID-31A BruteForce PASSED: All tests
Icom ID-31A Edges PASSED: All tests
Icom ID-31A Banks PASSED: All tests
Icom ID-51A Detect PASSED: All tests
Icom ID-51A CopyAll PASSED: All tests
Icom ID-51A Clone PASSED: All tests
Icom ID-51A BruteForce PASSED: All tests
Icom ID-51A Edges PASSED: All tests
Icom ID-51A Banks PASSED: All tests
Icom ID-800H v2 Detect PASSED: All tests
Icom ID-800H v2 CopyAll PASSED: All tests
Icom ID-800H v2 Clone PASSED: All tests
Icom ID-800H v2 BruteForce PASSED: All tests
Icom ID-800H v2 Edges PASSED: All tests
Icom ID-800H v2 Banks PASSED: All tests
Icom ID-880H Detect PASSED: All tests
Icom ID-880H CopyAll PASSED: All tests
Icom ID-880H Clone PASSED: All tests
Icom ID-880H BruteForce PASSED: All tests
Icom ID-880H Edges PASSED: All tests
Icom ID-880H Banks PASSED: All tests
Jetstream JT220M Detect PASSED: All tests
Jetstream JT220M CopyAll PASSED: All tests
Jetstream JT220M Clone PASSED: All tests
Jetstream JT220M BruteForce PASSED: All tests
Jetstream JT220M Edges PASSED: All tests
Jetstream JT220M Banks SKIPPED: Banks not supported
Kenwood TH-D72 (clone Detect PASSED: All tests
Kenwood TH-D72 (clone CopyAll PASSED: All tests
Kenwood TH-D72 (clone Clone PASSED: All tests
Kenwood TH-D72 (clone BruteForce PASSED: All tests
Kenwood TH-D72 (clone Edges PASSED: All tests
Kenwood TH-D72 (clone Banks SKIPPED: Banks not supported
Kenwood TK-8102 Detect PASSED: All tests
Kenwood TK-8102 CopyAll PASSED: All tests
Kenwood TK-8102 Clone PASSED: All tests
Kenwood TK-8102 BruteForce PASSED: All tests
Kenwood TK-8102 Edges PASSED: All tests
Kenwood TK-8102 Banks SKIPPED: Banks not supported
Puxing PX-2R Detect PASSED: All tests
Puxing PX-2R CopyAll PASSED: All tests
Puxing PX-2R Clone PASSED: All tests
Puxing PX-2R BruteForce PASSED: All tests
Puxing PX-2R Edges PASSED: All tests
Puxing PX-2R Banks SKIPPED: Banks not supported
Puxing PX-777 Detect PASSED: All tests
Puxing PX-777 CopyAll PASSED: All tests
Puxing PX-777 Clone PASSED: All tests
Puxing PX-777 BruteForce PASSED: All tests
Puxing PX-777 Edges PASSED: All tests
Puxing PX-777 Banks SKIPPED: Banks not supported
TYT TH-UV3R Detect PASSED: All tests
TYT TH-UV3R CopyAll PASSED: All tests
TYT TH-UV3R Clone PASSED: All tests
TYT TH-UV3R BruteForce PASSED: All tests
TYT TH-UV3R Edges PASSED: All tests
TYT TH-UV3R Banks SKIPPED: Banks not supported
TYT TH-UVF1 Detect PASSED: All tests
TYT TH-UVF1 CopyAll PASSED: All tests
TYT TH-UVF1 Clone PASSED: All tests
TYT TH-UVF1 BruteForce PASSED: All tests
TYT TH-UVF1 Edges PASSED: All tests
TYT TH-UVF1 Banks SKIPPED: Banks not supported
Vertex VXA-700 Detect PASSED: All tests
Vertex VXA-700 CopyAll PASSED: All tests
Vertex VXA-700 Clone PASSED: All tests
Vertex VXA-700 BruteForce PASSED: All tests
Vertex VXA-700 Edges PASSED: All tests
Vertex VXA-700 Banks SKIPPED: Banks not supported
Wouxun KG-816 Detect PASSED: All tests
Wouxun KG-816 CopyAll PASSED: All tests
Wouxun KG-816 Clone PASSED: All tests
Wouxun KG-816 BruteForce PASSED: All tests
Wouxun KG-816 Edges PASSED: All tests
Wouxun KG-816 Banks SKIPPED: Banks not supported
Wouxun KG-818 Detect PASSED: All tests
Wouxun KG-818 CopyAll PASSED: All tests
Wouxun KG-818 Clone PASSED: All tests
Wouxun KG-818 BruteForce PASSED: All tests
Wouxun KG-818 Edges PASSED: All tests
Wouxun KG-818 Banks SKIPPED: Banks not supported
Wouxun KG-UV6 Detect PASSED: All tests
Wouxun KG-UV6 CopyAll PASSED: All tests
Wouxun KG-UV6 Clone PASSED: All tests
Wouxun KG-UV6 BruteForce PASSED: All tests
Wouxun KG-UV6 Edges PASSED: All tests
Wouxun KG-UV6 Banks SKIPPED: Banks not supported
Wouxun KG-UVD1P Detect PASSED: All tests
Wouxun KG-UVD1P CopyAll PASSED: All tests
Wouxun KG-UVD1P Clone PASSED: All tests
Wouxun KG-UVD1P BruteForce PASSED: All tests
Wouxun KG-UVD1P Edges PASSED: All tests
Wouxun KG-UVD1P Banks SKIPPED: Banks not supported
Yaesu FT-1802M Detect PASSED: All tests
Yaesu FT-1802M CopyAll PASSED: All tests
Yaesu FT-1802M Clone PASSED: All tests
Yaesu FT-1802M BruteForce PASSED: All tests
Yaesu FT-1802M Edges PASSED: All tests
Yaesu FT-1802M Banks SKIPPED: Banks not supported
Yaesu FT-2800M Detect PASSED: All tests
Yaesu FT-2800M CopyAll PASSED: All tests
Yaesu FT-2800M Clone PASSED: All tests
Yaesu FT-2800M BruteForce PASSED: All tests
Yaesu FT-2800M Edges PASSED: All tests
Yaesu FT-2800M Banks SKIPPED: Banks not supported
Yaesu FT-60 Detect PASSED: All tests
Yaesu FT-60 CopyAll PASSED: All tests
Yaesu FT-60 Clone PASSED: All tests
Yaesu FT-60 BruteForce PASSED: All tests
Yaesu FT-60 Edges PASSED: All tests
Yaesu FT-60 Banks SKIPPED: Banks not supported
Yaesu FT-7800 Detect PASSED: All tests
Yaesu FT-7800 CopyAll PASSED: All tests
Yaesu FT-7800 Clone PASSED: All tests
Yaesu FT-7800 BruteForce PASSED: All tests
Yaesu FT-7800 Edges PASSED: All tests
Yaesu FT-7800 Banks PASSED: All tests
Yaesu FT-817 Detect PASSED: All tests
Yaesu FT-817 CopyAll PASSED: All tests
Yaesu FT-817 Clone PASSED: All tests
Yaesu FT-817 BruteForce PASSED: All tests
Yaesu FT-817 Edges PASSED: All tests
Yaesu FT-817 Banks SKIPPED: Banks not supported
Yaesu FT-817ND Detect PASSED: All tests
Yaesu FT-817ND CopyAll PASSED: All tests
Yaesu FT-817ND Clone PASSED: All tests
Yaesu FT-817ND BruteForce PASSED: All tests
Yaesu FT-817ND Edges PASSED: All tests
Yaesu FT-817ND Banks SKIPPED: Banks not supported
Yaesu FT-817ND (US) Detect PASSED: All tests
Yaesu FT-817ND (US) CopyAll PASSED: All tests
Yaesu FT-817ND (US) Clone PASSED: All tests
Yaesu FT-817ND (US) BruteForce PASSED: All tests
Yaesu FT-817ND (US) Edges PASSED: All tests
Yaesu FT-817ND (US) Banks SKIPPED: Banks not supported
Yaesu FT-857/897 Detect PASSED: All tests
Yaesu FT-857/897 CopyAll PASSED: All tests
Yaesu FT-857/897 Clone PASSED: All tests
Yaesu FT-857/897 BruteForce PASSED: All tests
Yaesu FT-857/897 Edges PASSED: All tests
Yaesu FT-857/897 Banks SKIPPED: Banks not supported
Yaesu FT-857/897 (U Detect PASSED: All tests
Yaesu FT-857/897 (U CopyAll PASSED: All tests
Yaesu FT-857/897 (U Clone PASSED: All tests
Yaesu FT-857/897 (U BruteForce PASSED: All tests
Yaesu FT-857/897 (U Edges PASSED: All tests
Yaesu FT-857/897 (U Banks SKIPPED: Banks not supported
Yaesu FT-8800 Left Detect PASSED: All tests
Yaesu FT-8800 Left CopyAll PASSED: All tests
Yaesu FT-8800 Left Clone PASSED: All tests
Yaesu FT-8800 Left BruteForce PASSED: All tests
Yaesu FT-8800 Left Edges PASSED: All tests
Yaesu FT-8800 Left Banks PASSED: All tests
Yaesu FT-8800 Right Detect PASSED: All tests
Yaesu FT-8800 Right CopyAll PASSED: All tests
Yaesu FT-8800 Right Clone PASSED: All tests
Yaesu FT-8800 Right BruteForce PASSED: All tests
Yaesu FT-8800 Right Edges PASSED: All tests
Yaesu FT-8800 Right Banks PASSED: All tests
Yaesu FT-8900 Detect PASSED: All tests
Yaesu FT-8900 CopyAll PASSED: All tests
Yaesu FT-8900 Clone PASSED: All tests
Yaesu FT-8900 BruteForce PASSED: All tests
Yaesu FT-8900 Edges PASSED: All tests
Yaesu FT-8900 Banks SKIPPED: Banks not supported
Yaesu FTM-350 Left Detect PASSED: All tests
Yaesu FTM-350 Left CopyAll PASSED: All tests
Yaesu FTM-350 Left Clone PASSED: All tests
Yaesu FTM-350 Left BruteForce PASSED: All tests
Yaesu FTM-350 Left Edges PASSED: All tests
Yaesu FTM-350 Left Banks SKIPPED: Banks not supported
Yaesu FTM-350 Right Detect PASSED: All tests
Yaesu FTM-350 Right CopyAll PASSED: All tests
Yaesu FTM-350 Right Clone PASSED: All tests
Yaesu FTM-350 Right BruteForce PASSED: All tests
Yaesu FTM-350 Right Edges PASSED: All tests
Yaesu FTM-350 Right Banks SKIPPED: Banks not supported
Yaesu VX-3 Detect PASSED: All tests
Yaesu VX-3 CopyAll PASSED: All tests
Yaesu VX-3 Clone PASSED: All tests
Yaesu VX-3 BruteForce PASSED: All tests
Yaesu VX-3 Edges PASSED: All tests
Yaesu VX-3 Banks SKIPPED: Banks not supported
Yaesu VX-5 Detect PASSED: All tests
Yaesu VX-5 CopyAll PASSED: All tests
Yaesu VX-5 Clone PASSED: All tests
Yaesu VX-5 BruteForce PASSED: All tests
Yaesu VX-5 Edges PASSED: All tests
Yaesu VX-5 Banks PASSED: All tests
Yaesu VX-6 Detect PASSED: All tests
Yaesu VX-6 CopyAll PASSED: All tests
Yaesu VX-6 Clone PASSED: All tests
Yaesu VX-6 BruteForce PASSED: All tests
Yaesu VX-6 Edges PASSED: All tests
Yaesu VX-6 Banks SKIPPED: Banks not supported
Yaesu VX-7 Detect PASSED: All tests
Yaesu VX-7 CopyAll PASSED: All tests
Yaesu VX-7 Clone PASSED: All tests
Yaesu VX-7 BruteForce PASSED: All tests
Yaesu VX-7 Edges PASSED: All tests
Yaesu VX-7 Banks PASSED: All tests
Yaesu VX-8 R Detect PASSED: All tests
Yaesu VX-8 R CopyAll PASSED: All tests
Yaesu VX-8 R Clone PASSED: All tests
Yaesu VX-8 R BruteForce PASSED: All tests
Yaesu VX-8 R Edges PASSED: All tests
Yaesu VX-8 R Banks PASSED: All tests
----------------------------------------------------------------------
Results:
TOTAL : 324
FAILED : 0
SKIPPED: 38
PASSED : 286
CRASHED: 0
[workspace] $ /bin/sh -xe /tmp/hudson7928679339831787302.sh
+ nosetests -v tests/unit
test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok
test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok
test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok
test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok
test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok
test_init (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok
test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok
test_changed (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok
test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok
test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
----------------------------------------------------------------------
Ran 147 tests in 0.058s
OK
Email was triggered for: Success
Sending email for trigger: Success
1
0
Initial support for Yaesu FT-90R. Probably a bit buggy. #1087
diff -r 86910885e998 -r 98bdf0cae780 chirp/ft90.py
--- /dev/nullThu Jan 01 00:00:00 1970 +0000
+++ b/chirp/ft90.pySat Aug 24 19:31:50 2013 -0500
@@ -0,0 +1,317 @@
+# Copyright 2011 Dan Smith <dsmith(a)danplanet.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 3 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/>.
+
+from chirp import chirp_common, memmap, directory, errors, util, yaesu_clone
+from chirp import bitwise
+import time, os, traceback
+
+CHIRP_DEBUG=True
+CMD_ACK = chr(0x06)
+
+(a)directory.register
+class FT90Radio(yaesu_clone.YaesuCloneModeRadio):
+ Â Â VENDOR = "Yaesu"
+ Â Â MODEL = "FT-90"
+ Â Â ID = "ft90"
+ Â Â
+ Â Â STEPS = [5, 10, 12.5, 15, 20, 25, 50]
+ Â Â MODES = ["AM", "FM", "Auto"]
+ Â Â TMODES = ["", "Tone", "TSQL", "Bell", "DTCS"]
+ Â Â TONES = [ 67.0, 69.3, 71.9, 74.4, 77.0, 79.7, 82.5,
+ Â Â Â Â Â 85.4, 88.5, 91.5, 94.8, 97.4, 100.0, 103.5,
+ Â Â Â Â Â 107.2, 110.9, 114.8, 118.8, 123.0, 127.3,
+ Â Â Â Â Â 131.8, 136.5, 141.3, 146.2, 151.4, 156.7,
+ Â Â Â Â Â 159.8, 162.2, 167.9, 173.8, 179.9, 183.5,
+ Â Â Â Â Â 186.2, 189.9, 192.8, 196.6, 199.5, 203.5,Â
+ Â Â Â Â Â 206.5, 210.7, 218.1, 225.7, 229.1, 233.6,
+ Â Â Â Â Â 241.8, 250.3, 254.1,
+ Â Â Â Â Â ] Â Â Â Â Â
+ Â Â
+ Â Â POWER_LEVELS = ["Hi","Mid1","Mid2","Low"]
+ Â Â #DUPLEX = ["", "-", "+", "split", "Auto"]
+ Â Â DUPLEX = ["", "-", "+", "split"]
+ Â Â Â
+ Â Â _memsize = 4063
+ Â Â # block 03 (200 Bytes long) repeats 18 times; channel memories
+ Â Â _block_lengths = [ 2, 232, 24, 200, 205]
+ Â Â
+ Â Â mem_format = """
+ Â Â #seekto 0x102;
+ Â Â struct {
+ Â Â Â u8 mode:2,
+ Â Â Â Â isUhf1:1,
+ Â Â Â Â unknown1:2,
+ Â Â Â Â step:3;
+ Â Â Â u8 artsmode:2,
+ Â Â Â Â unknown2:1,
+ Â Â Â Â isUhf2:1
+ Â Â Â Â power:2,
+ Â Â Â Â shift:2;
+ Â Â Â u8 skip:1,
+ Â Â Â Â showname:1,
+ Â Â Â Â unknown3:1,
+ Â Â Â Â isUhfHi:1,
+ Â Â Â Â unknown4:1,
+ Â Â Â Â tmode:3;
+ Â Â Â u32 rxfreq;
+ Â Â Â u32 txfreqoffset;
+ Â Â Â u8 UseDefaultName:1,
+ Â Â Â Â ars:1,
+ Â Â Â Â tone:6;
+ Â Â Â u8 packetmode:1,
+ Â Â Â Â unknown5:1,
+ Â Â Â Â dcstone:6;
+ Â Â Â char name[7];
+ Â Â } memory[180];
+ Â Â """
+
+ Â Â @classmethod
+ Â Â def match_model(cls, filedata, filename):
+ Â Â Â Â return len(filedata) == cls._memsize
+
+ Â Â def get_features(self):
+ Â Â Â Â rf = chirp_common.RadioFeatures()
+ Â Â Â Â rf.has_ctone = False
+ Â Â Â Â rf.has_bank = False
+ Â Â Â Â rf.has_dtcs_polarity = False
+ Â Â Â Â rf.valid_modes = list(set(self.MODES))
+ Â Â Â Â rf.valid_tmodes = list(self.TMODES)
+ Â Â Â Â rf.valid_duplexes = list(self.DUPLEX)
+ Â Â Â Â rf.valid_tuning_steps = list(self.STEPS)
+ Â Â Â Â rf.valid_power_levels = self.POWER_LEVELS
+ Â Â Â Â rf.valid_name_length = 7
+ Â Â Â Â rf.valid_characters = chirp_common.CHARSET_ASCII
+ Â Â Â Â rf.valid_skips = ["", "S"]
+ Â Â Â Â rf.memory_bounds = (1, 180)
+ Â Â Â Â rf.valid_bands = [(100000000, 230000000),Â
+ Â Â Â Â Â Â (300000000, 530000000), (810000000, 999975000)]
+
+ Â Â Â Â return rf
+
+ Â Â def _read(self, blocksize, blocknum):
+ Â Â Â Â data = self.pipe.read(blocksize+2)
+ Â Â Â Â
+ Â Â Â Â # chew echo'd ack
+ Â Â Â Â self.pipe.write(CMD_ACK)
+ Â Â Â Â time.sleep(0.02)
+ Â Â Â Â self.pipe.read(1) # chew echoed ACK from 1-wire serial
+ Â Â Â Â
+ Â Â Â Â if len(data) == blocksize+2 and data[0] == chr(blocknum):
+ Â Â Â Â Â Â checksum = yaesu_clone.YaesuChecksum(1, blocksize)
+ Â Â Â Â Â Â if checksum.get_existing(data) != checksum.get_calculated(data):
+ Â Â Â Â Â Â Â Â raise Exception("Checksum Failed [%02X<>%02X] block %02X, data len: %i" %
+ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (checksum.get_existing(data),
+ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksum.get_calculated(data), blocknum, len(data) ))
+ Â Â Â Â Â Â data = data[1:blocksize+1] # Chew blocknum and checksum
+ Â Â Â Â Â Â
+ Â Â Â Â else:
+ Â Â Â Â Â Â raise Exception("Unable to read blocknum %02X expected blocksize %i got %i." %
+ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (blocknum, blocksize+2, len(data)))
+
+     return data    Â
+ Â Â
+ Â Â def _clone_in(self):
+ Â Â Â Â # Be very patient with the radio
+ Â Â Â Â self.pipe.setTimeout(4)
+ Â Â Â Â start = time.time()
+ Â Â
+ Â Â Â Â data = ""
+ Â Â Â Â blocknum = 0
+ Â Â Â Â status = chirp_common.Status()
+ Â Â Â Â status.msg = "Cloning from radio.\nPut radio into clone mode then\npress SET to send"
+ Â Â Â Â self.status_fn(status)
+ Â Â Â Â status.max = len(self._block_lengths) + 18
+ Â Â Â Â for blocksize in self._block_lengths:
+ Â Â Â Â Â Â if blocksize == 200:
+ Â Â Â Â Â Â Â Â # repeated read of 200 block same size (memory area)
+ Â Â Â Â Â Â Â Â repeat = 18
+ Â Â Â Â Â Â else:
+ Â Â Â Â Â Â Â Â repeat = 1
+ Â Â Â Â Â Â for _i in range(0, repeat):Â
+ Â Â Â Â Â Â Â Â data += self._read(blocksize, blocknum)
+
+ Â Â Â Â Â Â Â Â blocknum += 1
+ Â Â Â Â Â Â Â Â status.cur = blocknum
+ Â Â Â Â Â Â Â Â self.status_fn(status)
+ Â Â Â Â Â Â Â Â
+ Â Â Â Â status.msg = "Clone completed."
+ Â Â Â Â self.status_fn(status)
+
+ Â Â Â Â print "Clone completed in %i seconds, blocks read: %i" % (time.time() - start, blocknum)
+ Â Â
+ Â Â Â Â return memmap.MemoryMap(data)
+ Â Â
+ Â Â def _clone_out(self):
+ Â Â Â Â delay = 0.2
+ Â Â Â Â start = time.time()
+ Â Â
+ Â Â Â Â blocknum = 0
+ Â Â Â Â pos = 0
+ Â Â Â Â status = chirp_common.Status()
+ Â Â Â Â status.msg = "Cloning to radio.\nPut radio into clone mode and press DISP/SS\n to start receive within 3 secs..."
+ Â Â Â Â self.status_fn(status)
+ Â Â Â Â # radio likes to have port openÂ
+ Â Â Â Â self.pipe.open()
+ Â Â Â Â time.sleep(3)
+ Â Â Â Â status.max = len(self._block_lengths) + 18
+
+
+ Â Â Â Â for blocksize in self._block_lengths:
+ Â Â Â Â Â Â if blocksize == 200:
+ Â Â Â Â Â Â Â Â # repeat channel blocks
+ Â Â Â Â Â Â Â Â repeat = 18
+ Â Â Â Â Â Â else:
+ Â Â Â Â Â Â Â Â repeat = 1
+ Â Â Â Â Â Â for _i in range(0, repeat):
+ Â Â Â Â Â Â Â Â time.sleep(0.1)
+ Â Â Â Â Â Â Â Â checksum = yaesu_clone.YaesuChecksum(pos, pos+blocksize-1)
+ Â Â Â Â Â Â Â Â blocknumbyte = chr(blocknum)
+ Â Â Â Â Â Â Â Â payloadbytes = self.get_mmap()[pos:pos+blocksize]
+ Â Â Â Â Â Â Â Â checksumbyte = chr(checksum.get_calculated(self.get_mmap()))
+ Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:
+ Â Â Â Â Â Â Â Â Â Â print "Block %i - will send from %i to %i byte " % \
+ Â Â Â Â Â Â Â Â Â Â Â Â (blocknum, pos, pos + blocksize)
+ Â Â Â Â Â Â Â Â Â Â print util.hexprint(blocknumbyte)
+ Â Â Â Â Â Â Â Â Â Â print util.hexprint(payloadbytes)
+ Â Â Â Â Â Â Â Â Â Â print util.hexprint(checksumbyte)
+ Â Â Â Â Â Â Â Â # send wrapped bytes
+ Â Â Â Â Â Â Â Â self.pipe.write(blocknumbyte)
+ Â Â Â Â Â Â Â Â self.pipe.write(payloadbytes)
+ Â Â Â Â Â Â Â Â self.pipe.write(checksumbyte)
+ Â Â Â Â Â Â Â Â tmp = self.pipe.read(blocksize+2) Â #chew echo
+ Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG: Â Â Â Â Â Â Â Â
+ Â Â Â Â Â Â Â Â Â Â print "bytes echoed: "
+ Â Â Â Â Â Â Â Â Â Â print util.hexprint(tmp)
+ Â Â Â Â Â Â Â Â # radio is slow to write/ack:
+ Â Â Â Â Â Â Â Â time.sleep(0.9)Â
+ Â Â Â Â Â Â Â Â buf = self.pipe.read(1)
+ Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG: Â Â Â Â Â Â Â Â
+ Â Â Â Â Â Â Â Â Â Â print "ack recd:"
+ Â Â Â Â Â Â Â Â Â Â print util.hexprint(buf)
+ Â Â Â Â Â Â Â Â if buf != CMD_ACK:
+ Â Â Â Â Â Â Â Â Â Â raise Exception("Radio did not ack block %i" % blocknum)
+ Â Â Â Â Â Â Â Â pos += blocksize
+ Â Â Â Â Â Â Â Â blocknum += 1
+ Â Â Â Â Â Â Â Â status.cur = blocknum
+ Â Â Â Â Â Â Â Â self.status_fn(status)
+ Â Â
+ Â Â Â Â print "Clone completed in %i seconds" % (time.time() - start)
+ Â Â
+ Â Â def sync_in(self):
+ Â Â Â Â try:
+ Â Â Â Â Â Â self._mmap = self._clone_in()
+ Â Â Â Â except errors.RadioError:
+ Â Â Â Â Â Â raise
+ Â Â Â Â except Exception, e:
+ Â Â Â Â Â Â trace = traceback.format_exc()
+ Â Â Â Â Â Â raise errors.RadioError("Failed to communicate with radio: %s" % trace)
+ Â Â Â Â self.process_mmap()
+
+ Â Â def sync_out(self):
+ Â Â Â Â try:
+ Â Â Â Â Â Â self._clone_out()
+ Â Â Â Â except errors.RadioError:
+ Â Â Â Â Â Â raise
+ Â Â Â Â except Exception, e:
+ Â Â Â Â Â Â trace = traceback.format_exc()
+ Â Â Â Â Â Â raise errors.RadioError("Failed to communicate with radio: %s" % trace)
+
+ Â Â def process_mmap(self):
+ Â Â Â Â self._memobj = bitwise.parse(self.mem_format, self._mmap)
+
+ Â Â def get_memory(self, number):
+ Â Â Â Â _mem = self._memobj.memory[number-1]
+
+ Â Â Â Â mem = chirp_common.Memory()
+ Â Â Â Â mem.number = number
+ Â Â Â Â mem.freq = _mem.rxfreq * 10 Â Â Â
+ Â Â Â Â mem.offset = _mem.txfreqoffset * 10
+ Â Â Â Â if not _mem.tmode < len(self.TMODES):
+ Â Â Â Â Â Â _mem.tmode = 0
+ Â Â Â Â mem.tmode = self.TMODES[_mem.tmode]
+ Â Â Â Â mem.rtone = self.TONES[_mem.tone]
+ Â Â Â Â mem.mode = self.MODES[_mem.mode]
+
+ Â Â Â Â '''
+ Â Â Â Â # ars mode note yet working...
+ Â Â Â Â # ARS mode:
+ Â Â Â Â if _mem.ars and _mem.shift == 0:
+ Â Â Â Â Â Â mem.duplex = self.DUPLEX[4]Â
+ Â Â Â Â else:
+ Â Â Â Â Â Â mem.duplex = self.DUPLEX[_mem.shift]
+ Â Â Â Â '''
+ Â Â Â Â mem.duplex = self.DUPLEX[_mem.shift]
+ Â Â Â Â mem.power = self.POWER_LEVELS[_mem.power]
+ Â Â Â Â # radio has a known bug with 5khz step and squelch
+ Â Â Â Â if _mem.step == 0:
+ Â Â Â Â Â Â _mem.step = 2
+ Â Â Â Â mem.tuning_step = self.STEPS[_mem.step]
+ Â Â Â Â mem.skip = _mem.skip and "S" or ""
+ Â Â Â Â mem.name = _mem.name
+ Â Â Â Â return mem
+
+ Â Â def get_raw_memory(self, number):
+ Â Â Â Â return repr(self._memobj.memory[number-1])
+ Â Â
+ Â Â def set_memory(self, mem):
+
+ Â Â Â Â _mem = self._memobj.memory[mem.number - 1]
+ Â Â Â Â _mem.skip = mem.skip == "S"
+ Â Â Â Â # radio has a known bug with 5khz step and dead squelch
+ Â Â Â Â if mem.tuning_step == self.STEPS[0]:
+ Â Â Â Â Â Â _mem.step = 2
+ Â Â Â Â else:
+ Â Â Â Â Â Â _mem.step = self.STEPS.index(mem.tuning_step)
+ Â Â Â Â _mem.rxfreq = mem.freq / 10
+ Â Â Â Â # vfo will unlock if not in right band?
+ Â Â Â Â if mem.freq > 300000000:Â
+ Â Â Â Â Â Â # uhf
+ Â Â Â Â Â Â _mem.isUhf1 = 1
+ Â Â Â Â Â Â _mem.isUhf2 = 1
+ Â Â Â Â Â Â if mem.freq > 810000000:
+ Â Â Â Â Â Â Â Â # uhf hiband
+ Â Â Â Â Â Â Â Â _mem.isUhfHi = 1
+ Â Â Â Â Â Â else:
+ Â Â Â Â Â Â Â Â _mem.isUhfHi = 0
+ Â Â Â Â else:
+ Â Â Â Â Â Â # vhf
+ Â Â Â Â Â Â _mem.isUhf1 = 0
+ Â Â Â Â Â Â _mem.isUhf2 = 0
+ Â Â Â Â Â Â _mem.isUhfHi = 0
+ Â Â Â Â _mem.txfreqoffset = mem.offset / 10
+ Â Â Â Â _mem.tone = self.TONES.index(mem.rtone)
+ Â Â Â Â _mem.tmode = self.TMODES.index(mem.tmode)
+ Â Â Â Â _mem.mode = self.MODES.index(mem.mode)
+ Â Â Â Â '''
+ Â Â Â Â # ars not yet working
+ Â Â Â Â # ARS mode:
+ Â Â Â Â if mem.duplex == 4:
+ Â Â Â Â Â Â _mem.shift = 0
+ Â Â Â Â Â Â _mem.ars = 1
+ Â Â Â Â else:
+ Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)
+ Â Â Â Â '''
+ Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex) Â Â
+ Â Â Â Â #_mem.dtcs = chirp_common.DTCS_CODES.index(mem.dtcs)
+ Â Â Â Â if self.get_features().has_tuning_step:
+ Â Â Â Â Â Â _mem.step = self.STEPS.index(mem.tuning_step)
+ Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)
+ Â Â Â Â if mem.power:
+ Â Â Â Â Â Â _mem.power = self.POWER_LEVELS.index(mem.power)
+ Â Â Â Â else:
+ Â Â Â Â Â Â _mem.power = 3 Â # default to low power
+ Â Â Â Â _mem.name = mem.name.ljust(7)
+Â
+
2
8
# HG changeset patch
# User Jens Jensen <kd4tjx(a)yahoo.com>
# Date 1377497847 18000
# Node ID 7c95e9d39dfc07ea1e3192834d8a339e100347f6
# Parent 86910885e998d559dfdd6ba4c5fb0bf520fdee31
initial support for Yaesu FT-90R, revised #1087
diff -r 86910885e998 -r 7c95e9d39dfc chirp/ft90.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/ft90.py   Mon Aug 26 01:17:27 2013 -0500
@@ -0,0 +1,379 @@
+# Copyright 2011 Dan Smith <dsmith(a)danplanet.com>
+# Copyright 2013 Jens Jensen <kd4tjx(a)yahoo.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 3 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/>.
+
+from chirp import chirp_common, bitwise, memmap, directory, errors, util, yaesu_clone
+import time, os, traceback
+
+CHIRP_DEBUG=True
+CMD_ACK = chr(0x06)
+
+(a)directory.register
+class FT90Radio(yaesu_clone.YaesuCloneModeRadio):
+Â Â Â VENDOR = "Yaesu"
+Â Â Â MODEL = "FT-90"
+Â Â Â ID = "\x8E\xF6"
+Â Â Â
+Â Â Â STEPS = [5, 10, 12.5, 15, 20, 25, 50]
+Â Â Â MODES = ["AM", "FM", "Auto"]
+Â Â Â TMODES = ["", "Tone", "TSQL", "", "DTCS"] # idx 3 (Bell) not supported yet
+
+Â Â Â TONES = list(chirp_common.TONES)
+Â Â Â for tone in [ 165.5, 171.3, 177.3 ]:
+Â Â Â Â Â Â TONES.remove(tone)Â Â Â Â Â Â
+Â Â Â POWER_LEVELS = ["Hi", "Mid1", "Mid2", "Low"]
+Â Â Â DUPLEX = ["", "-", "+", "split"]
+Â Â Â Â Â Â
+Â Â Â _memsize = 4063
+Â Â Â # block 03 (200 Bytes long) repeats 18 times; channel memories
+Â Â Â _block_lengths = [ 2, 232, 24, 200, 205]
+Â Â Â
+Â Â Â mem_format = """
+Â Â Â #seekto 0x22;Â Â Â
+Â Â Â struct {
+Â Â Â Â Â Â u8Â Â Â dtmf_active;
+Â Â Â Â Â Â u8Â Â Â dtmf1_len;
+Â Â Â Â Â Â u8Â Â Â dtmf2_len;
+Â Â Â Â Â Â u8Â Â Â dtmf3_len;
+Â Â Â Â Â Â u8Â Â Â dtmf4_len;
+Â Â Â Â Â Â u8Â Â Â dtmf5_len;
+Â Â Â Â Â Â u8Â Â Â dtmf6_len;
+Â Â Â Â Â Â u8Â Â Â dtmf7_len;
+Â Â Â Â Â Â u8Â Â Â dtmf8_len;
+Â Â Â Â Â Â bbcd dtmf1[8];
+Â Â Â Â Â Â bbcd dtmf2[8];
+Â Â Â Â Â Â bbcd dtmf3[8];
+Â Â Â Â Â Â bbcd dtmf4[8];Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â bbcd dtmf5[8];
+Â Â Â Â Â Â bbcd dtmf6[8];
+Â Â Â Â Â Â bbcd dtmf7[8];Â Â Â
+Â Â Â Â Â Â bbcd dtmf8[8];
+Â Â Â Â Â Â char cwid[7];
+Â Â Â Â Â Â u8 Â Â Â unk1;
+Â Â Â Â Â Â u8 Â Â Â unk2:2,
+Â Â Â Â Â Â Â Â Â beep_dis:1,
+Â Â Â Â Â Â Â Â Â unk3:1,
+Â Â Â Â Â Â Â Â Â rfsqlvl:4;
+Â Â Â Â Â Â u8Â Â Â cwid_en:1,
+Â Â Â Â Â Â Â Â Â unk4:3,
+Â Â Â Â Â Â Â Â Â txnarrow:1,
+Â Â Â Â Â Â Â Â Â dtmfspeed:1,
+Â Â Â Â Â Â Â Â Â pttlock:2;
+Â Â Â Â Â Â u8Â Â Â dtmftxdelay:3,
+Â Â Â Â Â Â Â Â Â fancontrol:2,
+Â Â Â Â Â Â Â Â Â unk5:3;
+Â Â Â Â Â Â u8Â Â Â dimmer:3,
+Â Â Â Â Â Â Â Â Â unk6:1,
+Â Â Â Â Â Â Â Â Â lcdcontrast:4;
+Â Â Â Â Â Â u8Â Â Â tot;
+Â Â Â Â Â Â u8Â Â Â unk8:1,
+Â Â Â Â Â Â Â Â Â ars:1,
+Â Â Â Â Â Â Â Â Â lock:1,
+Â Â Â Â Â Â Â Â Â txpwrsave:1,
+Â Â Â Â Â Â Â Â Â apo:4;
+Â Â Â Â Â Â u8Â Â Â key_rt;
+Â Â Â Â Â Â u8Â Â Â key_lt;
+Â Â Â Â Â Â u8Â Â Â key_p1;
+Â Â Â Â Â Â u8Â Â Â key_p2;
+Â Â Â Â Â Â u8Â Â Â key_acc;
+      char   demomsg1[32];
+      char   demomsg2[32];
+Â Â Â Â Â Â
+Â Â Â } settings;
+Â Â Â
+Â Â Â struct mem_struct {
+Â Â Â Â Â u8 mode:2,
+Â Â Â Â Â Â Â Â isUhf1:1,
+Â Â Â Â Â Â Â Â unknown1:2,
+Â Â Â Â Â Â Â Â step:3;
+Â Â Â Â Â u8 artsmode:2,
+Â Â Â Â Â Â Â Â unknown2:1,
+Â Â Â Â Â Â Â Â isUhf2:1
+Â Â Â Â Â Â Â Â power:2,
+Â Â Â Â Â Â Â Â shift:2;
+Â Â Â Â Â u8 skip:1,
+Â Â Â Â Â Â Â Â showname:1,
+Â Â Â Â Â Â Â Â unknown3:1,
+Â Â Â Â Â Â Â Â isUhfHi:1,
+Â Â Â Â Â Â Â Â unknown4:1,
+Â Â Â Â Â Â Â Â tmode:3;
+Â Â Â Â Â u32 rxfreq;
+Â Â Â Â Â u32 txfreqoffset;
+Â Â Â Â Â u8 UseDefaultName:1,
+Â Â Â Â Â Â Â Â ars:1,
+Â Â Â Â Â Â Â Â tone:6;
+Â Â Â Â Â u8 packetmode:1,
+Â Â Â Â Â Â Â Â unknown5:1,
+Â Â Â Â Â Â Â Â dcstone:6;
+Â Â Â Â Â char name[7];
+Â Â Â };
+
+Â Â Â #seekto 0x86;
+Â Â Â struct mem_struct vfo_v;
+Â Â Â struct mem_struct call_v;
+Â Â Â struct mem_struct vfo_u;
+Â Â Â struct mem_struct call_u;
+Â Â Â
+Â Â Â #seekto 0x102;
+Â Â Â struct mem_struct memory[180];
+
+Â Â Â #seekto 0xf12;
+Â Â Â struct mem_struct pms_1L;
+Â Â Â struct mem_struct pms_1U;
+Â Â Â struct mem_struct pms_2L;Â Â Â
+Â Â Â struct mem_struct pms_2U;
+Â Â Â """
+
+Â Â Â @classmethod
+Â Â Â def match_model(cls, filedata, filename):
+Â Â Â Â Â Â Â return len(filedata) == cls._memsize
+
+Â Â Â def get_features(self):
+Â Â Â Â Â Â Â rf = chirp_common.RadioFeatures()
+Â Â Â Â Â Â Â rf.has_ctone = False
+Â Â Â Â Â Â Â rf.has_bank = False
+Â Â Â Â Â Â Â rf.has_dtcs_polarity = False
+Â Â Â Â Â Â Â rf.has_dtcs = True
+Â Â Â Â Â Â Â rf.valid_modes = self.MODES
+Â Â Â Â Â Â Â rf.valid_tmodes = self.TMODES
+Â Â Â Â Â Â Â rf.valid_duplexes = self.DUPLEX
+Â Â Â Â Â Â Â rf.valid_tuning_steps = self.STEPS
+Â Â Â Â Â Â Â rf.valid_power_levels = self.POWER_LEVELS
+Â Â Â Â Â Â Â rf.valid_name_length = 7
+Â Â Â Â Â Â Â rf.valid_characters = chirp_common.CHARSET_ASCII
+Â Â Â Â Â Â Â rf.valid_skips = ["", "S"]
+Â Â Â Â Â Â Â rf.memory_bounds = (1, 180)
+Â Â Â Â Â Â Â rf.valid_bands = [(100000000, 230000000),
+Â Â Â Â Â Â Â Â Â Â Â (300000000, 530000000), (810000000, 999975000)]
+
+Â Â Â Â Â Â Â return rf
+
+Â Â Â def _read(self, blocksize, blocknum):
+Â Â Â Â Â Â Â data = self.pipe.read(blocksize+2)
+Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â # chew echo'd ack
+Â Â Â Â Â Â Â self.pipe.write(CMD_ACK)
+Â Â Â Â Â Â Â time.sleep(0.02)
+Â Â Â Â Â Â Â self.pipe.read(1) # chew echoed ACK from 1-wire serial
+Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â if len(data) == blocksize+2 and data[0] == chr(blocknum):
+Â Â Â Â Â Â Â Â Â Â Â checksum = yaesu_clone.YaesuChecksum(1, blocksize)
+Â Â Â Â Â Â Â Â Â Â Â if checksum.get_existing(data) != checksum.get_calculated(data):
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â raise Exception("Checksum Failed [%02X<>%02X] block %02X, data len: %i" %
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (checksum.get_existing(data),
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksum.get_calculated(data), blocknum, len(data) ))
+Â Â Â Â Â Â Â Â Â Â Â data = data[1:blocksize+1] # Chew blocknum and checksum
+Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â raise Exception("Unable to read blocknum %02X expected blocksize %i got %i." %
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (blocknum, blocksize+2, len(data)))
+
+       return data      Â
+Â Â Â
+Â Â Â def _clone_in(self):
+Â Â Â Â Â Â Â # Be very patient with the radio
+Â Â Â Â Â Â Â self.pipe.setTimeout(4)
+Â Â Â Â Â Â Â start = time.time()
+Â Â Â
+Â Â Â Â Â Â Â data = ""
+Â Â Â Â Â Â Â blocknum = 0
+Â Â Â Â Â Â Â status = chirp_common.Status()
+Â Â Â Â Â Â Â status.msg = "Cloning from radio.\nPut radio into clone mode then\npress SET to send"
+Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â Â Â Â Â status.max = len(self._block_lengths) + 18
+Â Â Â Â Â Â Â for blocksize in self._block_lengths:
+Â Â Â Â Â Â Â Â Â Â Â if blocksize == 200:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # repeated read of 200 block same size (memory area)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 18
+Â Â Â Â Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 1
+Â Â Â Â Â Â Â Â Â Â Â for _i in range(0, repeat):
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â data += self._read(blocksize, blocknum)
+
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â blocknum += 1
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â status.cur = blocknum
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â status.msg = "Clone completed."
+Â Â Â Â Â Â Â self.status_fn(status)
+
+Â Â Â Â Â Â Â print "Clone completed in %i seconds, blocks read: %i" % (time.time() - start, blocknum)
+Â Â Â
+Â Â Â Â Â Â Â return memmap.MemoryMap(data)
+Â Â Â
+Â Â Â def _clone_out(self):
+Â Â Â Â Â Â Â delay = 0.2
+Â Â Â Â Â Â Â start = time.time()
+Â Â Â
+Â Â Â Â Â Â Â blocknum = 0
+Â Â Â Â Â Â Â pos = 0
+Â Â Â Â Â Â Â status = chirp_common.Status()
+Â Â Â Â Â Â Â status.msg = "Cloning to radio.\nPut radio into clone mode and press DISP/SS\n to start receive within 3 secs..."
+Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â Â Â Â Â # radio likes to have port open
+Â Â Â Â Â Â Â self.pipe.open()
+Â Â Â Â Â Â Â time.sleep(3)
+Â Â Â Â Â Â Â status.max = len(self._block_lengths) + 18
+
+
+Â Â Â Â Â Â Â for blocksize in self._block_lengths:
+Â Â Â Â Â Â Â Â Â Â Â if blocksize == 200:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # repeat channel blocks
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 18
+Â Â Â Â Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 1
+Â Â Â Â Â Â Â Â Â Â Â for _i in range(0, repeat):
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â time.sleep(0.1)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksum = yaesu_clone.YaesuChecksum(pos, pos+blocksize-1)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â blocknumbyte = chr(blocknum)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â payloadbytes = self.get_mmap()[pos:pos+blocksize]
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksumbyte = chr(checksum.get_calculated(self.get_mmap()))
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print "Block %i - will send from %i to %i byte " % \
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (blocknum, pos, pos + blocksize)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(blocknumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(payloadbytes)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(checksumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # send wrapped bytes
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.pipe.write(blocknumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.pipe.write(payloadbytes)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.pipe.write(checksumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â tmp = self.pipe.read(blocksize+2)Â #chew echo
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print "bytes echoed: "
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(tmp)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # radio is slow to write/ack:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â time.sleep(0.9)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â buf = self.pipe.read(1)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print "ack recd:"
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(buf)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if buf != CMD_ACK:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â raise Exception("Radio did not ack block %i" % blocknum)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â pos += blocksize
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â blocknum += 1
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â status.cur = blocknum
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â
+Â Â Â Â Â Â Â print "Clone completed in %i seconds" % (time.time() - start)
+Â Â Â
+Â Â Â def sync_in(self):
+Â Â Â Â Â Â Â try:
+Â Â Â Â Â Â Â Â Â Â Â self._mmap = self._clone_in()
+Â Â Â Â Â Â Â except errors.RadioError:
+Â Â Â Â Â Â Â Â Â Â Â raise
+Â Â Â Â Â Â Â except Exception, e:
+Â Â Â Â Â Â Â Â Â Â Â trace = traceback.format_exc()
+Â Â Â Â Â Â Â Â Â Â Â raise errors.RadioError("Failed to communicate with radio: %s" % trace)
+Â Â Â Â Â Â Â self.process_mmap()
+
+Â Â Â def sync_out(self):
+Â Â Â Â Â Â Â try:
+Â Â Â Â Â Â Â Â Â Â Â self._clone_out()
+Â Â Â Â Â Â Â except errors.RadioError:
+Â Â Â Â Â Â Â Â Â Â Â raise
+Â Â Â Â Â Â Â except Exception, e:
+Â Â Â Â Â Â Â Â Â Â Â trace = traceback.format_exc()
+Â Â Â Â Â Â Â Â Â Â Â raise errors.RadioError("Failed to communicate with radio: %s" % trace)
+
+Â Â Â def process_mmap(self):
+Â Â Â Â Â Â Â self._memobj = bitwise.parse(self.mem_format, self._mmap)
+
+Â Â Â def get_memory(self, number):
+Â Â Â Â Â Â Â _mem = self._memobj.memory[number-1]
+
+Â Â Â Â Â Â Â mem = chirp_common.Memory()
+Â Â Â Â Â Â Â mem.number = number
+Â Â Â Â Â Â Â mem.freq = _mem.rxfreq * 10Â Â Â Â Â
+Â Â Â Â Â Â Â mem.offset = _mem.txfreqoffset * 10
+Â Â Â Â Â Â Â if not _mem.tmode < len(self.TMODES):
+Â Â Â Â Â Â Â Â Â Â Â _mem.tmode = 0
+Â Â Â Â Â Â Â mem.tmode = self.TMODES[_mem.tmode]
+Â Â Â Â Â Â Â mem.rtone = self.TONES[_mem.tone]
+Â Â Â Â Â Â Â mem.dtcs = chirp_common.DTCS_CODES[_mem.dcstone]
+Â Â Â Â Â Â Â mem.mode = self.MODES[_mem.mode]
+
+Â Â Â Â Â Â Â '''
+Â Â Â Â Â Â Â # ars mode note yet working...
+Â Â Â Â Â Â Â # ARS mode:
+Â Â Â Â Â Â Â if _mem.ars and _mem.shift == 0:
+Â Â Â Â Â Â Â Â Â Â Â mem.duplex = self.DUPLEX[4]
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â mem.duplex = self.DUPLEX[_mem.shift]
+Â Â Â Â Â Â Â '''
+
+Â Â Â Â Â Â Â mem.duplex = self.DUPLEX[_mem.shift]
+Â Â Â Â Â Â Â mem.power = self.POWER_LEVELS[_mem.power]
+Â Â Â Â Â Â Â # radio has a known bug with 5khz step and squelch
+Â Â Â Â Â Â Â if _mem.step == 0:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = 2
+Â Â Â Â Â Â Â mem.tuning_step = self.STEPS[_mem.step]
+Â Â Â Â Â Â Â mem.skip = _mem.skip and "S" or ""
+Â Â Â Â Â Â Â mem.name = _mem.name
+Â Â Â Â Â Â Â return mem
+
+Â Â Â def get_raw_memory(self, number):
+Â Â Â Â Â Â Â return repr(self._memobj.memory[number-1])
+Â Â Â
+Â Â Â def set_memory(self, mem):
+
+Â Â Â Â Â Â Â _mem = self._memobj.memory[mem.number - 1]
+Â Â Â Â Â Â Â _mem.skip = mem.skip == "S"
+Â Â Â Â Â Â Â # radio has a known bug with 5khz step and dead squelch
+Â Â Â Â Â Â Â if not mem.tuning_step or mem.tuning_step == self.STEPS[0]:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = 2
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = self.STEPS.index(mem.tuning_step)
+Â Â Â Â Â Â Â _mem.rxfreq = mem.freq / 10
+Â Â Â Â Â Â Â # vfo will unlock if not in right band?
+Â Â Â Â Â Â Â if mem.freq > 300000000:
+Â Â Â Â Â Â Â Â Â Â Â # uhf
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf1 = 1
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf2 = 1
+Â Â Â Â Â Â Â Â Â Â Â if mem.freq > 810000000:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # uhf hiband
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â _mem.isUhfHi = 1
+Â Â Â Â Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â _mem.isUhfHi = 0
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â # vhf
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf1 = 0
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf2 = 0
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhfHi = 0
+Â Â Â Â Â Â Â _mem.txfreqoffset = mem.offset / 10
+Â Â Â Â Â Â Â _mem.tone = self.TONES.index(mem.rtone)
+Â Â Â Â Â Â Â _mem.tmode = self.TMODES.index(mem.tmode)
+Â Â Â Â Â Â Â _mem.mode = self.MODES.index(mem.mode)
+Â Â Â Â Â Â Â '''
+Â Â Â Â Â Â Â # ars not yet working
+Â Â Â Â Â Â Â # ARS mode:
+Â Â Â Â Â Â Â if mem.duplex == 4:
+Â Â Â Â Â Â Â Â Â Â Â _mem.shift = 0
+Â Â Â Â Â Â Â Â Â Â Â _mem.ars = 1
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)
+Â Â Â Â Â Â Â '''
+Â Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)Â Â Â
+Â Â Â Â Â Â Â _mem.dcstone = chirp_common.DTCS_CODES.index(mem.dtcs)
+Â Â Â Â Â Â Â if self.get_features().has_tuning_step:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = self.STEPS.index(mem.tuning_step)
+Â Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)
+Â Â Â Â Â Â Â if mem.power:
+Â Â Â Â Â Â Â Â Â Â Â _mem.power = self.POWER_LEVELS.index(mem.power)
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â _mem.power = 3Â # default to low power
+Â Â Â Â Â Â Â _mem.name = mem.name.ljust(7)
+
+
diff -r 86910885e998 -r 7c95e9d39dfc ft90.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/ft90.py   Mon Aug 26 01:17:27 2013 -0500
@@ -0,0 +1,379 @@
+# Copyright 2011 Dan Smith <dsmith(a)danplanet.com>
+# Copyright 2013 Jens Jensen <kd4tjx(a)yahoo.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 3 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/>.
+
+from chirp import chirp_common, bitwise, memmap, directory, errors, util, yaesu_clone
+import time, os, traceback
+
+CHIRP_DEBUG=True
+CMD_ACK = chr(0x06)
+
+(a)directory.register
+class FT90Radio(yaesu_clone.YaesuCloneModeRadio):
+Â Â Â VENDOR = "Yaesu"
+Â Â Â MODEL = "FT-90"
+Â Â Â ID = "\x8E\xF6"
+Â Â Â
+Â Â Â STEPS = [5, 10, 12.5, 15, 20, 25, 50]
+Â Â Â MODES = ["AM", "FM", "Auto"]
+Â Â Â TMODES = ["", "Tone", "TSQL", "", "DTCS"] # idx 3 (Bell) not supported yet
+
+Â Â Â TONES = list(chirp_common.TONES)
+Â Â Â for tone in [ 165.5, 171.3, 177.3 ]:
+Â Â Â Â Â Â TONES.remove(tone)Â Â Â Â Â Â
+Â Â Â POWER_LEVELS = ["Hi", "Mid1", "Mid2", "Low"]
+Â Â Â DUPLEX = ["", "-", "+", "split"]
+Â Â Â Â Â Â
+Â Â Â _memsize = 4063
+Â Â Â # block 03 (200 Bytes long) repeats 18 times; channel memories
+Â Â Â _block_lengths = [ 2, 232, 24, 200, 205]
+Â Â Â
+Â Â Â mem_format = """
+Â Â Â #seekto 0x22;Â Â Â
+Â Â Â struct {
+Â Â Â Â Â Â u8Â Â Â dtmf_active;
+Â Â Â Â Â Â u8Â Â Â dtmf1_len;
+Â Â Â Â Â Â u8Â Â Â dtmf2_len;
+Â Â Â Â Â Â u8Â Â Â dtmf3_len;
+Â Â Â Â Â Â u8Â Â Â dtmf4_len;
+Â Â Â Â Â Â u8Â Â Â dtmf5_len;
+Â Â Â Â Â Â u8Â Â Â dtmf6_len;
+Â Â Â Â Â Â u8Â Â Â dtmf7_len;
+Â Â Â Â Â Â u8Â Â Â dtmf8_len;
+Â Â Â Â Â Â bbcd dtmf1[8];
+Â Â Â Â Â Â bbcd dtmf2[8];
+Â Â Â Â Â Â bbcd dtmf3[8];
+Â Â Â Â Â Â bbcd dtmf4[8];Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â bbcd dtmf5[8];
+Â Â Â Â Â Â bbcd dtmf6[8];
+Â Â Â Â Â Â bbcd dtmf7[8];Â Â Â
+Â Â Â Â Â Â bbcd dtmf8[8];
+Â Â Â Â Â Â char cwid[7];
+Â Â Â Â Â Â u8 Â Â Â unk1;
+Â Â Â Â Â Â u8 Â Â Â unk2:2,
+Â Â Â Â Â Â Â Â Â beep_dis:1,
+Â Â Â Â Â Â Â Â Â unk3:1,
+Â Â Â Â Â Â Â Â Â rfsqlvl:4;
+Â Â Â Â Â Â u8Â Â Â cwid_en:1,
+Â Â Â Â Â Â Â Â Â unk4:3,
+Â Â Â Â Â Â Â Â Â txnarrow:1,
+Â Â Â Â Â Â Â Â Â dtmfspeed:1,
+Â Â Â Â Â Â Â Â Â pttlock:2;
+Â Â Â Â Â Â u8Â Â Â dtmftxdelay:3,
+Â Â Â Â Â Â Â Â Â fancontrol:2,
+Â Â Â Â Â Â Â Â Â unk5:3;
+Â Â Â Â Â Â u8Â Â Â dimmer:3,
+Â Â Â Â Â Â Â Â Â unk6:1,
+Â Â Â Â Â Â Â Â Â lcdcontrast:4;
+Â Â Â Â Â Â u8Â Â Â tot;
+Â Â Â Â Â Â u8Â Â Â unk8:1,
+Â Â Â Â Â Â Â Â Â ars:1,
+Â Â Â Â Â Â Â Â Â lock:1,
+Â Â Â Â Â Â Â Â Â txpwrsave:1,
+Â Â Â Â Â Â Â Â Â apo:4;
+Â Â Â Â Â Â u8Â Â Â key_rt;
+Â Â Â Â Â Â u8Â Â Â key_lt;
+Â Â Â Â Â Â u8Â Â Â key_p1;
+Â Â Â Â Â Â u8Â Â Â key_p2;
+Â Â Â Â Â Â u8Â Â Â key_acc;
+      char   demomsg1[32];
+      char   demomsg2[32];
+Â Â Â Â Â Â
+Â Â Â } settings;
+Â Â Â
+Â Â Â struct mem_struct {
+Â Â Â Â Â u8 mode:2,
+Â Â Â Â Â Â Â Â isUhf1:1,
+Â Â Â Â Â Â Â Â unknown1:2,
+Â Â Â Â Â Â Â Â step:3;
+Â Â Â Â Â u8 artsmode:2,
+Â Â Â Â Â Â Â Â unknown2:1,
+Â Â Â Â Â Â Â Â isUhf2:1
+Â Â Â Â Â Â Â Â power:2,
+Â Â Â Â Â Â Â Â shift:2;
+Â Â Â Â Â u8 skip:1,
+Â Â Â Â Â Â Â Â showname:1,
+Â Â Â Â Â Â Â Â unknown3:1,
+Â Â Â Â Â Â Â Â isUhfHi:1,
+Â Â Â Â Â Â Â Â unknown4:1,
+Â Â Â Â Â Â Â Â tmode:3;
+Â Â Â Â Â u32 rxfreq;
+Â Â Â Â Â u32 txfreqoffset;
+Â Â Â Â Â u8 UseDefaultName:1,
+Â Â Â Â Â Â Â Â ars:1,
+Â Â Â Â Â Â Â Â tone:6;
+Â Â Â Â Â u8 packetmode:1,
+Â Â Â Â Â Â Â Â unknown5:1,
+Â Â Â Â Â Â Â Â dcstone:6;
+Â Â Â Â Â char name[7];
+Â Â Â };
+
+Â Â Â #seekto 0x86;
+Â Â Â struct mem_struct vfo_v;
+Â Â Â struct mem_struct call_v;
+Â Â Â struct mem_struct vfo_u;
+Â Â Â struct mem_struct call_u;
+Â Â Â
+Â Â Â #seekto 0x102;
+Â Â Â struct mem_struct memory[180];
+
+Â Â Â #seekto 0xf12;
+Â Â Â struct mem_struct pms_1L;
+Â Â Â struct mem_struct pms_1U;
+Â Â Â struct mem_struct pms_2L;Â Â Â
+Â Â Â struct mem_struct pms_2U;
+Â Â Â """
+
+Â Â Â @classmethod
+Â Â Â def match_model(cls, filedata, filename):
+Â Â Â Â Â Â Â return len(filedata) == cls._memsize
+
+Â Â Â def get_features(self):
+Â Â Â Â Â Â Â rf = chirp_common.RadioFeatures()
+Â Â Â Â Â Â Â rf.has_ctone = False
+Â Â Â Â Â Â Â rf.has_bank = False
+Â Â Â Â Â Â Â rf.has_dtcs_polarity = False
+Â Â Â Â Â Â Â rf.has_dtcs = True
+Â Â Â Â Â Â Â rf.valid_modes = self.MODES
+Â Â Â Â Â Â Â rf.valid_tmodes = self.TMODES
+Â Â Â Â Â Â Â rf.valid_duplexes = self.DUPLEX
+Â Â Â Â Â Â Â rf.valid_tuning_steps = self.STEPS
+Â Â Â Â Â Â Â rf.valid_power_levels = self.POWER_LEVELS
+Â Â Â Â Â Â Â rf.valid_name_length = 7
+Â Â Â Â Â Â Â rf.valid_characters = chirp_common.CHARSET_ASCII
+Â Â Â Â Â Â Â rf.valid_skips = ["", "S"]
+Â Â Â Â Â Â Â rf.memory_bounds = (1, 180)
+Â Â Â Â Â Â Â rf.valid_bands = [(100000000, 230000000),
+Â Â Â Â Â Â Â Â Â Â Â (300000000, 530000000), (810000000, 999975000)]
+
+Â Â Â Â Â Â Â return rf
+
+Â Â Â def _read(self, blocksize, blocknum):
+Â Â Â Â Â Â Â data = self.pipe.read(blocksize+2)
+Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â # chew echo'd ack
+Â Â Â Â Â Â Â self.pipe.write(CMD_ACK)
+Â Â Â Â Â Â Â time.sleep(0.02)
+Â Â Â Â Â Â Â self.pipe.read(1) # chew echoed ACK from 1-wire serial
+Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â if len(data) == blocksize+2 and data[0] == chr(blocknum):
+Â Â Â Â Â Â Â Â Â Â Â checksum = yaesu_clone.YaesuChecksum(1, blocksize)
+Â Â Â Â Â Â Â Â Â Â Â if checksum.get_existing(data) != checksum.get_calculated(data):
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â raise Exception("Checksum Failed [%02X<>%02X] block %02X, data len: %i" %
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (checksum.get_existing(data),
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksum.get_calculated(data), blocknum, len(data) ))
+Â Â Â Â Â Â Â Â Â Â Â data = data[1:blocksize+1] # Chew blocknum and checksum
+Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â raise Exception("Unable to read blocknum %02X expected blocksize %i got %i." %
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (blocknum, blocksize+2, len(data)))
+
+       return data      Â
+Â Â Â
+Â Â Â def _clone_in(self):
+Â Â Â Â Â Â Â # Be very patient with the radio
+Â Â Â Â Â Â Â self.pipe.setTimeout(4)
+Â Â Â Â Â Â Â start = time.time()
+Â Â Â
+Â Â Â Â Â Â Â data = ""
+Â Â Â Â Â Â Â blocknum = 0
+Â Â Â Â Â Â Â status = chirp_common.Status()
+Â Â Â Â Â Â Â status.msg = "Cloning from radio.\nPut radio into clone mode then\npress SET to send"
+Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â Â Â Â Â status.max = len(self._block_lengths) + 18
+Â Â Â Â Â Â Â for blocksize in self._block_lengths:
+Â Â Â Â Â Â Â Â Â Â Â if blocksize == 200:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # repeated read of 200 block same size (memory area)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 18
+Â Â Â Â Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 1
+Â Â Â Â Â Â Â Â Â Â Â for _i in range(0, repeat):
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â data += self._read(blocksize, blocknum)
+
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â blocknum += 1
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â status.cur = blocknum
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â status.msg = "Clone completed."
+Â Â Â Â Â Â Â self.status_fn(status)
+
+Â Â Â Â Â Â Â print "Clone completed in %i seconds, blocks read: %i" % (time.time() - start, blocknum)
+Â Â Â
+Â Â Â Â Â Â Â return memmap.MemoryMap(data)
+Â Â Â
+Â Â Â def _clone_out(self):
+Â Â Â Â Â Â Â delay = 0.2
+Â Â Â Â Â Â Â start = time.time()
+Â Â Â
+Â Â Â Â Â Â Â blocknum = 0
+Â Â Â Â Â Â Â pos = 0
+Â Â Â Â Â Â Â status = chirp_common.Status()
+Â Â Â Â Â Â Â status.msg = "Cloning to radio.\nPut radio into clone mode and press DISP/SS\n to start receive within 3 secs..."
+Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â Â Â Â Â # radio likes to have port open
+Â Â Â Â Â Â Â self.pipe.open()
+Â Â Â Â Â Â Â time.sleep(3)
+Â Â Â Â Â Â Â status.max = len(self._block_lengths) + 18
+
+
+Â Â Â Â Â Â Â for blocksize in self._block_lengths:
+Â Â Â Â Â Â Â Â Â Â Â if blocksize == 200:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # repeat channel blocks
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 18
+Â Â Â Â Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â repeat = 1
+Â Â Â Â Â Â Â Â Â Â Â for _i in range(0, repeat):
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â time.sleep(0.1)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksum = yaesu_clone.YaesuChecksum(pos, pos+blocksize-1)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â blocknumbyte = chr(blocknum)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â payloadbytes = self.get_mmap()[pos:pos+blocksize]
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â checksumbyte = chr(checksum.get_calculated(self.get_mmap()))
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print "Block %i - will send from %i to %i byte " % \
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (blocknum, pos, pos + blocksize)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(blocknumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(payloadbytes)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(checksumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # send wrapped bytes
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.pipe.write(blocknumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.pipe.write(payloadbytes)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.pipe.write(checksumbyte)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â tmp = self.pipe.read(blocksize+2)Â #chew echo
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print "bytes echoed: "
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(tmp)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # radio is slow to write/ack:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â time.sleep(0.9)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â buf = self.pipe.read(1)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if os.getenv("CHIRP_DEBUG") or CHIRP_DEBUG:Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print "ack recd:"
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â print util.hexprint(buf)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if buf != CMD_ACK:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â raise Exception("Radio did not ack block %i" % blocknum)
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â pos += blocksize
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â blocknum += 1
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â status.cur = blocknum
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self.status_fn(status)
+Â Â Â
+Â Â Â Â Â Â Â print "Clone completed in %i seconds" % (time.time() - start)
+Â Â Â
+Â Â Â def sync_in(self):
+Â Â Â Â Â Â Â try:
+Â Â Â Â Â Â Â Â Â Â Â self._mmap = self._clone_in()
+Â Â Â Â Â Â Â except errors.RadioError:
+Â Â Â Â Â Â Â Â Â Â Â raise
+Â Â Â Â Â Â Â except Exception, e:
+Â Â Â Â Â Â Â Â Â Â Â trace = traceback.format_exc()
+Â Â Â Â Â Â Â Â Â Â Â raise errors.RadioError("Failed to communicate with radio: %s" % trace)
+Â Â Â Â Â Â Â self.process_mmap()
+
+Â Â Â def sync_out(self):
+Â Â Â Â Â Â Â try:
+Â Â Â Â Â Â Â Â Â Â Â self._clone_out()
+Â Â Â Â Â Â Â except errors.RadioError:
+Â Â Â Â Â Â Â Â Â Â Â raise
+Â Â Â Â Â Â Â except Exception, e:
+Â Â Â Â Â Â Â Â Â Â Â trace = traceback.format_exc()
+Â Â Â Â Â Â Â Â Â Â Â raise errors.RadioError("Failed to communicate with radio: %s" % trace)
+
+Â Â Â def process_mmap(self):
+Â Â Â Â Â Â Â self._memobj = bitwise.parse(self.mem_format, self._mmap)
+
+Â Â Â def get_memory(self, number):
+Â Â Â Â Â Â Â _mem = self._memobj.memory[number-1]
+
+Â Â Â Â Â Â Â mem = chirp_common.Memory()
+Â Â Â Â Â Â Â mem.number = number
+Â Â Â Â Â Â Â mem.freq = _mem.rxfreq * 10Â Â Â Â Â
+Â Â Â Â Â Â Â mem.offset = _mem.txfreqoffset * 10
+Â Â Â Â Â Â Â if not _mem.tmode < len(self.TMODES):
+Â Â Â Â Â Â Â Â Â Â Â _mem.tmode = 0
+Â Â Â Â Â Â Â mem.tmode = self.TMODES[_mem.tmode]
+Â Â Â Â Â Â Â mem.rtone = self.TONES[_mem.tone]
+Â Â Â Â Â Â Â mem.dtcs = chirp_common.DTCS_CODES[_mem.dcstone]
+Â Â Â Â Â Â Â mem.mode = self.MODES[_mem.mode]
+
+Â Â Â Â Â Â Â '''
+Â Â Â Â Â Â Â # ars mode note yet working...
+Â Â Â Â Â Â Â # ARS mode:
+Â Â Â Â Â Â Â if _mem.ars and _mem.shift == 0:
+Â Â Â Â Â Â Â Â Â Â Â mem.duplex = self.DUPLEX[4]
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â mem.duplex = self.DUPLEX[_mem.shift]
+Â Â Â Â Â Â Â '''
+
+Â Â Â Â Â Â Â mem.duplex = self.DUPLEX[_mem.shift]
+Â Â Â Â Â Â Â mem.power = self.POWER_LEVELS[_mem.power]
+Â Â Â Â Â Â Â # radio has a known bug with 5khz step and squelch
+Â Â Â Â Â Â Â if _mem.step == 0:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = 2
+Â Â Â Â Â Â Â mem.tuning_step = self.STEPS[_mem.step]
+Â Â Â Â Â Â Â mem.skip = _mem.skip and "S" or ""
+Â Â Â Â Â Â Â mem.name = _mem.name
+Â Â Â Â Â Â Â return mem
+
+Â Â Â def get_raw_memory(self, number):
+Â Â Â Â Â Â Â return repr(self._memobj.memory[number-1])
+Â Â Â
+Â Â Â def set_memory(self, mem):
+
+Â Â Â Â Â Â Â _mem = self._memobj.memory[mem.number - 1]
+Â Â Â Â Â Â Â _mem.skip = mem.skip == "S"
+Â Â Â Â Â Â Â # radio has a known bug with 5khz step and dead squelch
+Â Â Â Â Â Â Â if not mem.tuning_step or mem.tuning_step == self.STEPS[0]:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = 2
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = self.STEPS.index(mem.tuning_step)
+Â Â Â Â Â Â Â _mem.rxfreq = mem.freq / 10
+Â Â Â Â Â Â Â # vfo will unlock if not in right band?
+Â Â Â Â Â Â Â if mem.freq > 300000000:
+Â Â Â Â Â Â Â Â Â Â Â # uhf
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf1 = 1
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf2 = 1
+Â Â Â Â Â Â Â Â Â Â Â if mem.freq > 810000000:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â # uhf hiband
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â _mem.isUhfHi = 1
+Â Â Â Â Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â _mem.isUhfHi = 0
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â # vhf
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf1 = 0
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhf2 = 0
+Â Â Â Â Â Â Â Â Â Â Â _mem.isUhfHi = 0
+Â Â Â Â Â Â Â _mem.txfreqoffset = mem.offset / 10
+Â Â Â Â Â Â Â _mem.tone = self.TONES.index(mem.rtone)
+Â Â Â Â Â Â Â _mem.tmode = self.TMODES.index(mem.tmode)
+Â Â Â Â Â Â Â _mem.mode = self.MODES.index(mem.mode)
+Â Â Â Â Â Â Â '''
+Â Â Â Â Â Â Â # ars not yet working
+Â Â Â Â Â Â Â # ARS mode:
+Â Â Â Â Â Â Â if mem.duplex == 4:
+Â Â Â Â Â Â Â Â Â Â Â _mem.shift = 0
+Â Â Â Â Â Â Â Â Â Â Â _mem.ars = 1
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)
+Â Â Â Â Â Â Â '''
+Â Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)Â Â Â
+Â Â Â Â Â Â Â _mem.dcstone = chirp_common.DTCS_CODES.index(mem.dtcs)
+Â Â Â Â Â Â Â if self.get_features().has_tuning_step:
+Â Â Â Â Â Â Â Â Â Â Â _mem.step = self.STEPS.index(mem.tuning_step)
+Â Â Â Â Â Â Â _mem.shift = self.DUPLEX.index(mem.duplex)
+Â Â Â Â Â Â Â if mem.power:
+Â Â Â Â Â Â Â Â Â Â Â _mem.power = self.POWER_LEVELS.index(mem.power)
+Â Â Â Â Â Â Â else:
+Â Â Â Â Â Â Â Â Â Â Â _mem.power = 3Â # default to low power
+Â Â Â Â Â Â Â _mem.name = mem.name.ljust(7)
+
+
2
2
So some yaesu radios in addition to various shift/duplex options like off/+/-, have "auto repeater shift" or ARS.
I have added auto as a choice to my duplexes and set it as valid_duplexes:
   DUPLEX = ["", "-", "+", "split", "Auto"]
...
       rf.valid_duplexes = list(self.DUPLEX)
But it's failing like:
Exception running RadioJob: `Auto' is not in valid list: ['', '+', '-', 'split', 'off']
-- Exception: --
Traceback (most recent call last):
 File "/home/jens/build/chirp.hg/chirpui/common.py", line 111, in _execute
   result = func(*self.args, **self.kwargs)
 File "/home/jens/build/chirp.hg/chirp/ft90.py", line 244, in get_memory
   mem.duplex = self.DUPLEX[4]
 File "/home/jens/build/chirp.hg/chirp/chirp_common.py", line 329, in __setattr__
   self._valid_map[name]))
ValueError: `Auto' is not in valid list: ['', '+', '-', 'split', 'off']
Any idea what I'm missing?
2
3
Hi Dan,
I picked up one of these ft-90r for a decent value, because of it's subcompactness and lack of alot of buttons, programming via pc is almost required.
Is this ft-90r code already stubbed in current chirp dailies? I saw the unfinished work on ft-50 "low level" ? driver, but seemed to be pre-bitwise mapping.
Can share what you have so far, I think I can get it to working state.
I did some work on decoding the channel memory map. I have it figured out.
(Thankfully, the rt demo software actually stores the channel memory bytes in the local rdf file same as in the radio.)
I was able to setup a test rdf layout, copying the same channel over and over, just changing a single thing per memory.
-Jens
FT-90R Memory map notes
by KD4TJX
Segments:
Header byte is segment number?, then payload, w/ trailer byte Checksum-8 (sum_of_payload_bytes mod 256)
Receiver ACKs each segment with 06
segment numbers/payload notes:
seg 00h: 2 bytes, 8f 86, id?
seg 01h: 232 (E8h) bytes, radio settings header: global settings, band limits?, vfo, & call/home memories (see channel memory notes below on map)Â
seg 02h: 24 (18h) bytes, ? (last part of radio settings header?)
seg 03h: 200 (C8h) bytes, channel memories, 1-10
seg 04h-15h: similar to 03h: remaining 21-180 channel memories
Channel memory notes:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 12 13 14 (hex offset)
90 0C 40 00 DE C7 40 00 00 EA 60 40 00 4D 45 4D 4F 52 59 31 (sample channel memory)
each channel memory is 20 (14h) bytes, structure as follows:
byte offset (hex)/bit range (lsb)
00:[7-6]Mode: 00 = AM, 01 = FM, 10 = auto
00:[5-4]?? - 010
00:[3-0]step (khz): 000 = 5, 001 = 10, 010 = 12.5, 011 = 15, 100 = 20, 101 = 25, 110 = 50
01:[7-6]ARTS: 00 = off, 01 = RX, 10 = TX, 11 = TRX
01:[5-4]?? - 00
01:[3-2]power: 11 = low, 10 = mid2, 01 = mid1, 00 = high
01:[1-0]offset: 00 = simplex, 01 = -, 10 = +, 11 = odd
02:[7]scan skip: 0 = off, 1 = on
02:[6-3]?? - 0000
02:[2-0]tone sql mode: 00 = off, 01 = ENC (ctcss), 10 = ENCDEC (ctcss), 011 = Bell, 100 = DCS
03-06:RX Freq: uint32be, freq in 10s of hz. example 00DEC740h = 146.000 MHz
07-0a:TX offset, or if offset is odd, actual TX freq. See RX Freq format.
0b:[7-6]?? - 00
0b:[5-0]CTCSS tone freq selection: 00h-26h, selection from ctcss table. e.g., 00h = 67.0, 0f = 110.9
0c:[7]packet mode: 0 = 1200, 1 = 9600
0c:[6]?? - 0
0c:[5-0]DCS tone select: from table?
0d-12:Memory name: 7 chars ascii
>Any way to get the FT90R or FT50RD included?  Hint, hint.  :-)  I have
>>the RT software for both, but the FT50 software won't even run on XP
>>(I don't think).
>I've spent quite a bit of time with both of these radios trying to
>write drivers. They are the only two I've ever given up on. I think the
>interest level is fairly low, and thus deemed it not worth my time to
>continue (after hours of trying).
>The FT-50 clone process was never predictable and thus I didn't feel
>the driver was reliable enough to enable. The code for it is actually
>still in the tree, so if someone wanted to step up and try to figure
>out why the radio seems to do something different every time you do a
>clone, it should be fairly easy after that.
>The FT-90 memory map seemed to not store the tone value per memory
>(although of course, it did, since the radio remembers more than one
>tone). I spent hours trying to figure out what was going on and
>eventually decided to quit. Again, I have partial code for this, if
>anyone is interested in taking it on.
>--
>Dan Smith
>www.danplanet.com
>KK7DS
2
1
Tested changes:
[Jim Unroe <rock.unroe(a)gmail.com>] [UV-82] patch to recognize and allow new UV-82 firmware version
BF8210 (original UV-82 firmware version)
B82S21 (new firmware version)
#1073
Full log:
Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace
[workspace] $ hg showconfig paths.default
[workspace] $ hg pull --rev default
[workspace] $ hg update --clean --rev default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev 01073dd3c6f4adfcd57e56deb2657fceacfe3499
[workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune 01073dd3c6f4adfcd57e56deb2657fceacfe3499
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson4847286890970760227.sh
+ cd tests
+ ./run_tests
Registered Icom_IC-2820H = IC2820Radio
Registered AnyTone_5888UV = AnyTone5888UVRadio
Registered Icom_IC-2200H = IC2200Radio
Registered Yaesu_FT-2800M = FT2800Radio
Registered Yaesu_VX-3 = VX3Radio
Registered Icom_IC-2100H = IC2100Radio
Registered Yaesu_FTM-350 = FTM350Radio
Registered Icom_IC-91_92AD_ICF_File = IC9xICFRadio
Registered Icom_IC-V82_U82 = ICx8xRadio
Registered Yaesu_VX-6 = VX6Radio
Registered Yaesu_VX-5 = VX5Radio
Registered Yaesu_FT-60 = FT60Radio
Registered Yaesu_VX-7 = VX7Radio
Registered Baofeng_UV-5R = BaofengUV5R
Registered Baofeng_F-11 = BaofengF11Radio
Registered Baofeng_UV-82 = BaofengUV82Radio
Registered Yaesu_FT-1802M = FT1802Radio
Registered Kenwood_TK-7102 = KenwoodTK7102Radio
Registered Kenwood_TK-8102 = KenwoodTK8102Radio
Registered Kenwood_TK-7108 = KenwoodTK7108Radio
Registered Kenwood_TK-8108 = KenwoodTK8108Radio
Registered Icom_ID-31A = ID31Radio
Registered Icom_ID-51A = ID51Radio
Registered Icom_IC-2720H = IC2720Radio
Registered Icom_IC-T8A = ICT8ARadio
Registered Wouxun_KG-UVD1P = KGUVD1PRadio
Registered Wouxun_KG-UV6 = KGUV6DRadio
Registered Wouxun_KG-816 = KG816Radio
Registered Wouxun_KG-818 = KG818Radio
Registered TYT_TH-UVF1 = TYTTHUVF1Radio
Registered Generic_CSV = CSVRadio
Registered RT_Systems_CSV = RTCSVRadio
Registered Kenwood_ITM = ITMRadio
Registered Alinco_DR03T = DR03Radio
Registered Alinco_DR06T = DR06Radio
Registered Alinco_DR135T = DR135Radio
Registered Alinco_DR235T = DR235Radio
Registered Alinco_DR435T = DR435Radio
Registered Alinco_DJ596 = DJ596Radio
Registered Jetstream_JT220M = JT220MRadio
Registered Alinco_DJ175 = DJ175Radio
Registered Kenwood_TH-D7 = THD7Radio
Registered Kenwood_TH-D7G = THD7GRadio
Registered Kenwood_TM-D700 = TMD700Radio
Registered Kenwood_TM-V7 = TMV7Radio
Registered Kenwood_TM-G707 = TMG707Radio
Registered Kenwood_TH-G71 = THG71Radio
Registered Kenwood_TH-F6 = THF6ARadio
Registered Kenwood_TH-F7 = THF7ERadio
Registered Kenwood_TM-D710 = TMD710Radio
Registered Kenwood_TH-D72_live_mode = THD72Radio
Registered Kenwood_TM-V71 = TMV71Radio
Registered Kenwood_TH-K2 = THK2Radio
Registered Kenwood_TM-271 = TM271Radio
Registered Kenwood_TM-471 = TM471Radio
Registered Yaesu_VX-8_R = VX8Radio
Registered Yaesu_VX-8_DR = VX8DRadio
Registered Yaesu_VX-8_GE = VX8GERadio
Registered Icom_IC-T7H = ICT7HRadio
Registered Icom_IC-Q7A = ICQ7Radio
Registered Baofeng_UV-B5 = BaofengUVB5
Registered Generic_XML = XMLRadio
Registered Kenwood_HMK = HMKRadio
Registered Kenwood_TH-D72_clone_mode = THD72Radio
Registered Icom_IC-91_92AD = IC9xRadio
Registered Icom_IC-T70 = ICT70Radio
Registered Icom_IC-208H = IC208Radio
Registered Icom_ID-800H_v2 = ID800v2Radio
Registered Icom_7200 = Icom7200Radio
Registered Icom_7000 = Icom7000Radio
Registered Icom_746 = Icom746Radio
Registered ARRL_Travel_Plus = TpeRadio
Registered Vertex_Standard_VXA-700 = VXA700Radio
Registered Icom_IC-W32A = ICW32ARadio
Registered Baofeng_UV-3R = UV3RRadio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Yaesu_FT-7800 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered Yaesu_FT-817 = FT817Radio
Registered Yaesu_FT-817ND = FT817NDRadio
Registered Yaesu_FT-817ND_US = FT817NDUSRadio
Registered Yaesu_FT-857_897 = FT857Radio
Registered Yaesu_FT-857_897_US = FT857USRadio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
Registered TYT_TH-UV3R = TYTUV3RRadio
Alinco DJ175 Detect PASSED: All tests
Alinco DJ175 CopyAll PASSED: All tests
Alinco DJ175 Clone PASSED: All tests
Alinco DJ175 BruteForce PASSED: All tests
Alinco DJ175 Edges PASSED: All tests
Alinco DJ175 Banks SKIPPED: Banks not supported
Alinco DJ596 Detect PASSED: All tests
Alinco DJ596 CopyAll PASSED: All tests
Alinco DJ596 Clone PASSED: All tests
Alinco DJ596 BruteForce PASSED: All tests
Alinco DJ596 Edges PASSED: All tests
Alinco DJ596 Banks SKIPPED: Banks not supported
Alinco DR235T Detect PASSED: All tests
Alinco DR235T CopyAll PASSED: All tests
Alinco DR235T Clone PASSED: All tests
Alinco DR235T BruteForce PASSED: All tests
Alinco DR235T Edges PASSED: All tests
Alinco DR235T Banks SKIPPED: Banks not supported
Baofeng F-11 Detect PASSED: All tests
Baofeng F-11 CopyAll PASSED: All tests
Baofeng F-11 Clone PASSED: All tests
Baofeng F-11 BruteForce PASSED: All tests
Baofeng F-11 Edges PASSED: All tests
Baofeng F-11 Banks SKIPPED: Banks not supported
Baofeng UV-3R Detect PASSED: All tests
Baofeng UV-3R CopyAll PASSED: All tests
Baofeng UV-3R Clone PASSED: All tests
Baofeng UV-3R BruteForce PASSED: All tests
Baofeng UV-3R Edges PASSED: All tests
Baofeng UV-3R Banks SKIPPED: Banks not supported
Baofeng UV-5R Detect PASSED: All tests
Baofeng UV-5R CopyAll PASSED: All tests
Baofeng UV-5R Clone PASSED: All tests
Baofeng UV-5R BruteForce PASSED: All tests
Baofeng UV-5R Edges PASSED: All tests
Baofeng UV-5R Banks SKIPPED: Banks not supported
Baofeng UV-B5 Detect PASSED: All tests
Baofeng UV-B5 CopyAll PASSED: All tests
Baofeng UV-B5 Clone PASSED: All tests
Baofeng UV-B5 BruteForce PASSED: All tests
Baofeng UV-B5 Edges PASSED: All tests
Baofeng UV-B5 Banks SKIPPED: Banks not supported
Icom IC-208H Detect PASSED: All tests
Icom IC-208H CopyAll PASSED: All tests
Icom IC-208H Clone PASSED: All tests
Icom IC-208H BruteForce PASSED: All tests
Icom IC-208H Edges PASSED: All tests
Icom IC-208H Banks PASSED: All tests
Icom IC-2100H Detect PASSED: All tests
Icom IC-2100H CopyAll PASSED: All tests
Icom IC-2100H Clone PASSED: All tests
Icom IC-2100H BruteForce PASSED: All tests
Icom IC-2100H Edges PASSED: All tests
Icom IC-2100H Banks SKIPPED: Banks not supported
Icom IC-2200H Detect PASSED: All tests
Icom IC-2200H CopyAll PASSED: All tests
Icom IC-2200H Clone PASSED: All tests
Icom IC-2200H BruteForce PASSED: All tests
Icom IC-2200H Edges PASSED: All tests
Icom IC-2200H Banks PASSED: All tests
Icom IC-2720H Detect PASSED: All tests
Icom IC-2720H CopyAll PASSED: All tests
Icom IC-2720H Clone PASSED: All tests
Icom IC-2720H BruteForce PASSED: All tests
Icom IC-2720H Edges PASSED: All tests
Icom IC-2720H Banks PASSED: All tests
Icom IC-2820H Detect PASSED: All tests
Icom IC-2820H CopyAll PASSED: All tests
Icom IC-2820H Clone PASSED: All tests
Icom IC-2820H BruteForce PASSED: All tests
Icom IC-2820H Edges PASSED: All tests
Icom IC-2820H Banks PASSED: All tests
Icom IC-Q7A Detect PASSED: All tests
Icom IC-Q7A CopyAll PASSED: All tests
Icom IC-Q7A Clone PASSED: All tests
Icom IC-Q7A BruteForce PASSED: All tests
Icom IC-Q7A Edges PASSED: All tests
Icom IC-Q7A Banks SKIPPED: Banks not supported
Icom IC-T70 Detect PASSED: All tests
Icom IC-T70 CopyAll PASSED: All tests
Icom IC-T70 Clone PASSED: All tests
Icom IC-T70 BruteForce PASSED: All tests
Icom IC-T70 Edges PASSED: All tests
Icom IC-T70 Banks PASSED: All tests
Icom IC-T7H Detect PASSED: All tests
Icom IC-T7H CopyAll PASSED: All tests
Icom IC-T7H Clone PASSED: All tests
Icom IC-T7H BruteForce PASSED: All tests
Icom IC-T7H Edges PASSED: All tests
Icom IC-T7H Banks SKIPPED: Banks not supported
Icom IC-T8A Detect PASSED: All tests
Icom IC-T8A CopyAll PASSED: All tests
Icom IC-T8A Clone PASSED: All tests
Icom IC-T8A BruteForce PASSED: All tests
Icom IC-T8A Edges PASSED: All tests
Icom IC-T8A Banks SKIPPED: Banks not supported
Icom IC-V82/U82 Detect PASSED: All tests
Icom IC-V82/U82 CopyAll PASSED: All tests
Icom IC-V82/U82 Clone PASSED: All tests
Icom IC-V82/U82 BruteForce PASSED: All tests
Icom IC-V82/U82 Edges PASSED: All tests
Icom IC-V82/U82 Banks PASSED: All tests
Icom IC-W32A VHF Detect PASSED: All tests
Icom IC-W32A VHF CopyAll PASSED: All tests
Icom IC-W32A VHF Clone PASSED: All tests
Icom IC-W32A VHF BruteForce PASSED: All tests
Icom IC-W32A VHF Edges PASSED: All tests
Icom IC-W32A VHF Banks SKIPPED: Banks not supported
Icom IC-W32A UHF Detect PASSED: All tests
Icom IC-W32A UHF CopyAll PASSED: All tests
Icom IC-W32A UHF Clone PASSED: All tests
Icom IC-W32A UHF BruteForce PASSED: All tests
Icom IC-W32A UHF Edges PASSED: All tests
Icom IC-W32A UHF Banks SKIPPED: Banks not supported
Icom ID-31A Detect PASSED: All tests
Icom ID-31A CopyAll PASSED: All tests
Icom ID-31A Clone PASSED: All tests
Icom ID-31A BruteForce PASSED: All tests
Icom ID-31A Edges PASSED: All tests
Icom ID-31A Banks PASSED: All tests
Icom ID-51A Detect PASSED: All tests
Icom ID-51A CopyAll PASSED: All tests
Icom ID-51A Clone PASSED: All tests
Icom ID-51A BruteForce PASSED: All tests
Icom ID-51A Edges PASSED: All tests
Icom ID-51A Banks PASSED: All tests
Icom ID-800H v2 Detect PASSED: All tests
Icom ID-800H v2 CopyAll PASSED: All tests
Icom ID-800H v2 Clone PASSED: All tests
Icom ID-800H v2 BruteForce PASSED: All tests
Icom ID-800H v2 Edges PASSED: All tests
Icom ID-800H v2 Banks PASSED: All tests
Icom ID-880H Detect PASSED: All tests
Icom ID-880H CopyAll PASSED: All tests
Icom ID-880H Clone PASSED: All tests
Icom ID-880H BruteForce PASSED: All tests
Icom ID-880H Edges PASSED: All tests
Icom ID-880H Banks PASSED: All tests
Jetstream JT220M Detect PASSED: All tests
Jetstream JT220M CopyAll PASSED: All tests
Jetstream JT220M Clone PASSED: All tests
Jetstream JT220M BruteForce PASSED: All tests
Jetstream JT220M Edges PASSED: All tests
Jetstream JT220M Banks SKIPPED: Banks not supported
Kenwood TH-D72 (clone Detect PASSED: All tests
Kenwood TH-D72 (clone CopyAll PASSED: All tests
Kenwood TH-D72 (clone Clone PASSED: All tests
Kenwood TH-D72 (clone BruteForce PASSED: All tests
Kenwood TH-D72 (clone Edges PASSED: All tests
Kenwood TH-D72 (clone Banks SKIPPED: Banks not supported
Kenwood TK-8102 Detect PASSED: All tests
Kenwood TK-8102 CopyAll PASSED: All tests
Kenwood TK-8102 Clone PASSED: All tests
Kenwood TK-8102 BruteForce PASSED: All tests
Kenwood TK-8102 Edges PASSED: All tests
Kenwood TK-8102 Banks SKIPPED: Banks not supported
Puxing PX-2R Detect PASSED: All tests
Puxing PX-2R CopyAll PASSED: All tests
Puxing PX-2R Clone PASSED: All tests
Puxing PX-2R BruteForce PASSED: All tests
Puxing PX-2R Edges PASSED: All tests
Puxing PX-2R Banks SKIPPED: Banks not supported
Puxing PX-777 Detect PASSED: All tests
Puxing PX-777 CopyAll PASSED: All tests
Puxing PX-777 Clone PASSED: All tests
Puxing PX-777 BruteForce PASSED: All tests
Puxing PX-777 Edges PASSED: All tests
Puxing PX-777 Banks SKIPPED: Banks not supported
TYT TH-UV3R Detect PASSED: All tests
TYT TH-UV3R CopyAll PASSED: All tests
TYT TH-UV3R Clone PASSED: All tests
TYT TH-UV3R BruteForce PASSED: All tests
TYT TH-UV3R Edges PASSED: All tests
TYT TH-UV3R Banks SKIPPED: Banks not supported
TYT TH-UVF1 Detect PASSED: All tests
TYT TH-UVF1 CopyAll PASSED: All tests
TYT TH-UVF1 Clone PASSED: All tests
TYT TH-UVF1 BruteForce PASSED: All tests
TYT TH-UVF1 Edges PASSED: All tests
TYT TH-UVF1 Banks SKIPPED: Banks not supported
Vertex VXA-700 Detect PASSED: All tests
Vertex VXA-700 CopyAll PASSED: All tests
Vertex VXA-700 Clone PASSED: All tests
Vertex VXA-700 BruteForce PASSED: All tests
Vertex VXA-700 Edges PASSED: All tests
Vertex VXA-700 Banks SKIPPED: Banks not supported
Wouxun KG-816 Detect PASSED: All tests
Wouxun KG-816 CopyAll PASSED: All tests
Wouxun KG-816 Clone PASSED: All tests
Wouxun KG-816 BruteForce PASSED: All tests
Wouxun KG-816 Edges PASSED: All tests
Wouxun KG-816 Banks SKIPPED: Banks not supported
Wouxun KG-818 Detect PASSED: All tests
Wouxun KG-818 CopyAll PASSED: All tests
Wouxun KG-818 Clone PASSED: All tests
Wouxun KG-818 BruteForce PASSED: All tests
Wouxun KG-818 Edges PASSED: All tests
Wouxun KG-818 Banks SKIPPED: Banks not supported
Wouxun KG-UV6 Detect PASSED: All tests
Wouxun KG-UV6 CopyAll PASSED: All tests
Wouxun KG-UV6 Clone PASSED: All tests
Wouxun KG-UV6 BruteForce PASSED: All tests
Wouxun KG-UV6 Edges PASSED: All tests
Wouxun KG-UV6 Banks SKIPPED: Banks not supported
Wouxun KG-UVD1P Detect PASSED: All tests
Wouxun KG-UVD1P CopyAll PASSED: All tests
Wouxun KG-UVD1P Clone PASSED: All tests
Wouxun KG-UVD1P BruteForce PASSED: All tests
Wouxun KG-UVD1P Edges PASSED: All tests
Wouxun KG-UVD1P Banks SKIPPED: Banks not supported
Yaesu FT-1802M Detect PASSED: All tests
Yaesu FT-1802M CopyAll PASSED: All tests
Yaesu FT-1802M Clone PASSED: All tests
Yaesu FT-1802M BruteForce PASSED: All tests
Yaesu FT-1802M Edges PASSED: All tests
Yaesu FT-1802M Banks SKIPPED: Banks not supported
Yaesu FT-2800M Detect PASSED: All tests
Yaesu FT-2800M CopyAll PASSED: All tests
Yaesu FT-2800M Clone PASSED: All tests
Yaesu FT-2800M BruteForce PASSED: All tests
Yaesu FT-2800M Edges PASSED: All tests
Yaesu FT-2800M Banks SKIPPED: Banks not supported
Yaesu FT-60 Detect PASSED: All tests
Yaesu FT-60 CopyAll PASSED: All tests
Yaesu FT-60 Clone PASSED: All tests
Yaesu FT-60 BruteForce PASSED: All tests
Yaesu FT-60 Edges PASSED: All tests
Yaesu FT-60 Banks SKIPPED: Banks not supported
Yaesu FT-7800 Detect PASSED: All tests
Yaesu FT-7800 CopyAll PASSED: All tests
Yaesu FT-7800 Clone PASSED: All tests
Yaesu FT-7800 BruteForce PASSED: All tests
Yaesu FT-7800 Edges PASSED: All tests
Yaesu FT-7800 Banks PASSED: All tests
Yaesu FT-817 Detect PASSED: All tests
Yaesu FT-817 CopyAll PASSED: All tests
Yaesu FT-817 Clone PASSED: All tests
Yaesu FT-817 BruteForce PASSED: All tests
Yaesu FT-817 Edges PASSED: All tests
Yaesu FT-817 Banks SKIPPED: Banks not supported
Yaesu FT-817ND Detect PASSED: All tests
Yaesu FT-817ND CopyAll PASSED: All tests
Yaesu FT-817ND Clone PASSED: All tests
Yaesu FT-817ND BruteForce PASSED: All tests
Yaesu FT-817ND Edges PASSED: All tests
Yaesu FT-817ND Banks SKIPPED: Banks not supported
Yaesu FT-817ND (US) Detect PASSED: All tests
Yaesu FT-817ND (US) CopyAll PASSED: All tests
Yaesu FT-817ND (US) Clone PASSED: All tests
Yaesu FT-817ND (US) BruteForce PASSED: All tests
Yaesu FT-817ND (US) Edges PASSED: All tests
Yaesu FT-817ND (US) Banks SKIPPED: Banks not supported
Yaesu FT-857/897 Detect PASSED: All tests
Yaesu FT-857/897 CopyAll PASSED: All tests
Yaesu FT-857/897 Clone PASSED: All tests
Yaesu FT-857/897 BruteForce PASSED: All tests
Yaesu FT-857/897 Edges PASSED: All tests
Yaesu FT-857/897 Banks SKIPPED: Banks not supported
Yaesu FT-857/897 (U Detect PASSED: All tests
Yaesu FT-857/897 (U CopyAll PASSED: All tests
Yaesu FT-857/897 (U Clone PASSED: All tests
Yaesu FT-857/897 (U BruteForce PASSED: All tests
Yaesu FT-857/897 (U Edges PASSED: All tests
Yaesu FT-857/897 (U Banks SKIPPED: Banks not supported
Yaesu FT-8800 Left Detect PASSED: All tests
Yaesu FT-8800 Left CopyAll PASSED: All tests
Yaesu FT-8800 Left Clone PASSED: All tests
Yaesu FT-8800 Left BruteForce PASSED: All tests
Yaesu FT-8800 Left Edges PASSED: All tests
Yaesu FT-8800 Left Banks PASSED: All tests
Yaesu FT-8800 Right Detect PASSED: All tests
Yaesu FT-8800 Right CopyAll PASSED: All tests
Yaesu FT-8800 Right Clone PASSED: All tests
Yaesu FT-8800 Right BruteForce PASSED: All tests
Yaesu FT-8800 Right Edges PASSED: All tests
Yaesu FT-8800 Right Banks PASSED: All tests
Yaesu FT-8900 Detect PASSED: All tests
Yaesu FT-8900 CopyAll PASSED: All tests
Yaesu FT-8900 Clone PASSED: All tests
Yaesu FT-8900 BruteForce PASSED: All tests
Yaesu FT-8900 Edges PASSED: All tests
Yaesu FT-8900 Banks SKIPPED: Banks not supported
Yaesu FTM-350 Left Detect PASSED: All tests
Yaesu FTM-350 Left CopyAll PASSED: All tests
Yaesu FTM-350 Left Clone PASSED: All tests
Yaesu FTM-350 Left BruteForce PASSED: All tests
Yaesu FTM-350 Left Edges PASSED: All tests
Yaesu FTM-350 Left Banks SKIPPED: Banks not supported
Yaesu FTM-350 Right Detect PASSED: All tests
Yaesu FTM-350 Right CopyAll PASSED: All tests
Yaesu FTM-350 Right Clone PASSED: All tests
Yaesu FTM-350 Right BruteForce PASSED: All tests
Yaesu FTM-350 Right Edges PASSED: All tests
Yaesu FTM-350 Right Banks SKIPPED: Banks not supported
Yaesu VX-3 Detect PASSED: All tests
Yaesu VX-3 CopyAll PASSED: All tests
Yaesu VX-3 Clone PASSED: All tests
Yaesu VX-3 BruteForce PASSED: All tests
Yaesu VX-3 Edges PASSED: All tests
Yaesu VX-3 Banks SKIPPED: Banks not supported
Yaesu VX-5 Detect PASSED: All tests
Yaesu VX-5 CopyAll PASSED: All tests
Yaesu VX-5 Clone PASSED: All tests
Yaesu VX-5 BruteForce PASSED: All tests
Yaesu VX-5 Edges PASSED: All tests
Yaesu VX-5 Banks PASSED: All tests
Yaesu VX-6 Detect PASSED: All tests
Yaesu VX-6 CopyAll PASSED: All tests
Yaesu VX-6 Clone PASSED: All tests
Yaesu VX-6 BruteForce PASSED: All tests
Yaesu VX-6 Edges PASSED: All tests
Yaesu VX-6 Banks SKIPPED: Banks not supported
Yaesu VX-7 Detect PASSED: All tests
Yaesu VX-7 CopyAll PASSED: All tests
Yaesu VX-7 Clone PASSED: All tests
Yaesu VX-7 BruteForce PASSED: All tests
Yaesu VX-7 Edges PASSED: All tests
Yaesu VX-7 Banks PASSED: All tests
Yaesu VX-8 R Detect PASSED: All tests
Yaesu VX-8 R CopyAll PASSED: All tests
Yaesu VX-8 R Clone PASSED: All tests
Yaesu VX-8 R BruteForce PASSED: All tests
Yaesu VX-8 R Edges PASSED: All tests
Yaesu VX-8 R Banks PASSED: All tests
----------------------------------------------------------------------
Results:
TOTAL : 324
FAILED : 0
SKIPPED: 38
PASSED : 286
CRASHED: 0
[workspace] $ /bin/sh -xe /tmp/hudson7004392401377186461.sh
+ nosetests -v tests/unit
test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok
test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok
test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok
test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok
test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok
test_init (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok
test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok
test_changed (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok
test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok
test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
----------------------------------------------------------------------
Ran 147 tests in 0.066s
OK
Email was triggered for: Success
Sending email for trigger: Success
1
0
[chirp_devel] [PATCH] [UV-82] patch to recognize and allow new UV-82 firmware version
by Jim Unroe 17 Aug '13
by Jim Unroe 17 Aug '13
17 Aug '13
# HG changeset patch
# User Jim Unroe <rock.unroe(a)gmail.com>
# Date 1376767504 14400
# Node ID 6216b9e3cf20e8047be95afb517485c44504cdcf
# Parent 694317870830b14ed563de115c36c82c4fb7c6fd
[UV-82] patch to recognize and allow new UV-82 firmware version
BF8210 (original UV-82 firmware version)
B82S21 (new firmware version)
#1073
diff -r 694317870830 -r 6216b9e3cf20 chirp/uv5r.py
--- a/chirp/uv5r.py Tue Jul 30 17:59:18 2013 -0400
+++ b/chirp/uv5r.py Sat Aug 17 15:25:04 2013 -0400
@@ -423,7 +423,7 @@
print "Image is %s" % repr(image_version)
print "Radio is %s" % repr(radio_version)
- if "BFB" not in radio_version and "BF82" not in radio_version and "USA" not in radio_version:
+ if "BFB" not in radio_version and "82" not in radio_version and "USA" not in radio_version:
raise errors.RadioError("Unsupported firmware version: `%s'" %
radio_version)
@@ -728,6 +728,8 @@
return version < 291
if 'BF82' in version_tag:
return False
+ if 'B82' in version_tag:
+ return False
if 'USA' in version_tag:
return False
except:
@@ -740,9 +742,12 @@
if 'BFB' in version_tag:
idx = version_tag.index("BFB") + 3
return int(version_tag[idx:idx+3])
- elif 'BF' in version_tag:
- idx = version_tag.index("BF") + 2
+ elif 'BF82' in version_tag:
+ idx = version_tag.index("BF82") + 2
return int(version_tag[idx:idx+4])
+ elif 'B82S' in version_tag:
+ idx = version_tag.index("B82S") + 4
+ return int(version_tag[idx:idx+2]) + 8200
elif 'USA' in version_tag:
idx = version_tag.index("USA") + 3
return int(version_tag[idx:idx+3])
@@ -1246,5 +1251,5 @@
@directory.register
class BaofengUV82Radio(BaofengUV5R):
MODEL = "UV-82"
- _basetype = "BF82"
+ _basetype = "82"
_idents = [UV82_MODEL]
1
0
Tested changes:
[Marco Filippi <iz3gme.marco(a)gmail.com>] [ft857] Add more settings support
another bunch of panel settings
Implements part of #569
[Marco Filippi <iz3gme.marco(a)gmail.com>] [ft857] Remove unused settings tab
part of #569
[Filippi Marco <iz3gme.marco(a)gmail.com>] [ft857] Add more settings support
first bunch of panel settings
Implements part of #569
Full log:
Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace
[workspace] $ hg showconfig paths.default
[workspace] $ hg pull --rev default
[workspace] $ hg update --clean --rev default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[workspace] $ hg log --rev . --template {node}
[workspace] $ hg log --rev . --template {rev}
[workspace] $ hg log --rev 694317870830b14ed563de115c36c82c4fb7c6fd
[workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune 694317870830b14ed563de115c36c82c4fb7c6fd
No emails were triggered.
[workspace] $ /bin/sh -xe /tmp/hudson8587950883370995549.sh
+ cd tests
+ ./run_tests
Registered Icom_IC-2820H = IC2820Radio
Registered AnyTone_5888UV = AnyTone5888UVRadio
Registered Icom_IC-2200H = IC2200Radio
Registered Yaesu_FT-2800M = FT2800Radio
Registered Yaesu_VX-3 = VX3Radio
Registered Icom_IC-2100H = IC2100Radio
Registered Yaesu_FTM-350 = FTM350Radio
Registered Icom_IC-91_92AD_ICF_File = IC9xICFRadio
Registered Icom_IC-V82_U82 = ICx8xRadio
Registered Yaesu_VX-6 = VX6Radio
Registered Yaesu_VX-5 = VX5Radio
Registered Yaesu_FT-60 = FT60Radio
Registered Yaesu_VX-7 = VX7Radio
Registered Baofeng_UV-5R = BaofengUV5R
Registered Baofeng_F-11 = BaofengF11Radio
Registered Baofeng_UV-82 = BaofengUV82Radio
Registered Yaesu_FT-1802M = FT1802Radio
Registered Kenwood_TK-7102 = KenwoodTK7102Radio
Registered Kenwood_TK-8102 = KenwoodTK8102Radio
Registered Kenwood_TK-7108 = KenwoodTK7108Radio
Registered Kenwood_TK-8108 = KenwoodTK8108Radio
Registered Icom_ID-31A = ID31Radio
Registered Icom_ID-51A = ID51Radio
Registered Icom_IC-2720H = IC2720Radio
Registered Icom_IC-T8A = ICT8ARadio
Registered Wouxun_KG-UVD1P = KGUVD1PRadio
Registered Wouxun_KG-UV6 = KGUV6DRadio
Registered Wouxun_KG-816 = KG816Radio
Registered Wouxun_KG-818 = KG818Radio
Registered TYT_TH-UVF1 = TYTTHUVF1Radio
Registered Generic_CSV = CSVRadio
Registered RT_Systems_CSV = RTCSVRadio
Registered Kenwood_ITM = ITMRadio
Registered Alinco_DR03T = DR03Radio
Registered Alinco_DR06T = DR06Radio
Registered Alinco_DR135T = DR135Radio
Registered Alinco_DR235T = DR235Radio
Registered Alinco_DR435T = DR435Radio
Registered Alinco_DJ596 = DJ596Radio
Registered Jetstream_JT220M = JT220MRadio
Registered Alinco_DJ175 = DJ175Radio
Registered Kenwood_TH-D7 = THD7Radio
Registered Kenwood_TH-D7G = THD7GRadio
Registered Kenwood_TM-D700 = TMD700Radio
Registered Kenwood_TM-V7 = TMV7Radio
Registered Kenwood_TM-G707 = TMG707Radio
Registered Kenwood_TH-G71 = THG71Radio
Registered Kenwood_TH-F6 = THF6ARadio
Registered Kenwood_TH-F7 = THF7ERadio
Registered Kenwood_TM-D710 = TMD710Radio
Registered Kenwood_TH-D72_live_mode = THD72Radio
Registered Kenwood_TM-V71 = TMV71Radio
Registered Kenwood_TH-K2 = THK2Radio
Registered Kenwood_TM-271 = TM271Radio
Registered Kenwood_TM-471 = TM471Radio
Registered Yaesu_VX-8_R = VX8Radio
Registered Yaesu_VX-8_DR = VX8DRadio
Registered Yaesu_VX-8_GE = VX8GERadio
Registered Icom_IC-T7H = ICT7HRadio
Registered Icom_IC-Q7A = ICQ7Radio
Registered Baofeng_UV-B5 = BaofengUVB5
Registered Generic_XML = XMLRadio
Registered Kenwood_HMK = HMKRadio
Registered Kenwood_TH-D72_clone_mode = THD72Radio
Registered Icom_IC-91_92AD = IC9xRadio
Registered Icom_IC-T70 = ICT70Radio
Registered Icom_IC-208H = IC208Radio
Registered Icom_ID-800H_v2 = ID800v2Radio
Registered Icom_7200 = Icom7200Radio
Registered Icom_7000 = Icom7000Radio
Registered Icom_746 = Icom746Radio
Registered ARRL_Travel_Plus = TpeRadio
Registered Vertex_Standard_VXA-700 = VXA700Radio
Registered Icom_IC-W32A = ICW32ARadio
Registered Baofeng_UV-3R = UV3RRadio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Yaesu_FT-7800 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered Yaesu_FT-817 = FT817Radio
Registered Yaesu_FT-817ND = FT817NDRadio
Registered Yaesu_FT-817ND_US = FT817NDUSRadio
Registered Yaesu_FT-857_897 = FT857Radio
Registered Yaesu_FT-857_897_US = FT857USRadio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
Registered TYT_TH-UV3R = TYTUV3RRadio
Alinco DJ175 Detect PASSED: All tests
Alinco DJ175 CopyAll PASSED: All tests
Alinco DJ175 Clone PASSED: All tests
Alinco DJ175 BruteForce PASSED: All tests
Alinco DJ175 Edges PASSED: All tests
Alinco DJ175 Banks SKIPPED: Banks not supported
Alinco DJ596 Detect PASSED: All tests
Alinco DJ596 CopyAll PASSED: All tests
Alinco DJ596 Clone PASSED: All tests
Alinco DJ596 BruteForce PASSED: All tests
Alinco DJ596 Edges PASSED: All tests
Alinco DJ596 Banks SKIPPED: Banks not supported
Alinco DR235T Detect PASSED: All tests
Alinco DR235T CopyAll PASSED: All tests
Alinco DR235T Clone PASSED: All tests
Alinco DR235T BruteForce PASSED: All tests
Alinco DR235T Edges PASSED: All tests
Alinco DR235T Banks SKIPPED: Banks not supported
Baofeng F-11 Detect PASSED: All tests
Baofeng F-11 CopyAll PASSED: All tests
Baofeng F-11 Clone PASSED: All tests
Baofeng F-11 BruteForce PASSED: All tests
Baofeng F-11 Edges PASSED: All tests
Baofeng F-11 Banks SKIPPED: Banks not supported
Baofeng UV-3R Detect PASSED: All tests
Baofeng UV-3R CopyAll PASSED: All tests
Baofeng UV-3R Clone PASSED: All tests
Baofeng UV-3R BruteForce PASSED: All tests
Baofeng UV-3R Edges PASSED: All tests
Baofeng UV-3R Banks SKIPPED: Banks not supported
Baofeng UV-5R Detect PASSED: All tests
Baofeng UV-5R CopyAll PASSED: All tests
Baofeng UV-5R Clone PASSED: All tests
Baofeng UV-5R BruteForce PASSED: All tests
Baofeng UV-5R Edges PASSED: All tests
Baofeng UV-5R Banks SKIPPED: Banks not supported
Baofeng UV-B5 Detect PASSED: All tests
Baofeng UV-B5 CopyAll PASSED: All tests
Baofeng UV-B5 Clone PASSED: All tests
Baofeng UV-B5 BruteForce PASSED: All tests
Baofeng UV-B5 Edges PASSED: All tests
Baofeng UV-B5 Banks SKIPPED: Banks not supported
Icom IC-208H Detect PASSED: All tests
Icom IC-208H CopyAll PASSED: All tests
Icom IC-208H Clone PASSED: All tests
Icom IC-208H BruteForce PASSED: All tests
Icom IC-208H Edges PASSED: All tests
Icom IC-208H Banks PASSED: All tests
Icom IC-2100H Detect PASSED: All tests
Icom IC-2100H CopyAll PASSED: All tests
Icom IC-2100H Clone PASSED: All tests
Icom IC-2100H BruteForce PASSED: All tests
Icom IC-2100H Edges PASSED: All tests
Icom IC-2100H Banks SKIPPED: Banks not supported
Icom IC-2200H Detect PASSED: All tests
Icom IC-2200H CopyAll PASSED: All tests
Icom IC-2200H Clone PASSED: All tests
Icom IC-2200H BruteForce PASSED: All tests
Icom IC-2200H Edges PASSED: All tests
Icom IC-2200H Banks PASSED: All tests
Icom IC-2720H Detect PASSED: All tests
Icom IC-2720H CopyAll PASSED: All tests
Icom IC-2720H Clone PASSED: All tests
Icom IC-2720H BruteForce PASSED: All tests
Icom IC-2720H Edges PASSED: All tests
Icom IC-2720H Banks PASSED: All tests
Icom IC-2820H Detect PASSED: All tests
Icom IC-2820H CopyAll PASSED: All tests
Icom IC-2820H Clone PASSED: All tests
Icom IC-2820H BruteForce PASSED: All tests
Icom IC-2820H Edges PASSED: All tests
Icom IC-2820H Banks PASSED: All tests
Icom IC-Q7A Detect PASSED: All tests
Icom IC-Q7A CopyAll PASSED: All tests
Icom IC-Q7A Clone PASSED: All tests
Icom IC-Q7A BruteForce PASSED: All tests
Icom IC-Q7A Edges PASSED: All tests
Icom IC-Q7A Banks SKIPPED: Banks not supported
Icom IC-T70 Detect PASSED: All tests
Icom IC-T70 CopyAll PASSED: All tests
Icom IC-T70 Clone PASSED: All tests
Icom IC-T70 BruteForce PASSED: All tests
Icom IC-T70 Edges PASSED: All tests
Icom IC-T70 Banks PASSED: All tests
Icom IC-T7H Detect PASSED: All tests
Icom IC-T7H CopyAll PASSED: All tests
Icom IC-T7H Clone PASSED: All tests
Icom IC-T7H BruteForce PASSED: All tests
Icom IC-T7H Edges PASSED: All tests
Icom IC-T7H Banks SKIPPED: Banks not supported
Icom IC-T8A Detect PASSED: All tests
Icom IC-T8A CopyAll PASSED: All tests
Icom IC-T8A Clone PASSED: All tests
Icom IC-T8A BruteForce PASSED: All tests
Icom IC-T8A Edges PASSED: All tests
Icom IC-T8A Banks SKIPPED: Banks not supported
Icom IC-V82/U82 Detect PASSED: All tests
Icom IC-V82/U82 CopyAll PASSED: All tests
Icom IC-V82/U82 Clone PASSED: All tests
Icom IC-V82/U82 BruteForce PASSED: All tests
Icom IC-V82/U82 Edges PASSED: All tests
Icom IC-V82/U82 Banks PASSED: All tests
Icom IC-W32A VHF Detect PASSED: All tests
Icom IC-W32A VHF CopyAll PASSED: All tests
Icom IC-W32A VHF Clone PASSED: All tests
Icom IC-W32A VHF BruteForce PASSED: All tests
Icom IC-W32A VHF Edges PASSED: All tests
Icom IC-W32A VHF Banks SKIPPED: Banks not supported
Icom IC-W32A UHF Detect PASSED: All tests
Icom IC-W32A UHF CopyAll PASSED: All tests
Icom IC-W32A UHF Clone PASSED: All tests
Icom IC-W32A UHF BruteForce PASSED: All tests
Icom IC-W32A UHF Edges PASSED: All tests
Icom IC-W32A UHF Banks SKIPPED: Banks not supported
Icom ID-31A Detect PASSED: All tests
Icom ID-31A CopyAll PASSED: All tests
Icom ID-31A Clone PASSED: All tests
Icom ID-31A BruteForce PASSED: All tests
Icom ID-31A Edges PASSED: All tests
Icom ID-31A Banks PASSED: All tests
Icom ID-51A Detect PASSED: All tests
Icom ID-51A CopyAll PASSED: All tests
Icom ID-51A Clone PASSED: All tests
Icom ID-51A BruteForce PASSED: All tests
Icom ID-51A Edges PASSED: All tests
Icom ID-51A Banks PASSED: All tests
Icom ID-800H v2 Detect PASSED: All tests
Icom ID-800H v2 CopyAll PASSED: All tests
Icom ID-800H v2 Clone PASSED: All tests
Icom ID-800H v2 BruteForce PASSED: All tests
Icom ID-800H v2 Edges PASSED: All tests
Icom ID-800H v2 Banks PASSED: All tests
Icom ID-880H Detect PASSED: All tests
Icom ID-880H CopyAll PASSED: All tests
Icom ID-880H Clone PASSED: All tests
Icom ID-880H BruteForce PASSED: All tests
Icom ID-880H Edges PASSED: All tests
Icom ID-880H Banks PASSED: All tests
Jetstream JT220M Detect PASSED: All tests
Jetstream JT220M CopyAll PASSED: All tests
Jetstream JT220M Clone PASSED: All tests
Jetstream JT220M BruteForce PASSED: All tests
Jetstream JT220M Edges PASSED: All tests
Jetstream JT220M Banks SKIPPED: Banks not supported
Kenwood TH-D72 (clone Detect PASSED: All tests
Kenwood TH-D72 (clone CopyAll PASSED: All tests
Kenwood TH-D72 (clone Clone PASSED: All tests
Kenwood TH-D72 (clone BruteForce PASSED: All tests
Kenwood TH-D72 (clone Edges PASSED: All tests
Kenwood TH-D72 (clone Banks SKIPPED: Banks not supported
Kenwood TK-8102 Detect PASSED: All tests
Kenwood TK-8102 CopyAll PASSED: All tests
Kenwood TK-8102 Clone PASSED: All tests
Kenwood TK-8102 BruteForce PASSED: All tests
Kenwood TK-8102 Edges PASSED: All tests
Kenwood TK-8102 Banks SKIPPED: Banks not supported
Puxing PX-2R Detect PASSED: All tests
Puxing PX-2R CopyAll PASSED: All tests
Puxing PX-2R Clone PASSED: All tests
Puxing PX-2R BruteForce PASSED: All tests
Puxing PX-2R Edges PASSED: All tests
Puxing PX-2R Banks SKIPPED: Banks not supported
Puxing PX-777 Detect PASSED: All tests
Puxing PX-777 CopyAll PASSED: All tests
Puxing PX-777 Clone PASSED: All tests
Puxing PX-777 BruteForce PASSED: All tests
Puxing PX-777 Edges PASSED: All tests
Puxing PX-777 Banks SKIPPED: Banks not supported
TYT TH-UV3R Detect PASSED: All tests
TYT TH-UV3R CopyAll PASSED: All tests
TYT TH-UV3R Clone PASSED: All tests
TYT TH-UV3R BruteForce PASSED: All tests
TYT TH-UV3R Edges PASSED: All tests
TYT TH-UV3R Banks SKIPPED: Banks not supported
TYT TH-UVF1 Detect PASSED: All tests
TYT TH-UVF1 CopyAll PASSED: All tests
TYT TH-UVF1 Clone PASSED: All tests
TYT TH-UVF1 BruteForce PASSED: All tests
TYT TH-UVF1 Edges PASSED: All tests
TYT TH-UVF1 Banks SKIPPED: Banks not supported
Vertex VXA-700 Detect PASSED: All tests
Vertex VXA-700 CopyAll PASSED: All tests
Vertex VXA-700 Clone PASSED: All tests
Vertex VXA-700 BruteForce PASSED: All tests
Vertex VXA-700 Edges PASSED: All tests
Vertex VXA-700 Banks SKIPPED: Banks not supported
Wouxun KG-816 Detect PASSED: All tests
Wouxun KG-816 CopyAll PASSED: All tests
Wouxun KG-816 Clone PASSED: All tests
Wouxun KG-816 BruteForce PASSED: All tests
Wouxun KG-816 Edges PASSED: All tests
Wouxun KG-816 Banks SKIPPED: Banks not supported
Wouxun KG-818 Detect PASSED: All tests
Wouxun KG-818 CopyAll PASSED: All tests
Wouxun KG-818 Clone PASSED: All tests
Wouxun KG-818 BruteForce PASSED: All tests
Wouxun KG-818 Edges PASSED: All tests
Wouxun KG-818 Banks SKIPPED: Banks not supported
Wouxun KG-UV6 Detect PASSED: All tests
Wouxun KG-UV6 CopyAll PASSED: All tests
Wouxun KG-UV6 Clone PASSED: All tests
Wouxun KG-UV6 BruteForce PASSED: All tests
Wouxun KG-UV6 Edges PASSED: All tests
Wouxun KG-UV6 Banks SKIPPED: Banks not supported
Wouxun KG-UVD1P Detect PASSED: All tests
Wouxun KG-UVD1P CopyAll PASSED: All tests
Wouxun KG-UVD1P Clone PASSED: All tests
Wouxun KG-UVD1P BruteForce PASSED: All tests
Wouxun KG-UVD1P Edges PASSED: All tests
Wouxun KG-UVD1P Banks SKIPPED: Banks not supported
Yaesu FT-1802M Detect PASSED: All tests
Yaesu FT-1802M CopyAll PASSED: All tests
Yaesu FT-1802M Clone PASSED: All tests
Yaesu FT-1802M BruteForce PASSED: All tests
Yaesu FT-1802M Edges PASSED: All tests
Yaesu FT-1802M Banks SKIPPED: Banks not supported
Yaesu FT-2800M Detect PASSED: All tests
Yaesu FT-2800M CopyAll PASSED: All tests
Yaesu FT-2800M Clone PASSED: All tests
Yaesu FT-2800M BruteForce PASSED: All tests
Yaesu FT-2800M Edges PASSED: All tests
Yaesu FT-2800M Banks SKIPPED: Banks not supported
Yaesu FT-60 Detect PASSED: All tests
Yaesu FT-60 CopyAll PASSED: All tests
Yaesu FT-60 Clone PASSED: All tests
Yaesu FT-60 BruteForce PASSED: All tests
Yaesu FT-60 Edges PASSED: All tests
Yaesu FT-60 Banks SKIPPED: Banks not supported
Yaesu FT-7800 Detect PASSED: All tests
Yaesu FT-7800 CopyAll PASSED: All tests
Yaesu FT-7800 Clone PASSED: All tests
Yaesu FT-7800 BruteForce PASSED: All tests
Yaesu FT-7800 Edges PASSED: All tests
Yaesu FT-7800 Banks PASSED: All tests
Yaesu FT-817 Detect PASSED: All tests
Yaesu FT-817 CopyAll PASSED: All tests
Yaesu FT-817 Clone PASSED: All tests
Yaesu FT-817 BruteForce PASSED: All tests
Yaesu FT-817 Edges PASSED: All tests
Yaesu FT-817 Banks SKIPPED: Banks not supported
Yaesu FT-817ND Detect PASSED: All tests
Yaesu FT-817ND CopyAll PASSED: All tests
Yaesu FT-817ND Clone PASSED: All tests
Yaesu FT-817ND BruteForce PASSED: All tests
Yaesu FT-817ND Edges PASSED: All tests
Yaesu FT-817ND Banks SKIPPED: Banks not supported
Yaesu FT-817ND (US) Detect PASSED: All tests
Yaesu FT-817ND (US) CopyAll PASSED: All tests
Yaesu FT-817ND (US) Clone PASSED: All tests
Yaesu FT-817ND (US) BruteForce PASSED: All tests
Yaesu FT-817ND (US) Edges PASSED: All tests
Yaesu FT-817ND (US) Banks SKIPPED: Banks not supported
Yaesu FT-857/897 Detect PASSED: All tests
Yaesu FT-857/897 CopyAll PASSED: All tests
Yaesu FT-857/897 Clone PASSED: All tests
Yaesu FT-857/897 BruteForce PASSED: All tests
Yaesu FT-857/897 Edges PASSED: All tests
Yaesu FT-857/897 Banks SKIPPED: Banks not supported
Yaesu FT-857/897 (U Detect PASSED: All tests
Yaesu FT-857/897 (U CopyAll PASSED: All tests
Yaesu FT-857/897 (U Clone PASSED: All tests
Yaesu FT-857/897 (U BruteForce PASSED: All tests
Yaesu FT-857/897 (U Edges PASSED: All tests
Yaesu FT-857/897 (U Banks SKIPPED: Banks not supported
Yaesu FT-8800 Left Detect PASSED: All tests
Yaesu FT-8800 Left CopyAll PASSED: All tests
Yaesu FT-8800 Left Clone PASSED: All tests
Yaesu FT-8800 Left BruteForce PASSED: All tests
Yaesu FT-8800 Left Edges PASSED: All tests
Yaesu FT-8800 Left Banks PASSED: All tests
Yaesu FT-8800 Right Detect PASSED: All tests
Yaesu FT-8800 Right CopyAll PASSED: All tests
Yaesu FT-8800 Right Clone PASSED: All tests
Yaesu FT-8800 Right BruteForce PASSED: All tests
Yaesu FT-8800 Right Edges PASSED: All tests
Yaesu FT-8800 Right Banks PASSED: All tests
Yaesu FT-8900 Detect PASSED: All tests
Yaesu FT-8900 CopyAll PASSED: All tests
Yaesu FT-8900 Clone PASSED: All tests
Yaesu FT-8900 BruteForce PASSED: All tests
Yaesu FT-8900 Edges PASSED: All tests
Yaesu FT-8900 Banks SKIPPED: Banks not supported
Yaesu FTM-350 Left Detect PASSED: All tests
Yaesu FTM-350 Left CopyAll PASSED: All tests
Yaesu FTM-350 Left Clone PASSED: All tests
Yaesu FTM-350 Left BruteForce PASSED: All tests
Yaesu FTM-350 Left Edges PASSED: All tests
Yaesu FTM-350 Left Banks SKIPPED: Banks not supported
Yaesu FTM-350 Right Detect PASSED: All tests
Yaesu FTM-350 Right CopyAll PASSED: All tests
Yaesu FTM-350 Right Clone PASSED: All tests
Yaesu FTM-350 Right BruteForce PASSED: All tests
Yaesu FTM-350 Right Edges PASSED: All tests
Yaesu FTM-350 Right Banks SKIPPED: Banks not supported
Yaesu VX-3 Detect PASSED: All tests
Yaesu VX-3 CopyAll PASSED: All tests
Yaesu VX-3 Clone PASSED: All tests
Yaesu VX-3 BruteForce PASSED: All tests
Yaesu VX-3 Edges PASSED: All tests
Yaesu VX-3 Banks SKIPPED: Banks not supported
Yaesu VX-5 Detect PASSED: All tests
Yaesu VX-5 CopyAll PASSED: All tests
Yaesu VX-5 Clone PASSED: All tests
Yaesu VX-5 BruteForce PASSED: All tests
Yaesu VX-5 Edges PASSED: All tests
Yaesu VX-5 Banks PASSED: All tests
Yaesu VX-6 Detect PASSED: All tests
Yaesu VX-6 CopyAll PASSED: All tests
Yaesu VX-6 Clone PASSED: All tests
Yaesu VX-6 BruteForce PASSED: All tests
Yaesu VX-6 Edges PASSED: All tests
Yaesu VX-6 Banks SKIPPED: Banks not supported
Yaesu VX-7 Detect PASSED: All tests
Yaesu VX-7 CopyAll PASSED: All tests
Yaesu VX-7 Clone PASSED: All tests
Yaesu VX-7 BruteForce PASSED: All tests
Yaesu VX-7 Edges PASSED: All tests
Yaesu VX-7 Banks PASSED: All tests
Yaesu VX-8 R Detect PASSED: All tests
Yaesu VX-8 R CopyAll PASSED: All tests
Yaesu VX-8 R Clone PASSED: All tests
Yaesu VX-8 R BruteForce PASSED: All tests
Yaesu VX-8 R Edges PASSED: All tests
Yaesu VX-8 R Banks PASSED: All tests
----------------------------------------------------------------------
Results:
TOTAL : 324
FAILED : 0
SKIPPED: 38
PASSED : 286
CRASHED: 0
[workspace] $ /bin/sh -xe /tmp/hudson1486940868538769873.sh
+ nosetests -v tests/unit
test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok
test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok
test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok
test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok
test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok
test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok
test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok
test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok
test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok
split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok
test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok
test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok
test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok
test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok
test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok
test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok
test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok
test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok
test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok
test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok
test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok
test_init (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok
test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok
test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok
test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok
test_changed (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok
test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok
test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok
test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
----------------------------------------------------------------------
Ran 147 tests in 0.054s
OK
Email was triggered for: Success
Sending email for trigger: Success
1
0