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
February 2015
- 17 participants
- 40 discussions
Tested changes:
[Marco Filippi <iz3gme.marco(a)gmail.com>] Add get-set-get then compare to settings test
Try to reveal incongruences in get/set_settings doing a "before and after"
comparision
Currently all images passes the test.
improves #2235
Full log:
[...truncated 252 lines...]
Registered Icom_IC-208H = IC208Radio
Registered Leixen_VV-898 = LeixenVV898Radio
Registered Jetstream_JT270M = JetstreamJT270MRadio
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 Yaesu_VX-2 = VX2Radio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
Registered Baofeng_BF-888 = H777Radio
Registered Yaesu_FT-7800_7900 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered KYD_NC-630A = NC630aRadio
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 Yaesu_VX-170 = VX170Radio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
Alinco DJ175 Detect PASSED: All tests
Alinco DJ175 Settings SKIPPED: Settings not supported
Alinco DJ175 Clone PASSED: All tests
Alinco DJ175 Edges PASSED: All tests
Alinco DJ175 BruteForce PASSED: All tests
Alinco DJ175 CopyAll PASSED: All tests
Alinco DJ175 Banks SKIPPED: Banks not supported
Alinco DJ596 Detect PASSED: All tests
Alinco DJ596 Settings SKIPPED: Settings not supported
Alinco DJ596 Clone PASSED: All tests
Alinco DJ596 Edges PASSED: All tests
Alinco DJ596 BruteForce PASSED: All tests
Alinco DJ596 CopyAll PASSED: All tests
Alinco DJ596 Banks SKIPPED: Banks not supported
Alinco DR235T Detect PASSED: All tests
Alinco DR235T Settings SKIPPED: Settings not supported
Alinco DR235T Clone PASSED: All tests
Alinco DR235T Edges PASSED: All tests
Alinco DR235T BruteForce PASSED: All tests
Alinco DR235T CopyAll PASSED: All tests
Alinco DR235T Banks SKIPPED: Banks not supported
Baofeng BF-888 Detect PASSED: All tests
Baofeng BF-888 Settings PASSED: All tests
Baofeng BF-888 Clone PASSED: All tests
Baofeng BF-888 Edges PASSED: All tests
Baofeng BF-888 BruteForce PASSED: All tests
Baofeng BF-888 CopyAll PASSED: All tests
Baofeng BF-888 Banks SKIPPED: Banks not supported
Baofeng F-11 Detect PASSED: All tests
Baofeng F-11 Settings PASSED: All tests
Baofeng F-11 Clone PASSED: All tests
Baofeng F-11 Edges PASSED: All tests
Baofeng F-11 BruteForce PASSED: All tests
Baofeng F-11 CopyAll PASSED: All tests
Baofeng F-11 Banks SKIPPED: Banks not supported
Baofeng UV-3R Detect PASSED: All tests
Baofeng UV-3R Settings PASSED: All tests
Baofeng UV-3R Clone PASSED: All tests
Baofeng UV-3R Edges PASSED: All tests
Baofeng UV-3R BruteForce PASSED: All tests
Baofeng UV-3R CopyAll PASSED: All tests
Baofeng UV-3R Banks SKIPPED: Banks not supported
Baofeng UV-5R Detect PASSED: All tests
Baofeng UV-5R Settings PASSED: All tests
Baofeng UV-5R Clone PASSED: All tests
Baofeng UV-5R Edges PASSED: All tests
Baofeng UV-5R BruteForce PASSED: All tests
Baofeng UV-5R CopyAll PASSED: All tests
Baofeng UV-5R Banks SKIPPED: Banks not supported
Baofeng UV-B5 Detect PASSED: All tests
Baofeng UV-B5 Settings PASSED: All tests
Baofeng UV-B5 Clone PASSED: All tests
Baofeng UV-B5 Edges PASSED: All tests
Baofeng UV-B5 BruteForce PASSED: All tests
Baofeng UV-B5 CopyAll PASSED: All tests
Baofeng UV-B5 Banks SKIPPED: Banks not supported
Icom IC-208H Detect PASSED: All tests
Icom IC-208H Settings SKIPPED: Settings not supported
Icom IC-208H Clone PASSED: All tests
Icom IC-208H Edges PASSED: All tests
Icom IC-208H BruteForce PASSED: All tests
Icom IC-208H CopyAll PASSED: All tests
Icom IC-208H Banks PASSED: All tests
Icom IC-2100H Detect PASSED: All tests
Icom IC-2100H Settings SKIPPED: Settings not supported
Icom IC-2100H Clone PASSED: All tests
Icom IC-2100H Edges PASSED: All tests
Icom IC-2100H BruteForce PASSED: All tests
Icom IC-2100H CopyAll PASSED: All tests
Icom IC-2100H Banks SKIPPED: Banks not supported
Icom IC-2200H Detect PASSED: All tests
Icom IC-2200H Settings PASSED: All tests
Icom IC-2200H Clone PASSED: All tests
Icom IC-2200H Edges PASSED: All tests
Icom IC-2200H BruteForce PASSED: All tests
Icom IC-2200H CopyAll PASSED: All tests
Icom IC-2200H Banks PASSED: All tests
Icom IC-2720H Detect PASSED: All tests
Icom IC-2720H Settings SKIPPED: Settings not supported
Icom IC-2720H Clone PASSED: All tests
Icom IC-2720H Edges PASSED: All tests
Icom IC-2720H BruteForce PASSED: All tests
Icom IC-2720H CopyAll PASSED: All tests
Icom IC-2720H Banks PASSED: All tests
Icom IC-2820H Detect PASSED: All tests
Icom IC-2820H Settings PASSED: All tests
Icom IC-2820H Clone PASSED: All tests
Icom IC-2820H Edges PASSED: All tests
Icom IC-2820H BruteForce PASSED: All tests
Icom IC-2820H CopyAll PASSED: All tests
Icom IC-2820H Banks PASSED: All tests
Icom IC-Q7A Detect PASSED: All tests
Icom IC-Q7A Settings PASSED: All tests
Icom IC-Q7A Clone PASSED: All tests
Icom IC-Q7A Edges PASSED: All tests
Icom IC-Q7A BruteForce PASSED: All tests
Icom IC-Q7A CopyAll PASSED: All tests
Icom IC-Q7A Banks SKIPPED: Banks not supported
Icom IC-T70 Detect PASSED: All tests
Icom IC-T70 Settings SKIPPED: Settings not supported
Icom IC-T70 Clone PASSED: All tests
Icom IC-T70 Edges PASSED: All tests
Icom IC-T70 BruteForce PASSED: All tests
Icom IC-T70 CopyAll PASSED: All tests
Icom IC-T70 Banks PASSED: All tests
Icom IC-T7H Detect PASSED: All tests
Icom IC-T7H Settings SKIPPED: Settings not supported
Icom IC-T7H Clone PASSED: All tests
Icom IC-T7H Edges PASSED: All tests
Icom IC-T7H BruteForce PASSED: All tests
Icom IC-T7H CopyAll PASSED: All tests
Icom IC-T7H Banks SKIPPED: Banks not supported
Icom IC-T8A Detect PASSED: All tests
Icom IC-T8A Settings SKIPPED: Settings not supported
Icom IC-T8A Clone PASSED: All tests
Icom IC-T8A Edges PASSED: All tests
Icom IC-T8A BruteForce PASSED: All tests
Icom IC-T8A CopyAll PASSED: All tests
Icom IC-T8A Banks SKIPPED: Banks not supported
Icom IC-V82/U82 Detect PASSED: All tests
Icom IC-V82/U82 Settings SKIPPED: Settings not supported
Icom IC-V82/U82 Clone PASSED: All tests
Icom IC-V82/U82 Edges PASSED: All tests
Icom IC-V82/U82 BruteForce PASSED: All tests
Icom IC-V82/U82 CopyAll PASSED: All tests
Icom IC-V82/U82 Banks PASSED: All tests
Icom IC-W32A VHF Detect PASSED: All tests
Icom IC-W32A VHF Settings SKIPPED: Settings not supported
Icom IC-W32A VHF Clone PASSED: All tests
Icom IC-W32A VHF Edges PASSED: All tests
Icom IC-W32A VHF BruteForce PASSED: All tests
Icom IC-W32A VHF CopyAll PASSED: All tests
Icom IC-W32A VHF Banks SKIPPED: Banks not supported
Icom IC-W32A UHF Detect PASSED: All tests
Icom IC-W32A UHF Settings SKIPPED: Settings not supported
Icom IC-W32A UHF Clone PASSED: All tests
Icom IC-W32A UHF Edges PASSED: All tests
Icom IC-W32A UHF BruteForce PASSED: All tests
Icom IC-W32A UHF CopyAll PASSED: All tests
Icom IC-W32A UHF Banks SKIPPED: Banks not supported
Icom ID-31A Detect PASSED: All tests
Icom ID-31A Settings PASSED: All tests
Icom ID-31A Clone PASSED: All tests
Icom ID-31A Edges PASSED: All tests
Icom ID-31A BruteForce PASSED: All tests
Icom ID-31A CopyAll PASSED: All tests
Icom ID-31A Banks PASSED: All tests
Icom ID-51A Detect PASSED: All tests
Icom ID-51A Settings PASSED: All tests
Icom ID-51A Clone PASSED: All tests
Icom ID-51A Edges PASSED: All tests
Icom ID-51A BruteForce PASSED: All tests
Icom ID-51A CopyAll PASSED: All tests
Icom ID-51A Banks PASSED: All tests
Icom ID-800H v2 Detect PASSED: All tests
Icom ID-800H v2 Settings PASSED: All tests
Icom ID-800H v2 Clone PASSED: All tests
Icom ID-800H v2 Edges PASSED: All tests
Icom ID-800H v2 BruteForce PASSED: All tests
Icom ID-800H v2 CopyAll PASSED: All tests
Icom ID-800H v2 Banks PASSED: All tests
Icom ID-880H Detect PASSED: All tests
Icom ID-880H Settings PASSED: All tests
Icom ID-880H Clone PASSED: All tests
Icom ID-880H Edges PASSED: All tests
Icom ID-880H BruteForce PASSED: All tests
Icom ID-880H CopyAll PASSED: All tests
Icom ID-880H Banks PASSED: All tests
Jetstream JT220M Detect PASSED: All tests
Jetstream JT220M Settings SKIPPED: Settings not supported
Jetstream JT220M Clone PASSED: All tests
Jetstream JT220M Edges PASSED: All tests
Jetstream JT220M BruteForce PASSED: All tests
Jetstream JT220M CopyAll PASSED: All tests
Jetstream JT220M Banks SKIPPED: Banks not supported
Jetstream JT270M Detect PASSED: All tests
Jetstream JT270M Settings PASSED: All tests
Jetstream JT270M Clone PASSED: All tests
Jetstream JT270M Edges PASSED: All tests
Jetstream JT270M BruteForce PASSED: All tests
Jetstream JT270M CopyAll PASSED: All tests
Jetstream JT270M Banks SKIPPED: Banks not supported
Kenwood TH-D72 (clone Detect PASSED: All tests
Kenwood TH-D72 (clone Settings SKIPPED: Settings not supported
Kenwood TH-D72 (clone Clone PASSED: All tests
Kenwood TH-D72 (clone Edges PASSED: All tests
Kenwood TH-D72 (clone BruteForce PASSED: All tests
Kenwood TH-D72 (clone CopyAll PASSED: All tests
Kenwood TH-D72 (clone Banks SKIPPED: Banks not supported
Kenwood TK-8102 Detect PASSED: All tests
Kenwood TK-8102 Settings PASSED: All tests
Kenwood TK-8102 Clone PASSED: All tests
Kenwood TK-8102 Edges PASSED: All tests
Kenwood TK-8102 BruteForce PASSED: All tests
Kenwood TK-8102 CopyAll PASSED: All tests
Kenwood TK-8102 Banks SKIPPED: Banks not supported
Leixen VV-898 Detect PASSED: All tests
Leixen VV-898 Settings PASSED: All tests
Leixen VV-898 Clone PASSED: All tests
Leixen VV-898 Edges PASSED: All tests
Leixen VV-898 BruteForce PASSED: All tests
Leixen VV-898 CopyAll PASSED: All tests
Leixen VV-898 Banks SKIPPED: Banks not supported
Polmar DB-50M Detect PASSED: All tests
Polmar DB-50M Settings PASSED: All tests
Polmar DB-50M Clone PASSED: All tests
Polmar DB-50M Edges PASSED: All tests
Polmar DB-50M BruteForce PASSED: All tests
Polmar DB-50M CopyAll PASSED: All tests
Polmar DB-50M Banks SKIPPED: Banks not supported
Puxing PX-2R Detect PASSED: All tests
Puxing PX-2R Settings SKIPPED: Settings not supported
Puxing PX-2R Clone PASSED: All tests
Puxing PX-2R Edges PASSED: All tests
Puxing PX-2R BruteForce PASSED: All tests
Puxing PX-2R CopyAll PASSED: All tests
Puxing PX-2R Banks SKIPPED: Banks not supported
Puxing PX-777 Detect PASSED: All tests
Puxing PX-777 Settings SKIPPED: Settings not supported
Puxing PX-777 Clone PASSED: All tests
Puxing PX-777 Edges PASSED: All tests
Puxing PX-777 BruteForce PASSED: All tests
Puxing PX-777 CopyAll PASSED: All tests
Puxing PX-777 Banks SKIPPED: Banks not supported
Sainsonic AP510 Detect PASSED: All tests
Sainsonic AP510 Settings PASSED: All tests
Sainsonic AP510 Clone PASSED: All tests
Sainsonic AP510 Edges PASSED: All tests
Sainsonic AP510 BruteForce PASSED: All tests
Sainsonic AP510 CopyAll PASSED: All tests
Sainsonic AP510 Banks SKIPPED: Banks not supported
TYT TH-9800 Detect PASSED: All tests
TYT TH-9800 Settings PASSED: All tests
TYT TH-9800 Clone PASSED: All tests
TYT TH-9800 Edges PASSED: All tests
TYT TH-9800 BruteForce PASSED: All tests
TYT TH-9800 CopyAll PASSED: All tests
TYT TH-9800 Banks SKIPPED: Banks not supported
TYT TH-UV3R Detect PASSED: All tests
TYT TH-UV3R Settings SKIPPED: Settings not supported
TYT TH-UV3R Clone PASSED: All tests
TYT TH-UV3R Edges PASSED: All tests
TYT TH-UV3R BruteForce PASSED: All tests
TYT TH-UV3R CopyAll PASSED: All tests
TYT TH-UV3R Banks SKIPPED: Banks not supported
TYT TH-UV3R-25 Detect PASSED: All tests
TYT TH-UV3R-25 Settings SKIPPED: Settings not supported
TYT TH-UV3R-25 Clone PASSED: All tests
TYT TH-UV3R-25 Edges PASSED: All tests
TYT TH-UV3R-25 BruteForce PASSED: All tests
TYT TH-UV3R-25 CopyAll PASSED: All tests
TYT TH-UV3R-25 Banks SKIPPED: Banks not supported
TYT TH-UVF1 Detect PASSED: All tests
TYT TH-UVF1 Settings PASSED: All tests
TYT TH-UVF1 Clone PASSED: All tests
TYT TH-UVF1 Edges PASSED: All tests
TYT TH-UVF1 BruteForce PASSED: All tests
TYT TH-UVF1 CopyAll PASSED: All tests
TYT TH-UVF1 Banks SKIPPED: Banks not supported
Vertex VXA-700 Detect PASSED: All tests
Vertex VXA-700 Settings SKIPPED: Settings not supported
Vertex VXA-700 Clone PASSED: All tests
Vertex VXA-700 Edges PASSED: All tests
Vertex VXA-700 BruteForce PASSED: All tests
Vertex VXA-700 CopyAll PASSED: All tests
Vertex VXA-700 Banks SKIPPED: Banks not supported
Wouxun KG-816 Detect PASSED: All tests
Wouxun KG-816 Settings PASSED: All tests
Wouxun KG-816 Clone PASSED: All tests
Wouxun KG-816 Edges PASSED: All tests
Wouxun KG-816 BruteForce PASSED: All tests
Wouxun KG-816 CopyAll PASSED: All tests
Wouxun KG-816 Banks SKIPPED: Banks not supported
Wouxun KG-818 Detect PASSED: All tests
Wouxun KG-818 Settings PASSED: All tests
Wouxun KG-818 Clone PASSED: All tests
Wouxun KG-818 Edges PASSED: All tests
Wouxun KG-818 BruteForce PASSED: All tests
Wouxun KG-818 CopyAll PASSED: All tests
Wouxun KG-818 Banks SKIPPED: Banks not supported
Wouxun KG-UV6 Detect PASSED: All tests
Wouxun KG-UV6 Settings PASSED: All tests
Wouxun KG-UV6 Clone PASSED: All tests
Wouxun KG-UV6 Edges PASSED: All tests
Wouxun KG-UV6 BruteForce PASSED: All tests
Wouxun KG-UV6 CopyAll PASSED: All tests
Wouxun KG-UV6 Banks SKIPPED: Banks not supported
Wouxun KG-UV8D Detect PASSED: All tests
Wouxun KG-UV8D Settings PASSED: All tests
Wouxun KG-UV8D Clone PASSED: All tests
Wouxun KG-UV8D Edges PASSED: All tests
Wouxun KG-UV8D BruteForce PASSED: All tests
Wouxun KG-UV8D CopyAll PASSED: All tests
Wouxun KG-UV8D Banks SKIPPED: Banks not supported
Wouxun KG-UVD1P Detect PASSED: All tests
Wouxun KG-UVD1P Settings PASSED: All tests
Wouxun KG-UVD1P Clone PASSED: All tests
Wouxun KG-UVD1P Edges PASSED: All tests
Wouxun KG-UVD1P BruteForce PASSED: All tests
Wouxun KG-UVD1P CopyAll PASSED: All tests
Wouxun KG-UVD1P Banks SKIPPED: Banks not supported
Yaesu FT-1802M Detect PASSED: All tests
Yaesu FT-1802M Settings SKIPPED: Settings not supported
Yaesu FT-1802M Clone PASSED: All tests
Yaesu FT-1802M Edges PASSED: All tests
Yaesu FT-1802M BruteForce PASSED: All tests
Yaesu FT-1802M CopyAll PASSED: All tests
Yaesu FT-1802M Banks SKIPPED: Banks not supported
Yaesu FT-1D R Detect PASSED: All tests
Yaesu FT-1D R Settings PASSED: All tests
Yaesu FT-1D R Clone PASSED: All tests
Yaesu FT-1D R Edges PASSED: All tests
Yaesu FT-1D R BruteForce PASSED: All tests
Yaesu FT-1D R CopyAll PASSED: All tests
Yaesu FT-1D R Banks PASSED: All tests
Yaesu FT-2800M Detect PASSED: All tests
Yaesu FT-2800M Settings SKIPPED: Settings not supported
Yaesu FT-2800M Clone PASSED: All tests
Yaesu FT-2800M Edges PASSED: All tests
Yaesu FT-2800M BruteForce PASSED: All tests
Yaesu FT-2800M CopyAll PASSED: All tests
Yaesu FT-2800M Banks SKIPPED: Banks not supported
Yaesu FT-60 Detect PASSED: All tests
Yaesu FT-60 Settings PASSED: All tests
Yaesu FT-60 Clone PASSED: All tests
Yaesu FT-60 Edges PASSED: All tests
Yaesu FT-60 BruteForce PASSED: All tests
Yaesu FT-60 CopyAll PASSED: All tests
Yaesu FT-60 Banks PASSED: All tests
Yaesu FT-7800/7900 Detect PASSED: All tests
Yaesu FT-7800/7900 Settings PASSED: All tests
Yaesu FT-7800/7900 Clone PASSED: All tests
Yaesu FT-7800/7900 Edges PASSED: All tests
Yaesu FT-7800/7900 BruteForce PASSED: All tests
Yaesu FT-7800/7900 CopyAll PASSED: All tests
Yaesu FT-7800/7900 Banks PASSED: All tests
Yaesu FT-817 Detect PASSED: All tests
Yaesu FT-817 Settings PASSED: All tests
Yaesu FT-817 Clone PASSED: All tests
Yaesu FT-817 Edges PASSED: All tests
Yaesu FT-817 BruteForce PASSED: All tests
Yaesu FT-817 CopyAll PASSED: All tests
Yaesu FT-817 Banks SKIPPED: Banks not supported
Yaesu FT-817ND Detect PASSED: All tests
Yaesu FT-817ND Settings PASSED: All tests
Yaesu FT-817ND Clone PASSED: All tests
Yaesu FT-817ND Edges PASSED: All tests
Yaesu FT-817ND BruteForce PASSED: All tests
Yaesu FT-817ND CopyAll PASSED: All tests
Yaesu FT-817ND Banks SKIPPED: Banks not supported
Yaesu FT-817ND (US) Detect PASSED: All tests
Yaesu FT-817ND (US) Settings PASSED: All tests
Yaesu FT-817ND (US) Clone PASSED: All tests
Yaesu FT-817ND (US) Edges PASSED: All tests
Yaesu FT-817ND (US) BruteForce PASSED: All tests
Yaesu FT-817ND (US) CopyAll PASSED: All tests
Yaesu FT-817ND (US) Banks SKIPPED: Banks not supported
Yaesu FT-857/897 Detect PASSED: All tests
Yaesu FT-857/897 Settings PASSED: All tests
Yaesu FT-857/897 Clone PASSED: All tests
Yaesu FT-857/897 Edges PASSED: All tests
Yaesu FT-857/897 BruteForce PASSED: All tests
Yaesu FT-857/897 CopyAll 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 Settings PASSED: All tests
Yaesu FT-857/897 (U Clone PASSED: All tests
Yaesu FT-857/897 (U Edges PASSED: All tests
Yaesu FT-857/897 (U BruteForce PASSED: All tests
Yaesu FT-857/897 (U CopyAll 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 Settings SKIPPED: Settings not supported
Yaesu FT-8800 Left Clone PASSED: All tests
Yaesu FT-8800 Left Edges PASSED: All tests
Yaesu FT-8800 Left BruteForce PASSED: All tests
Yaesu FT-8800 Left CopyAll PASSED: All tests
Yaesu FT-8800 Left Banks PASSED: All tests
Yaesu FT-8800 Right Detect PASSED: All tests
Yaesu FT-8800 Right Settings SKIPPED: Settings not supported
Yaesu FT-8800 Right Clone PASSED: All tests
Yaesu FT-8800 Right Edges PASSED: All tests
Yaesu FT-8800 Right BruteForce PASSED: All tests
Yaesu FT-8800 Right CopyAll PASSED: All tests
Yaesu FT-8800 Right Banks PASSED: All tests
Yaesu FT-8900 Detect PASSED: All tests
Yaesu FT-8900 Settings SKIPPED: Settings not supported
Yaesu FT-8900 Clone PASSED: All tests
Yaesu FT-8900 Edges PASSED: All tests
Yaesu FT-8900 BruteForce PASSED: All tests
Yaesu FT-8900 CopyAll PASSED: All tests
Yaesu FT-8900 Banks SKIPPED: Banks not supported
Yaesu FTM-350 Left Detect PASSED: All tests
Yaesu FTM-350 Left Settings PASSED: All tests
Yaesu FTM-350 Left Clone PASSED: All tests
Yaesu FTM-350 Left Edges PASSED: All tests
Yaesu FTM-350 Left BruteForce PASSED: All tests
Yaesu FTM-350 Left CopyAll PASSED: All tests
Yaesu FTM-350 Left Banks SKIPPED: Banks not supported
Yaesu FTM-350 Right Detect PASSED: All tests
Yaesu FTM-350 Right Settings SKIPPED: Settings not supported
Yaesu FTM-350 Right Clone PASSED: All tests
Yaesu FTM-350 Right Edges PASSED: All tests
Yaesu FTM-350 Right BruteForce PASSED: All tests
Yaesu FTM-350 Right CopyAll PASSED: All tests
Yaesu FTM-350 Right Banks SKIPPED: Banks not supported
Yaesu VX-2 Detect PASSED: All tests
Yaesu VX-2 Settings PASSED: All tests
Yaesu VX-2 Clone PASSED: All tests
Yaesu VX-2 Edges PASSED: All tests
Yaesu VX-2 BruteForce PASSED: All tests
Yaesu VX-2 CopyAll PASSED: All tests
Yaesu VX-2 Banks PASSED: All tests
Yaesu VX-3 Detect PASSED: All tests
Yaesu VX-3 Settings PASSED: All tests
Yaesu VX-3 Clone PASSED: All tests
Yaesu VX-3 Edges PASSED: All tests
Yaesu VX-3 BruteForce PASSED: All tests
Yaesu VX-3 CopyAll PASSED: All tests
Yaesu VX-3 Banks PASSED: All tests
Yaesu VX-5 Detect PASSED: All tests
Yaesu VX-5 Settings SKIPPED: Settings not supported
Yaesu VX-5 Clone PASSED: All tests
Yaesu VX-5 Edges PASSED: All tests
Yaesu VX-5 BruteForce PASSED: All tests
Yaesu VX-5 CopyAll PASSED: All tests
Yaesu VX-5 Banks PASSED: All tests
Yaesu VX-6 Detect PASSED: All tests
Yaesu VX-6 Settings SKIPPED: Settings not supported
Yaesu VX-6 Clone PASSED: All tests
Yaesu VX-6 Edges PASSED: All tests
Yaesu VX-6 BruteForce PASSED: All tests
Yaesu VX-6 CopyAll PASSED: All tests
Yaesu VX-6 Banks PASSED: All tests
Yaesu VX-7 Detect PASSED: All tests
Yaesu VX-7 Settings SKIPPED: Settings not supported
Yaesu VX-7 Clone PASSED: All tests
Yaesu VX-7 Edges PASSED: All tests
Yaesu VX-7 BruteForce PASSED: All tests
Yaesu VX-7 CopyAll PASSED: All tests
Yaesu VX-7 Banks PASSED: All tests
Yaesu VX-8 R Detect PASSED: All tests
Yaesu VX-8 R Settings SKIPPED: Settings not supported
Yaesu VX-8 R Clone PASSED: All tests
Yaesu VX-8 R Edges PASSED: All tests
Yaesu VX-8 R BruteForce PASSED: All tests
Yaesu VX-8 R CopyAll PASSED: All tests
Yaesu VX-8 R Banks PASSED: All tests
----------------------------------------------------------------------
Results:
TOTAL : 448
FAILED : 0
SKIPPED: 72
PASSED : 376
CRASHED: 0
Registered Icom_IC-2820H = IC2820Radio
Registered TYT_TH-UVF8D = TYTUVF8DRadio
Registered AnyTone_5888UV = AnyTone5888UVRadio
Registered Intek_HR-2040 = IntekHR2040Radio
Registered Polmar_DB-50M = PolmarDB50MRadio
Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
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-V82_U82 = ICx8xRadio
Registered Yaesu_VX-6 = VX6Radio
Registered TYT_TH-UV3R = TYTUV3RRadio
Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
Registered Yaesu_VX-5 = VX5Radio
Registered Yaesu_FT-60 = FT60Radio
Registered Yaesu_VX-7 = VX7Radio
Registered Sainsonic_AP510 = AP510Radio
Registered Baofeng_UV-5R = BaofengUV5R
Registered Baofeng_F-11 = BaofengF11Radio
Registered Baofeng_UV-82 = BaofengUV82Radio
Registered Baofeng_UV-6 = BaofengUV6Radio
Registered Intek_KT-980HP = IntekKT980Radio
Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
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 Commander_KG-UV = CommanderCSVRadio
Registered RT_Systems_CSV = RTCSVRadio
Registered Kenwood_ITM = ITMRadio
Registered TYT_TH-9800_File = TYTTH9800File
Registered TYT_TH-9800 = TYTTH9800Radio
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_TM-D710G = TMD710GRadio
Registered Kenwood_TH-K2 = THK2Radio
Registered Kenwood_TM-271 = TM271Radio
Registered Kenwood_TM-281 = TM281Radio
Registered Kenwood_TM-471 = TM471Radio
Registered Yaesu_FT-1D_R = FT1Radio
Registered Wouxun_KG-UV8D = KGUV8DRadio
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 Leixen_VV-898 = LeixenVV898Radio
Registered Jetstream_JT270M = JetstreamJT270MRadio
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 Yaesu_VX-2 = VX2Radio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
Registered Baofeng_BF-888 = H777Radio
Registered Yaesu_FT-7800_7900 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered KYD_NC-630A = NC630aRadio
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 Yaesu_VX-170 = VX170Radio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
Patch 'tip' is OK
================================================
Tests OK
Email was triggered for: Success
Sending email for trigger: Success
1
0
[chirp_devel] [PATCH] Add get-set-get then compare to settings test
by Marco Filippi IZ3GME 18 Feb '15
by Marco Filippi IZ3GME 18 Feb '15
18 Feb '15
# HG changeset patch
# User Marco Filippi <iz3gme.marco(a)gmail.com>
# Date 1424260661 -3600
# Wed Feb 18 12:57:41 2015 +0100
# Node ID 2e131fe2d1ad5b9272527ab0b9b4fa647a45ef68
# Parent d4536c8fcc48e6a61a573e680f0ab518ff8f09b9
Add get-set-get then compare to settings test
Try to reveal incongruences in get/set_settings doing a "before and after"
comparision
Currently all images passes the test.
improves #2235
diff --git a/tests/run_tests b/tests/run_tests
--- a/tests/run_tests
+++ b/tests/run_tests
@@ -530,8 +530,24 @@
def do_get_settings(self, rf):
lst = self._wrapper.do("get_settings")
if not isinstance(lst, list):
- raise TestFailedError("Invalid Radio Settings")
- self._wrapper.do("set_settings", lst)
+ raise TestFailedError("Invalid Radio Settings")
+
+ def do_same_settings(self, rf):
+ o = self._wrapper.do("get_settings")
+ self._wrapper.do("set_settings", o)
+ n = self._wrapper.do("get_settings")
+ map(self.compare_settings, o, n)
+
+ @staticmethod
+ def compare_settings(a, b):
+ try:
+ map(TestCaseSettings.compare_settings, a, b)
+ except TypeError:
+ if a.get_value() != b.get_value():
+ msg = "Field is `%s', " % b + \
+ "expected `%s' " % a
+ details = msg
+ raise TestFailedError(msg, details)
def run(self):
rf = self._wrapper.do("get_features")
@@ -539,7 +555,8 @@
if not rf.has_settings:
raise TestSkippedError("Settings not supported")
- self.do_get_settings(rf)
+ self.do_get_settings(rf)
+ self.do_same_settings(rf)
return []
1
0
Tested changes:
[K. Arvanitis <kosta(a)alumni.uvic.ca>] Updated radio settings interface.
Due to the nested nature of the settings editor tree
view, labels in the tree generally become obscured
because the pane is too small.
This change addresses the issue by a) adding a
horizontal paned window which allows the tree view
to be manually resized while b) flattening the radio
featrure radio settings group to return a single list
of all top level radio settings groups.
Bug #2285
Full log:
[...truncated 255 lines...]
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 Yaesu_VX-2 = VX2Radio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
Registered Baofeng_BF-888 = H777Radio
Registered Yaesu_FT-7800_7900 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered KYD_NC-630A = NC630aRadio
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 Yaesu_VX-170 = VX170Radio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
Alinco DJ175 Detect PASSED: All tests
Alinco DJ175 Settings SKIPPED: Settings not supported
Alinco DJ175 Clone PASSED: All tests
Alinco DJ175 Edges PASSED: All tests
Alinco DJ175 BruteForce PASSED: All tests
Alinco DJ175 CopyAll PASSED: All tests
Alinco DJ175 Banks SKIPPED: Banks not supported
Alinco DJ596 Detect PASSED: All tests
Alinco DJ596 Settings SKIPPED: Settings not supported
Alinco DJ596 Clone PASSED: All tests
Alinco DJ596 Edges PASSED: All tests
Alinco DJ596 BruteForce PASSED: All tests
Alinco DJ596 CopyAll PASSED: All tests
Alinco DJ596 Banks SKIPPED: Banks not supported
Alinco DR235T Detect PASSED: All tests
Alinco DR235T Settings SKIPPED: Settings not supported
Alinco DR235T Clone PASSED: All tests
Alinco DR235T Edges PASSED: All tests
Alinco DR235T BruteForce PASSED: All tests
Alinco DR235T CopyAll PASSED: All tests
Alinco DR235T Banks SKIPPED: Banks not supported
Baofeng BF-888 Detect PASSED: All tests
Baofeng BF-888 Settings PASSED: All tests
Baofeng BF-888 Clone PASSED: All tests
Baofeng BF-888 Edges PASSED: All tests
Baofeng BF-888 BruteForce PASSED: All tests
Baofeng BF-888 CopyAll PASSED: All tests
Baofeng BF-888 Banks SKIPPED: Banks not supported
Baofeng F-11 Detect PASSED: All tests
Baofeng F-11 Settings PASSED: All tests
Baofeng F-11 Clone PASSED: All tests
Baofeng F-11 Edges PASSED: All tests
Baofeng F-11 BruteForce PASSED: All tests
Baofeng F-11 CopyAll PASSED: All tests
Baofeng F-11 Banks SKIPPED: Banks not supported
Baofeng UV-3R Detect PASSED: All tests
Baofeng UV-3R Settings PASSED: All tests
Baofeng UV-3R Clone PASSED: All tests
Baofeng UV-3R Edges PASSED: All tests
Baofeng UV-3R BruteForce PASSED: All tests
Baofeng UV-3R CopyAll PASSED: All tests
Baofeng UV-3R Banks SKIPPED: Banks not supported
Baofeng UV-5R Detect PASSED: All tests
Baofeng UV-5R Settings PASSED: All tests
Baofeng UV-5R Clone PASSED: All tests
Baofeng UV-5R Edges PASSED: All tests
Baofeng UV-5R BruteForce PASSED: All tests
Baofeng UV-5R CopyAll PASSED: All tests
Baofeng UV-5R Banks SKIPPED: Banks not supported
Baofeng UV-B5 Detect PASSED: All tests
Baofeng UV-B5 Settings PASSED: All tests
Baofeng UV-B5 Clone PASSED: All tests
Baofeng UV-B5 Edges PASSED: All tests
Baofeng UV-B5 BruteForce PASSED: All tests
Baofeng UV-B5 CopyAll PASSED: All tests
Baofeng UV-B5 Banks SKIPPED: Banks not supported
Icom IC-208H Detect PASSED: All tests
Icom IC-208H Settings SKIPPED: Settings not supported
Icom IC-208H Clone PASSED: All tests
Icom IC-208H Edges PASSED: All tests
Icom IC-208H BruteForce PASSED: All tests
Icom IC-208H CopyAll PASSED: All tests
Icom IC-208H Banks PASSED: All tests
Icom IC-2100H Detect PASSED: All tests
Icom IC-2100H Settings SKIPPED: Settings not supported
Icom IC-2100H Clone PASSED: All tests
Icom IC-2100H Edges PASSED: All tests
Icom IC-2100H BruteForce PASSED: All tests
Icom IC-2100H CopyAll PASSED: All tests
Icom IC-2100H Banks SKIPPED: Banks not supported
Icom IC-2200H Detect PASSED: All tests
Icom IC-2200H Settings PASSED: All tests
Icom IC-2200H Clone PASSED: All tests
Icom IC-2200H Edges PASSED: All tests
Icom IC-2200H BruteForce PASSED: All tests
Icom IC-2200H CopyAll PASSED: All tests
Icom IC-2200H Banks PASSED: All tests
Icom IC-2720H Detect PASSED: All tests
Icom IC-2720H Settings SKIPPED: Settings not supported
Icom IC-2720H Clone PASSED: All tests
Icom IC-2720H Edges PASSED: All tests
Icom IC-2720H BruteForce PASSED: All tests
Icom IC-2720H CopyAll PASSED: All tests
Icom IC-2720H Banks PASSED: All tests
Icom IC-2820H Detect PASSED: All tests
Icom IC-2820H Settings PASSED: All tests
Icom IC-2820H Clone PASSED: All tests
Icom IC-2820H Edges PASSED: All tests
Icom IC-2820H BruteForce PASSED: All tests
Icom IC-2820H CopyAll PASSED: All tests
Icom IC-2820H Banks PASSED: All tests
Icom IC-Q7A Detect PASSED: All tests
Icom IC-Q7A Settings PASSED: All tests
Icom IC-Q7A Clone PASSED: All tests
Icom IC-Q7A Edges PASSED: All tests
Icom IC-Q7A BruteForce PASSED: All tests
Icom IC-Q7A CopyAll PASSED: All tests
Icom IC-Q7A Banks SKIPPED: Banks not supported
Icom IC-T70 Detect PASSED: All tests
Icom IC-T70 Settings SKIPPED: Settings not supported
Icom IC-T70 Clone PASSED: All tests
Icom IC-T70 Edges PASSED: All tests
Icom IC-T70 BruteForce PASSED: All tests
Icom IC-T70 CopyAll PASSED: All tests
Icom IC-T70 Banks PASSED: All tests
Icom IC-T7H Detect PASSED: All tests
Icom IC-T7H Settings SKIPPED: Settings not supported
Icom IC-T7H Clone PASSED: All tests
Icom IC-T7H Edges PASSED: All tests
Icom IC-T7H BruteForce PASSED: All tests
Icom IC-T7H CopyAll PASSED: All tests
Icom IC-T7H Banks SKIPPED: Banks not supported
Icom IC-T8A Detect PASSED: All tests
Icom IC-T8A Settings SKIPPED: Settings not supported
Icom IC-T8A Clone PASSED: All tests
Icom IC-T8A Edges PASSED: All tests
Icom IC-T8A BruteForce PASSED: All tests
Icom IC-T8A CopyAll PASSED: All tests
Icom IC-T8A Banks SKIPPED: Banks not supported
Icom IC-V82/U82 Detect PASSED: All tests
Icom IC-V82/U82 Settings SKIPPED: Settings not supported
Icom IC-V82/U82 Clone PASSED: All tests
Icom IC-V82/U82 Edges PASSED: All tests
Icom IC-V82/U82 BruteForce PASSED: All tests
Icom IC-V82/U82 CopyAll PASSED: All tests
Icom IC-V82/U82 Banks PASSED: All tests
Icom IC-W32A VHF Detect PASSED: All tests
Icom IC-W32A VHF Settings SKIPPED: Settings not supported
Icom IC-W32A VHF Clone PASSED: All tests
Icom IC-W32A VHF Edges PASSED: All tests
Icom IC-W32A VHF BruteForce PASSED: All tests
Icom IC-W32A VHF CopyAll PASSED: All tests
Icom IC-W32A VHF Banks SKIPPED: Banks not supported
Icom IC-W32A UHF Detect PASSED: All tests
Icom IC-W32A UHF Settings SKIPPED: Settings not supported
Icom IC-W32A UHF Clone PASSED: All tests
Icom IC-W32A UHF Edges PASSED: All tests
Icom IC-W32A UHF BruteForce PASSED: All tests
Icom IC-W32A UHF CopyAll PASSED: All tests
Icom IC-W32A UHF Banks SKIPPED: Banks not supported
Icom ID-31A Detect PASSED: All tests
Icom ID-31A Settings PASSED: All tests
Icom ID-31A Clone PASSED: All tests
Icom ID-31A Edges PASSED: All tests
Icom ID-31A BruteForce PASSED: All tests
Icom ID-31A CopyAll PASSED: All tests
Icom ID-31A Banks PASSED: All tests
Icom ID-51A Detect PASSED: All tests
Icom ID-51A Settings PASSED: All tests
Icom ID-51A Clone PASSED: All tests
Icom ID-51A Edges PASSED: All tests
Icom ID-51A BruteForce PASSED: All tests
Icom ID-51A CopyAll PASSED: All tests
Icom ID-51A Banks PASSED: All tests
Icom ID-800H v2 Detect PASSED: All tests
Icom ID-800H v2 Settings PASSED: All tests
Icom ID-800H v2 Clone PASSED: All tests
Icom ID-800H v2 Edges PASSED: All tests
Icom ID-800H v2 BruteForce PASSED: All tests
Icom ID-800H v2 CopyAll PASSED: All tests
Icom ID-800H v2 Banks PASSED: All tests
Icom ID-880H Detect PASSED: All tests
Icom ID-880H Settings PASSED: All tests
Icom ID-880H Clone PASSED: All tests
Icom ID-880H Edges PASSED: All tests
Icom ID-880H BruteForce PASSED: All tests
Icom ID-880H CopyAll PASSED: All tests
Icom ID-880H Banks PASSED: All tests
Jetstream JT220M Detect PASSED: All tests
Jetstream JT220M Settings SKIPPED: Settings not supported
Jetstream JT220M Clone PASSED: All tests
Jetstream JT220M Edges PASSED: All tests
Jetstream JT220M BruteForce PASSED: All tests
Jetstream JT220M CopyAll PASSED: All tests
Jetstream JT220M Banks SKIPPED: Banks not supported
Jetstream JT270M Detect PASSED: All tests
Jetstream JT270M Settings PASSED: All tests
Jetstream JT270M Clone PASSED: All tests
Jetstream JT270M Edges PASSED: All tests
Jetstream JT270M BruteForce PASSED: All tests
Jetstream JT270M CopyAll PASSED: All tests
Jetstream JT270M Banks SKIPPED: Banks not supported
Kenwood TH-D72 (clone Detect PASSED: All tests
Kenwood TH-D72 (clone Settings SKIPPED: Settings not supported
Kenwood TH-D72 (clone Clone PASSED: All tests
Kenwood TH-D72 (clone Edges PASSED: All tests
Kenwood TH-D72 (clone BruteForce PASSED: All tests
Kenwood TH-D72 (clone CopyAll PASSED: All tests
Kenwood TH-D72 (clone Banks SKIPPED: Banks not supported
Kenwood TK-8102 Detect PASSED: All tests
Kenwood TK-8102 Settings PASSED: All tests
Kenwood TK-8102 Clone PASSED: All tests
Kenwood TK-8102 Edges PASSED: All tests
Kenwood TK-8102 BruteForce PASSED: All tests
Kenwood TK-8102 CopyAll PASSED: All tests
Kenwood TK-8102 Banks SKIPPED: Banks not supported
Leixen VV-898 Detect PASSED: All tests
Leixen VV-898 Settings PASSED: All tests
Leixen VV-898 Clone PASSED: All tests
Leixen VV-898 Edges PASSED: All tests
Leixen VV-898 BruteForce PASSED: All tests
Leixen VV-898 CopyAll PASSED: All tests
Leixen VV-898 Banks SKIPPED: Banks not supported
Polmar DB-50M Detect PASSED: All tests
Polmar DB-50M Settings PASSED: All tests
Polmar DB-50M Clone PASSED: All tests
Polmar DB-50M Edges PASSED: All tests
Polmar DB-50M BruteForce PASSED: All tests
Polmar DB-50M CopyAll PASSED: All tests
Polmar DB-50M Banks SKIPPED: Banks not supported
Puxing PX-2R Detect PASSED: All tests
Puxing PX-2R Settings SKIPPED: Settings not supported
Puxing PX-2R Clone PASSED: All tests
Puxing PX-2R Edges PASSED: All tests
Puxing PX-2R BruteForce PASSED: All tests
Puxing PX-2R CopyAll PASSED: All tests
Puxing PX-2R Banks SKIPPED: Banks not supported
Puxing PX-777 Detect PASSED: All tests
Puxing PX-777 Settings SKIPPED: Settings not supported
Puxing PX-777 Clone PASSED: All tests
Puxing PX-777 Edges PASSED: All tests
Puxing PX-777 BruteForce PASSED: All tests
Puxing PX-777 CopyAll PASSED: All tests
Puxing PX-777 Banks SKIPPED: Banks not supported
Sainsonic AP510 Detect PASSED: All tests
Sainsonic AP510 Settings PASSED: All tests
Sainsonic AP510 Clone PASSED: All tests
Sainsonic AP510 Edges PASSED: All tests
Sainsonic AP510 BruteForce PASSED: All tests
Sainsonic AP510 CopyAll PASSED: All tests
Sainsonic AP510 Banks SKIPPED: Banks not supported
TYT TH-9800 Detect PASSED: All tests
TYT TH-9800 Settings PASSED: All tests
TYT TH-9800 Clone PASSED: All tests
TYT TH-9800 Edges PASSED: All tests
TYT TH-9800 BruteForce PASSED: All tests
TYT TH-9800 CopyAll PASSED: All tests
TYT TH-9800 Banks SKIPPED: Banks not supported
TYT TH-UV3R Detect PASSED: All tests
TYT TH-UV3R Settings SKIPPED: Settings not supported
TYT TH-UV3R Clone PASSED: All tests
TYT TH-UV3R Edges PASSED: All tests
TYT TH-UV3R BruteForce PASSED: All tests
TYT TH-UV3R CopyAll PASSED: All tests
TYT TH-UV3R Banks SKIPPED: Banks not supported
TYT TH-UV3R-25 Detect PASSED: All tests
TYT TH-UV3R-25 Settings SKIPPED: Settings not supported
TYT TH-UV3R-25 Clone PASSED: All tests
TYT TH-UV3R-25 Edges PASSED: All tests
TYT TH-UV3R-25 BruteForce PASSED: All tests
TYT TH-UV3R-25 CopyAll PASSED: All tests
TYT TH-UV3R-25 Banks SKIPPED: Banks not supported
TYT TH-UVF1 Detect PASSED: All tests
TYT TH-UVF1 Settings PASSED: All tests
TYT TH-UVF1 Clone PASSED: All tests
TYT TH-UVF1 Edges PASSED: All tests
TYT TH-UVF1 BruteForce PASSED: All tests
TYT TH-UVF1 CopyAll PASSED: All tests
TYT TH-UVF1 Banks SKIPPED: Banks not supported
Vertex VXA-700 Detect PASSED: All tests
Vertex VXA-700 Settings SKIPPED: Settings not supported
Vertex VXA-700 Clone PASSED: All tests
Vertex VXA-700 Edges PASSED: All tests
Vertex VXA-700 BruteForce PASSED: All tests
Vertex VXA-700 CopyAll PASSED: All tests
Vertex VXA-700 Banks SKIPPED: Banks not supported
Wouxun KG-816 Detect PASSED: All tests
Wouxun KG-816 Settings PASSED: All tests
Wouxun KG-816 Clone PASSED: All tests
Wouxun KG-816 Edges PASSED: All tests
Wouxun KG-816 BruteForce PASSED: All tests
Wouxun KG-816 CopyAll PASSED: All tests
Wouxun KG-816 Banks SKIPPED: Banks not supported
Wouxun KG-818 Detect PASSED: All tests
Wouxun KG-818 Settings PASSED: All tests
Wouxun KG-818 Clone PASSED: All tests
Wouxun KG-818 Edges PASSED: All tests
Wouxun KG-818 BruteForce PASSED: All tests
Wouxun KG-818 CopyAll PASSED: All tests
Wouxun KG-818 Banks SKIPPED: Banks not supported
Wouxun KG-UV6 Detect PASSED: All tests
Wouxun KG-UV6 Settings PASSED: All tests
Wouxun KG-UV6 Clone PASSED: All tests
Wouxun KG-UV6 Edges PASSED: All tests
Wouxun KG-UV6 BruteForce PASSED: All tests
Wouxun KG-UV6 CopyAll PASSED: All tests
Wouxun KG-UV6 Banks SKIPPED: Banks not supported
Wouxun KG-UV8D Detect PASSED: All tests
Wouxun KG-UV8D Settings PASSED: All tests
Wouxun KG-UV8D Clone PASSED: All tests
Wouxun KG-UV8D Edges PASSED: All tests
Wouxun KG-UV8D BruteForce PASSED: All tests
Wouxun KG-UV8D CopyAll PASSED: All tests
Wouxun KG-UV8D Banks SKIPPED: Banks not supported
Wouxun KG-UVD1P Detect PASSED: All tests
Wouxun KG-UVD1P Settings PASSED: All tests
Wouxun KG-UVD1P Clone PASSED: All tests
Wouxun KG-UVD1P Edges PASSED: All tests
Wouxun KG-UVD1P BruteForce PASSED: All tests
Wouxun KG-UVD1P CopyAll PASSED: All tests
Wouxun KG-UVD1P Banks SKIPPED: Banks not supported
Yaesu FT-1802M Detect PASSED: All tests
Yaesu FT-1802M Settings SKIPPED: Settings not supported
Yaesu FT-1802M Clone PASSED: All tests
Yaesu FT-1802M Edges PASSED: All tests
Yaesu FT-1802M BruteForce PASSED: All tests
Yaesu FT-1802M CopyAll PASSED: All tests
Yaesu FT-1802M Banks SKIPPED: Banks not supported
Yaesu FT-1D R Detect PASSED: All tests
Yaesu FT-1D R Settings PASSED: All tests
Yaesu FT-1D R Clone PASSED: All tests
Yaesu FT-1D R Edges PASSED: All tests
Yaesu FT-1D R BruteForce PASSED: All tests
Yaesu FT-1D R CopyAll PASSED: All tests
Yaesu FT-1D R Banks PASSED: All tests
Yaesu FT-2800M Detect PASSED: All tests
Yaesu FT-2800M Settings SKIPPED: Settings not supported
Yaesu FT-2800M Clone PASSED: All tests
Yaesu FT-2800M Edges PASSED: All tests
Yaesu FT-2800M BruteForce PASSED: All tests
Yaesu FT-2800M CopyAll PASSED: All tests
Yaesu FT-2800M Banks SKIPPED: Banks not supported
Yaesu FT-60 Detect PASSED: All tests
Yaesu FT-60 Settings PASSED: All tests
Yaesu FT-60 Clone PASSED: All tests
Yaesu FT-60 Edges PASSED: All tests
Yaesu FT-60 BruteForce PASSED: All tests
Yaesu FT-60 CopyAll PASSED: All tests
Yaesu FT-60 Banks PASSED: All tests
Yaesu FT-7800/7900 Detect PASSED: All tests
Yaesu FT-7800/7900 Settings PASSED: All tests
Yaesu FT-7800/7900 Clone PASSED: All tests
Yaesu FT-7800/7900 Edges PASSED: All tests
Yaesu FT-7800/7900 BruteForce PASSED: All tests
Yaesu FT-7800/7900 CopyAll PASSED: All tests
Yaesu FT-7800/7900 Banks PASSED: All tests
Yaesu FT-817 Detect PASSED: All tests
Yaesu FT-817 Settings PASSED: All tests
Yaesu FT-817 Clone PASSED: All tests
Yaesu FT-817 Edges PASSED: All tests
Yaesu FT-817 BruteForce PASSED: All tests
Yaesu FT-817 CopyAll PASSED: All tests
Yaesu FT-817 Banks SKIPPED: Banks not supported
Yaesu FT-817ND Detect PASSED: All tests
Yaesu FT-817ND Settings PASSED: All tests
Yaesu FT-817ND Clone PASSED: All tests
Yaesu FT-817ND Edges PASSED: All tests
Yaesu FT-817ND BruteForce PASSED: All tests
Yaesu FT-817ND CopyAll PASSED: All tests
Yaesu FT-817ND Banks SKIPPED: Banks not supported
Yaesu FT-817ND (US) Detect PASSED: All tests
Yaesu FT-817ND (US) Settings PASSED: All tests
Yaesu FT-817ND (US) Clone PASSED: All tests
Yaesu FT-817ND (US) Edges PASSED: All tests
Yaesu FT-817ND (US) BruteForce PASSED: All tests
Yaesu FT-817ND (US) CopyAll PASSED: All tests
Yaesu FT-817ND (US) Banks SKIPPED: Banks not supported
Yaesu FT-857/897 Detect PASSED: All tests
Yaesu FT-857/897 Settings PASSED: All tests
Yaesu FT-857/897 Clone PASSED: All tests
Yaesu FT-857/897 Edges PASSED: All tests
Yaesu FT-857/897 BruteForce PASSED: All tests
Yaesu FT-857/897 CopyAll 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 Settings PASSED: All tests
Yaesu FT-857/897 (U Clone PASSED: All tests
Yaesu FT-857/897 (U Edges PASSED: All tests
Yaesu FT-857/897 (U BruteForce PASSED: All tests
Yaesu FT-857/897 (U CopyAll 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 Settings SKIPPED: Settings not supported
Yaesu FT-8800 Left Clone PASSED: All tests
Yaesu FT-8800 Left Edges PASSED: All tests
Yaesu FT-8800 Left BruteForce PASSED: All tests
Yaesu FT-8800 Left CopyAll PASSED: All tests
Yaesu FT-8800 Left Banks PASSED: All tests
Yaesu FT-8800 Right Detect PASSED: All tests
Yaesu FT-8800 Right Settings SKIPPED: Settings not supported
Yaesu FT-8800 Right Clone PASSED: All tests
Yaesu FT-8800 Right Edges PASSED: All tests
Yaesu FT-8800 Right BruteForce PASSED: All tests
Yaesu FT-8800 Right CopyAll PASSED: All tests
Yaesu FT-8800 Right Banks PASSED: All tests
Yaesu FT-8900 Detect PASSED: All tests
Yaesu FT-8900 Settings SKIPPED: Settings not supported
Yaesu FT-8900 Clone PASSED: All tests
Yaesu FT-8900 Edges PASSED: All tests
Yaesu FT-8900 BruteForce PASSED: All tests
Yaesu FT-8900 CopyAll PASSED: All tests
Yaesu FT-8900 Banks SKIPPED: Banks not supported
Yaesu FTM-350 Left Detect PASSED: All tests
Yaesu FTM-350 Left Settings PASSED: All tests
Yaesu FTM-350 Left Clone PASSED: All tests
Yaesu FTM-350 Left Edges PASSED: All tests
Yaesu FTM-350 Left BruteForce PASSED: All tests
Yaesu FTM-350 Left CopyAll PASSED: All tests
Yaesu FTM-350 Left Banks SKIPPED: Banks not supported
Yaesu FTM-350 Right Detect PASSED: All tests
Yaesu FTM-350 Right Settings SKIPPED: Settings not supported
Yaesu FTM-350 Right Clone PASSED: All tests
Yaesu FTM-350 Right Edges PASSED: All tests
Yaesu FTM-350 Right BruteForce PASSED: All tests
Yaesu FTM-350 Right CopyAll PASSED: All tests
Yaesu FTM-350 Right Banks SKIPPED: Banks not supported
Yaesu VX-2 Detect PASSED: All tests
Yaesu VX-2 Settings PASSED: All tests
Yaesu VX-2 Clone PASSED: All tests
Yaesu VX-2 Edges PASSED: All tests
Yaesu VX-2 BruteForce PASSED: All tests
Yaesu VX-2 CopyAll PASSED: All tests
Yaesu VX-2 Banks PASSED: All tests
Yaesu VX-3 Detect PASSED: All tests
Yaesu VX-3 Settings PASSED: All tests
Yaesu VX-3 Clone PASSED: All tests
Yaesu VX-3 Edges PASSED: All tests
Yaesu VX-3 BruteForce PASSED: All tests
Yaesu VX-3 CopyAll PASSED: All tests
Yaesu VX-3 Banks PASSED: All tests
Yaesu VX-5 Detect PASSED: All tests
Yaesu VX-5 Settings SKIPPED: Settings not supported
Yaesu VX-5 Clone PASSED: All tests
Yaesu VX-5 Edges PASSED: All tests
Yaesu VX-5 BruteForce PASSED: All tests
Yaesu VX-5 CopyAll PASSED: All tests
Yaesu VX-5 Banks PASSED: All tests
Yaesu VX-6 Detect PASSED: All tests
Yaesu VX-6 Settings SKIPPED: Settings not supported
Yaesu VX-6 Clone PASSED: All tests
Yaesu VX-6 Edges PASSED: All tests
Yaesu VX-6 BruteForce PASSED: All tests
Yaesu VX-6 CopyAll PASSED: All tests
Yaesu VX-6 Banks PASSED: All tests
Yaesu VX-7 Detect PASSED: All tests
Yaesu VX-7 Settings SKIPPED: Settings not supported
Yaesu VX-7 Clone PASSED: All tests
Yaesu VX-7 Edges PASSED: All tests
Yaesu VX-7 BruteForce PASSED: All tests
Yaesu VX-7 CopyAll PASSED: All tests
Yaesu VX-7 Banks PASSED: All tests
Yaesu VX-8 R Detect PASSED: All tests
Yaesu VX-8 R Settings SKIPPED: Settings not supported
Yaesu VX-8 R Clone PASSED: All tests
Yaesu VX-8 R Edges PASSED: All tests
Yaesu VX-8 R BruteForce PASSED: All tests
Yaesu VX-8 R CopyAll PASSED: All tests
Yaesu VX-8 R Banks PASSED: All tests
----------------------------------------------------------------------
Results:
TOTAL : 448
FAILED : 0
SKIPPED: 72
PASSED : 376
CRASHED: 0
Registered Icom_IC-2820H = IC2820Radio
Registered TYT_TH-UVF8D = TYTUVF8DRadio
Registered AnyTone_5888UV = AnyTone5888UVRadio
Registered Intek_HR-2040 = IntekHR2040Radio
Registered Polmar_DB-50M = PolmarDB50MRadio
Registered Powerwerx_DB-750X = PowerwerxDB750XRadio
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-V82_U82 = ICx8xRadio
Registered Yaesu_VX-6 = VX6Radio
Registered TYT_TH-UV3R = TYTUV3RRadio
Registered TYT_TH-UV3R-25 = TYTUV3R25Radio
Registered Yaesu_VX-5 = VX5Radio
Registered Yaesu_FT-60 = FT60Radio
Registered Yaesu_VX-7 = VX7Radio
Registered Sainsonic_AP510 = AP510Radio
Registered Baofeng_UV-5R = BaofengUV5R
Registered Baofeng_F-11 = BaofengF11Radio
Registered Baofeng_UV-82 = BaofengUV82Radio
Registered Baofeng_UV-6 = BaofengUV6Radio
Registered Intek_KT-980HP = IntekKT980Radio
Registered Baofeng_BF-F8HP = BaofengBFF8HPRadio
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 Commander_KG-UV = CommanderCSVRadio
Registered RT_Systems_CSV = RTCSVRadio
Registered Kenwood_ITM = ITMRadio
Registered TYT_TH-9800_File = TYTTH9800File
Registered TYT_TH-9800 = TYTTH9800Radio
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_TM-D710G = TMD710GRadio
Registered Kenwood_TH-K2 = THK2Radio
Registered Kenwood_TM-271 = TM271Radio
Registered Kenwood_TM-281 = TM281Radio
Registered Kenwood_TM-471 = TM471Radio
Registered Yaesu_FT-1D_R = FT1Radio
Registered Wouxun_KG-UV8D = KGUV8DRadio
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 Leixen_VV-898 = LeixenVV898Radio
Registered Jetstream_JT270M = JetstreamJT270MRadio
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 Yaesu_VX-2 = VX2Radio
Registered Puxing_PX-777 = Puxing777Radio
Registered Puxing_PX-2R = Puxing2RRadio
Registered Baojie_BJ-UV55 = BaojieBJUV55Radio
Registered Baofeng_BF-888 = H777Radio
Registered Yaesu_FT-7800_7900 = FT7800Radio
Registered Yaesu_FT-8800 = FT8800Radio
Registered Yaesu_FT-8900 = FT8900Radio
Registered KYD_NC-630A = NC630aRadio
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 Yaesu_VX-170 = VX170Radio
Registered Icom_ID-880H = ID880Radio
Registered Icom_ID-80H = ID80Radio
chirp/anytone.py:235:80: E501 line too long (80 characters)
FAIL: Please use <80 columns in source files
FAIL: Please keep commit message lines to <80 columns
================================================
Tests FAILED: style tests
Build step 'Execute shell' marked build as failure
Email was triggered for: Failure
Sending email for trigger: Failure
1
2
[chirp_devel] [PATCH 1 of 2] [ft8x7-us] make memory skip mutable for 60m channels
by Marco Filippi IZ3GME 17 Feb '15
by Marco Filippi IZ3GME 17 Feb '15
17 Feb '15
# HG changeset patch
# User Marco Filippi <iz3gme.marco(a)gmail.com>
# Date 1424188805 -3600
# Tue Feb 17 17:00:05 2015 +0100
# Node ID 4d214d7fd78da3f7eecaea2dc0028030bf1af314
# Parent f74f533828ed82b85ab08301c8e4e6ae5faf5370
[ft8x7-us] make memory skip mutable for 60m channels
implements #2325
diff --git a/chirp/ft817.py b/chirp/ft817.py
--- a/chirp/ft817.py
+++ b/chirp/ft817.py
@@ -1093,7 +1093,7 @@
mem = self._get_memory(mem, _mem)
- mem.immutable = ["number", "skip", "rtone", "ctone",
+ mem.immutable = ["number", "rtone", "ctone",
"extd_number", "name", "dtcs", "tmode", "cross_mode",
"dtcs_polarity", "power", "duplex", "offset",
"comment", "empty"]
diff --git a/chirp/ft857.py b/chirp/ft857.py
--- a/chirp/ft857.py
+++ b/chirp/ft857.py
@@ -1029,7 +1029,7 @@
mem = self._get_memory(mem, _mem)
- mem.immutable = ["number", "skip", "rtone", "ctone",
+ mem.immutable = ["number", "rtone", "ctone",
"extd_number", "name", "dtcs", "tmode", "cross_mode",
"dtcs_polarity", "power", "duplex", "offset",
"comment", "empty"]
1
1
[chirp_devel] [PATCH] ap510: add support for 20141215 firmware version. #2095
by Tom Hayward 16 Feb '15
by Tom Hayward 16 Feb '15
16 Feb '15
# HG changeset patch
# User Tom Hayward <tom(a)tomh.us>
# Date 1424071566 28800
# Sun Feb 15 23:26:06 2015 -0800
# Node ID d56104c20aa5714486b509d2ffe48458bd173cfd
# Parent f74f533828ed82b85ab08301c8e4e6ae5faf5370
ap510: add support for 20141215 firmware version. #2095
diff -r f74f533828ed -r d56104c20aa5 chirp/ap510.py
--- a/chirp/ap510.py Mon Feb 09 12:17:50 2015 -0800
+++ b/chirp/ap510.py Sun Feb 15 23:26:06 2015 -0800
@@ -14,12 +14,22 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import struct
+from time import sleep
+
from chirp import chirp_common, directory, errors, util
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, RadioSettingValue, InvalidValueError, \
- RadioSettings
+ InvalidValueError, RadioSettings
+
+
+def chunks(s, t):
+ """ Yield chunks of s in sizes defined in t."""
+ i = 0
+ for n in t:
+ yield s[i:i+n]
+ i += n
+
def encode_base100(v):
return (v / 100 << 8) + (v % 100)
@@ -29,31 +39,6 @@
return 100 * (u16 >> 8 & 0xff) + (u16 & 0xff)
-def encode_smartbeacon(d):
- return struct.pack(
- ">7H",
- encode_base100(d['lowspeed']),
- encode_base100(d['slowrate']),
- encode_base100(d['highspeed']),
- encode_base100(d['fastrate']),
- encode_base100(d['turnslope']),
- encode_base100(d['turnangle']),
- encode_base100(d['turntime']),
- )
-
-
-def decode_smartbeacon(smartbeacon):
- return dict(zip((
- 'lowspeed',
- 'slowrate',
- 'highspeed',
- 'fastrate',
- 'turnslope',
- 'turnangle',
- 'turntime',
- ), map(decode_base100, struct.unpack(">7H", smartbeacon))))
-
-
def drain(pipe):
"""Chew up any data waiting on @pipe"""
for x in xrange(3):
@@ -66,10 +51,15 @@
def enter_setup(pipe):
"""Put AP510 in configuration mode."""
for x in xrange(30):
- pipe.write("@SETUP")
+ if x % 2:
+ pipe.write("@SETUP")
+ else:
+ pipe.write("\r\nSETUP\r\n")
s = pipe.read(64)
- if s and "SETUP" in s:
+ if s and "\r\nSETUP" in s:
return True
+ elif s and "SETUP" in s:
+ return False
raise errors.RadioError('Radio did not respond.')
@@ -79,13 +69,16 @@
status.msg = " Power on AP510 now, waiting "
radio.status_fn(status)
- enter_setup(radio.pipe)
+ new = enter_setup(radio.pipe)
status.cur = 1
status.max = 5
status.msg = "Downloading"
radio.status_fn(status)
- radio.pipe.write("@DISP")
+ if new:
+ radio.pipe.write("\r\nDISP\r\n")
+ else:
+ radio.pipe.write("@DISP")
buf = ""
for status.cur in xrange(status.cur, status.max):
@@ -109,7 +102,7 @@
status.msg = " Power on AP510 now, waiting "
radio.status_fn(status)
- enter_setup(radio.pipe)
+ new = enter_setup(radio.pipe)
status.msg = "Uploading"
status.cur = 1
@@ -117,15 +110,20 @@
for k, v in radio._mmap._memobj.items():
if k == '00':
continue
- if k in ('09', '10', '15'):
+ if new:
+ radio.pipe.write("%s=%s\r\n" % (k, v))
+ sleep(0.05)
+ elif k in ('09', '10', '15'):
radio.pipe.write("@" + k + v + "\x00\r\n")
else:
radio.pipe.write("@" + k + v)
- # Piece of crap acks every command except 15 with OK.
- if radio.pipe.read(2) != "OK" and k != '15':
+ # Older firmware acks every command except 15 with OK.
+ if not new and radio.pipe.read(2) != "OK" and k != '15':
raise errors.RadioError("Radio did not acknowledge upload: %s" % k)
status.cur += 1
radio.status_fn(status)
+ if new and radio.pipe.read(6) != "\r\n\r\nOK":
+ raise errors.RadioError("Radio did not acknowledge upload.")
def strbool(s):
@@ -148,6 +146,8 @@
01=KD7LXL7
02=3
03=1
+
+ This base class is compatible with firmware 20141008 (rx free).
"""
ATTR_MAP = {
@@ -192,13 +192,123 @@
print self.version
def __getattr__(self, name):
- return self._memobj[self.ATTR_MAP[name]]
+ if hasattr(self, 'get_%s' % name):
+ return getattr(self, 'get_%s' % name)()
+ try:
+ return self._memobj[self.ATTR_MAP[name]]
+ except KeyError as e:
+ raise NotImplementedError(e)
def __setattr__(self, name, value):
if name.startswith('_'):
super(AP510Memory, self).__setattr__(name, value)
return
- self._memobj[self.ATTR_MAP[name]] = str(value)
+ if hasattr(self, 'set_%s' % name):
+ return getattr(self, 'set_%s' % name)(value)
+ try:
+ self._memobj[self.ATTR_MAP[name]] = str(value)
+ except KeyError as e:
+ raise NotImplementedError(e)
+
+ def get_smartbeacon(self):
+ return dict(zip((
+ 'lowspeed',
+ 'slowrate',
+ 'highspeed',
+ 'fastrate',
+ 'turnslope',
+ 'turnangle',
+ 'turntime',
+ ), map(
+ decode_base100,
+ struct.unpack(">7H", self._memobj[self.ATTR_MAP['smartbeacon']]))
+ ))
+
+ def set_smartbeacon(self, d):
+ self._memobj[self.ATTR_MAP['smartbeacon']] = struct.pack(">7H",
+ encode_base100(d['lowspeed']),
+ encode_base100(d['slowrate']),
+ encode_base100(d['highspeed']),
+ encode_base100(d['fastrate']),
+ encode_base100(d['turnslope']),
+ encode_base100(d['turnangle']),
+ encode_base100(d['turntime']),
+ )
+
+
+class AP510Memory20141215(AP510Memory):
+ """Compatible with firmware version 20141215"""
+ ATTR_MAP = dict(AP510Memory.ATTR_MAP.items() + {
+ 'tx_volume': '21', # 1-6
+ 'rx_volume': '22', # 1-9
+ 'tx_power': '23', # 1: 1 watt, 0: 0.5 watt
+ 'tx_serial_ui_out': '24',
+ 'path1': '25',
+ 'path2': '26',
+ 'path3': '27', # like "WIDE1 1" else "0"
+ 'multiple': '28',
+ 'auto_on': '29',
+ }.items())
+
+ def get_multiple(self):
+ return dict(zip((
+ 'mice_message', # conveniently matches APRS spec Mic-E messages
+ 'voltage', # voltage in comment
+ 'temperature', # temperature in comment
+ 'tfx', # not sure what the TF/X toggle does
+ 'squelch', # squelch level 0-8 (0 = disabled)
+ 'blueled', # 0: squelch LED on GPS lock
+ # 1: light LED on GPS lock
+ 'telemetry', # 1: enable
+ 'telemetry_every', # two-digit int
+ 'timeslot_enable', # 1: enable Is this implemented in firmware?
+ 'timeslot', # int 00-59
+ 'dcd', # 0: Blue LED displays squelch,
+ # 1: Blue LED displays software DCD
+ 'tf_card' # 0: KML, 1: WPL
+ ), map(int, chunks(
+ self._memobj[self.ATTR_MAP['multiple']],
+ (1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1)))
+ ))
+
+ def set_multiple(self, d):
+ self._memobj[self.ATTR_MAP['multiple']] = "%(mice_message)1d" \
+ "%(voltage)1d" \
+ "%(temperature)1d" \
+ "%(tfx)1d" \
+ "%(squelch)1d" \
+ "%(blueled)1d" \
+ "%(telemetry)1d" \
+ "%(telemetry_every)02d" \
+ "%(timeslot_enable)1d" \
+ "%(timeslot)02d" \
+ "%(dcd)1d" \
+ "%(tf_card)1d" % d
+
+ def get_smartbeacon(self):
+ # raw: 18=0100300060010240028005
+ # chunks: 18=010 0300 060 010 240 028 005
+ return dict(zip((
+ 'lowspeed',
+ 'slowrate',
+ 'highspeed',
+ 'fastrate',
+ 'turnslope',
+ 'turnangle',
+ 'turntime',
+ ), map(int, chunks(
+ self._memobj[self.ATTR_MAP['smartbeacon']],
+ (3, 4, 3, 3, 3, 3, 3)))
+ ))
+
+ def set_smartbeacon(self, d):
+ self._memobj[self.ATTR_MAP['smartbeacon']] = "%(lowspeed)03d" \
+ "%(slowrate)04d" \
+ "%(highspeed)03d" \
+ "%(fastrate)03d" \
+ "%(turnslope)03d" \
+ "%(turnangle)03d" \
+ "%(turntime)03d" % d
PTT_DELAY = ['60 ms', '120 ms', '180 ms', '300 ms', '480 ms',
@@ -218,6 +328,11 @@
BEACON = ['manual', 'auto', 'auto + manual', 'smart', 'smart + manual']
ALIAS = ['WIDE1-N', 'WIDE2-N', 'WIDE1-N + WIDE2-N']
CHARSET = "".join(map(chr, range(0, 256)))
+MICE_MESSAGE = ['Emergency', 'Priority', 'Special', 'Committed', 'Returning',
+ 'In Service', 'En Route', 'Off Duty']
+TF_CARD = ['WPL', 'KML']
+POWER_LEVELS = [chirp_common.PowerLevel("0.5 watt", watts=0.50),
+ chirp_common.PowerLevel("1 watt", watts=1.00)]
RP_IMMUTABLE = ["number", "skip", "bank", "extd_number", "name", "rtone",
"ctone", "dtcs", "tmode", "dtcs_polarity", "skip", "duplex",
@@ -242,6 +357,7 @@
rf.valid_characters = ""
rf.valid_duplexes = [""]
rf.valid_name_length = 0
+ rf.valid_power_levels = POWER_LEVELS
rf.valid_skips = []
rf.valid_tuning_steps = []
rf.has_bank = False
@@ -257,15 +373,20 @@
return rf
def sync_in(self):
- # _mmap isn't a Chirp MemoryMap, but since AP510Memory implements
- # get_packed(), the standard Chirp save feature works.
try:
- self._mmap = AP510Memory(download(self))
+ data = download(self)
except errors.RadioError:
raise
except Exception, e:
raise errors.RadioError("Failed to communicate with radio: %s" % e)
+ # _mmap isn't a Chirp MemoryMap, but since AP510Memory implements
+ # get_packed(), the standard Chirp save feature works.
+ if data.startswith('\r\n00=%s 20141215' % self._model):
+ self._mmap = AP510Memory20141215(data)
+ else:
+ self._mmap = AP510Memory(data)
+
def process_mmap(self):
self._mmap.process_data()
@@ -280,7 +401,11 @@
def load_mmap(self, filename):
"""Load the radio's memory map from @filename"""
mapfile = file(filename, "rb")
- self._mmap = AP510Memory(mapfile.read())
+ data = mapfile.read()
+ if data.startswith('\r\n00=%s 20141215' % self._model):
+ self._mmap = AP510Memory20141215(data)
+ else:
+ self._mmap = AP510Memory(data)
mapfile.close()
def get_raw_memory(self, number):
@@ -296,6 +421,10 @@
mem.name = "TX/RX"
mem.mode = "FM"
mem.offset = 0.0
+ try:
+ mem.power = POWER_LEVELS[int(self._mmap.tx_power)]
+ except NotImplementedError:
+ mem.power = POWER_LEVELS[1]
mem.immutable = RP_IMMUTABLE
return mem
@@ -305,6 +434,12 @@
raise errors.InvalidMemoryLocation("AP510 has only one slot")
self._mmap.freq = "%8.4f" % (mem.freq / 1000000.0)
+ if mem.power:
+ try:
+ self._mmap.tx_power = str(POWER_LEVELS.index(mem.power))
+ except NotImplementedError:
+ pass
+
def get_settings(self):
china = RadioSettingGroup("china", "China Map Fix")
@@ -315,38 +450,80 @@
system = RadioSettingGroup("system", "System")
settings = RadioSettings(aprs, digipeat, system)
- # The RadioSetting syntax is really verbose, iterate it.
- fields = [
- ("callsign", "Callsign",
- RadioSettingValueString(0, 6, self._mmap.callsign[:6])),
- ("ssid", "SSID", RadioSettingValueInteger(
- 0, 15, ord(self._mmap.callsign[6]) - 0x30)),
- ("pttdelay", "PTT Delay",
+ aprs.append(RadioSetting("callsign", "Callsign",
+ RadioSettingValueString(0, 6, self._mmap.callsign[:6])))
+ aprs.append(RadioSetting("ssid", "SSID", RadioSettingValueInteger(
+ 0, 15, ord(self._mmap.callsign[6]) - 0x30)))
+ aprs.append(RadioSetting("pttdelay", "PTT Delay",
+ RadioSettingValueList(
+ PTT_DELAY, PTT_DELAY[int(self._mmap.pttdelay) - 1])))
+ aprs.append(RadioSetting("output", "Output",
+ RadioSettingValueList(
+ OUTPUT, OUTPUT[int(self._mmap.output) - 1])))
+ aprs.append(RadioSetting("mice", "Mic-E",
+ RadioSettingValueBoolean(strbool(self._mmap.mice))))
+ try:
+ aprs.append(RadioSetting("mice_message", "Mic-E Message",
RadioSettingValueList(
- PTT_DELAY, PTT_DELAY[int(self._mmap.pttdelay) - 1])),
- ("output", "Output",
- RadioSettingValueList(
- OUTPUT, OUTPUT[int(self._mmap.output) - 1])),
- ("mice", "Mic-E",
- RadioSettingValueBoolean(strbool(self._mmap.mice))),
- ("path", "Path",
- RadioSettingValueList(PATH, PATH[int(self._mmap.path)])),
- ("table", "Table or Overlay",
- RadioSettingValueList(TABLE, self._mmap.symbol[1])),
- ("symbol", "Symbol",
- RadioSettingValueList(SYMBOL, self._mmap.symbol[0])),
- ("beacon", "Beacon Mode",
- RadioSettingValueList(
- BEACON, BEACON[int(self._mmap.beacon) - 1])),
- ("rate", "Beacon Rate (seconds)",
- RadioSettingValueInteger(10, 9999, self._mmap.rate)),
- ("comment", "Comment", RadioSettingValueString(
- 0, 34, self._mmap.comment, autopad=False, charset=CHARSET)),
- ("status", "Status", RadioSettingValueString(
- 0, 34, self._mmap.status, autopad=False, charset=CHARSET)),
- ]
- for field in fields:
- aprs.append(RadioSetting(*field))
+ MICE_MESSAGE,
+ MICE_MESSAGE[int(self._mmap.multiple['mice_message'])])))
+ except NotImplementedError:
+ pass
+ try:
+ aprs.append(RadioSetting("path1", "Path 1",
+ RadioSettingValueString(0, 6, self._mmap.path1[:6],
+ autopad=True, charset=CHARSET)))
+ aprs.append(RadioSetting("ssid1", "SSID 1",
+ RadioSettingValueInteger(
+ 0, 7, ord(self._mmap.path1[6]) - 0x30)))
+ aprs.append(RadioSetting("path2", "Path 2",
+ RadioSettingValueString(0, 6, self._mmap.path2[:6],
+ autopad=True, charset=CHARSET)))
+ aprs.append(RadioSetting("ssid2", "SSID 2",
+ RadioSettingValueInteger(
+ 0, 7, ord(self._mmap.path2[6]) - 0x30)))
+ aprs.append(RadioSetting("path3", "Path 3",
+ RadioSettingValueString(0, 6, self._mmap.path3[:6],
+ autopad=True, charset=CHARSET)))
+ aprs.append(RadioSetting("ssid3", "SSID 3",
+ RadioSettingValueInteger(
+ 0, 7, ord(self._mmap.path3[6]) - 0x30)))
+ except NotImplementedError:
+ aprs.append(RadioSetting("path", "Path",
+ RadioSettingValueList(PATH, PATH[int(self._mmap.path)])))
+ aprs.append(RadioSetting("table", "Table or Overlay",
+ RadioSettingValueList(TABLE, self._mmap.symbol[1])))
+ aprs.append(RadioSetting("symbol", "Symbol",
+ RadioSettingValueList(SYMBOL, self._mmap.symbol[0])))
+ aprs.append(RadioSetting("beacon", "Beacon Mode",
+ RadioSettingValueList(
+ BEACON, BEACON[int(self._mmap.beacon) - 1])))
+ aprs.append(RadioSetting("rate", "Beacon Rate (seconds)",
+ RadioSettingValueInteger(10, 9999, self._mmap.rate)))
+ aprs.append(RadioSetting("comment", "Comment", RadioSettingValueString(
+ 0, 34, self._mmap.comment, autopad=False, charset=CHARSET)))
+ try:
+ aprs.append(RadioSetting("voltage", "Voltage in comment",
+ RadioSettingValueBoolean(self._mmap.multiple['voltage'])))
+ aprs.append(RadioSetting("temperature", "Temperature in comment",
+ RadioSettingValueBoolean(self._mmap.multiple['temperature'])))
+ except NotImplementedError:
+ pass
+ aprs.append(RadioSetting("status", "Status", RadioSettingValueString(
+ 0, 34, self._mmap.status, autopad=False, charset=CHARSET)))
+ try:
+ aprs.append(RadioSetting("telemetry", "Telemetry",
+ RadioSettingValueBoolean(self._mmap.multiple['telemetry'])))
+ aprs.append(RadioSetting("telemetry_every", "Telemetry every",
+ RadioSettingValueInteger(
+ 1, 99, self._mmap.multiple['telemetry_every'])))
+ aprs.append(RadioSetting("timeslot_enable", "Timeslot",
+ RadioSettingValueBoolean(self._mmap.multiple['telemetry'])))
+ aprs.append(RadioSetting("timeslot", "Timeslot (second of minute)",
+ RadioSettingValueInteger(
+ 0, 59, self._mmap.multiple['timeslot'])))
+ except NotImplementedError:
+ pass
fields = [
("chinamapfix", "China map fix",
@@ -381,7 +558,7 @@
for field in fields:
digipeat.append(RadioSetting(*field))
- sb = decode_smartbeacon(self._mmap.smartbeacon)
+ sb = self._mmap.smartbeacon
fields = [
("lowspeed", "Low Speed"),
("highspeed", "High Speed"),
@@ -397,20 +574,47 @@
RadioSettingValueInteger(0, 9999, sb[field[0]])
))
- fields = [
- ("version", "Version (read-only)",
- RadioSettingValueString(0, 14, self._mmap.version)),
- ("autooff", "Auto off (after 90 minutes)",
- RadioSettingValueBoolean(strbool(self._mmap.autooff))),
- ("beep", "Beep on transmit",
- RadioSettingValueBoolean(strbool(self._mmap.beep))),
- ("highaltitude", "High Altitude",
- RadioSettingValueBoolean(strbool(self._mmap.highaltitude))),
- ("busywait", "Wait for clear channel before transmit",
- RadioSettingValueBoolean(strbool(self._mmap.busywait))),
- ]
- for field in fields:
- system.append(RadioSetting(*field))
+ system.append(RadioSetting("version", "Version (read-only)",
+ RadioSettingValueString(0, 14, self._mmap.version)))
+ system.append(RadioSetting("autooff", "Auto off (after 90 minutes)",
+ RadioSettingValueBoolean(strbool(self._mmap.autooff))))
+ system.append(RadioSetting("beep", "Beep on transmit",
+ RadioSettingValueBoolean(strbool(self._mmap.beep))))
+ system.append(RadioSetting("highaltitude", "High Altitude",
+ RadioSettingValueBoolean(strbool(self._mmap.highaltitude))))
+ system.append(RadioSetting("busywait",
+ "Wait for clear channel before transmit",
+ RadioSettingValueBoolean(strbool(self._mmap.busywait))))
+ try:
+ system.append(RadioSetting("tx_volume", "Transmit volume",
+ RadioSettingValueList(
+ map(str, range(1, 7)), self._mmap.tx_volume)))
+ system.append(RadioSetting("rx_volume", "Receive volume",
+ RadioSettingValueList(
+ map(str, range(1, 10)), self._mmap.rx_volume)))
+ system.append(RadioSetting("squelch", "Squelch",
+ RadioSettingValueList(map(str, range(0, 9)),
+ str(self._mmap.multiple['squelch']))))
+ system.append(RadioSetting("tx_serial_ui_out", "Tx serial UI out",
+ RadioSettingValueBoolean(
+ strbool(self._mmap.tx_serial_ui_out))))
+ system.append(RadioSetting("auto_on", "Auto-on with 5V input",
+ RadioSettingValueBoolean(strbool(self._mmap.auto_on[0]))))
+ system.append(RadioSetting("auto_on_delay",
+ "Auto-off delay after 5V lost (seconds)",
+ RadioSettingValueInteger(0, 9999, int(self._mmap.auto_on[1:]))
+ ))
+ system.append(RadioSetting("tfx", "TF/X",
+ RadioSettingValueBoolean(self._mmap.multiple['tfx'])))
+ system.append(RadioSetting("blueled", "Light blue LED on GPS lock",
+ RadioSettingValueBoolean(self._mmap.multiple['blueled'])))
+ system.append(RadioSetting("dcd", "Blue LED shows software DCD",
+ RadioSettingValueBoolean(self._mmap.multiple['dcd'])))
+ system.append(RadioSetting("tf_card", "TF card format",
+ RadioSettingValueList(
+ TF_CARD, TF_CARD[int(self._mmap.multiple['tf_card'])])))
+ except NotImplementedError:
+ pass
return settings
@@ -433,10 +637,33 @@
elif name == "output":
self._mmap.output = OUTPUT.index(str(setting.value)) + 1
elif name in ('mice', 'autooff', 'beep', 'highaltitude',
- 'busywait'):
+ 'busywait', 'tx_serial_ui_out'):
setattr(self._mmap, name, boolstr(setting.value))
+ elif name == "mice_message":
+ multiple = self._mmap.multiple
+ multiple['mice_message'] = MICE_MESSAGE.index(
+ str(setting.value))
+ self._mmap.multiple = multiple
elif name == "path":
self._mmap.path = PATH.index(str(setting.value))
+ elif name == "path1":
+ self._mmap.path1 = "%s%s" % (
+ setting.value, self._mmap.path1[6])
+ elif name == "ssid1":
+ self._mmap.path1 = "%s%s" % (
+ self._mmap.path1[:6], setting.value)
+ elif name == "path2":
+ self._mmap.path2 = "%s%s" % (
+ setting.value, self._mmap.path2[6])
+ elif name == "ssid2":
+ self._mmap.path2 = "%s%s" % (
+ self._mmap.path2[:6], setting.value)
+ elif name == "path3":
+ self._mmap.path3 = "%s%s" % (
+ setting.value, self._mmap.path3[6])
+ elif name == "ssid3":
+ self._mmap.path3 = "%s%s" % (
+ self._mmap.path3[:6], setting.value)
elif name == "table":
self.set_symbol(table=setting.value)
elif name == "symbol":
@@ -447,8 +674,21 @@
self._mmap.rate = "%04d" % setting.value
elif name == "comment":
self._mmap.comment = str(setting.value)
+ elif name == "voltage":
+ multiple = self._mmap.multiple
+ multiple['voltage'] = int(setting.value)
+ self._mmap.multiple = multiple
+ elif name == "temperature":
+ multiple = self._mmap.multiple
+ multiple['temperature'] = int(setting.value)
+ self._mmap.multiple = multiple
elif name == "status":
self._mmap.status = str(setting.value)
+ elif name in ("telemetry", "telemetry_every",
+ "timeslot_enable", "timeslot", "tfx", "blueled", "dcd"):
+ multiple = self._mmap.multiple
+ multiple[name] = int(setting.value)
+ self._mmap.multiple = multiple
elif name == "chinamapfix":
self.set_chinamapfix(enable=setting.value)
elif name == "chinalat":
@@ -478,7 +718,20 @@
self.set_smartbeacon(turnangle=int(setting.value))
elif name == "turntime":
self.set_smartbeacon(turntime=int(setting.value))
- except Exception, e:
+ elif name in ("tx_volume", "rx_volume", "squelch"):
+ setattr(self._mmap, name, "%1d" % setting.value)
+ elif name == "auto_on":
+ self._mmap.auto_on = "%s%05d" % (
+ bool(setting.value) and '1' or 'i',
+ int(self._mmap.auto_on[1:]))
+ elif name == "auto_on_delay":
+ self._mmap.auto_on = "%s%05d" % (
+ self._mmap.auto_on[0], setting.value)
+ elif name == "tf_card":
+ multiple = self._mmap.multiple
+ multiple['tf_card'] = TF_CARD.index(str(setting.value))
+ self._mmap.multiple = multiple
+ except:
print setting.get_name()
raise
@@ -520,13 +773,13 @@
self._mmap.virtualgps = boolstr(enable) + btext
def set_smartbeacon(self, **kwargs):
- sb = decode_smartbeacon(self._mmap.smartbeacon)
+ sb = self._mmap.smartbeacon
sb.update(kwargs)
if sb['lowspeed'] > sb['highspeed']:
raise InvalidValueError("Low speed must be less than high speed")
if sb['slowrate'] < sb['fastrate']:
raise InvalidValueError("Slow rate must be greater than fast rate")
- self._mmap.smartbeacon = encode_smartbeacon(sb)
+ self._mmap.smartbeacon = sb
@classmethod
def match_model(cls, filedata, filename):
1
0
10 Feb '15
# HG changeset patch
# User K. Arvanitis <kosta(a)alumni.uvic.ca>
# Date 1423527263 28800
# Mon Feb 09 16:14:23 2015 -0800
# Node ID 05977656ceea05b40caca25cd4c0e203483fc559
# Parent f74f533828ed82b85ab08301c8e4e6ae5faf5370
Style/Cleanup changes to woxun radio module
This fixes the style issues with the woxun radio module so that it
will pass the tests. It appears that many of the lines of code were
beyond the allowable 80 char limit.
Bug #2285
diff -r f74f533828ed -r 05977656ceea chirp/wouxun.py
--- a/chirp/wouxun.py Mon Feb 09 12:17:50 2015 -0800
+++ b/chirp/wouxun.py Mon Feb 09 16:14:23 2015 -0800
@@ -58,8 +58,8 @@
_querymodel = ("HiWOUXUN\x02", "PROGUV6X\x02")
- CHARSET = list("0123456789") + [chr(x + ord("A")) for x in range(0, 26)] + \
- list("?+-")
+ CHARSET = list("0123456789") + [chr(x + ord("A")) \
+ for x in range(0, 26)] + list("?+-")
POWER_LEVELS = [chirp_common.PowerLevel("High", watts=5.00),
chirp_common.PowerLevel("Low", watts=1.00)]
@@ -199,7 +199,8 @@
@classmethod
def get_prompts(cls):
rp = chirp_common.RadioPrompts()
- rp.experimental = ('This version of the Wouxun driver allows you to modify the '
+ rp.experimental = \
+ ('This version of the Wouxun driver allows you to modify the '
'frequency range settings of your radio. This has been tested '
'and reports from other users indicate that it is a safe '
'thing to do. However, modifications to this value may have '
@@ -332,63 +333,63 @@
return rf
def get_settings(self):
- freqranges = RadioSettingGroup("freqranges", "Freq Ranges")
+ freq_ranges = RadioSettingGroup("freq_ranges", "Freq Ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- opt = RadioSettingGroup("options", "Options")
- group = RadioSettings(opt, freqranges, fm_preset)
+ cfg_s = RadioSettingGroup("cfg_settings", "Configuration Settings")
+ group = RadioSettings(cfg_s, freq_ranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
- RadioSettingValueBoolean(
+ RadioSettingValueBoolean(
self._memobj.settings.menu_available))
- opt.append(rs)
+ cfg_s.append(rs)
rs = RadioSetting("vhf_rx_start", "1st band RX Lower Limit (MHz)",
- RadioSettingValueInteger(50, 174,
- decode_freq(
- self._memobj.freq_ranges.vhf_rx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(50, 174,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_rx_stop", "1st band RX Upper Limit (MHz)",
- RadioSettingValueInteger(50, 174,
- decode_freq(
- self._memobj.freq_ranges.vhf_rx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(50, 174,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_rx_start", "2nd band RX Lower Limit (MHz)",
- RadioSettingValueInteger(136, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_rx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_rx_stop", "2nd band RX Upper Limit (MHz)",
- RadioSettingValueInteger(136, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_rx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_tx_start", "1st band TX Lower Limit (MHz)",
- RadioSettingValueInteger(50, 174,
- decode_freq(
- self._memobj.freq_ranges.vhf_tx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(50, 174,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_tx_stop", "1st TX Upper Limit (MHz)",
- RadioSettingValueInteger(50, 174,
- decode_freq(
- self._memobj.freq_ranges.vhf_tx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(50, 174,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_tx_start", "2st band TX Lower Limit (MHz)",
- RadioSettingValueInteger(136, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_tx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_tx_stop", "2st band TX Upper Limit (MHz)",
- RadioSettingValueInteger(136, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_tx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_stop)))
+ freq_ranges.append(rs)
# tell the decoded ranges to UI
self.valid_freq = [
- ( decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
- (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000),
- ( decode_freq(self._memobj.freq_ranges.uhf_rx_start) * 1000000,
- (decode_freq(self._memobj.freq_ranges.uhf_rx_stop)+1) * 1000000)]
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000),
+ (decode_freq(self._memobj.freq_ranges.uhf_rx_start) * 1000000,
+ (decode_freq(self._memobj.freq_ranges.uhf_rx_stop)+1) * 1000000)]
def _filter(name):
filtered = ""
@@ -402,167 +403,168 @@
# add some radio specific settings
options = ["Off", "Welcome", "V bat"]
rs = RadioSetting("ponmsg", "Poweron message",
- RadioSettingValueList(options,
- options[self._memobj.settings.ponmsg]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.ponmsg]))
+ cfg_s.append(rs)
rs = RadioSetting("strings.welcome1", "Power-On Message 1",
- RadioSettingValueString(0, 6,
- _filter(self._memobj.strings.welcome1)))
- opt.append(rs)
+ RadioSettingValueString(0, 6,
+ _filter(self._memobj.strings.welcome1)))
+ cfg_s.append(rs)
rs = RadioSetting("strings.welcome2", "Power-On Message 2",
- RadioSettingValueString(0, 6,
- _filter(self._memobj.strings.welcome2)))
- opt.append(rs)
+ RadioSettingValueString(0, 6,
+ _filter(self._memobj.strings.welcome2)))
+ cfg_s.append(rs)
rs = RadioSetting("strings.single_band", "Single Band Message",
- RadioSettingValueString(0, 6,
- _filter(self._memobj.strings.single_band)))
- opt.append(rs)
+ RadioSettingValueString(0, 6,
+ _filter(self._memobj.strings.single_band)))
+ cfg_s.append(rs)
options = ["Channel", "ch/freq","Name", "VFO"]
rs = RadioSetting("vfo_a_ch_disp", "VFO A Channel disp mode",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_a_ch_disp]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_a_ch_disp]))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_ch_disp", "VFO B Channel disp mode",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_b_ch_disp]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_b_ch_disp]))
+ cfg_s.append(rs)
options = ["5.0", "6.25", "10.0", "12.5", "25.0", "50.0", "100.0"]
rs = RadioSetting("vfo_a_fr_step", "VFO A Frequency Step",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_a_fr_step]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_a_fr_step]))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_fr_step", "VFO B Frequency Step",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_b_fr_step]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_b_fr_step]))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_a_squelch", "VFO A Squelch",
- RadioSettingValueInteger(0, 9,
- self._memobj.settings.vfo_a_squelch))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9,
+ self._memobj.settings.vfo_a_squelch))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_squelch", "VFO B Squelch",
- RadioSettingValueInteger(0, 9,
- self._memobj.settings.vfo_b_squelch))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9,
+ self._memobj.settings.vfo_b_squelch))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_a_cur_chan", "VFO A current channel",
- RadioSettingValueInteger(1, 128,
- self._memobj.settings.vfo_a_cur_chan))
- opt.append(rs)
+ RadioSettingValueInteger(1, 128,
+ self._memobj.settings.vfo_a_cur_chan))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_cur_chan", "VFO B current channel",
- RadioSettingValueInteger(1, 128,
- self._memobj.settings.vfo_b_cur_chan))
- opt.append(rs)
+ RadioSettingValueInteger(1, 128,
+ self._memobj.settings.vfo_b_cur_chan))
+ cfg_s.append(rs)
rs = RadioSetting("priority_chan", "Priority channel",
- RadioSettingValueInteger(0, 199,
- self._memobj.settings.priority_chan))
- opt.append(rs)
+ RadioSettingValueInteger(0, 199,
+ self._memobj.settings.priority_chan))
+ cfg_s.append(rs)
rs = RadioSetting("power_save", "Power save",
- RadioSettingValueBoolean(
- self._memobj.settings.power_save))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.power_save))
+ cfg_s.append(rs)
options = ["Off", "Scan", "Lamp", "SOS", "Radio"]
rs = RadioSetting("pf1_function", "PF1 Function select",
- RadioSettingValueList(options,
- options[self._memobj.settings.pf1_function]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.pf1_function]))
+ cfg_s.append(rs)
options = ["Off", "Begin", "End", "Both"]
rs = RadioSetting("roger_beep", "Roger beep select",
- RadioSettingValueList(options,
- options[self._memobj.settings.roger_beep]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.roger_beep]))
+ cfg_s.append(rs)
options = ["%s" % x for x in range(15, 615, 15)]
rs = RadioSetting("transmit_time_out", "TX Time-out Timer",
- RadioSettingValueList(options,
- options[self._memobj.settings.transmit_time_out]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.transmit_time_out]))
+ cfg_s.append(rs)
rs = RadioSetting("tx_time_out_alert", "TX Time-out Alert",
- RadioSettingValueInteger(0, 10,
- self._memobj.settings.tx_time_out_alert))
- opt.append(rs)
+ RadioSettingValueInteger(0, 10,
+ self._memobj.settings.tx_time_out_alert))
+ cfg_s.append(rs)
rs = RadioSetting("vox", "Vox",
- RadioSettingValueInteger(0, 10,
- self._memobj.settings.vox))
- opt.append(rs)
+ RadioSettingValueInteger(0, 10,
+ self._memobj.settings.vox))
+ cfg_s.append(rs)
options = ["Off", "Chinese", "English"]
rs = RadioSetting("voice", "Voice",
- RadioSettingValueList(options,
- options[self._memobj.settings.voice]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.voice]))
+ cfg_s.append(rs)
rs = RadioSetting("beep", "Beep",
- RadioSettingValueBoolean(self._memobj.settings.beep))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.beep))
+ cfg_s.append(rs)
rs = RadioSetting("ani_id_enable", "ANI id enable",
- RadioSettingValueBoolean(
- self._memobj.settings.ani_id_enable))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.ani_id_enable))
+ cfg_s.append(rs)
rs = RadioSetting("ani_id_tx_delay", "ANI id tx delay",
- RadioSettingValueInteger(0, 30,
- self._memobj.settings.ani_id_tx_delay))
- opt.append(rs)
+ RadioSettingValueInteger(0, 30,
+ self._memobj.settings.ani_id_tx_delay))
+ cfg_s.append(rs)
options = ["Off", "Key", "ANI", "Key+ANI"]
rs = RadioSetting("ani_id_sidetone", "ANI id sidetone",
- RadioSettingValueList(options,
- options[self._memobj.settings.ani_id_sidetone]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.ani_id_sidetone]))
+ cfg_s.append(rs)
options = ["Time", "Carrier", "Search"]
rs = RadioSetting("scan_mode", "Scan mode",
- RadioSettingValueList(options,
- options[self._memobj.settings.scan_mode]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.scan_mode]))
+ cfg_s.append(rs)
rs = RadioSetting("kbd_lock", "Keyboard lock",
- RadioSettingValueBoolean(
- self._memobj.settings.kbd_lock))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.kbd_lock))
+ cfg_s.append(rs)
rs = RadioSetting("auto_lock_kbd", "Auto lock keyboard",
- RadioSettingValueBoolean(
- self._memobj.settings.auto_lock_kbd))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.auto_lock_kbd))
+ cfg_s.append(rs)
rs = RadioSetting("auto_backlight", "Auto backlight",
- RadioSettingValueBoolean(
- self._memobj.settings.auto_backlight))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.auto_backlight))
+ cfg_s.append(rs)
options = ["CH A", "CH B"]
rs = RadioSetting("sos_ch", "SOS CH",
- RadioSettingValueList(options,
- options[self._memobj.settings.sos_ch]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.sos_ch]))
+ cfg_s.append(rs)
rs = RadioSetting("stopwatch", "Stopwatch",
- RadioSettingValueBoolean(
- self._memobj.settings.stopwatch))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.stopwatch))
+ cfg_s.append(rs)
rs = RadioSetting("dual_band_receive", "Dual band receive",
- RadioSettingValueBoolean(
- self._memobj.settings.dual_band_receive))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.dual_band_receive))
+ cfg_s.append(rs)
options = ["VFO A", "VFO B"]
rs = RadioSetting("current_vfo", "Current VFO",
- RadioSettingValueList(options,
- options[self._memobj.settings.current_vfo]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.current_vfo]))
+ cfg_s.append(rs)
options = ["Dual", "Single"]
rs = RadioSetting("sd_available", "Single/Dual Band",
- RadioSettingValueList(options,
- options[self._memobj.settings.sd_available]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.sd_available]))
+ cfg_s.append(rs)
_pwd = self._memobj.settings.mode_password
rs = RadioSetting("mode_password", "Mode password (000000 disabled)",
- RadioSettingValueInteger(0, 9, _pwd[0]),
- RadioSettingValueInteger(0, 9, _pwd[1]),
- RadioSettingValueInteger(0, 9, _pwd[2]),
- RadioSettingValueInteger(0, 9, _pwd[3]),
- RadioSettingValueInteger(0, 9, _pwd[4]),
- RadioSettingValueInteger(0, 9, _pwd[5]))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9, _pwd[0]),
+ RadioSettingValueInteger(0, 9, _pwd[1]),
+ RadioSettingValueInteger(0, 9, _pwd[2]),
+ RadioSettingValueInteger(0, 9, _pwd[3]),
+ RadioSettingValueInteger(0, 9, _pwd[4]),
+ RadioSettingValueInteger(0, 9, _pwd[5]))
+ cfg_s.append(rs)
_pwd = self._memobj.settings.reset_password
rs = RadioSetting("reset_password", "Reset password (000000 disabled)",
- RadioSettingValueInteger(0, 9, _pwd[0]),
- RadioSettingValueInteger(0, 9, _pwd[1]),
- RadioSettingValueInteger(0, 9, _pwd[2]),
- RadioSettingValueInteger(0, 9, _pwd[3]),
- RadioSettingValueInteger(0, 9, _pwd[4]),
- RadioSettingValueInteger(0, 9, _pwd[5]))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9, _pwd[0]),
+ RadioSettingValueInteger(0, 9, _pwd[1]),
+ RadioSettingValueInteger(0, 9, _pwd[2]),
+ RadioSettingValueInteger(0, 9, _pwd[3]),
+ RadioSettingValueInteger(0, 9, _pwd[4]),
+ RadioSettingValueInteger(0, 9, _pwd[5]))
+ cfg_s.append(rs)
dtmfchars = "0123456789 *#ABCD"
_codeobj = self._memobj.settings.ani_id_content
@@ -579,7 +581,7 @@
value.append(0xFF)
obj.ani_id_content = value
rs.set_apply_callback(apply_ani_id, self._memobj.settings)
- opt.append(rs)
+ cfg_s.append(rs)
for i in range(0, 9):
if self._memobj.fm_presets_0[i] != 0xFFFF:
@@ -588,9 +590,10 @@
else:
used = False
preset = 76
- rs = RadioSetting("fm_presets_0_%1i" % i, "Team 1 Location %i" % (i+1),
- RadioSettingValueBoolean(used),
- RadioSettingValueFloat(76, 108, preset, 0.1, 1))
+ rs = RadioSetting("fm_presets_0_%1i" % i,
+ "Team 1 Location %i" % (i+1),
+ RadioSettingValueBoolean(used),
+ RadioSettingValueFloat(76, 108, preset, 0.1, 1))
fm_preset.append(rs)
for i in range(0, 9):
if self._memobj.fm_presets_1[i] != 0xFFFF:
@@ -599,9 +602,10 @@
else:
used = False
preset = 76
- rs = RadioSetting("fm_presets_1_%1i" % i, "Team 2 Location %i" % (i+1),
- RadioSettingValueBoolean(used),
- RadioSettingValueFloat(76, 108, preset, 0.1, 1))
+ rs = RadioSetting("fm_presets_1_%1i" % i,
+ "Team 2 Location %i" % (i+1),
+ RadioSettingValueBoolean(used),
+ RadioSettingValueFloat(76, 108, preset, 0.1, 1))
fm_preset.append(rs)
return group
@@ -609,7 +613,7 @@
def set_settings(self, settings):
for element in settings:
if not isinstance(element, RadioSetting):
- if element.get_name() == "freqranges" :
+ if element.get_name() == "freq_ranges" :
self._set_freq_settings(element)
elif element.get_name() == "fm_preset" :
self._set_fm_preset(element)
@@ -642,7 +646,8 @@
obj = self._memobj
for element in settings:
try:
- (bank, index) = (int(a) for a in element.get_name().split("_")[-2:])
+ (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)
@@ -1044,63 +1049,63 @@
return rf
def get_settings(self):
- freqranges = RadioSettingGroup("freqranges", "Freq Ranges")
+ freq_ranges = RadioSettingGroup("freq_ranges", "Freq Ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- opt = RadioSettingGroup("options", "Options")
- group = RadioSettings(opt, freqranges, fm_preset)
+ cfg_s = RadioSettingGroup("cfg_settings", "Configuration Settings")
+ group = RadioSettings(cfg_s, freq_ranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
- RadioSettingValueBoolean(
+ RadioSettingValueBoolean(
self._memobj.settings.menu_available))
- opt.append(rs)
+ cfg_s.append(rs)
rs = RadioSetting("vhf_rx_start", "VHF RX Lower Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.vhf_rx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_rx_stop", "VHF RX Upper Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.vhf_rx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_rx_start", "UHF RX Lower Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.uhf_rx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_rx_stop", "UHF RX Upper Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.uhf_rx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_tx_start", "VHF TX Lower Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.vhf_tx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_tx_stop", "VHF TX Upper Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.vhf_tx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_tx_start", "UHF TX Lower Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.uhf_tx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_tx_stop", "UHF TX Upper Limit (MHz)",
- RadioSettingValueInteger(1, 1000,
- decode_freq(
- self._memobj.freq_ranges.uhf_tx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(1, 1000,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_stop)))
+ freq_ranges.append(rs)
# tell the decoded ranges to UI
self.valid_freq = [
- ( decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
- (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000),
- ( decode_freq(self._memobj.freq_ranges.uhf_rx_start) * 1000000,
- (decode_freq(self._memobj.freq_ranges.uhf_rx_stop)+1) * 1000000)]
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000),
+ (decode_freq(self._memobj.freq_ranges.uhf_rx_start) * 1000000,
+ (decode_freq(self._memobj.freq_ranges.uhf_rx_stop)+1) * 1000000)]
def _filter(name):
filtered = ""
@@ -1114,154 +1119,174 @@
# add some radio specific settings
options = ["Off", "Welcome", "V bat", "N/A(KG-UV6X)"]
rs = RadioSetting("ponmsg", "Poweron message",
- RadioSettingValueList(options,
- options[self._memobj.settings.ponmsg]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.ponmsg]))
+ cfg_s.append(rs)
rs = RadioSetting("strings.welcome1", "Power-On Message 1",
- RadioSettingValueString(0, 6, _filter(self._memobj.strings.welcome1)))
- opt.append(rs)
+ RadioSettingValueString(0, 6,
+ _filter(self._memobj.strings.welcome1)))
+ cfg_s.append(rs)
rs = RadioSetting("strings.welcome2", "Power-On Message 2",
- RadioSettingValueString(0, 6, _filter(self._memobj.strings.welcome2)))
- opt.append(rs)
+ RadioSettingValueString(0, 6,
+ _filter(self._memobj.strings.welcome2)))
+ cfg_s.append(rs)
rs = RadioSetting("strings.single_band", "Single Band Message",
- RadioSettingValueString(0, 6, _filter(self._memobj.strings.single_band)))
- opt.append(rs)
+ RadioSettingValueString(0, 6,
+ _filter(self._memobj.strings.single_band)))
+ cfg_s.append(rs)
options = ["Channel", "ch/freq","Name", "VFO"]
rs = RadioSetting("vfo_a_ch_disp", "VFO A Channel disp mode",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_a_ch_disp]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_a_ch_disp]))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_ch_disp", "VFO B Channel disp mode",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_b_ch_disp]))
- opt.append(rs)
- options = ["2.5", "5.0", "6.25", "10.0", "12.5", "25.0", "50.0", "100.0"]
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_b_ch_disp]))
+ cfg_s.append(rs)
+ options = \
+ ["2.5", "5.0", "6.25", "10.0", "12.5", "25.0", "50.0", "100.0"]
rs = RadioSetting("vfo_a_fr_step", "VFO A Frequency Step",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_a_fr_step]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_a_fr_step]))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_fr_step", "VFO B Frequency Step",
- RadioSettingValueList(options,
- options[self._memobj.settings.vfo_b_fr_step]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.vfo_b_fr_step]))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_a_squelch", "VFO A Squelch",
- RadioSettingValueInteger(0, 9, self._memobj.settings.vfo_a_squelch))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9,
+ self._memobj.settings.vfo_a_squelch))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_squelch", "VFO B Squelch",
- RadioSettingValueInteger(0, 9, self._memobj.settings.vfo_b_squelch))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9,
+ self._memobj.settings.vfo_b_squelch))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_a_cur_chan", "VFO A current channel",
- RadioSettingValueInteger(1, 199, self._memobj.settings.vfo_a_cur_chan))
- opt.append(rs)
+ RadioSettingValueInteger(1, 199,
+ self._memobj.settings.vfo_a_cur_chan))
+ cfg_s.append(rs)
rs = RadioSetting("vfo_b_cur_chan", "VFO B current channel",
- RadioSettingValueInteger(1, 199, self._memobj.settings.vfo_b_cur_chan))
- opt.append(rs)
+ RadioSettingValueInteger(1, 199,
+ self._memobj.settings.vfo_b_cur_chan))
+ cfg_s.append(rs)
rs = RadioSetting("priority_chan", "Priority channel",
- RadioSettingValueInteger(0, 199, self._memobj.settings.priority_chan))
- opt.append(rs)
+ RadioSettingValueInteger(0, 199,
+ self._memobj.settings.priority_chan))
+ cfg_s.append(rs)
rs = RadioSetting("power_save", "Power save",
- RadioSettingValueBoolean(self._memobj.settings.power_save))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.power_save))
+ cfg_s.append(rs)
options = ["Off", "Scan", "Lamp", "SOS", "Radio"]
rs = RadioSetting("pf1_function", "PF1 Function select",
- RadioSettingValueList(options,
- options[self._memobj.settings.pf1_function]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.pf1_function]))
+ cfg_s.append(rs)
options = ["Off", "Radio", "fr/ch", "Rpt", "Stopwatch", "Lamp", "SOS"]
rs = RadioSetting("pf2_function", "PF2 Function select",
- RadioSettingValueList(options,
- options[self._memobj.settings.pf2_function]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.pf2_function]))
+ cfg_s.append(rs)
options = ["Off", "Begin", "End", "Both"]
rs = RadioSetting("roger_beep", "Roger beep select",
- RadioSettingValueList(options,
- options[self._memobj.settings.roger_beep]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.roger_beep]))
+ cfg_s.append(rs)
options = ["%s" % x for x in range(15, 615, 15)]
rs = RadioSetting("transmit_time_out", "TX Time-out Timer",
- RadioSettingValueList(options,
- options[self._memobj.settings.transmit_time_out]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.transmit_time_out]))
+ cfg_s.append(rs)
rs = RadioSetting("tx_time_out_alert", "TX Time-out Alert",
- RadioSettingValueInteger(0, 10, self._memobj.settings.tx_time_out_alert))
- opt.append(rs)
+ RadioSettingValueInteger(0, 10,
+ self._memobj.settings.tx_time_out_alert))
+ cfg_s.append(rs)
rs = RadioSetting("vox", "Vox",
- RadioSettingValueInteger(0, 10, self._memobj.settings.vox))
- opt.append(rs)
+ RadioSettingValueInteger(0, 10,
+ self._memobj.settings.vox))
+ cfg_s.append(rs)
options = ["Off", "Chinese", "English"]
rs = RadioSetting("voice", "Voice",
- RadioSettingValueList(options,
- options[self._memobj.settings.voice]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.voice]))
+ cfg_s.append(rs)
rs = RadioSetting("beep", "Beep",
- RadioSettingValueBoolean(self._memobj.settings.beep))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.beep))
+ cfg_s.append(rs)
rs = RadioSetting("ani_id_enable", "ANI id enable",
- RadioSettingValueBoolean(self._memobj.settings.ani_id_enable))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.ani_id_enable))
+ cfg_s.append(rs)
rs = RadioSetting("ani_id_tx_delay", "ANI id tx delay",
- RadioSettingValueInteger(0, 30, self._memobj.settings.ani_id_tx_delay))
- opt.append(rs)
+ RadioSettingValueInteger(0, 30,
+ self._memobj.settings.ani_id_tx_delay))
+ cfg_s.append(rs)
options = ["Off", "Key", "ANI", "Key+ANI"]
rs = RadioSetting("ani_id_sidetone", "ANI id sidetone",
- RadioSettingValueList(options,
- options[self._memobj.settings.ani_id_sidetone]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.ani_id_sidetone]))
+ cfg_s.append(rs)
options = ["Time", "Carrier", "Search"]
rs = RadioSetting("scan_mode", "Scan mode",
- RadioSettingValueList(options,
- options[self._memobj.settings.scan_mode]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.scan_mode]))
+ cfg_s.append(rs)
rs = RadioSetting("kbd_lock", "Keyboard lock",
- RadioSettingValueBoolean(self._memobj.settings.kbd_lock))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.kbd_lock))
+ cfg_s.append(rs)
rs = RadioSetting("auto_lock_kbd", "Auto lock keyboard",
- RadioSettingValueBoolean(self._memobj.settings.auto_lock_kbd))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.auto_lock_kbd))
+ cfg_s.append(rs)
rs = RadioSetting("auto_backlight", "Auto backlight",
- RadioSettingValueBoolean(self._memobj.settings.auto_backlight))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.auto_backlight))
+ cfg_s.append(rs)
options = ["CH A", "CH B"]
rs = RadioSetting("sos_ch", "SOS CH",
- RadioSettingValueList(options,
- options[self._memobj.settings.sos_ch]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.sos_ch]))
+ cfg_s.append(rs)
rs = RadioSetting("stopwatch", "Stopwatch",
- RadioSettingValueBoolean(self._memobj.settings.stopwatch))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.stopwatch))
+ cfg_s.append(rs)
rs = RadioSetting("dual_band_receive", "Dual band receive",
- RadioSettingValueBoolean(self._memobj.settings.dual_band_receive))
- opt.append(rs)
+ RadioSettingValueBoolean(
+ self._memobj.settings.dual_band_receive))
+ cfg_s.append(rs)
options = ["VFO A", "VFO B"]
rs = RadioSetting("current_vfo", "Current VFO",
- RadioSettingValueList(options,
- options[self._memobj.settings.current_vfo]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.current_vfo]))
+ cfg_s.append(rs)
options = ["Dual", "Single"]
rs = RadioSetting("sd_available", "Single/Dual Band",
- RadioSettingValueList(options,
- options[self._memobj.settings.sd_available]))
- opt.append(rs)
+ RadioSettingValueList(options,
+ options[self._memobj.settings.sd_available]))
+ cfg_s.append(rs)
_pwd = self._memobj.settings.mode_password
rs = RadioSetting("mode_password", "Mode password (000000 disabled)",
- RadioSettingValueInteger(0, 9, _pwd[0]),
- RadioSettingValueInteger(0, 9, _pwd[1]),
- RadioSettingValueInteger(0, 9, _pwd[2]),
- RadioSettingValueInteger(0, 9, _pwd[3]),
- RadioSettingValueInteger(0, 9, _pwd[4]),
- RadioSettingValueInteger(0, 9, _pwd[5]))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9, _pwd[0]),
+ RadioSettingValueInteger(0, 9, _pwd[1]),
+ RadioSettingValueInteger(0, 9, _pwd[2]),
+ RadioSettingValueInteger(0, 9, _pwd[3]),
+ RadioSettingValueInteger(0, 9, _pwd[4]),
+ RadioSettingValueInteger(0, 9, _pwd[5]))
+ cfg_s.append(rs)
_pwd = self._memobj.settings.reset_password
rs = RadioSetting("reset_password", "Reset password (000000 disabled)",
- RadioSettingValueInteger(0, 9, _pwd[0]),
- RadioSettingValueInteger(0, 9, _pwd[1]),
- RadioSettingValueInteger(0, 9, _pwd[2]),
- RadioSettingValueInteger(0, 9, _pwd[3]),
- RadioSettingValueInteger(0, 9, _pwd[4]),
- RadioSettingValueInteger(0, 9, _pwd[5]))
- opt.append(rs)
+ RadioSettingValueInteger(0, 9, _pwd[0]),
+ RadioSettingValueInteger(0, 9, _pwd[1]),
+ RadioSettingValueInteger(0, 9, _pwd[2]),
+ RadioSettingValueInteger(0, 9, _pwd[3]),
+ RadioSettingValueInteger(0, 9, _pwd[4]),
+ RadioSettingValueInteger(0, 9, _pwd[5]))
+ cfg_s.append(rs)
dtmfchars = "0123456789 *#ABCD"
_codeobj = self._memobj.settings.ani_id_content
@@ -1278,7 +1303,7 @@
value.append(0xFF)
obj.ani_id_content = value
rs.set_apply_callback(apply_ani_id, self._memobj.settings)
- opt.append(rs)
+ cfg_s.append(rs)
for i in range(0, 9):
if self._memobj.fm_presets_0[i] != 0xFFFF:
@@ -1287,9 +1312,10 @@
else:
used = False
preset = 76
- rs = RadioSetting("fm_presets_0_%1i" % i, "Team 1 Location %i" % (i+1),
- RadioSettingValueBoolean(used),
- RadioSettingValueFloat(76, 108, preset, 0.1, 1))
+ rs = RadioSetting("fm_presets_0_%1i" % i,
+ "Team 1 Location %i" % (i+1),
+ RadioSettingValueBoolean(used),
+ RadioSettingValueFloat(76, 108, preset, 0.1, 1))
fm_preset.append(rs)
for i in range(0, 9):
if self._memobj.fm_presets_1[i] != 0xFFFF:
@@ -1298,9 +1324,10 @@
else:
used = False
preset = 76
- rs = RadioSetting("fm_presets_1_%1i" % i, "Team 2 Location %i" % (i+1),
- RadioSettingValueBoolean(used),
- RadioSettingValueFloat(76, 108, preset, 0.1, 1))
+ rs = RadioSetting("fm_presets_1_%1i" % i,
+ "Team 2 Location %i" % (i+1),
+ RadioSettingValueBoolean(used),
+ RadioSettingValueFloat(76, 108, preset, 0.1, 1))
fm_preset.append(rs)
return group
@@ -1308,7 +1335,7 @@
def set_settings(self, settings):
for element in settings:
if not isinstance(element, RadioSetting):
- if element.get_name() == "freqranges" :
+ if element.get_name() == "freq_ranges" :
self._set_freq_settings(element)
elif element.get_name() == "fm_preset" :
self._set_fm_preset(element)
@@ -1340,7 +1367,8 @@
obj = self._memobj
for element in settings:
try:
- (bank, index) = (int(a) for a in element.get_name().split("_")[-2:])
+ (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)
@@ -1426,54 +1454,55 @@
return rf
def get_settings(self):
- freqranges = RadioSettingGroup("freqranges", "Freq Ranges (read only)")
- group = RadioSettings(freqranges)
+ freq_ranges = RadioSettingGroup("freq_ranges",
+ "Freq Ranges (read only)")
+ group = RadioSettings(freq_ranges)
rs = RadioSetting("vhf_rx_start", "vhf rx start",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.vhf_rx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_rx_stop", "vhf rx stop",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.vhf_rx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_rx_start", "uhf rx start",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_rx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_rx_stop", "uhf rx stop",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_rx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_tx_start", "vhf tx start",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.vhf_tx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("vhf_tx_stop", "vhf tx stop",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.vhf_tx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_stop)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_tx_start", "uhf tx start",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_tx_start)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_start)))
+ freq_ranges.append(rs)
rs = RadioSetting("uhf_tx_stop", "uhf tx stop",
- RadioSettingValueInteger(66, 520,
- decode_freq(
- self._memobj.freq_ranges.uhf_tx_stop)))
- freqranges.append(rs)
+ RadioSettingValueInteger(66, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_stop)))
+ freq_ranges.append(rs)
# tell the decoded ranges to UI
self.valid_freq = [
- ( decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
- (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000)]
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000)]
return group
1
0
# HG changeset patch
# User K. Arvanitis <kosta(a)alumni.uvic.ca>
# Date 1423513070 28800
# Mon Feb 09 12:17:50 2015 -0800
# Node ID f74f533828ed82b85ab08301c8e4e6ae5faf5370
# Parent bc148153a962d29a088663a8679e0962de04b720
Fixup wouxun radio settings
There was a small issue with the construction the top level radio settings
group for some of the wouxun radios. This attempts to resolve that.
Bug #2285
diff -r bc148153a962 -r f74f533828ed chirp/anytone.py
--- a/chirp/anytone.py Fri Feb 06 20:14:09 2015 -0800
+++ b/chirp/anytone.py Mon Feb 09 12:17:50 2015 -0800
@@ -232,7 +232,8 @@
result = radio.pipe.read(1)
if result != "\x06":
print "Ack was: %s" % repr(result)
- raise errors.RadioError("Radio did not accept block at %04x" % addr)
+ raise errors.RadioError("Radio did not accept block at %04x" % \
+ addr)
return
result = _read(radio, length + 6)
_debug("Got:\n%s" % util.hexprint(result))
diff -r bc148153a962 -r f74f533828ed chirp/wouxun.py
--- a/chirp/wouxun.py Fri Feb 06 20:14:09 2015 -0800
+++ b/chirp/wouxun.py Mon Feb 09 12:17:50 2015 -0800
@@ -332,14 +332,15 @@
return rf
def get_settings(self):
- freqranges = RadioSettingGroup("freqranges", "Freq ranges")
+ freqranges = RadioSettingGroup("freqranges", "Freq Ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- top = RadioSettings(freqranges, fm_preset)
+ opt = RadioSettingGroup("options", "Options")
+ group = RadioSettings(opt, freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
self._memobj.settings.menu_available))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vhf_rx_start", "1st band RX Lower Limit (MHz)",
RadioSettingValueInteger(50, 174,
@@ -403,146 +404,146 @@
rs = RadioSetting("ponmsg", "Poweron message",
RadioSettingValueList(options,
options[self._memobj.settings.ponmsg]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("strings.welcome1", "Power-On Message 1",
RadioSettingValueString(0, 6,
_filter(self._memobj.strings.welcome1)))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("strings.welcome2", "Power-On Message 2",
RadioSettingValueString(0, 6,
_filter(self._memobj.strings.welcome2)))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("strings.single_band", "Single Band Message",
RadioSettingValueString(0, 6,
_filter(self._memobj.strings.single_band)))
- top.append(rs)
+ opt.append(rs)
options = ["Channel", "ch/freq","Name", "VFO"]
rs = RadioSetting("vfo_a_ch_disp", "VFO A Channel disp mode",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_a_ch_disp]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_ch_disp", "VFO B Channel disp mode",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_b_ch_disp]))
- top.append(rs)
+ opt.append(rs)
options = ["5.0", "6.25", "10.0", "12.5", "25.0", "50.0", "100.0"]
rs = RadioSetting("vfo_a_fr_step", "VFO A Frequency Step",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_a_fr_step]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_fr_step", "VFO B Frequency Step",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_b_fr_step]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_a_squelch", "VFO A Squelch",
RadioSettingValueInteger(0, 9,
self._memobj.settings.vfo_a_squelch))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_squelch", "VFO B Squelch",
RadioSettingValueInteger(0, 9,
self._memobj.settings.vfo_b_squelch))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_a_cur_chan", "VFO A current channel",
RadioSettingValueInteger(1, 128,
self._memobj.settings.vfo_a_cur_chan))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_cur_chan", "VFO B current channel",
RadioSettingValueInteger(1, 128,
self._memobj.settings.vfo_b_cur_chan))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("priority_chan", "Priority channel",
RadioSettingValueInteger(0, 199,
self._memobj.settings.priority_chan))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("power_save", "Power save",
RadioSettingValueBoolean(
self._memobj.settings.power_save))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Scan", "Lamp", "SOS", "Radio"]
rs = RadioSetting("pf1_function", "PF1 Function select",
RadioSettingValueList(options,
options[self._memobj.settings.pf1_function]))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Begin", "End", "Both"]
rs = RadioSetting("roger_beep", "Roger beep select",
RadioSettingValueList(options,
options[self._memobj.settings.roger_beep]))
- top.append(rs)
+ opt.append(rs)
options = ["%s" % x for x in range(15, 615, 15)]
rs = RadioSetting("transmit_time_out", "TX Time-out Timer",
RadioSettingValueList(options,
options[self._memobj.settings.transmit_time_out]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("tx_time_out_alert", "TX Time-out Alert",
RadioSettingValueInteger(0, 10,
self._memobj.settings.tx_time_out_alert))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vox", "Vox",
RadioSettingValueInteger(0, 10,
self._memobj.settings.vox))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Chinese", "English"]
rs = RadioSetting("voice", "Voice",
RadioSettingValueList(options,
options[self._memobj.settings.voice]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("beep", "Beep",
RadioSettingValueBoolean(self._memobj.settings.beep))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("ani_id_enable", "ANI id enable",
RadioSettingValueBoolean(
self._memobj.settings.ani_id_enable))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("ani_id_tx_delay", "ANI id tx delay",
RadioSettingValueInteger(0, 30,
self._memobj.settings.ani_id_tx_delay))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Key", "ANI", "Key+ANI"]
rs = RadioSetting("ani_id_sidetone", "ANI id sidetone",
RadioSettingValueList(options,
options[self._memobj.settings.ani_id_sidetone]))
- top.append(rs)
+ opt.append(rs)
options = ["Time", "Carrier", "Search"]
rs = RadioSetting("scan_mode", "Scan mode",
RadioSettingValueList(options,
options[self._memobj.settings.scan_mode]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("kbd_lock", "Keyboard lock",
RadioSettingValueBoolean(
self._memobj.settings.kbd_lock))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("auto_lock_kbd", "Auto lock keyboard",
RadioSettingValueBoolean(
self._memobj.settings.auto_lock_kbd))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("auto_backlight", "Auto backlight",
RadioSettingValueBoolean(
self._memobj.settings.auto_backlight))
- top.append(rs)
+ opt.append(rs)
options = ["CH A", "CH B"]
rs = RadioSetting("sos_ch", "SOS CH",
RadioSettingValueList(options,
options[self._memobj.settings.sos_ch]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("stopwatch", "Stopwatch",
RadioSettingValueBoolean(
self._memobj.settings.stopwatch))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("dual_band_receive", "Dual band receive",
RadioSettingValueBoolean(
self._memobj.settings.dual_band_receive))
- top.append(rs)
+ opt.append(rs)
options = ["VFO A", "VFO B"]
rs = RadioSetting("current_vfo", "Current VFO",
RadioSettingValueList(options,
options[self._memobj.settings.current_vfo]))
- top.append(rs)
+ opt.append(rs)
options = ["Dual", "Single"]
rs = RadioSetting("sd_available", "Single/Dual Band",
RadioSettingValueList(options,
options[self._memobj.settings.sd_available]))
- top.append(rs)
+ opt.append(rs)
_pwd = self._memobj.settings.mode_password
rs = RadioSetting("mode_password", "Mode password (000000 disabled)",
@@ -552,7 +553,7 @@
RadioSettingValueInteger(0, 9, _pwd[3]),
RadioSettingValueInteger(0, 9, _pwd[4]),
RadioSettingValueInteger(0, 9, _pwd[5]))
- top.append(rs)
+ opt.append(rs)
_pwd = self._memobj.settings.reset_password
rs = RadioSetting("reset_password", "Reset password (000000 disabled)",
RadioSettingValueInteger(0, 9, _pwd[0]),
@@ -561,7 +562,7 @@
RadioSettingValueInteger(0, 9, _pwd[3]),
RadioSettingValueInteger(0, 9, _pwd[4]),
RadioSettingValueInteger(0, 9, _pwd[5]))
- top.append(rs)
+ opt.append(rs)
dtmfchars = "0123456789 *#ABCD"
_codeobj = self._memobj.settings.ani_id_content
@@ -578,7 +579,7 @@
value.append(0xFF)
obj.ani_id_content = value
rs.set_apply_callback(apply_ani_id, self._memobj.settings)
- top.append(rs)
+ opt.append(rs)
for i in range(0, 9):
if self._memobj.fm_presets_0[i] != 0xFFFF:
@@ -603,7 +604,7 @@
RadioSettingValueFloat(76, 108, preset, 0.1, 1))
fm_preset.append(rs)
- return top
+ return group
def set_settings(self, settings):
for element in settings:
@@ -1043,14 +1044,15 @@
return rf
def get_settings(self):
- freqranges = RadioSettingGroup("freqranges", "Freq ranges")
+ freqranges = RadioSettingGroup("freqranges", "Freq Ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- top = RadioSettings(freqranges, fm_preset)
+ opt = RadioSettingGroup("options", "Options")
+ group = RadioSettings(opt, freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
self._memobj.settings.menu_available))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vhf_rx_start", "VHF RX Lower Limit (MHz)",
RadioSettingValueInteger(1, 1000,
@@ -1114,133 +1116,133 @@
rs = RadioSetting("ponmsg", "Poweron message",
RadioSettingValueList(options,
options[self._memobj.settings.ponmsg]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("strings.welcome1", "Power-On Message 1",
RadioSettingValueString(0, 6, _filter(self._memobj.strings.welcome1)))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("strings.welcome2", "Power-On Message 2",
RadioSettingValueString(0, 6, _filter(self._memobj.strings.welcome2)))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("strings.single_band", "Single Band Message",
RadioSettingValueString(0, 6, _filter(self._memobj.strings.single_band)))
- top.append(rs)
+ opt.append(rs)
options = ["Channel", "ch/freq","Name", "VFO"]
rs = RadioSetting("vfo_a_ch_disp", "VFO A Channel disp mode",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_a_ch_disp]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_ch_disp", "VFO B Channel disp mode",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_b_ch_disp]))
- top.append(rs)
+ opt.append(rs)
options = ["2.5", "5.0", "6.25", "10.0", "12.5", "25.0", "50.0", "100.0"]
rs = RadioSetting("vfo_a_fr_step", "VFO A Frequency Step",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_a_fr_step]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_fr_step", "VFO B Frequency Step",
RadioSettingValueList(options,
options[self._memobj.settings.vfo_b_fr_step]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_a_squelch", "VFO A Squelch",
RadioSettingValueInteger(0, 9, self._memobj.settings.vfo_a_squelch))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_squelch", "VFO B Squelch",
RadioSettingValueInteger(0, 9, self._memobj.settings.vfo_b_squelch))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_a_cur_chan", "VFO A current channel",
RadioSettingValueInteger(1, 199, self._memobj.settings.vfo_a_cur_chan))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vfo_b_cur_chan", "VFO B current channel",
RadioSettingValueInteger(1, 199, self._memobj.settings.vfo_b_cur_chan))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("priority_chan", "Priority channel",
RadioSettingValueInteger(0, 199, self._memobj.settings.priority_chan))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("power_save", "Power save",
RadioSettingValueBoolean(self._memobj.settings.power_save))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Scan", "Lamp", "SOS", "Radio"]
rs = RadioSetting("pf1_function", "PF1 Function select",
RadioSettingValueList(options,
options[self._memobj.settings.pf1_function]))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Radio", "fr/ch", "Rpt", "Stopwatch", "Lamp", "SOS"]
rs = RadioSetting("pf2_function", "PF2 Function select",
RadioSettingValueList(options,
options[self._memobj.settings.pf2_function]))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Begin", "End", "Both"]
rs = RadioSetting("roger_beep", "Roger beep select",
RadioSettingValueList(options,
options[self._memobj.settings.roger_beep]))
- top.append(rs)
+ opt.append(rs)
options = ["%s" % x for x in range(15, 615, 15)]
rs = RadioSetting("transmit_time_out", "TX Time-out Timer",
RadioSettingValueList(options,
options[self._memobj.settings.transmit_time_out]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("tx_time_out_alert", "TX Time-out Alert",
RadioSettingValueInteger(0, 10, self._memobj.settings.tx_time_out_alert))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("vox", "Vox",
RadioSettingValueInteger(0, 10, self._memobj.settings.vox))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Chinese", "English"]
rs = RadioSetting("voice", "Voice",
RadioSettingValueList(options,
options[self._memobj.settings.voice]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("beep", "Beep",
RadioSettingValueBoolean(self._memobj.settings.beep))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("ani_id_enable", "ANI id enable",
RadioSettingValueBoolean(self._memobj.settings.ani_id_enable))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("ani_id_tx_delay", "ANI id tx delay",
RadioSettingValueInteger(0, 30, self._memobj.settings.ani_id_tx_delay))
- top.append(rs)
+ opt.append(rs)
options = ["Off", "Key", "ANI", "Key+ANI"]
rs = RadioSetting("ani_id_sidetone", "ANI id sidetone",
RadioSettingValueList(options,
options[self._memobj.settings.ani_id_sidetone]))
- top.append(rs)
+ opt.append(rs)
options = ["Time", "Carrier", "Search"]
rs = RadioSetting("scan_mode", "Scan mode",
RadioSettingValueList(options,
options[self._memobj.settings.scan_mode]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("kbd_lock", "Keyboard lock",
RadioSettingValueBoolean(self._memobj.settings.kbd_lock))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("auto_lock_kbd", "Auto lock keyboard",
RadioSettingValueBoolean(self._memobj.settings.auto_lock_kbd))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("auto_backlight", "Auto backlight",
RadioSettingValueBoolean(self._memobj.settings.auto_backlight))
- top.append(rs)
+ opt.append(rs)
options = ["CH A", "CH B"]
rs = RadioSetting("sos_ch", "SOS CH",
RadioSettingValueList(options,
options[self._memobj.settings.sos_ch]))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("stopwatch", "Stopwatch",
RadioSettingValueBoolean(self._memobj.settings.stopwatch))
- top.append(rs)
+ opt.append(rs)
rs = RadioSetting("dual_band_receive", "Dual band receive",
RadioSettingValueBoolean(self._memobj.settings.dual_band_receive))
- top.append(rs)
+ opt.append(rs)
options = ["VFO A", "VFO B"]
rs = RadioSetting("current_vfo", "Current VFO",
RadioSettingValueList(options,
options[self._memobj.settings.current_vfo]))
- top.append(rs)
+ opt.append(rs)
options = ["Dual", "Single"]
rs = RadioSetting("sd_available", "Single/Dual Band",
RadioSettingValueList(options,
options[self._memobj.settings.sd_available]))
- top.append(rs)
+ opt.append(rs)
_pwd = self._memobj.settings.mode_password
rs = RadioSetting("mode_password", "Mode password (000000 disabled)",
@@ -1250,7 +1252,7 @@
RadioSettingValueInteger(0, 9, _pwd[3]),
RadioSettingValueInteger(0, 9, _pwd[4]),
RadioSettingValueInteger(0, 9, _pwd[5]))
- top.append(rs)
+ opt.append(rs)
_pwd = self._memobj.settings.reset_password
rs = RadioSetting("reset_password", "Reset password (000000 disabled)",
RadioSettingValueInteger(0, 9, _pwd[0]),
@@ -1259,7 +1261,7 @@
RadioSettingValueInteger(0, 9, _pwd[3]),
RadioSettingValueInteger(0, 9, _pwd[4]),
RadioSettingValueInteger(0, 9, _pwd[5]))
- top.append(rs)
+ opt.append(rs)
dtmfchars = "0123456789 *#ABCD"
_codeobj = self._memobj.settings.ani_id_content
@@ -1276,7 +1278,7 @@
value.append(0xFF)
obj.ani_id_content = value
rs.set_apply_callback(apply_ani_id, self._memobj.settings)
- top.append(rs)
+ opt.append(rs)
for i in range(0, 9):
if self._memobj.fm_presets_0[i] != 0xFFFF:
@@ -1301,7 +1303,7 @@
RadioSettingValueFloat(76, 108, preset, 0.1, 1))
fm_preset.append(rs)
- return top
+ return group
def set_settings(self, settings):
for element in settings:
@@ -1424,7 +1426,7 @@
return rf
def get_settings(self):
- freqranges = RadioSettingGroup("freqranges", "Freq ranges (read only)")
+ freqranges = RadioSettingGroup("freqranges", "Freq Ranges (read only)")
group = RadioSettings(freqranges)
rs = RadioSetting("vhf_rx_start", "vhf rx start",
2
1
# HG changeset patch
# User K. Arvanitis <kosta(a)alumni.uvic.ca>
# Date 1423282449 28800
# Fri Feb 06 20:14:09 2015 -0800
# Node ID bc148153a962d29a088663a8679e0962de04b720
# Parent 5a17f1c24b38875fe8ef83b6a3fe6b61f11c07af
Updated radio settings interface.
Due to the nested nature of the settings editor tree
view, labels in the tree generally become obscured
because the pane is too small.
This change addresses the issue by a) adding a
horizontal paned window which allows the tree view
to be manually resized while b) flattening the radio
featrure radio settings group to return a single list
of all top level radio settings groups.
Bug #2285
diff -r 5a17f1c24b38 -r bc148153a962 chirp/alinco.py
--- a/chirp/alinco.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/alinco.py Fri Feb 06 20:14:09 2015 -0800
@@ -15,7 +15,7 @@
from chirp import chirp_common, bitwise, memmap, errors, directory, util
from chirp.settings import RadioSettingGroup, RadioSetting
-from chirp.settings import RadioSettingValueBoolean
+from chirp.settings import RadioSettingValueBoolean, RadioSettings
import time
diff -r 5a17f1c24b38 -r bc148153a962 chirp/anytone.py
--- a/chirp/anytone.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/anytone.py Fri Feb 06 20:14:09 2015 -0800
@@ -23,7 +23,7 @@
from chirp import errors
from chirp import memmap
from chirp import util
-from chirp.settings import RadioSettingGroup, RadioSetting, \
+from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings, \
RadioSettingValueList, RadioSettingValueString, RadioSettingValueBoolean
_mem_format = """
@@ -475,19 +475,20 @@
def get_settings(self):
_settings = self._memobj.settings
- settings = RadioSettingGroup('all', 'All Settings')
+ basic = RadioSettingGroup("basic", "Basic")
+ settings = RadioSettings(basic)
display = ["Frequency", "Channel", "Name"]
rs = RadioSetting("display", "Display",
RadioSettingValueList(display,
display[_settings.display]))
- settings.append(rs)
+ basic.append(rs)
apo = ["Off"] + ['%.1f hour(s)' % (0.5 * x) for x in range(1, 25)]
rs = RadioSetting("apo", "Automatic Power Off",
RadioSettingValueList(apo,
apo[_settings.apo]))
- settings.append(rs)
+ basic.append(rs)
def filter(s):
s_ = ""
@@ -499,23 +500,26 @@
rs = RadioSetting("welcome", "Welcome Message",
RadioSettingValueString(0, 8,
filter(_settings.welcome)))
- settings.append(rs)
+ basic.append(rs)
rs = RadioSetting("beep", "Beep Enabled",
RadioSettingValueBoolean(_settings.beep))
- settings.append(rs)
+ basic.append(rs)
mute = ["Off", "TX", "RX", "TX/RX"]
rs = RadioSetting("mute", "Sub Band Mute",
RadioSettingValueList(mute,
mute[_settings.mute]))
- settings.append(rs)
+ basic.append(rs)
return settings
def set_settings(self, settings):
_settings = self._memobj.settings
for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
name = element.get_name()
setattr(_settings, name, element.value)
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ap510.py
--- a/chirp/ap510.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ap510.py Fri Feb 06 20:14:09 2015 -0800
@@ -18,8 +18,8 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, RadioSettingValue, InvalidValueError
-
+ RadioSettingValueFloat, RadioSettingValue, InvalidValueError, \
+ RadioSettings
def encode_base100(v):
return (v / 100 << 8) + (v % 100)
@@ -313,7 +313,7 @@
aprs = RadioSettingGroup("aprs", "APRS", china, smartbeacon)
digipeat = RadioSettingGroup("digipeat", "Digipeat")
system = RadioSettingGroup("system", "System")
- settings = RadioSettingGroup("all", "Settings", aprs, digipeat, system)
+ settings = RadioSettings(aprs, digipeat, system)
# The RadioSetting syntax is really verbose, iterate it.
fields = [
diff -r 5a17f1c24b38 -r bc148153a962 chirp/baofeng_uv3r.py
--- a/chirp/baofeng_uv3r.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/baofeng_uv3r.py Fri Feb 06 20:14:09 2015 -0800
@@ -22,7 +22,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueBoolean, RadioSettingValueList, \
RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+ RadioSettingValueFloat, RadioSettings
if os.getenv("CHIRP_DEBUG"):
DEBUG = True
@@ -357,7 +357,7 @@
_settings = self._memobj.settings
_vfo = self._memobj.vfo
basic = RadioSettingGroup("basic", "Basic Settings")
- group = RadioSettingGroup("top", "All Settings", basic)
+ group = RadioSettings(basic)
rs = RadioSetting("squelch", "Squelch Level",
RadioSettingValueInteger(0, 9, _settings.squelch))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/bjuv55.py
--- a/chirp/bjuv55.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/bjuv55.py Fri Feb 06 20:14:09 2015 -0800
@@ -24,7 +24,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+ RadioSettingValueFloat, InvalidValueError, RadioSettings
from textwrap import dedent
from chirp import uv5r
@@ -270,7 +270,7 @@
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
advanced = RadioSettingGroup("advanced", "Advanced Settings")
- group = RadioSettingGroup("top", "All Settings", basic, advanced)
+ group = RadioSettings(basic, advanced)
rs = RadioSetting("squelch", "Carrier Squelch Level",
RadioSettingValueInteger(0, 9, _settings.squelch))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/chirp_common.py
--- a/chirp/chirp_common.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/chirp_common.py Fri Feb 06 20:14:09 2015 -0800
@@ -248,7 +248,7 @@
immutable = []
- # A RadioSettingsGroup of additional settings supported by the radio,
+ # A RadioSettingGroup of additional settings supported by the radio,
# or an empty list if none
extra = []
@@ -1027,7 +1027,7 @@
return rf.validate_memory(mem)
def get_settings(self):
- """Returns a RadioSettingGroup containing one or more
+ """Returns a RadioSettings list containing one or more
RadioSettingGroup or RadioSetting objects. These represent general
setting knobs and dials that can be adjusted on the radio. If this
function is implemented, the has_settings RadioFeatures flag should
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft1802.py
--- a/chirp/ft1802.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft1802.py Fri Feb 06 20:14:09 2015 -0800
@@ -25,7 +25,7 @@
from chirp import chirp_common, bitwise, directory, yaesu_clone
from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean
+ RadioSettingValueBoolean, RadioSettings
from textwrap import dedent
MEM_FORMAT = """
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft1d.py
--- a/chirp/ft1d.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft1d.py Fri Feb 06 20:14:09 2015 -0800
@@ -20,7 +20,7 @@
from chirp import chirp_common, yaesu_clone, directory
from chirp import bitwise
-from chirp.settings import RadioSettingGroup, RadioSetting
+from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings
from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
from chirp.settings import RadioSettingValueList, RadioSettingValueBoolean
from textwrap import dedent
@@ -1458,16 +1458,15 @@
return menu
def _get_settings(self):
- top = RadioSettingGroup("all", "All Settings",
- self._get_aprs_general_settings(),
- self._get_aprs_rx_settings(),
- self._get_aprs_tx_settings(),
- self._get_aprs_smartbeacon(),
- self._get_aprs_msgs(),
- self._get_aprs_beacons(),
- self._get_dtmf_settings(),
- self._get_misc_settings(),
- self._get_scan_settings())
+ top = RadioSettings(self._get_aprs_general_settings(),
+ self._get_aprs_rx_settings(),
+ self._get_aprs_tx_settings(),
+ self._get_aprs_smartbeacon(),
+ self._get_aprs_msgs(),
+ self._get_aprs_beacons(),
+ self._get_dtmf_settings(),
+ self._get_misc_settings(),
+ self._get_scan_settings())
return top
def get_settings(self):
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft60.py
--- a/chirp/ft60.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft60.py Fri Feb 06 20:14:09 2015 -0800
@@ -19,7 +19,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat
+ RadioSettingValueFloat, RadioSettings
from textwrap import dedent
ACK = "\x06"
@@ -400,8 +400,7 @@
misc = RadioSettingGroup("misc", "Miscellaneous Settings")
mbls = RadioSettingGroup("banks", "Memory Bank Link Scan")
- setmode = RadioSettingGroup("top", "Set Mode",
- repeater, ctcss, arts, scan, power, wires, eai, switch, misc, mbls)
+ setmode = RadioSettings(repeater, ctcss, arts, scan, power, wires, eai, switch, misc, mbls)
# APO
opts = [ "OFF" ] + [ "%0.1f" % (x * 0.5) for x in range(1, 24+1) ]
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft7800.py
--- a/chirp/ft7800.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft7800.py Fri Feb 06 20:14:09 2015 -0800
@@ -19,7 +19,8 @@
from textwrap import dedent
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
import os, re
from collections import defaultdict
@@ -568,8 +569,8 @@
dtmf = RadioSettingGroup("dtmf", "DTMF")
arts = RadioSettingGroup("arts", "ARTS")
prog = RadioSettingGroup("prog", "Programmable Buttons")
- top = RadioSettingGroup("top", "All Settings",
- basic, dtmf, arts, prog)
+
+ top = RadioSettings(basic, dtmf, arts, prog)
basic.append( RadioSetting("priority_revert", "Priority Revert",
RadioSettingValueBoolean(_settings.priority_revert)))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft817.py
--- a/chirp/ft817.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft817.py Fri Feb 06 20:14:09 2015 -0800
@@ -20,7 +20,8 @@
from chirp import bitwise
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
import time, os
from textwrap import dedent
@@ -763,7 +764,8 @@
extended = RadioSettingGroup("extended", "Extended")
antenna = RadioSettingGroup("antenna", "Antenna selection")
panelcontr = RadioSettingGroup("panelcontr", "Panel controls")
- top = RadioSettingGroup("top", "All Settings", basic, cw, packet,
+
+ top = RadioSettings(basic, cw, packet,
panelcontr, panel, extended, antenna)
rs = RadioSetting("ars_144", "144 ARS",
@@ -1136,7 +1138,7 @@
def get_settings(self):
top = FT817Radio.get_settings(self)
- basic = top["basic"]
+ basic = top[0]
rs = RadioSetting("emergency", "Emergency",
RadioSettingValueBoolean(self._memobj.settings.emergency))
basic.append(rs)
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft857.py
--- a/chirp/ft857.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft857.py Fri Feb 06 20:14:09 2015 -0800
@@ -19,7 +19,8 @@
from chirp import ft817, chirp_common, errors, directory
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
import os
from textwrap import dedent
@@ -525,7 +526,8 @@
panel = RadioSettingGroup("panel", "Panel settings")
extended = RadioSettingGroup("extended", "Extended")
panelcontr = RadioSettingGroup("panelcontr", "Panel controls")
- top = RadioSettingGroup("top", "All Settings", basic, cw, packet,
+
+ top = RadioSettings(basic, cw, packet,
panelcontr, panel, extended)
rs = RadioSetting("extended_menu", "Extended menu",
@@ -1073,7 +1075,7 @@
def get_settings(self):
top = FT857Radio.get_settings(self)
- basic = top["basic"]
+ basic = top[0]
rs = RadioSetting("emergency", "Emergency",
RadioSettingValueBoolean(self._memobj.settings.emergency))
basic.append(rs)
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ft90.py
--- a/chirp/ft90.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft90.py Fri Feb 06 20:14:09 2015 -0800
@@ -17,7 +17,8 @@
from chirp import chirp_common, bitwise, memmap, directory, errors, util, yaesu_clone
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
import time, os, traceback, string, re
from textwrap import dedent
@@ -509,7 +510,8 @@
basic = RadioSettingGroup("basic", "Basic")
autodial = RadioSettingGroup("autodial", "AutoDial")
keymaps = RadioSettingGroup("keymaps", "KeyMaps")
- top = RadioSettingGroup("top", "All Settings", basic, keymaps, autodial)
+
+ top = RadioSettings(basic, keymaps, autodial)
rs = RadioSetting("beep", "Beep",
RadioSettingValueBoolean(_settings.beep))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ftm350.py
--- a/chirp/ftm350.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ftm350.py Fri Feb 06 20:14:09 2015 -0800
@@ -19,7 +19,7 @@
from chirp import chirp_common, yaesu_clone, directory, errors, util
from chirp import bitwise, memmap
-from chirp.settings import RadioSettingGroup, RadioSetting
+from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings
from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
mem_format = """
@@ -380,7 +380,7 @@
return filedata.startswith("AH033$")
def get_settings(self):
- top = RadioSettingGroup("all", "All Settings")
+ top = RadioSettings()
aprs = RadioSettingGroup("aprs", "APRS")
top.append(aprs)
diff -r 5a17f1c24b38 -r bc148153a962 chirp/h777.py
--- a/chirp/h777.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/h777.py Fri Feb 06 20:14:09 2015 -0800
@@ -23,7 +23,7 @@
from chirp import bitwise, errors, util
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean
+ RadioSettingValueBoolean, RadioSettings
DEBUG = os.getenv("CHIRP_DEBUG") and True or False
@@ -392,6 +392,7 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
+ top = RadioSettings(basic)
# TODO: Check that all these settings actually do what they
# say they do.
@@ -472,7 +473,7 @@
self._memobj.settings2.timeouttimer]))
basic.append(rs)
- return basic
+ return top
def set_settings(self, settings):
for element in settings:
diff -r 5a17f1c24b38 -r bc148153a962 chirp/ic2100.py
--- a/chirp/ic2100.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ic2100.py Fri Feb 06 20:14:09 2015 -0800
@@ -18,7 +18,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+ RadioSettingValueFloat, InvalidValueError, RadioSettings
MEM_FORMAT = """
struct {
diff -r 5a17f1c24b38 -r bc148153a962 chirp/icf.py
--- a/chirp/icf.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/icf.py Fri Feb 06 20:14:09 2015 -0800
@@ -19,7 +19,7 @@
from chirp import chirp_common, errors, util, memmap
from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean
+ RadioSettingValueBoolean, RadioSettings
CMD_CLONE_OUT = 0xE2
CMD_CLONE_IN = 0xE3
@@ -640,17 +640,18 @@
def make_speed_switch_setting(radio):
if not radio.__class__._can_hispeed:
- return []
+ return {}
drvopts = RadioSettingGroup("drvopts", "Driver Options")
+ top = RadioSettings(drvopts)
rs = RadioSetting("drv_clone_speed", "Use Hi-Speed Clone",
RadioSettingValueBoolean(radio._can_hispeed))
drvopts.append(rs)
- return drvopts
+ return top
def honor_speed_switch_setting(radio, settings):
for element in settings:
if element.get_name() == "drvopts":
- return honor_speed_switch_setting(radio, settings)
+ return honor_speed_switch_setting(radio, element)
if element.get_name() == "drv_clone_speed":
radio.__class__._can_hispeed = element.value.get_value()
return
diff -r 5a17f1c24b38 -r bc148153a962 chirp/icq7.py
--- a/chirp/icq7.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/icq7.py Fri Feb 06 20:14:09 2015 -0800
@@ -20,7 +20,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueBoolean, RadioSettingValueList, \
RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+ RadioSettingValueFloat, RadioSettings
MEM_FORMAT = """
struct {
@@ -198,7 +198,7 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
- group = RadioSettingGroup("top", "All Settings", basic)
+ group = RadioSettings(basic)
rs = RadioSetting("ch", "Channel Indication Mode",
RadioSettingValueBoolean(_settings.ch))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/kenwood_live.py
--- a/chirp/kenwood_live.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/kenwood_live.py Fri Feb 06 20:14:09 2015 -0800
@@ -27,7 +27,7 @@
from chirp import chirp_common, errors, directory, util
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueBoolean, \
- RadioSettingValueString, RadioSettingValueList
+ RadioSettingValueString, RadioSettingValueList, RadioSettings
DEBUG = True
@@ -392,7 +392,8 @@
aux, tnc, save, display, dtmf)
sky = RadioSettingGroup("sky", "SkyCommand")
aprs = RadioSettingGroup("aprs", "APRS")
- top = RadioSettingGroup("top", "All Settings", radio, aprs, sky)
+
+ top = RadioSettings(radio, aprs, sky)
bools = [("AMR", aprs, "APRS Message Auto-Reply"),
("AIP", aux, "Advanced Intercept Point"),
diff -r 5a17f1c24b38 -r bc148153a962 chirp/kguv8d.py
--- a/chirp/kguv8d.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/kguv8d.py Fri Feb 06 20:14:09 2015 -0800
@@ -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, \
+ RadioSettings
if os.getenv("CHIRP_DEBUG"):
CHIRP_DEBUG = True
@@ -673,12 +674,11 @@
vfoa_grp = RadioSettingGroup("vfoa_grp", "VFO A Settings")
vfob_grp = RadioSettingGroup("vfob_grp", "VFO B Settings")
key_grp = RadioSettingGroup("key_grp", "Key Settings")
- scn_grp = RadioSettingGroup("scn_grp", "Scan Group")
- cal_grp = RadioSettingGroup("cal_grp", "Call Group")
lmt_grp = RadioSettingGroup("lmt_grp", "Frequency Limits")
oem_grp = RadioSettingGroup("oem_grp", "OEM Info")
- group = RadioSettingGroup("top", "All Settings", cfg_grp, vfoa_grp,
- vfob_grp, key_grp, scn_grp, cal_grp, lmt_grp, oem_grp)
+
+ group = RadioSettings(cfg_grp, vfoa_grp, vfob_grp, key_grp,
+ lmt_grp, oem_grp)
#
# Configuration Settings
diff -r 5a17f1c24b38 -r bc148153a962 chirp/kyd.py
--- a/chirp/kyd.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/kyd.py Fri Feb 06 20:14:09 2015 -0800
@@ -22,7 +22,7 @@
from chirp import bitwise, errors, util
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean
+ RadioSettingValueBoolean, RadioSettings
DEBUG = os.getenv("CHIRP_DEBUG") and True or False
@@ -436,6 +436,7 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
+ top = RadioSettings(basic)
rs = RadioSetting("tot", "Time-out timer",
RadioSettingValueList(TIMEOUTTIMER_LIST,
@@ -474,7 +475,7 @@
RadioSettingValueBoolean(_settings.save))
basic.append(rs)
- return basic
+ return top
def set_settings(self, settings):
for element in settings:
diff -r 5a17f1c24b38 -r bc148153a962 chirp/leixen.py
--- a/chirp/leixen.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/leixen.py Fri Feb 06 20:14:09 2015 -0800
@@ -21,7 +21,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+ RadioSettingValueFloat, InvalidValueError, RadioSettings
from textwrap import dedent
if os.getenv("CHIRP_DEBUG"):
@@ -531,8 +531,7 @@
cfg_grp = RadioSettingGroup("cfg_grp", "Basic Settings")
adv_grp = RadioSettingGroup("adv_grp", "Advanced Settings")
key_grp = RadioSettingGroup("key_grp", "Key Assignment")
- group = RadioSettingGroup("top", "All Settings", cfg_grp,
- adv_grp, key_grp)
+ group = RadioSettings(cfg_grp, adv_grp, key_grp)
#
# Basic Settings
diff -r 5a17f1c24b38 -r bc148153a962 chirp/settings.py
--- a/chirp/settings.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/settings.py Fri Feb 06 20:14:09 2015 -0800
@@ -199,6 +199,11 @@
def __str__(self):
return self._current
+
+class RadioSettings(list):
+ def __init__(self, *groups):
+ list.__init__(self, groups)
+
class RadioSettingGroup(object):
"""A group of settings"""
def _validate(self, element):
@@ -244,7 +249,7 @@
def __iter__(self):
class RSGIterator:
- """Iterator for a RadioSettingsGroup"""
+ """Iterator for a RadioSettingGroup"""
def __init__(self, rsg):
self.__rsg = rsg
self.__i = 0
diff -r 5a17f1c24b38 -r bc148153a962 chirp/th9800.py
--- a/chirp/th9800.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/th9800.py Fri Feb 06 20:14:09 2015 -0800
@@ -20,7 +20,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+ RadioSettingValueFloat, InvalidValueError, RadioSettings
from chirp_common import format_freq
import os
import time
@@ -400,8 +400,7 @@
_bandlimits = self._memobj.bandlimits
basic = RadioSettingGroup("basic", "Basic")
info = RadioSettingGroup("info", "Model Info")
- top = RadioSettingGroup("top", "All Settings",
- basic, info)
+ top = RadioSettings(basic, info)
basic.append( RadioSetting("beep", "Beep",
RadioSettingValueBoolean(_settings.beep)))
basic.append( RadioSetting("beep_vol", "Beep Volume",
diff -r 5a17f1c24b38 -r bc148153a962 chirp/th_uvf8d.py
--- a/chirp/th_uvf8d.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/th_uvf8d.py Fri Feb 06 20:14:09 2015 -0800
@@ -27,7 +27,8 @@
from chirp import chirp_common, bitwise, errors, directory, memmap, util
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
def uvf8d_identify(radio):
@@ -464,7 +465,8 @@
def get_settings(self):
_settings = self._memobj.settings
- group = RadioSettingGroup("top", "All Settings")
+ group = RadioSettingGroup("basic", "Basic")
+ top = RadioSettings(basic)
group.append(
RadioSetting("mode", "Mode",
@@ -595,7 +597,7 @@
RadioSettingValueList(AB_LIST,
AB_LIST[_settings.b_work_area])))
- return group
+ return top
group.append(
RadioSetting("disnm", "Display Name",
diff -r 5a17f1c24b38 -r bc148153a962 chirp/thuv1f.py
--- a/chirp/thuv1f.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/thuv1f.py Fri Feb 06 20:14:09 2015 -0800
@@ -17,11 +17,10 @@
from chirp import chirp_common, errors, util, directory, memmap
from chirp import bitwise
-
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueList, RadioSettingValueBoolean, \
- RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
def uvf1_identify(radio):
"""Do identify handshake with TYT TH-UVF1"""
@@ -383,7 +382,8 @@
def get_settings(self):
_settings = self._memobj.settings
- group = RadioSettingGroup("top", "All Settings")
+ group = RadioSettingGroup("basic", "Basic");
+ top = RadioSettings(group)
group.append(
RadioSetting("led", "LED Mode",
@@ -463,7 +463,7 @@
RadioSettingValueString(0, 6,
_filter(_settings.ponmsg))))
- return group
+ return top
def set_settings(self, settings):
_settings = self._memobj.settings
diff -r 5a17f1c24b38 -r bc148153a962 chirp/tk8102.py
--- a/chirp/tk8102.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/tk8102.py Fri Feb 06 20:14:09 2015 -0800
@@ -20,7 +20,7 @@
from chirp import bitwise
from chirp.settings import RadioSettingGroup, RadioSetting
from chirp.settings import RadioSettingValueBoolean, RadioSettingValueList
-from chirp.settings import RadioSettingValueString
+from chirp.settings import RadioSettingValueString, RadioSettings
MEM_FORMAT = """
#seekto 0x0030;
@@ -355,7 +355,8 @@
def get_settings(self):
_mem = self._memobj
- top = RadioSettingGroup("all", "All Settings")
+ basic = RadioSettingGroup("basic", "Basic")
+ top = RadioSettings(basic)
def _f(val):
string = ""
@@ -369,18 +370,21 @@
RadioSettingValueString(0, 32,
_f(_mem.messages.line1),
autopad=False))
- top.append(line1)
+ basic.append(line1)
line2 = RadioSetting("messages.line2", "Message Line 2",
RadioSettingValueString(0, 32,
_f(_mem.messages.line2),
autopad=False))
- top.append(line2)
+ basic.append(line2)
return top
def set_settings(self, settings):
for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
if "." in element.get_name():
bits = element.get_name().split(".")
obj = self._memobj
diff -r 5a17f1c24b38 -r bc148153a962 chirp/uv5r.py
--- a/chirp/uv5r.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/uv5r.py Fri Feb 06 20:14:09 2015 -0800
@@ -22,7 +22,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+ RadioSettingValueFloat, InvalidValueError, RadioSettings
from textwrap import dedent
if os.getenv("CHIRP_DEBUG"):
@@ -986,7 +986,8 @@
_wmchannel = self._memobj.wmchannel
basic = RadioSettingGroup("basic", "Basic Settings")
advanced = RadioSettingGroup("advanced", "Advanced Settings")
- group = RadioSettingGroup("top", "All Settings", basic, advanced)
+
+ group = RadioSettings(basic, advanced)
rs = RadioSetting("squelch", "Carrier Squelch Level",
RadioSettingValueInteger(0, 9, _settings.squelch))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/uvb5.py
--- a/chirp/uvb5.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/uvb5.py Fri Feb 06 20:14:09 2015 -0800
@@ -18,7 +18,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueBoolean, RadioSettingValueList, \
RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+ RadioSettingValueFloat, RadioSettings
from textwrap import dedent
mem_format = """
@@ -480,7 +480,8 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
- group = RadioSettingGroup("top", "All Settings", basic)
+
+ group = RadioSettings(basic)
options = ["Time", "Carrier", "Search"]
rs = RadioSetting("scantype", "Scan Type",
diff -r 5a17f1c24b38 -r bc148153a962 chirp/vx2.py
--- a/chirp/vx2.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/vx2.py Fri Feb 06 20:14:09 2015 -0800
@@ -17,7 +17,8 @@
from chirp import chirp_common, yaesu_clone, directory, bitwise
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
import os, traceback, re
if os.getenv("CHIRP_DEBUG"):
@@ -437,7 +438,7 @@
basic = RadioSettingGroup("basic", "Basic")
dtmf = RadioSettingGroup("dtmf", "DTMF")
arts = RadioSettingGroup("arts", "ARTS")
- top = RadioSettingGroup("top", "All Settings", basic, arts, dtmf)
+ top = RadioSettings(basic, arts, dtmf)
options = [ "off", "30m", "1h", "3h", "5h", "8h" ]
rs = RadioSetting("apo", "APO time (hrs)",
diff -r 5a17f1c24b38 -r bc148153a962 chirp/vx3.py
--- a/chirp/vx3.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/vx3.py Fri Feb 06 20:14:09 2015 -0800
@@ -18,7 +18,8 @@
from chirp import bitwise
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+ RadioSettingValueBoolean, RadioSettingValueString, \
+ RadioSettings
from textwrap import dedent
import os, re
@@ -529,8 +530,8 @@
arts = RadioSettingGroup("arts", "ARTS")
eai = RadioSettingGroup("eai", "Emergency")
msg = RadioSettingGroup("msg", "Messages")
- top = RadioSettingGroup("top", "All Settings",
- basic, sound, arts, dtmf, eai, msg)
+
+ top = RadioSettings(basic, sound, arts, dtmf, eai, msg)
basic.append( RadioSetting("att_wx", "Attenuation WX",
RadioSettingValueBoolean(_settings.att_wx)))
diff -r 5a17f1c24b38 -r bc148153a962 chirp/vx8.py
--- a/chirp/vx8.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/vx8.py Fri Feb 06 20:14:09 2015 -0800
@@ -18,7 +18,7 @@
from chirp import chirp_common, yaesu_clone, directory
from chirp import bitwise
-from chirp.settings import RadioSettingGroup, RadioSetting
+from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings
from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
from chirp.settings import RadioSettingValueList, RadioSettingValueBoolean
from textwrap import dedent
@@ -1372,14 +1372,13 @@
return menu
def _get_settings(self):
- top = RadioSettingGroup("all", "All Settings",
- self._get_aprs_general_settings(),
- self._get_aprs_rx_settings(),
- self._get_aprs_tx_settings(),
- self._get_aprs_smartbeacon(),
- self._get_dtmf_settings(),
- self._get_misc_settings(),
- self._get_scan_settings())
+ top = RadioSettings(self._get_aprs_general_settings(),
+ self._get_aprs_rx_settings(),
+ self._get_aprs_tx_settings(),
+ self._get_aprs_smartbeacon(),
+ self._get_dtmf_settings(),
+ self._get_misc_settings(),
+ self._get_scan_settings())
return top
def get_settings(self):
diff -r 5a17f1c24b38 -r bc148153a962 chirp/wouxun.py
--- a/chirp/wouxun.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/wouxun.py Fri Feb 06 20:14:09 2015 -0800
@@ -21,7 +21,7 @@
from chirp.settings import RadioSetting, RadioSettingGroup, \
RadioSettingValueBoolean, RadioSettingValueList, \
RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+ RadioSettingValueFloat, RadioSettings
from chirp.wouxun_common import wipe_memory, do_download, do_upload
from textwrap import dedent
@@ -334,7 +334,7 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- top = RadioSettingGroup("top", "All Settings", freqranges, fm_preset)
+ top = RadioSettings(freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
@@ -1045,7 +1045,7 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- top = RadioSettingGroup("top", "All Settings", freqranges, fm_preset)
+ top = RadioSettings(freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
@@ -1425,7 +1425,7 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges (read only)")
- top = RadioSettingGroup("top", "All Settings", freqranges)
+ group = RadioSettings(freqranges)
rs = RadioSetting("vhf_rx_start", "vhf rx start",
RadioSettingValueInteger(66, 520,
@@ -1473,7 +1473,7 @@
( decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
(decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000)]
- return top
+ return group
@classmethod
def match_model(cls, filedata, filename):
diff -r 5a17f1c24b38 -r bc148153a962 chirpui/radiobrowser.py
--- a/chirpui/radiobrowser.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirpui/radiobrowser.py Fri Feb 06 20:14:09 2015 -0800
@@ -222,10 +222,12 @@
self.root = gtk.HBox(False, 3)
sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.add(self._tree)
sw.show()
self.root.pack_start(sw, 0, 0, 0)
sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.add_with_viewport(self._display)
sw.show()
self.root.pack_start(sw, 1, 1, 1)
diff -r 5a17f1c24b38 -r bc148153a962 chirpui/settingsedit.py
--- a/chirpui/settingsedit.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirpui/settingsedit.py Fri Feb 06 20:14:09 2015 -0800
@@ -16,7 +16,8 @@
import gtk
import gobject
-from chirp import chirp_common, settings
+from chirp import chirp_common
+from chirp import settings
from chirpui import common, miscwidgets
class RadioSettingProxy(settings.RadioSetting):
@@ -27,40 +28,40 @@
class SettingsEditor(common.Editor):
def __init__(self, rthread):
super(SettingsEditor, self).__init__(rthread)
- self._changed = False
+
+ # The main box
self.root = gtk.HBox(False, 0)
- self._store = gtk.TreeStore(gobject.TYPE_STRING,
- gobject.TYPE_PYOBJECT)
+
+ # The pane
+ paned = gtk.HPaned()
+ paned.show()
+ self.root.pack_start(paned, 1, 1, 0)
+
+ # The selection tree
+ self._store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT)
self._view = gtk.TreeView(self._store)
self._view.set_size_request(150, -1)
self._view.get_selection().connect("changed", self._view_changed_cb)
+ self._view.append_column(gtk.TreeViewColumn("", gtk.CellRendererText(), text=0))
self._view.show()
- self.root.pack_start(self._view, 0, 0, 0)
+ paned.pack1(self._view)
- col = gtk.TreeViewColumn("", gtk.CellRendererText(), text=0)
- self._view.append_column(col)
+ # The settings notebook
+ self._notebook = gtk.Notebook()
+ self._notebook.set_show_tabs(False)
+ self._notebook.set_show_border(False)
+ self._notebook.show()
+ paned.pack2(self._notebook)
- self._table = gtk.Table(20, 3)
- self._table.set_col_spacings(10)
- self._table.show()
+ self._changed = False
+ self._settings = None
- sw = gtk.ScrolledWindow()
- sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- sw.add_with_viewport(self._table)
- sw.show()
-
- self.root.pack_start(sw, 1, 1, 1)
-
- self._index = 0
-
- self._top_setting_group = None
-
- job = common.RadioJob(self._build_ui, "get_settings")
+ job = common.RadioJob(self._get_settings_cb, "get_settings")
job.set_desc("Getting radio settings")
self.rthread.submit(job)
def _save_settings(self):
- if self._top_setting_group is None:
+ if self._settings is None:
return
def setting_cb(result):
@@ -71,34 +72,10 @@
self._changed = False
job = common.RadioJob(setting_cb, "set_settings",
- self._top_setting_group)
+ self._settings)
job.set_desc("Setting radio settings")
self.rthread.submit(job)
- def _load_setting(self, value, widget):
- if isinstance(value, settings.RadioSettingValueInteger):
- adj = widget.get_adjustment()
- adj.configure(value.get_value(),
- value.get_min(), value.get_max(),
- value.get_step(), 1, 0)
- elif isinstance(value, settings.RadioSettingValueFloat):
- widget.set_text(value.format())
- elif isinstance(value, settings.RadioSettingValueBoolean):
- widget.set_active(value.get_value())
- elif isinstance(value, settings.RadioSettingValueList):
- model = widget.get_model()
- model.clear()
- for option in value.get_options():
- widget.append_text(option)
- current = value.get_value()
- index = value.get_options().index(current)
- widget.set_active(index)
- elif isinstance(value, settings.RadioSettingValueString):
- widget.set_text(str(value).rstrip())
- else:
- print "Unsupported widget type %s for %s" % (value.__class__,
- element.get_name())
-
def _do_save_setting(self, widget, value):
if isinstance(value, settings.RadioSettingValueInteger):
value.set_value(widget.get_adjustment().get_value())
@@ -124,108 +101,116 @@
except settings.InvalidValueError, e:
common.show_error(_("Invalid setting value: %s") % e)
- def _build_ui_group(self, group):
- def pack(widget, pos):
- self._table.attach(widget, pos, pos+1, self._index, self._index+1,
- xoptions=gtk.FILL, yoptions=0)
+ def _build_ui_tab(self, group):
- def abandon(child):
- self._table.remove(child)
- self._table.foreach(abandon)
+ # The scrolled window
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ sw.show()
- self._index = 0
+ # Notebook tab
+ tab = self._notebook.append_page(sw, gtk.Label(_(group.get_name())))
+
+ # Settings table
+ table = gtk.Table(len(group), 2, False)
+ table.set_resize_mode(gtk.RESIZE_IMMEDIATE)
+ table.show()
+ sw.add_with_viewport(table)
+
+ row = 0
for element in group:
if not isinstance(element, settings.RadioSetting):
continue
- label = gtk.Label(element.get_shortname())
- label.set_alignment(1.0, 0.5)
+
+ # Label
+ label = gtk.Label(element.get_shortname() + ":")
+ label.set_alignment(0.0, 0.5)
label.show()
- pack(label, 0)
+
+ table.attach(label, 0, 1, row, row+1, xoptions=gtk.FILL, yoptions=0, xpadding=6, ypadding=3)
if isinstance(element.value, list) and \
isinstance(element.value[0],
settings.RadioSettingValueInteger):
- arraybox = gtk.HBox(True, 3)
+ box = gtk.HBox(True)
else:
- arraybox = gtk.VBox(True, 3)
- pack(arraybox, 1)
- arraybox.show()
+ box = gtk.VBox(True)
- widgets = []
- for index in element.keys():
- value = element[index]
+ # Widget container
+ box.show()
+ table.attach(box, 1, 2, row, row+1, xoptions=gtk.FILL, yoptions=0, xpadding=12, ypadding=3)
+
+ for i in element.keys():
+ value = element[i]
if isinstance(value, settings.RadioSettingValueInteger):
widget = gtk.SpinButton()
- print "Digits: %i" % widget.get_digits()
- signal = "value-changed"
+ adj = widget.get_adjustment()
+ adj.configure(value.get_value(),
+ value.get_min(), value.get_max(),
+ value.get_step(), 1, 0)
+ widget.connect("value-changed", self._save_setting, value)
elif isinstance(value, settings.RadioSettingValueFloat):
widget = gtk.Entry()
- signal = "focus-out-event"
+ widget.set_width_chars(16)
+ widget.set_text(value.format())
+ widget.connect("focus-out-event", lambda w, e, v:
+ self._save_setting(w, v), value)
elif isinstance(value, settings.RadioSettingValueBoolean):
widget = gtk.CheckButton(_("Enabled"))
- signal = "toggled"
+ widget.set_active(value.get_value())
+ widget.connect("toggled", self._save_setting, value)
elif isinstance(value, settings.RadioSettingValueList):
widget = miscwidgets.make_choice([], editable=False)
- signal = "changed"
+ model = widget.get_model()
+ model.clear()
+ for option in value.get_options():
+ widget.append_text(option)
+ current = value.get_value()
+ index = value.get_options().index(current)
+ widget.set_active(index)
+ widget.connect("changed", self._save_setting, value)
elif isinstance(value, settings.RadioSettingValueString):
widget = gtk.Entry()
- signal = "changed"
+ widget.set_width_chars(32)
+ widget.set_text(str(value).rstrip())
+ widget.connect("changed", self._save_setting, value)
else:
print "Unsupported widget type: %s" % value.__class__
- # Make sure the widget gets left-aligned to match up
- # with its label
- lalign = gtk.Alignment(0, 0, 0, 0)
- lalign.add(widget)
- lalign.show()
+ widget.set_sensitive(value.get_mutable())
+ widget.show()
+
+ box.pack_start(widget, 1, 1, 1)
- widget.set_sensitive(value.get_mutable())
+ row += 1
- arraybox.pack_start(lalign, 1, 1, 1)
- widget.show()
- self._load_setting(value, widget)
- if signal == "focus-out-event":
- widget.connect(signal, lambda w, e, v:
- self._save_setting(w, v), value)
- else:
- widget.connect(signal, self._save_setting, value)
+ return tab
- self._index += 1
-
- def _build_tree(self, group, parent):
+ def _build_ui_group(self, group, parent):
+
+ tab = self._build_ui_tab(group)
+
iter = self._store.append(parent)
- self._store.set(iter, 0, group.get_shortname(), 1, group)
+ self._store.set(iter, 0, group.get_shortname(), 1, tab)
- if self._set_default is None:
- # If we haven't found the first page with actual settings on it
- # yet, then look for one here
- for element in group:
- if isinstance(element, settings.RadioSetting):
- self._set_default = self._store.get_path(iter), group
- break
-
for element in group:
if not isinstance(element, settings.RadioSetting):
- self._build_tree(element, iter)
+ self._build_ui_group(element, iter)
+
+ def _build_ui(self, settings):
+ if not isinstance(settings, list):
+ raise Exception("Invalid Radio Settings")
+ return
+
+ self._settings = settings
+ for group in settings:
+ self._build_ui_group(group, None)
self._view.expand_all()
- def _build_ui_real(self, group):
- if not isinstance(group, settings.RadioSettingGroup):
- print "Toplevel is not a group"
- return
-
- self._set_default = None
- self._top_setting_group = group
- self._build_tree(group, None)
- self._view.set_cursor(self._set_default[0])
- self._build_ui_group(self._set_default[1])
-
- def _build_ui(self, group):
- gobject.idle_add(self._build_ui_real, group)
+ def _get_settings_cb(self, settings):
+ gobject.idle_add(self._build_ui, settings)
def _view_changed_cb(self, selection):
(lst, iter) = selection.get_selected()
- group, = self._store.get(iter, 1)
-
- if group:
- self._build_ui_group(group)
+ tab, = self._store.get(iter, 1)
+ self._notebook.set_current_page(tab)
\ No newline at end of file
diff -r 5a17f1c24b38 -r bc148153a962 tests/run_tests
--- a/tests/run_tests Sun Feb 01 17:51:08 2015 -0500
+++ b/tests/run_tests Fri Feb 06 20:14:09 2015 -0800
@@ -24,7 +24,7 @@
from chirp import CHIRP_VERSION
from chirp import *
-from chirp import chirp_common, directory, generic_csv, import_logic, memmap
+from chirp import chirp_common, directory, generic_csv, import_logic, memmap, settings
from chirp import errors
TESTS = {}
@@ -523,13 +523,15 @@
TESTS["Edges"] = TestCaseEdges
-
class TestCaseSettings(TestCase):
def __str__(self):
return "Settings"
def do_get_settings(self, rf):
- self._wrapper.do("get_settings")
+ lst = self._wrapper.do("get_settings")
+ if not isinstance(lst, list):
+ raise TestFailedError("Invalid Radio Settings")
+ self._wrapper.do("set_settings", lst)
def run(self):
rf = self._wrapper.do("get_features")
@@ -537,7 +539,7 @@
if not rf.has_settings:
raise TestSkippedError("Settings not supported")
- self.do_get_settings(rf)
+ self.do_get_settings(rf)
return []
2
1
# HG changeset patch
# User K. Arvanitis <kosta(a)alumni.uvic.ca>
# Date 1422941391 28800
# Mon Feb 02 21:29:51 2015 -0800
# Node ID e8378ba8777941cff2f0b4717355d476e224b43c
# Parent 5a17f1c24b38875fe8ef83b6a3fe6b61f11c07af
[PATCH] Radio settings flattened view
Due to the nested nature of the settings editor tree view, labels in the
tree generally become obscured because the pane is too small.
This change addresses the issue by a) adding a horizontal paned window
which allows the tree view to be manually resized while b) flattening
the radio featrure radio settings group to return a single list of
all top level radio settings groups.
Bug #2285
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/alinco.py
--- a/chirp/alinco.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/alinco.py Mon Feb 02 21:29:51 2015 -0800
@@ -14,8 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from chirp import chirp_common, bitwise, memmap, errors, directory, util
-from chirp.settings import RadioSettingGroup, RadioSetting
-from chirp.settings import RadioSettingValueBoolean
+from chirp.settings import *
import time
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/anytone.py
--- a/chirp/anytone.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/anytone.py Mon Feb 02 21:29:51 2015 -0800
@@ -23,8 +23,7 @@
from chirp import errors
from chirp import memmap
from chirp import util
-from chirp.settings import RadioSettingGroup, RadioSetting, \
- RadioSettingValueList, RadioSettingValueString, RadioSettingValueBoolean
+from chirp.settings import *
_mem_format = """
#seekto 0x0100;
@@ -475,19 +474,20 @@
def get_settings(self):
_settings = self._memobj.settings
- settings = RadioSettingGroup('all', 'All Settings')
+ basic = RadioSettingGroup("basic", "Basic")
+ settings = RadioSettings(basic)
display = ["Frequency", "Channel", "Name"]
rs = RadioSetting("display", "Display",
RadioSettingValueList(display,
display[_settings.display]))
- settings.append(rs)
+ basic.append(rs)
apo = ["Off"] + ['%.1f hour(s)' % (0.5 * x) for x in range(1, 25)]
rs = RadioSetting("apo", "Automatic Power Off",
RadioSettingValueList(apo,
apo[_settings.apo]))
- settings.append(rs)
+ basic.append(rs)
def filter(s):
s_ = ""
@@ -499,23 +499,26 @@
rs = RadioSetting("welcome", "Welcome Message",
RadioSettingValueString(0, 8,
filter(_settings.welcome)))
- settings.append(rs)
+ basic.append(rs)
rs = RadioSetting("beep", "Beep Enabled",
RadioSettingValueBoolean(_settings.beep))
- settings.append(rs)
+ basic.append(rs)
mute = ["Off", "TX", "RX", "TX/RX"]
rs = RadioSetting("mute", "Sub Band Mute",
RadioSettingValueList(mute,
mute[_settings.mute]))
- settings.append(rs)
+ basic.append(rs)
return settings
def set_settings(self, settings):
_settings = self._memobj.settings
for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
name = element.get_name()
setattr(_settings, name, element.value)
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ap510.py
--- a/chirp/ap510.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ap510.py Mon Feb 02 21:29:51 2015 -0800
@@ -15,10 +15,7 @@
import struct
from chirp import chirp_common, directory, errors, util
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, RadioSettingValue, InvalidValueError
+from chirp.settings import *
def encode_base100(v):
@@ -313,7 +310,7 @@
aprs = RadioSettingGroup("aprs", "APRS", china, smartbeacon)
digipeat = RadioSettingGroup("digipeat", "Digipeat")
system = RadioSettingGroup("system", "System")
- settings = RadioSettingGroup("all", "Settings", aprs, digipeat, system)
+ settings = RadioSettings(aprs, digipeat, system)
# The RadioSetting syntax is really verbose, iterate it.
fields = [
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/baofeng_uv3r.py
--- a/chirp/baofeng_uv3r.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/baofeng_uv3r.py Mon Feb 02 21:29:51 2015 -0800
@@ -19,10 +19,7 @@
import os
from chirp import util, chirp_common, bitwise, errors, directory
from chirp.wouxun_common import do_download, do_upload
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean, RadioSettingValueList, \
- RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+from chirp.settings import *
if os.getenv("CHIRP_DEBUG"):
DEBUG = True
@@ -357,7 +354,7 @@
_settings = self._memobj.settings
_vfo = self._memobj.vfo
basic = RadioSettingGroup("basic", "Basic Settings")
- group = RadioSettingGroup("top", "All Settings", basic)
+ group = RadioSettings(basic)
rs = RadioSetting("squelch", "Squelch Level",
RadioSettingValueInteger(0, 9, _settings.squelch))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/bjuv55.py
--- a/chirp/bjuv55.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/bjuv55.py Mon Feb 02 21:29:51 2015 -0800
@@ -21,10 +21,7 @@
from chirp import chirp_common, errors, util, directory, memmap
from chirp import bitwise
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+from chirp.settings import *
from textwrap import dedent
from chirp import uv5r
@@ -270,7 +267,7 @@
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
advanced = RadioSettingGroup("advanced", "Advanced Settings")
- group = RadioSettingGroup("top", "All Settings", basic, advanced)
+ group = RadioSettings(basic, advanced)
rs = RadioSetting("squelch", "Carrier Squelch Level",
RadioSettingValueInteger(0, 9, _settings.squelch))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/chirp_common.py
--- a/chirp/chirp_common.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/chirp_common.py Mon Feb 02 21:29:51 2015 -0800
@@ -248,7 +248,7 @@
immutable = []
- # A RadioSettingsGroup of additional settings supported by the radio,
+ # A RadioSettingGroup of additional settings supported by the radio,
# or an empty list if none
extra = []
@@ -1027,7 +1027,7 @@
return rf.validate_memory(mem)
def get_settings(self):
- """Returns a RadioSettingGroup containing one or more
+ """Returns a RadioSettings list containing one or more
RadioSettingGroup or RadioSetting objects. These represent general
setting knobs and dials that can be adjusted on the radio. If this
function is implemented, the has_settings RadioFeatures flag should
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft1802.py
--- a/chirp/ft1802.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft1802.py Mon Feb 02 21:29:51 2015 -0800
@@ -24,8 +24,7 @@
# 5. In Chirp, choose Upload to Radio.
from chirp import chirp_common, bitwise, directory, yaesu_clone
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean
+from chirp.settings import *
from textwrap import dedent
MEM_FORMAT = """
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft1d.py
--- a/chirp/ft1d.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft1d.py Mon Feb 02 21:29:51 2015 -0800
@@ -20,9 +20,7 @@
from chirp import chirp_common, yaesu_clone, directory
from chirp import bitwise
-from chirp.settings import RadioSettingGroup, RadioSetting
-from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
-from chirp.settings import RadioSettingValueList, RadioSettingValueBoolean
+from chirp.settings import *
from textwrap import dedent
MEM_FORMAT = """
@@ -1458,16 +1456,15 @@
return menu
def _get_settings(self):
- top = RadioSettingGroup("all", "All Settings",
- self._get_aprs_general_settings(),
- self._get_aprs_rx_settings(),
- self._get_aprs_tx_settings(),
- self._get_aprs_smartbeacon(),
- self._get_aprs_msgs(),
- self._get_aprs_beacons(),
- self._get_dtmf_settings(),
- self._get_misc_settings(),
- self._get_scan_settings())
+ top = RadioSettings(self._get_aprs_general_settings(),
+ self._get_aprs_rx_settings(),
+ self._get_aprs_tx_settings(),
+ self._get_aprs_smartbeacon(),
+ self._get_aprs_msgs(),
+ self._get_aprs_beacons(),
+ self._get_dtmf_settings(),
+ self._get_misc_settings(),
+ self._get_scan_settings())
return top
def get_settings(self):
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft60.py
--- a/chirp/ft60.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft60.py Mon Feb 02 21:29:51 2015 -0800
@@ -16,10 +16,7 @@
import time, os
from chirp import chirp_common, yaesu_clone, memmap, bitwise, directory
from chirp import errors
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat
+from chirp.settings import *
from textwrap import dedent
ACK = "\x06"
@@ -400,8 +397,7 @@
misc = RadioSettingGroup("misc", "Miscellaneous Settings")
mbls = RadioSettingGroup("banks", "Memory Bank Link Scan")
- setmode = RadioSettingGroup("top", "Set Mode",
- repeater, ctcss, arts, scan, power, wires, eai, switch, misc, mbls)
+ setmode = RadioSettings(repeater, ctcss, arts, scan, power, wires, eai, switch, misc, mbls)
# APO
opts = [ "OFF" ] + [ "%0.1f" % (x * 0.5) for x in range(1, 24+1) ]
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft7800.py
--- a/chirp/ft7800.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft7800.py Mon Feb 02 21:29:51 2015 -0800
@@ -17,9 +17,7 @@
from chirp import chirp_common, yaesu_clone, memmap, directory
from chirp import bitwise, errors
from textwrap import dedent
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
import os, re
from collections import defaultdict
@@ -568,8 +566,8 @@
dtmf = RadioSettingGroup("dtmf", "DTMF")
arts = RadioSettingGroup("arts", "ARTS")
prog = RadioSettingGroup("prog", "Programmable Buttons")
- top = RadioSettingGroup("top", "All Settings",
- basic, dtmf, arts, prog)
+
+ top = RadioSettings(basic, dtmf, arts, prog)
basic.append( RadioSetting("priority_revert", "Priority Revert",
RadioSettingValueBoolean(_settings.priority_revert)))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft817.py
--- a/chirp/ft817.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft817.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,9 +18,7 @@
from chirp import chirp_common, yaesu_clone, util, memmap, errors, directory
from chirp import bitwise
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
import time, os
from textwrap import dedent
@@ -763,7 +761,8 @@
extended = RadioSettingGroup("extended", "Extended")
antenna = RadioSettingGroup("antenna", "Antenna selection")
panelcontr = RadioSettingGroup("panelcontr", "Panel controls")
- top = RadioSettingGroup("top", "All Settings", basic, cw, packet,
+
+ top = RadioSettings(basic, cw, packet,
panelcontr, panel, extended, antenna)
rs = RadioSetting("ars_144", "144 ARS",
@@ -1136,7 +1135,7 @@
def get_settings(self):
top = FT817Radio.get_settings(self)
- basic = top["basic"]
+ basic = top[0]
rs = RadioSetting("emergency", "Emergency",
RadioSettingValueBoolean(self._memobj.settings.emergency))
basic.append(rs)
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft857.py
--- a/chirp/ft857.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft857.py Mon Feb 02 21:29:51 2015 -0800
@@ -17,9 +17,7 @@
"""FT857 - FT857/US management module"""
from chirp import ft817, chirp_common, errors, directory
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
import os
from textwrap import dedent
@@ -525,7 +523,8 @@
panel = RadioSettingGroup("panel", "Panel settings")
extended = RadioSettingGroup("extended", "Extended")
panelcontr = RadioSettingGroup("panelcontr", "Panel controls")
- top = RadioSettingGroup("top", "All Settings", basic, cw, packet,
+
+ top = RadioSettings(basic, cw, packet,
panelcontr, panel, extended)
rs = RadioSetting("extended_menu", "Extended menu",
@@ -1073,7 +1072,7 @@
def get_settings(self):
top = FT857Radio.get_settings(self)
- basic = top["basic"]
+ basic = top[0]
rs = RadioSetting("emergency", "Emergency",
RadioSettingValueBoolean(self._memobj.settings.emergency))
basic.append(rs)
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ft90.py
--- a/chirp/ft90.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ft90.py Mon Feb 02 21:29:51 2015 -0800
@@ -15,9 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from chirp import chirp_common, bitwise, memmap, directory, errors, util, yaesu_clone
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
import time, os, traceback, string, re
from textwrap import dedent
@@ -509,7 +507,8 @@
basic = RadioSettingGroup("basic", "Basic")
autodial = RadioSettingGroup("autodial", "AutoDial")
keymaps = RadioSettingGroup("keymaps", "KeyMaps")
- top = RadioSettingGroup("top", "All Settings", basic, keymaps, autodial)
+
+ top = RadioSettings(basic, keymaps, autodial)
rs = RadioSetting("beep", "Beep",
RadioSettingValueBoolean(_settings.beep))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ftm350.py
--- a/chirp/ftm350.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ftm350.py Mon Feb 02 21:29:51 2015 -0800
@@ -19,8 +19,7 @@
from chirp import chirp_common, yaesu_clone, directory, errors, util
from chirp import bitwise, memmap
-from chirp.settings import RadioSettingGroup, RadioSetting
-from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
+from chirp.settings import *
mem_format = """
struct mem {
@@ -380,7 +379,7 @@
return filedata.startswith("AH033$")
def get_settings(self):
- top = RadioSettingGroup("all", "All Settings")
+ top = RadioSettings()
aprs = RadioSettingGroup("aprs", "APRS")
top.append(aprs)
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/h777.py
--- a/chirp/h777.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/h777.py Mon Feb 02 21:29:51 2015 -0800
@@ -21,9 +21,7 @@
from chirp import chirp_common, directory, memmap
from chirp import bitwise, errors, util
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean
+from chirp.settings import *
DEBUG = os.getenv("CHIRP_DEBUG") and True or False
@@ -392,6 +390,7 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
+ top = RadioSettings(basic)
# TODO: Check that all these settings actually do what they
# say they do.
@@ -472,7 +471,7 @@
self._memobj.settings2.timeouttimer]))
basic.append(rs)
- return basic
+ return top
def set_settings(self, settings):
for element in settings:
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/ic2100.py
--- a/chirp/ic2100.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/ic2100.py Mon Feb 02 21:29:51 2015 -0800
@@ -15,10 +15,7 @@
from chirp import chirp_common, icf, util, directory
from chirp import bitwise, memmap
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+from chirp.settings import *
MEM_FORMAT = """
struct {
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/icf.py
--- a/chirp/icf.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/icf.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,8 +18,7 @@
import time
from chirp import chirp_common, errors, util, memmap
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean
+from chirp.settings import *
CMD_CLONE_OUT = 0xE2
CMD_CLONE_IN = 0xE3
@@ -640,17 +639,18 @@
def make_speed_switch_setting(radio):
if not radio.__class__._can_hispeed:
- return []
+ return {}
drvopts = RadioSettingGroup("drvopts", "Driver Options")
+ top = RadioSettings(drvopts)
rs = RadioSetting("drv_clone_speed", "Use Hi-Speed Clone",
RadioSettingValueBoolean(radio._can_hispeed))
drvopts.append(rs)
- return drvopts
+ return top
def honor_speed_switch_setting(radio, settings):
for element in settings:
if element.get_name() == "drvopts":
- return honor_speed_switch_setting(radio, settings)
+ return honor_speed_switch_setting(radio, element)
if element.get_name() == "drv_clone_speed":
radio.__class__._can_hispeed = element.value.get_value()
return
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/icq7.py
--- a/chirp/icq7.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/icq7.py Mon Feb 02 21:29:51 2015 -0800
@@ -17,10 +17,7 @@
from chirp import chirp_common, icf, directory
from chirp import bitwise
from chirp.chirp_common import to_GHz, from_GHz
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean, RadioSettingValueList, \
- RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+from chirp.settings import *
MEM_FORMAT = """
struct {
@@ -198,7 +195,7 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
- group = RadioSettingGroup("top", "All Settings", basic)
+ group = RadioSettings(basic)
rs = RadioSetting("ch", "Channel Indication Mode",
RadioSettingValueBoolean(_settings.ch))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/kenwood_live.py
--- a/chirp/kenwood_live.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/kenwood_live.py Mon Feb 02 21:29:51 2015 -0800
@@ -25,9 +25,7 @@
sys.path.insert(0, "..")
from chirp import chirp_common, errors, directory, util
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueBoolean, \
- RadioSettingValueString, RadioSettingValueList
+from chirp.settings import *
DEBUG = True
@@ -392,7 +390,8 @@
aux, tnc, save, display, dtmf)
sky = RadioSettingGroup("sky", "SkyCommand")
aprs = RadioSettingGroup("aprs", "APRS")
- top = RadioSettingGroup("top", "All Settings", radio, aprs, sky)
+
+ top = RadioSettings(radio, aprs, sky)
bools = [("AMR", aprs, "APRS Message Auto-Reply"),
("AIP", aux, "Advanced Intercept Point"),
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/kguv8d.py
--- a/chirp/kguv8d.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/kguv8d.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,9 +18,7 @@
import time
import os
from chirp import util, chirp_common, bitwise, memmap, errors, directory
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean, RadioSettingValueList, \
- RadioSettingValueInteger, RadioSettingValueString
+from chirp.settings import *
if os.getenv("CHIRP_DEBUG"):
CHIRP_DEBUG = True
@@ -677,7 +675,8 @@
cal_grp = RadioSettingGroup("cal_grp", "Call Group")
lmt_grp = RadioSettingGroup("lmt_grp", "Frequency Limits")
oem_grp = RadioSettingGroup("oem_grp", "OEM Info")
- group = RadioSettingGroup("top", "All Settings", cfg_grp, vfoa_grp,
+
+ group = RadioSettings(cfg_grp, vfoa_grp,
vfob_grp, key_grp, scn_grp, cal_grp, lmt_grp, oem_grp)
#
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/kyd.py
--- a/chirp/kyd.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/kyd.py Mon Feb 02 21:29:51 2015 -0800
@@ -20,9 +20,7 @@
from chirp import chirp_common, directory, memmap
from chirp import bitwise, errors, util
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean
+from chirp.settings import *
DEBUG = os.getenv("CHIRP_DEBUG") and True or False
@@ -436,6 +434,7 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
+ top = RadioSettings(basic)
rs = RadioSetting("tot", "Time-out timer",
RadioSettingValueList(TIMEOUTTIMER_LIST,
@@ -474,7 +473,7 @@
RadioSettingValueBoolean(_settings.save))
basic.append(rs)
- return basic
+ return top
def set_settings(self, settings):
for element in settings:
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/leixen.py
--- a/chirp/leixen.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/leixen.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,10 +18,7 @@
from chirp import chirp_common, directory, memmap, errors, util
from chirp import bitwise
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+from chirp.settings import *
from textwrap import dedent
if os.getenv("CHIRP_DEBUG"):
@@ -531,8 +528,7 @@
cfg_grp = RadioSettingGroup("cfg_grp", "Basic Settings")
adv_grp = RadioSettingGroup("adv_grp", "Advanced Settings")
key_grp = RadioSettingGroup("key_grp", "Key Assignment")
- group = RadioSettingGroup("top", "All Settings", cfg_grp,
- adv_grp, key_grp)
+ group = RadioSettings(cfg_grp, adv_grp, key_grp)
#
# Basic Settings
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/settings.py
--- a/chirp/settings.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/settings.py Mon Feb 02 21:29:51 2015 -0800
@@ -199,6 +199,11 @@
def __str__(self):
return self._current
+
+class RadioSettings(list):
+ def __init__(self, *groups):
+ list.__init__(self, groups)
+
class RadioSettingGroup(object):
"""A group of settings"""
def _validate(self, element):
@@ -244,7 +249,7 @@
def __iter__(self):
class RSGIterator:
- """Iterator for a RadioSettingsGroup"""
+ """Iterator for a RadioSettingGroup"""
def __init__(self, rsg):
self.__rsg = rsg
self.__i = 0
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/th9800.py
--- a/chirp/th9800.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/th9800.py Mon Feb 02 21:29:51 2015 -0800
@@ -17,10 +17,7 @@
from chirp import bitwise, chirp_common, directory, errors, util, memmap
import struct
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+from chirp.settings import *
from chirp_common import format_freq
import os
import time
@@ -400,8 +397,7 @@
_bandlimits = self._memobj.bandlimits
basic = RadioSettingGroup("basic", "Basic")
info = RadioSettingGroup("info", "Model Info")
- top = RadioSettingGroup("top", "All Settings",
- basic, info)
+ top = RadioSettings(basic, info)
basic.append( RadioSetting("beep", "Beep",
RadioSettingValueBoolean(_settings.beep)))
basic.append( RadioSetting("beep_vol", "Beep Volume",
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/th_uvf8d.py
--- a/chirp/th_uvf8d.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/th_uvf8d.py Mon Feb 02 21:29:51 2015 -0800
@@ -25,9 +25,7 @@
import struct
from chirp import chirp_common, bitwise, errors, directory, memmap, util
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
def uvf8d_identify(radio):
@@ -464,7 +462,8 @@
def get_settings(self):
_settings = self._memobj.settings
- group = RadioSettingGroup("top", "All Settings")
+ group = RadioSettingGroup("basic", "Basic")
+ top = RadioSettings(basic)
group.append(
RadioSetting("mode", "Mode",
@@ -595,7 +594,7 @@
RadioSettingValueList(AB_LIST,
AB_LIST[_settings.b_work_area])))
- return group
+ return top
group.append(
RadioSetting("disnm", "Display Name",
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/thuv1f.py
--- a/chirp/thuv1f.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/thuv1f.py Mon Feb 02 21:29:51 2015 -0800
@@ -17,11 +17,7 @@
from chirp import chirp_common, errors, util, directory, memmap
from chirp import bitwise
-
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueList, RadioSettingValueBoolean, \
- RadioSettingValueString
+from chirp.settings import *
def uvf1_identify(radio):
"""Do identify handshake with TYT TH-UVF1"""
@@ -383,7 +379,8 @@
def get_settings(self):
_settings = self._memobj.settings
- group = RadioSettingGroup("top", "All Settings")
+ group = RadioSettingGroup("basic", "Basic");
+ top = RadioSettings(group)
group.append(
RadioSetting("led", "LED Mode",
@@ -463,7 +460,7 @@
RadioSettingValueString(0, 6,
_filter(_settings.ponmsg))))
- return group
+ return top
def set_settings(self, settings):
_settings = self._memobj.settings
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/tk8102.py
--- a/chirp/tk8102.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/tk8102.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,9 +18,7 @@
from chirp import chirp_common, directory, memmap, errors, util
from chirp import bitwise
-from chirp.settings import RadioSettingGroup, RadioSetting
-from chirp.settings import RadioSettingValueBoolean, RadioSettingValueList
-from chirp.settings import RadioSettingValueString
+from chirp.settings import *
MEM_FORMAT = """
#seekto 0x0030;
@@ -355,7 +353,8 @@
def get_settings(self):
_mem = self._memobj
- top = RadioSettingGroup("all", "All Settings")
+ basic = RadioSettingGroup("basic", "Basic")
+ top = RadioSettings(basic)
def _f(val):
string = ""
@@ -369,18 +368,21 @@
RadioSettingValueString(0, 32,
_f(_mem.messages.line1),
autopad=False))
- top.append(line1)
+ basic.append(line1)
line2 = RadioSetting("messages.line2", "Message Line 2",
RadioSettingValueString(0, 32,
_f(_mem.messages.line2),
autopad=False))
- top.append(line2)
+ basic.append(line2)
return top
def set_settings(self, settings):
for element in settings:
+ if not isinstance(element, RadioSetting):
+ self.set_settings(element)
+ continue
if "." in element.get_name():
bits = element.get_name().split(".")
obj = self._memobj
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/uv5r.py
--- a/chirp/uv5r.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/uv5r.py Mon Feb 02 21:29:51 2015 -0800
@@ -19,10 +19,7 @@
from chirp import chirp_common, errors, util, directory, memmap
from chirp import bitwise
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString, \
- RadioSettingValueFloat, InvalidValueError
+from chirp.settings import *
from textwrap import dedent
if os.getenv("CHIRP_DEBUG"):
@@ -986,7 +983,8 @@
_wmchannel = self._memobj.wmchannel
basic = RadioSettingGroup("basic", "Basic Settings")
advanced = RadioSettingGroup("advanced", "Advanced Settings")
- group = RadioSettingGroup("top", "All Settings", basic, advanced)
+
+ group = RadioSettings(basic, advanced)
rs = RadioSetting("squelch", "Carrier Squelch Level",
RadioSettingValueInteger(0, 9, _settings.squelch))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/uvb5.py
--- a/chirp/uvb5.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/uvb5.py Mon Feb 02 21:29:51 2015 -0800
@@ -15,10 +15,7 @@
import struct
from chirp import chirp_common, directory, bitwise, memmap, errors, util
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean, RadioSettingValueList, \
- RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+from chirp.settings import *
from textwrap import dedent
mem_format = """
@@ -480,7 +477,8 @@
def get_settings(self):
_settings = self._memobj.settings
basic = RadioSettingGroup("basic", "Basic Settings")
- group = RadioSettingGroup("top", "All Settings", basic)
+
+ group = RadioSettings(basic)
options = ["Time", "Carrier", "Search"]
rs = RadioSetting("scantype", "Scan Type",
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/vx2.py
--- a/chirp/vx2.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/vx2.py Mon Feb 02 21:29:51 2015 -0800
@@ -15,9 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from chirp import chirp_common, yaesu_clone, directory, bitwise
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
import os, traceback, re
if os.getenv("CHIRP_DEBUG"):
@@ -437,7 +435,7 @@
basic = RadioSettingGroup("basic", "Basic")
dtmf = RadioSettingGroup("dtmf", "DTMF")
arts = RadioSettingGroup("arts", "ARTS")
- top = RadioSettingGroup("top", "All Settings", basic, arts, dtmf)
+ top = RadioSettings(basic, arts, dtmf)
options = [ "off", "30m", "1h", "3h", "5h", "8h" ]
rs = RadioSetting("apo", "APO time (hrs)",
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/vx3.py
--- a/chirp/vx3.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/vx3.py Mon Feb 02 21:29:51 2015 -0800
@@ -16,9 +16,7 @@
from chirp import chirp_common, yaesu_clone, directory
from chirp import bitwise
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueInteger, RadioSettingValueList, \
- RadioSettingValueBoolean, RadioSettingValueString
+from chirp.settings import *
from textwrap import dedent
import os, re
@@ -529,8 +527,8 @@
arts = RadioSettingGroup("arts", "ARTS")
eai = RadioSettingGroup("eai", "Emergency")
msg = RadioSettingGroup("msg", "Messages")
- top = RadioSettingGroup("top", "All Settings",
- basic, sound, arts, dtmf, eai, msg)
+
+ top = RadioSettings(basic, sound, arts, dtmf, eai, msg)
basic.append( RadioSetting("att_wx", "Attenuation WX",
RadioSettingValueBoolean(_settings.att_wx)))
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/vx8.py
--- a/chirp/vx8.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/vx8.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,9 +18,7 @@
from chirp import chirp_common, yaesu_clone, directory
from chirp import bitwise
-from chirp.settings import RadioSettingGroup, RadioSetting
-from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
-from chirp.settings import RadioSettingValueList, RadioSettingValueBoolean
+from chirp.settings import *
from textwrap import dedent
MEM_FORMAT = """
@@ -1372,14 +1370,13 @@
return menu
def _get_settings(self):
- top = RadioSettingGroup("all", "All Settings",
- self._get_aprs_general_settings(),
- self._get_aprs_rx_settings(),
- self._get_aprs_tx_settings(),
- self._get_aprs_smartbeacon(),
- self._get_dtmf_settings(),
- self._get_misc_settings(),
- self._get_scan_settings())
+ top = RadioSettings(self._get_aprs_general_settings(),
+ self._get_aprs_rx_settings(),
+ self._get_aprs_tx_settings(),
+ self._get_aprs_smartbeacon(),
+ self._get_dtmf_settings(),
+ self._get_misc_settings(),
+ self._get_scan_settings())
return top
def get_settings(self):
diff -r 5a17f1c24b38 -r e8378ba87779 chirp/wouxun.py
--- a/chirp/wouxun.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirp/wouxun.py Mon Feb 02 21:29:51 2015 -0800
@@ -18,10 +18,7 @@
import time
import os
from chirp import util, chirp_common, bitwise, memmap, errors, directory
-from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean, RadioSettingValueList, \
- RadioSettingValueInteger, RadioSettingValueString, \
- RadioSettingValueFloat
+from chirp.settings import *
from chirp.wouxun_common import wipe_memory, do_download, do_upload
from textwrap import dedent
@@ -334,7 +331,7 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- top = RadioSettingGroup("top", "All Settings", freqranges, fm_preset)
+ top = RadioSettings(freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
@@ -1045,7 +1042,7 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges")
fm_preset = RadioSettingGroup("fm_preset", "FM Presets")
- top = RadioSettingGroup("top", "All Settings", freqranges, fm_preset)
+ top = RadioSettings(freqranges, fm_preset)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(
@@ -1425,7 +1422,7 @@
def get_settings(self):
freqranges = RadioSettingGroup("freqranges", "Freq ranges (read only)")
- top = RadioSettingGroup("top", "All Settings", freqranges)
+ group = RadioSettings(freqranges)
rs = RadioSetting("vhf_rx_start", "vhf rx start",
RadioSettingValueInteger(66, 520,
@@ -1473,7 +1470,7 @@
( decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
(decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000)]
- return top
+ return group
@classmethod
def match_model(cls, filedata, filename):
diff -r 5a17f1c24b38 -r e8378ba87779 chirpui/settingsedit.py
--- a/chirpui/settingsedit.py Sun Feb 01 17:51:08 2015 -0500
+++ b/chirpui/settingsedit.py Mon Feb 02 21:29:51 2015 -0800
@@ -16,10 +16,11 @@
import gtk
import gobject
-from chirp import chirp_common, settings
+from chirp import chirp_common
+from chirp.settings import *
from chirpui import common, miscwidgets
-class RadioSettingProxy(settings.RadioSetting):
+class RadioSettingProxy(RadioSetting):
def __init__(self, setting, editor):
self._setting = setting
self._editor = editor
@@ -27,40 +28,40 @@
class SettingsEditor(common.Editor):
def __init__(self, rthread):
super(SettingsEditor, self).__init__(rthread)
- self._changed = False
+
+ # The main box
self.root = gtk.HBox(False, 0)
- self._store = gtk.TreeStore(gobject.TYPE_STRING,
- gobject.TYPE_PYOBJECT)
+
+ # The pane
+ paned = gtk.HPaned()
+ paned.show()
+ self.root.pack_start(paned, 1, 1, 0)
+
+ # The selection tree
+ self._store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT)
self._view = gtk.TreeView(self._store)
self._view.set_size_request(150, -1)
self._view.get_selection().connect("changed", self._view_changed_cb)
+ self._view.append_column(gtk.TreeViewColumn("", gtk.CellRendererText(), text=0))
self._view.show()
- self.root.pack_start(self._view, 0, 0, 0)
+ paned.pack1(self._view)
- col = gtk.TreeViewColumn("", gtk.CellRendererText(), text=0)
- self._view.append_column(col)
+ # The settings notebook
+ self._notebook = gtk.Notebook()
+ self._notebook.set_show_tabs(False)
+ self._notebook.set_show_border(False)
+ self._notebook.show()
+ paned.pack2(self._notebook)
- self._table = gtk.Table(20, 3)
- self._table.set_col_spacings(10)
- self._table.show()
+ self._changed = False
+ self._settings = None
- sw = gtk.ScrolledWindow()
- sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- sw.add_with_viewport(self._table)
- sw.show()
-
- self.root.pack_start(sw, 1, 1, 1)
-
- self._index = 0
-
- self._top_setting_group = None
-
- job = common.RadioJob(self._build_ui, "get_settings")
+ job = common.RadioJob(self._get_settings_cb, "get_settings")
job.set_desc("Getting radio settings")
self.rthread.submit(job)
def _save_settings(self):
- if self._top_setting_group is None:
+ if self._settings is None:
return
def setting_cb(result):
@@ -71,21 +72,21 @@
self._changed = False
job = common.RadioJob(setting_cb, "set_settings",
- self._top_setting_group)
+ self._settings)
job.set_desc("Setting radio settings")
self.rthread.submit(job)
def _load_setting(self, value, widget):
- if isinstance(value, settings.RadioSettingValueInteger):
+ if isinstance(value, RadioSettingValueInteger):
adj = widget.get_adjustment()
adj.configure(value.get_value(),
value.get_min(), value.get_max(),
value.get_step(), 1, 0)
- elif isinstance(value, settings.RadioSettingValueFloat):
+ elif isinstance(value, RadioSettingValueFloat):
widget.set_text(value.format())
- elif isinstance(value, settings.RadioSettingValueBoolean):
+ elif isinstance(value, RadioSettingValueBoolean):
widget.set_active(value.get_value())
- elif isinstance(value, settings.RadioSettingValueList):
+ elif isinstance(value, RadioSettingValueList):
model = widget.get_model()
model.clear()
for option in value.get_options():
@@ -93,22 +94,22 @@
current = value.get_value()
index = value.get_options().index(current)
widget.set_active(index)
- elif isinstance(value, settings.RadioSettingValueString):
+ elif isinstance(value, RadioSettingValueString):
widget.set_text(str(value).rstrip())
else:
print "Unsupported widget type %s for %s" % (value.__class__,
element.get_name())
def _do_save_setting(self, widget, value):
- if isinstance(value, settings.RadioSettingValueInteger):
+ if isinstance(value, RadioSettingValueInteger):
value.set_value(widget.get_adjustment().get_value())
- elif isinstance(value, settings.RadioSettingValueFloat):
+ elif isinstance(value, RadioSettingValueFloat):
value.set_value(widget.get_text())
- elif isinstance(value, settings.RadioSettingValueBoolean):
+ elif isinstance(value, RadioSettingValueBoolean):
value.set_value(widget.get_active())
- elif isinstance(value, settings.RadioSettingValueList):
+ elif isinstance(value, RadioSettingValueList):
value.set_value(widget.get_active_text())
- elif isinstance(value, settings.RadioSettingValueString):
+ elif isinstance(value, RadioSettingValueString):
value.set_value(widget.get_text())
else:
print "Unsupported widget type %s for %s" % (\
@@ -121,53 +122,62 @@
def _save_setting(self, widget, value):
try:
self._do_save_setting(widget, value)
- except settings.InvalidValueError, e:
+ except InvalidValueError, e:
common.show_error(_("Invalid setting value: %s") % e)
- def _build_ui_group(self, group):
+ def _build_ui_tab(self, group):
+
+ # The scrolled window
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ sw.show()
+
+ # Notebook tab
+ tab = self._notebook.append_page(sw, gtk.Label(_(group.get_name())))
+
+ # Settings table
+ table = gtk.Table(len(group), 2, True)
+ table.show()
+ sw.add_with_viewport(table)
+
+ row = 0
def pack(widget, pos):
- self._table.attach(widget, pos, pos+1, self._index, self._index+1,
- xoptions=gtk.FILL, yoptions=0)
+ table.attach(widget, pos, pos+1, row, row+1,
+ xoptions=gtk.FILL, yoptions=0, xpadding=6, ypadding=0)
- def abandon(child):
- self._table.remove(child)
- self._table.foreach(abandon)
-
- self._index = 0
for element in group:
- if not isinstance(element, settings.RadioSetting):
+ if not isinstance(element, RadioSetting):
continue
label = gtk.Label(element.get_shortname())
- label.set_alignment(1.0, 0.5)
+ label.set_alignment(-1.0, 0.5)
label.show()
pack(label, 0)
if isinstance(element.value, list) and \
isinstance(element.value[0],
- settings.RadioSettingValueInteger):
- arraybox = gtk.HBox(True, 3)
+ RadioSettingValueInteger):
+ arraybox = gtk.HBox(True)
else:
- arraybox = gtk.VBox(True, 3)
+ arraybox = gtk.VBox(True)
pack(arraybox, 1)
arraybox.show()
widgets = []
for index in element.keys():
value = element[index]
- if isinstance(value, settings.RadioSettingValueInteger):
+ if isinstance(value, RadioSettingValueInteger):
widget = gtk.SpinButton()
- print "Digits: %i" % widget.get_digits()
signal = "value-changed"
- elif isinstance(value, settings.RadioSettingValueFloat):
+ elif isinstance(value, RadioSettingValueFloat):
widget = gtk.Entry()
signal = "focus-out-event"
- elif isinstance(value, settings.RadioSettingValueBoolean):
+ elif isinstance(value, RadioSettingValueBoolean):
widget = gtk.CheckButton(_("Enabled"))
signal = "toggled"
- elif isinstance(value, settings.RadioSettingValueList):
+ elif isinstance(value, RadioSettingValueList):
widget = miscwidgets.make_choice([], editable=False)
signal = "changed"
- elif isinstance(value, settings.RadioSettingValueString):
+ elif isinstance(value, RadioSettingValueString):
widget = gtk.Entry()
signal = "changed"
else:
@@ -190,42 +200,35 @@
else:
widget.connect(signal, self._save_setting, value)
- self._index += 1
+ row += 1
- def _build_tree(self, group, parent):
+ return tab
+
+ def _build_ui_group(self, group, parent):
+
+ tab = self._build_ui_tab(group)
+
iter = self._store.append(parent)
- self._store.set(iter, 0, group.get_shortname(), 1, group)
+ self._store.set(iter, 0, group.get_shortname(), 1, tab)
- if self._set_default is None:
- # If we haven't found the first page with actual settings on it
- # yet, then look for one here
- for element in group:
- if isinstance(element, settings.RadioSetting):
- self._set_default = self._store.get_path(iter), group
- break
+ for element in group:
+ if not isinstance(element, RadioSetting):
+ self._build_ui_group(element, iter)
- for element in group:
- if not isinstance(element, settings.RadioSetting):
- self._build_tree(element, iter)
+ def _build_ui(self, settings):
+ if not isinstance(settings, list):
+ raise Exception("Invalid Radio Settings")
+ return
+
+ self._settings = settings
+ for group in settings:
+ self._build_ui_group(group, None)
self._view.expand_all()
- def _build_ui_real(self, group):
- if not isinstance(group, settings.RadioSettingGroup):
- print "Toplevel is not a group"
- return
-
- self._set_default = None
- self._top_setting_group = group
- self._build_tree(group, None)
- self._view.set_cursor(self._set_default[0])
- self._build_ui_group(self._set_default[1])
-
- def _build_ui(self, group):
- gobject.idle_add(self._build_ui_real, group)
+ def _get_settings_cb(self, settings):
+ gobject.idle_add(self._build_ui, settings)
def _view_changed_cb(self, selection):
(lst, iter) = selection.get_selected()
- group, = self._store.get(iter, 1)
-
- if group:
- self._build_ui_group(group)
+ tab, = self._store.get(iter, 1)
+ self._notebook.set_current_page(tab)
\ No newline at end of file
diff -r 5a17f1c24b38 -r e8378ba87779 tests/run_tests
--- a/tests/run_tests Sun Feb 01 17:51:08 2015 -0500
+++ b/tests/run_tests Mon Feb 02 21:29:51 2015 -0800
@@ -24,7 +24,7 @@
from chirp import CHIRP_VERSION
from chirp import *
-from chirp import chirp_common, directory, generic_csv, import_logic, memmap
+from chirp import chirp_common, directory, generic_csv, import_logic, memmap, settings
from chirp import errors
TESTS = {}
@@ -523,13 +523,15 @@
TESTS["Edges"] = TestCaseEdges
-
class TestCaseSettings(TestCase):
def __str__(self):
return "Settings"
def do_get_settings(self, rf):
- self._wrapper.do("get_settings")
+ lst = self._wrapper.do("get_settings")
+ if not isinstance(lst, list):
+ raise TestFailedError("Invalid Radio Settings")
+ self._wrapper.do("set_settings", lst)
def run(self):
rf = self._wrapper.do("get_features")
@@ -537,7 +539,7 @@
if not rf.has_settings:
raise TestSkippedError("Settings not supported")
- self.do_get_settings(rf)
+ self.do_get_settings(rf)
return []
3
7
I'm working on an IC-F520 driver and am mostly happy with my MEM_FORMAT. CHIRP even reads an ICF file and displays memories.
Now to organize those memories into banks. I just don't get how classes MemoryMapping, MappingModel, Bank, and BankModel work together. No big surprise; this is the first time I've used Python.
The IC-F520 has a pretty simple bank model. Memories (256 of them) are stored as an array. Another array of 16 numbers tells how many memories are in each of the 16 banks.
Links to previous postings and web pages will be appreciated.
--
-- wireless <Joseph.P.Scanlan(a)n7xsd.us> +1-702-896-0507
-- work <Joseph.P.Scanlan(a)ClarkCountyNV.gov> +1-702-455-3679
--
These mechanics
and mathematics
they give me comfort
when I'm afraid.
--Venus Hum
2
1