From 7eec52b0b8d99f8fb943c808d54ad2c7783e974b Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Tue, 27 Aug 2024 14:46:54 -0700 Subject: [PATCH] Remove python3 test progress tracking The share of python3-uncompliant drivers has dropped to such a small fraction that I've forgotten to enforce that new drivers be added to the matrix. So, at this point, it's time to flip the whitelist to a blacklist and just mark the drivers that haven't been tested. This removes the matrix and generation script, content from the makesupported target, and instructions from the PR template. It replaces those with a simple list of drivers in tests/py3-untested-drivers.txt --- .github/pull_request_template.md | 2 +- README.md | 6 +- tests/Python3_Driver_Testing.md | 533 ------------------------------- tests/py3-untested-drivers.txt | 54 ++++ tools/py3_driver_progress.py | 222 ------------- tox.ini | 2 - 6 files changed, 57 insertions(+), 762 deletions(-) delete mode 100644 tests/Python3_Driver_Testing.md create mode 100644 tests/py3-untested-drivers.txt delete mode 100755 tools/py3_driver_progress.py diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 58e8cd2f..eb90bb63 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -7,6 +7,6 @@ The following must be true before PRs can be merged: 1. Commits in a single PR should be related. Squash intermediate commits into logical units (i.e. "fix tests" commits need not survive on their own). Keep cleanup commits separate from functional changes. 1. Major new features or bug fixes should reference a [CHIRP issue](https://chirpmyradio.com/projects/chirp/issues) _in the commit message_. Do this with the pattern `Fixes #1234` or `Related to #1234` so that the ticket system links the commit to the issue. 1. Please write a reasonable commit message, especially if making some change that isn't totally obvious (such as adding a new model, adding a feature, etc). The first line of every commit is emailed to the users' list after each build. It should be short, but meaningful for regular users (examples: "thd74: Fixed tone decoding" or "uv5r: Added settings support"). -1. New drivers should be accompanied by a test image in `tests/images` (except for thin aliases where the driver is sufficiently tested already). All new drivers must use `MemoryMapBytes`. New drivers and radio models will affect the Python3 test matrix. You should regenerate this file with `tox -emakesupported` and include it in your commit. +1. New drivers should be accompanied by a test image in `tests/images` (except for thin aliases where the driver is sufficiently tested already). All new drivers must use `MemoryMapBytes`. 1. All files must be GPLv3 licensed or contain no license verbiage. No additional restrictions can be placed on the usage (i.e. such as noncommercial). 1. Do not add new py2-compatibility code (No new uses of `six`, `future`, etc). diff --git a/README.md b/README.md index fe0a93ad..8cf76670 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,5 @@ This is the official git repository for the __[CHIRP](https://www.chirpmyradio.com)__ project. -When submitting PRs, please squash commits into logical units in a fashion -similar to what is currently expected by the project on the mailing list. - -For Python3 driver testing status, see [this file](tests/Python3_Driver_Testing.md). +When submitting PRs, please see [this file](.github/pull_request_template.md) +for rules and guidelines. diff --git a/tests/Python3_Driver_Testing.md b/tests/Python3_Driver_Testing.md deleted file mode 100644 index cbff80d7..00000000 --- a/tests/Python3_Driver_Testing.md +++ /dev/null @@ -1,533 +0,0 @@ -## Status -| Driver | Tester | Tested | Byte Clean | "Market Share" | -| ------ | ------ | ------ | ---------- | -------------- | -| ARRL_Travel_Plus | | | | 0.00% | -| Abbree_AR-518 | [@KC9HI](https://github.com/KC9HI) | 16-Dec-2022 | Yes | 0.24% | -| Abbree_AR-63 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.03% | -| Abbree_AR-730 | [@KC9HI](https://github.com/KC9HI) | 17-Aug-2023 | Yes | | -| Abbree_AR-869 | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | 0.01% | -| Abbree_AR-F5 | [@KC9HI](https://github.com/KC9HI) | 09-Aug-2023 | Yes | | -| Alinco_DJ-G7EG | [@HB9UF](https://github.com/HB9UF) | 09-Dec-2022 | Yes | 0.44% | -| Alinco_DJ-G7T | [Reported working](https://chirp.danplanet.com/issues/10567) | 09-May-2023 | Yes | | -| Alinco_DJ175 | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.03% | -| Alinco_DJ596 | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.02% | -| Alinco_DR03T | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.01% | -| Alinco_DR06T | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.01% | -| Alinco_DR135T | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.04% | -| Alinco_DR235T | [@kk7ds](https://github.com/kk7ds) | 12-Dec-2022 | Yes | 0.02% | -| Alinco_DR435T | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.02% | -| Alinco_DR735T | [@jacobcalvert](https://github.com/jacobcalvert) | 03-April-2024 | Yes | | -| AnyTone_5888UV | [@kk7ds](https://github.com/kk7ds) | 9-Dec-2022 | Yes | 0.14% | -| AnyTone_5888UVIII | [@bschuler42](https://github.com/bschuler42) | 9-Jan-2023 | Yes | 0.04% | -| AnyTone_778UV | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.17% | -| AnyTone_778UV_VOX | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.23% | -| AnyTone_OBLTR-8R | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.02% | -| AnyTone_TERMN-8R | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.02% | -| Anysecu_AC-580 | [Implied by Radioddity_GS-5B](#user-content-Radioddity_GS-5B) | 17-Mar-2023 | Yes | | -| Anysecu_UV-A37 | [@KC9HI](https://github.com/KC9HI) | 5-Jun-2023 | Yes | | -| Anysecu_WP-9900 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.03% | -| BTECH_FRS-A1 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.01% | -| BTECH_FRS-B1 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.04% | -| BTECH_GMRS-20V2 | [@KC9HI](https://github.com/KC9HI) | 13-Nov-2022 | Yes | 0.03% | -| BTECH_GMRS-50V2 | [@KC9HI](https://github.com/KC9HI) | 15-Feb-2023 | Yes | 0.00% | -| BTECH_GMRS-50X1 | [@KC9HI](https://github.com/KC9HI) | 13-Nov-2022 | Yes | 0.13% | -| BTECH_GMRS-V1 | [@KC9HI](https://github.com/KC9HI) | 10-Dec-2022 | Yes | 0.16% | -| BTECH_GMRS-V2 | [@KC9HI](https://github.com/KC9HI) | 10-Dec-2022 | Yes | 0.16% | -| BTECH_MURS-V1 | [@KC9HI](https://github.com/KC9HI) | 10-Dec-2022 | Yes | 0.04% | -| BTECH_MURS-V2 | [@KC9HI](https://github.com/KC9HI) | 2-Mar-2023 | Yes | 0.00% | -| BTECH_UV-2501 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.02% | -| BTECH_UV-2501+220 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.02% | -| BTECH_UV-25X2 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.15% | -| BTECH_UV-25X2_G2 | [@KC9HI](https://github.com/KC9HI) | 23-Apr-2023 | Yes | | -| BTECH_UV-25X4 | [@KC9HI](https://github.com/KC9HI) | 10-Nov-2022 | Yes | 0.11% | -| BTECH_UV-25X4_G2 | [@KC9HI](https://github.com/KC9HI) | 23-Apr-2023 | Yes | | -| BTECH_UV-5001 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.03% | -| BTECH_UV-50X2 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.13% | -| BTECH_UV-50X2_G2 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.00% | -| BTECH_UV-50X3 | [@KC9HI](https://github.com/KC9HI) | 10-Dec-2022 | Yes | 0.06% | -| BTECH_UV-5X3 | [@KC9HI](https://github.com/KC9HI) | 9-Dec-2022 | Yes | 0.43% | -| Baofeng_5RM | [@vdwel](https://github.com/vdwel) | 7-Dec-2023 | Yes | | -| Baofeng_5RX | [@KC9HI](https://github.com/KC9HI) | 16-Jan-2024 | Yes | | -| Baofeng_BF-1901 | [@cetinajero](https://github.com/cetinajero) | 3-Jul-2023 | Yes | | -| Baofeng_BF-1904 | [@cetinajero](https://github.com/cetinajero) | 3-Jul-2023 | Yes | | -| Baofeng_BF-1909 | [@KC9HI](https://github.com/KC9HI) | 10-May-2024 | Yes | | -| Baofeng_BF-888 | [@kk7ds](https://github.com/kk7ds) | 13-Feb-2019 | Yes | **15.53%** | -| Baofeng_BF-A58 | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | **1.46%** | -| Baofeng_BF-A58S | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | 0.59% | -| Baofeng_BF-F8HP | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | **6.33%** | -| Baofeng_BF-M4 | [@cetinajero](https://github.com/cetinajero) | 8-May-2023 | Yes | | -| Baofeng_BF-T1 | [@KC9HI](https://github.com/KC9HI) | 10-Dec-2022 | Yes | 0.76% | -| Baofeng_BF-T20 | [@KC9HI](https://github.com/KC9HI) | 15-Dec-2023 | Yes | | -| Baofeng_BF-T20FRS | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2023 | Yes | | -| Baofeng_BF-T8 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.42% | -| Baofeng_BF-V8A | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.03% | -| Baofeng_F-11 | [Implied by Baofeng_UV-5R](#user-content-Baofeng_UV-5R) | 18-Nov-2022 | Yes | 0.12% | -| Baofeng_GM-5RH | [@KC9HI](https://github.com/KC9HI) | 21-Mar-2024 | Yes | | -| Baofeng_GT-3WP | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | 0.43% | -| Baofeng_GT-5R | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | 0.68% | -| Baofeng_K5-Plus | | | Yes | | -| Baofeng_UV-13Pro | [@vdwel](https://github.com/vdwel) | 21-Feb-2024 | Yes | | -| Baofeng_UV-17 | [@vdwel](https://github.com/vdwel) | 27-Nov-2023 | Yes | | -| Baofeng_UV-17Pro | [@vdwel](https://github.com/vdwel) | 27-Nov-2023 | Yes | | -| Baofeng_UV-17ProGPS | [@vdwel](https://github.com/vdwel) | 27-Nov-2023 | Yes | | -| Baofeng_UV-25 | [Implied by Baofeng_UV-17Pro](#user-content-Baofeng_UV-17Pro) | 2-Jun-2024 | Yes | | -| Baofeng_UV-3R | [@yarda](https://github.com/yarda) | 26-Sep-2022 | Yes | 0.45% | -| Baofeng_UV-5R | [@lekv](https://github.com/lekv) | 23-Oct-2022 | Yes | **28.81%** | -| Baofeng_UV-6 | [Implied by Baofeng_UV-5R](#user-content-Baofeng_UV-5R) | 18-Nov-2022 | Yes | 0.46% | -| Baofeng_UV-6R | [@KC9HI](https://github.com/KC9HI) | 10-Dec-2022 | Yes | 0.71% | -| Baofeng_UV-82 | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | **8.78%** | -| Baofeng_UV-82HP | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | **2.38%** | -| Baofeng_UV-82WP | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | 0.32% | -| Baofeng_UV-9G | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | 0.65% | -| Baofeng_UV-9R | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | **2.52%** | -| Baofeng_UV-B5 | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | 0.35% | -| Baofeng_UV-S9X3 | [@KC9HI](https://github.com/KC9HI) | 22-Aug-2023 | Yes | | -| Baofeng_W31E | [@KC9HI](https://github.com/KC9HI) | 14-Aug-2023 | Yes | | -| Baojie_BJ-218 | [Implied by LUITON_LT-725UV](#user-content-LUITON_LT-725UV) | 16-Feb-2023 | Yes | 0.29% | -| Baojie_BJ-318 | [@KC9HI](https://github.com/KC9HI) | 2-Jan-2023 | Yes | 0.10% | -| Baojie_BJ-9900 | | | Yes | 0.02% | -| Baojie_BJ-UV55 | | | Yes | 0.03% | -| Boblov_X3Plus | | | | 0.02% | -| Boristone_8RS | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | 0.00% | -| CRT_Micron_UV | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.08% | -| CRT_Micron_UV_V2 | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.10% | -| Cignus_XTR-5 | [Implied by Radioddity_GS-5B](#user-content-Radioddity_GS-5B) | 17-Mar-2023 | Yes | | -| Commander_KG-UV | | | | 0.00% | -| Explorer_QRZ-1 | [Implied by TYT_TH-UV88](#user-content-TYT_TH-UV88) | 5-Dec-2022 | Yes | 0.04% | -| Feidaxin_FD-150A | | | | 0.02% | -| Feidaxin_FD-160A | | | | 0.01% | -| Feidaxin_FD-268A | | | | 0.01% | -| Feidaxin_FD-268B | | | | 0.01% | -| Feidaxin_FD-288A | | | | 0.01% | -| Feidaxin_FD-288B | | | | 0.01% | -| Feidaxin_FD-450A | | | | 0.01% | -| Feidaxin_FD-460A | | | | 0.01% | -| Feidaxin_FD-460UH | | | | 0.01% | -| Generic_CSV | [@kk7ds](https://github.com/kk7ds) | 4-Dec-2022 | | | -| HamGeek_HG-590 | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | 0.00% | -| Hiroyasu_HI-8811 | [@KC9HI](https://github.com/KC9HI) | 4-Jun-2023 | Yes | | -| HobbyPCB_RS-UV3 | [@kk7ds](https://github.com/kk7ds) | 9-Dec-2022 | Yes | 0.02% | -| Icom_IC-208H | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.05% | -| Icom_IC-2100H | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.04% | -| Icom_IC-2200H | [@kk7ds](https://github.com/kk7ds) | 24-Oct-2022 | Yes | 0.05% | -| Icom_IC-2300H | [Reported working](https://chirp.danplanet.com/issues/10264) | 13-Jan-2022 | Yes | 0.08% | -| Icom_IC-2720H | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.02% | -| Icom_IC-2730A | [Reported working](https://chirp.danplanet.com/issues/10261) | 17-Dec-2022 | Yes | 0.21% | -| Icom_IC-2820H | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | 0.04% | -| Icom_IC-7000 | [Reported working](https://chirp.danplanet.com/issues/10510) | 10-Apr-2023 | Yes | 0.03% | -| Icom_IC-7100 | Mike W | 16-Feb-2023 | Yes | 0.06% | -| Icom_IC-7200 | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | | -| Icom_IC-7300 | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | 0.03% | -| Icom_IC-7400 | | | Yes | | -| Icom_IC-746 | [Reported working](https://chirp.danplanet.com/issues/10346) | 3-Feb-2023 | Yes | | -| Icom_IC-7610 | [@kk7ds](https://github.com/kk7ds) | 24-Oct-2022 | Yes | 0.00% | -| Icom_IC-910 | [@mfncooper](https://github.com/mfncooper) | 1-Oct-2021 | Yes | 0.00% | -| Icom_IC-91_92AD | [@kk7ds](https://github.com/kk7ds) | 23-Nov-2022 | Yes | 0.03% | -| Icom_IC-9700 | | | Yes | | -| Icom_IC-E90 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.04% | -| Icom_IC-P7 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.01% | -| Icom_IC-Q7A | [@KC9HI](https://github.com/KC9HI) | 20-Nov-2022 | Yes | 0.01% | -| Icom_IC-T70 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.03% | -| Icom_IC-T7H | [Reported working](https://chirp.danplanet.com/issues/10752) | 30-Jul-2023 | Yes | 0.02% | -| Icom_IC-T8A | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.01% | -| Icom_IC-U82 | [Implied by Icom_IC-V82](#user-content-Icom_IC-V82) | 25-Jan-2023 | Yes | | -| Icom_IC-V80 | [@kk7ds](https://github.com/kk7ds) | 16-Feb-2023 | Yes | 0.00% | -| Icom_IC-V82 | [@kk7ds](https://github.com/kk7ds) | 25-Jan-2023 | Yes | | -| Icom_IC-V86 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.04% | -| Icom_IC-W32A | [Reported working](https://chirp.danplanet.com/issues/10238) | 12-Dec-2022 | Yes | 0.02% | -| Icom_IC-W32E | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 12-Dec-2022 | Yes | 0.01% | -| Icom_ID-31A | [@kk7ds](https://github.com/kk7ds) | 1-Dec-2022 | Yes | 0.01% | -| Icom_ID-4100 | [@n8sqt](https://github.com/n8sqt) | 18-Dec-2022 | Yes | 0.00% | -| Icom_ID-51 | [Implied by Icom_ID-31A](#user-content-Icom_ID-31A) | 1-Dec-2022 | Yes | 0.02% | -| Icom_ID-5100 | [@kk7ds](https://github.com/kk7ds) | 17-Dec-2022 | Yes | 0.00% | -| Icom_ID-51_Plus | [Implied by Icom_ID-31A](#user-content-Icom_ID-31A) | 1-Dec-2022 | Yes | 0.02% | -| Icom_ID-51_Plus2 | [Implied by Icom_ID-31A](#user-content-Icom_ID-31A) | 17-Dec-2022 | Yes | 0.00% | -| Icom_ID-800H_v2 | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | 0.01% | -| Icom_ID-80H | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/icf.py) | 22-Oct-2022 | Yes | 0.01% | -| Icom_ID-880H | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | 0.02% | -| Intek_HR-2040 | [Implied by AnyTone_5888UV](#user-content-AnyTone_5888UV) | 9-Dec-2022 | Yes | 0.02% | -| Intek_KT-980HP | [Implied by Baofeng_BF-F8HP](#user-content-Baofeng_BF-F8HP) | 18-Nov-2022 | Yes | 0.04% | -| JJCC_JC-8629 | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | | -| Jetstream_JT220M | [Implied by Alinco_DR235T](#user-content-Alinco_DR235T) | 12-Dec-2022 | Yes | 0.01% | -| Jetstream_JT270M | [Implied by Jetstream_JT270M](#user-content-Jetstream_JT270M) | 13-Dec-2022 | Yes | 0.01% | -| Jetstream_JT270MH | [@kk7ds](https://github.com/kk7ds) | 13-Dec-2022 | Yes | 0.01% | -| Jianpai_8800_Plus | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | 0.01% | -| KSUN_M6 | | | Yes | | -| KYD_IP-620 | | | | 0.02% | -| KYD_NC-630A | | | | 0.02% | -| Kenwood_HMK | [Implied by Generic_CSV](#user-content-Generic_CSV) | 4-Dec-2022 | | 0.00% | -| Kenwood_ITM | | | | 0.00% | -| Kenwood_TH-D7 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.00% | -| Kenwood_TH-D72_clone_mode | [@kk7ds](https://github.com/kk7ds) | 28-Nov-2022 | Yes | 0.02% | -| Kenwood_TH-D72_live_mode | [@kk7ds](https://github.com/kk7ds) | 21-Oct-2022 | Yes | 0.00% | -| Kenwood_TH-D74_clone_mode | [@kk7ds](https://github.com/kk7ds) | 30-Nov-2022 | Yes | 0.00% | -| Kenwood_TH-D74_live_mode | [@kk7ds](https://github.com/kk7ds) | 20-Oct-2022 | Yes | 0.00% | -| Kenwood_TH-D75 | [Reported working](https://chirp.danplanet.com/issues/11122) | 114-Feb-2024 | Yes | | -| Kenwood_TH-D7G | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.00% | -| Kenwood_TH-F6 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.03% | -| Kenwood_TH-F7 | [@sv1](https://github.com/sv1) | 19-Oct-2022 | Yes | 0.03% | -| Kenwood_TH-G71 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.01% | -| Kenwood_TH-K2 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.00% | -| Kenwood_TK-2140K | [Implied by Kenwood_TK-3140K](#user-content-Kenwood_TK-3140K) | 2-Feb-2023 | Yes | | -| Kenwood_TK-2180 | [@kk7ds](https://github.com/kk7ds) | 4-Dec-2022 | Yes | 0.04% | -| Kenwood_TK-260 | | | | 0.02% | -| Kenwood_TK-260G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.02% | -| Kenwood_TK-270 | | | | 0.02% | -| Kenwood_TK-270G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.02% | -| Kenwood_TK-272 | | | | 0.01% | -| Kenwood_TK-272G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.02% | -| Kenwood_TK-278 | | | | 0.02% | -| Kenwood_TK-278G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-3140K | [@kk7ds](https://github.com/kk7ds) | 2-Feb-2023 | Yes | | -| Kenwood_TK-3140K2 | [Implied by Kenwood_TK-3140K](#user-content-Kenwood_TK-3140K) | 2-Feb-2023 | Yes | | -| Kenwood_TK-3140K3 | [Implied by Kenwood_TK-3140K](#user-content-Kenwood_TK-3140K) | 2-Feb-2023 | Yes | | -| Kenwood_TK-3180K | [@kk7ds](https://github.com/kk7ds) | 4-Dec-2022 | Yes | 0.03% | -| Kenwood_TK-3180K2 | [Implied by Kenwood_TK-3180K](#user-content-Kenwood_TK-3180K) | 4-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-360 | | | | 0.02% | -| Kenwood_TK-360G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-370 | | | | 0.02% | -| Kenwood_TK-370G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.02% | -| Kenwood_TK-372 | | | | 0.01% | -| Kenwood_TK-372G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-378 | | | | 0.01% | -| Kenwood_TK-378G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-388G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.00% | -| Kenwood_TK-7102 | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.02% | -| Kenwood_TK-7108 | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.01% | -| Kenwood_TK-7160K | [@kk7ds](https://github.com/kk7ds) | 27-Jan-2023 | Yes | | -| Kenwood_TK-7160M | [Implied by Kenwood_TK-7160K](#user-content-Kenwood_TK-7160K) | 27-Jan-2023 | Yes | | -| Kenwood_TK-7180 | [@kk7ds](https://github.com/kk7ds) | 18-Oct-2022 | Yes | 0.01% | -| Kenwood_TK-7180E | [Implied by Kenwood_TK-7180](#user-content-Kenwood_TK-7180) | 18-Oct-2022 | Yes | 0.00% | -| Kenwood_TK-760 | [@kk7ds](https://github.com/kk7ds) | 5-Dec-2022 | Yes | 0.02% | -| Kenwood_TK-760G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.03% | -| Kenwood_TK-762 | [Implied by Kenwood_TK-760](#user-content-Kenwood_TK-760) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-762G | [@kk7ds](https://github.com/kk7ds) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-768 | [Implied by Kenwood_TK-760](#user-content-Kenwood_TK-760) | 5-Dec-2022 | Yes | 0.00% | -| Kenwood_TK-768G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-8102 | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.02% | -| Kenwood_TK-8108 | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.01% | -| Kenwood_TK-8160K | [Implied by Kenwood_TK-7160K](#user-content-Kenwood_TK-7160K) | 27-Jan-2023 | Yes | | -| Kenwood_TK-8160M | [Implied by Kenwood_TK-7160K](#user-content-Kenwood_TK-7160K) | 27-Jan-2023 | Yes | | -| Kenwood_TK-8180 | [@kk7ds](https://github.com/kk7ds) | 18-Oct-2022 | Yes | 0.02% | -| Kenwood_TK-8180E | [Implied by Kenwood_TK-8180](#user-content-Kenwood_TK-8180) | 18-Dec-2022 | Yes | 0.00% | -| Kenwood_TK-860 | [Implied by Kenwood_TK-760](#user-content-Kenwood_TK-760) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-860G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.02% | -| Kenwood_TK-862 | [Implied by Kenwood_TK-760](#user-content-Kenwood_TK-760) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-862G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-868 | [Implied by Kenwood_TK-760](#user-content-Kenwood_TK-760) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TK-868G | [Implied by Kenwood_TK-762G](#user-content-Kenwood_TK-762G) | 5-Dec-2022 | Yes | 0.01% | -| Kenwood_TM-271 | [Implied by Kenwood_TM-281](#user-content-Kenwood_TM-281) | 23-Oct-2022 | Yes | 0.01% | -| Kenwood_TM-281 | [@kk7ds](https://github.com/kk7ds) | 23-Oct-2022 | Yes | 0.02% | -| Kenwood_TM-471 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.00% | -| Kenwood_TM-D700 | [@kk7ds](https://github.com/kk7ds) | 20-Oct-2022 | Yes | 0.01% | -| Kenwood_TM-D710 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 22-Oct-2022 | Yes | 0.01% | -| Kenwood_TM-D710G | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | 0.01% | -| Kenwood_TM-D710G_CloneMode | [@kk7ds](https://github.com/kk7ds) | 22-Oct-2022 | Yes | 0.00% | -| Kenwood_TM-D710_CloneMode | | | Yes | 0.00% | -| Kenwood_TM-G707 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.01% | -| Kenwood_TM-V7 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/kenwood_live.py) | 12-Dec-2022 | Yes | 0.01% | -| Kenwood_TM-V71 | [@kk7ds](https://github.com/kk7ds) | 21-Oct-2022 | Yes | 0.04% | -| Kenwood_TS-2000 | ZS6CRW | 10-Jan-2022 | Yes | 0.03% | -| Kenwood_TS-480_CloneMode | | | | 0.00% | -| Kenwood_TS-480_LiveMode | | | Yes | 0.00% | -| Kenwood_TS-590SG_CloneMode | | | | 0.00% | -| Kenwood_TS-590S_CloneMode | | | | 0.00% | -| Kenwood_TS-590S_SG_LiveMode | | | Yes | 0.00% | -| Kenwood_TS-850 | | | Yes | 0.00% | -| LUITON_LT-316 | [Implied by Retevis_RT22](#user-content-Retevis_RT22) | 9-Dec-2022 | Yes | 0.04% | -| LUITON_LT-580_UHF | [@KC9HI](https://github.com/KC9HI) | 8-Dec-2022 | Yes | 0.01% | -| LUITON_LT-580_VHF | [@KC9HI](https://github.com/KC9HI) | 8-Dec-2022 | Yes | 0.01% | -| LUITON_LT-588UV | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.01% | -| LUITON_LT-725UV | [@KC9HI](https://github.com/KC9HI) | 11-Dec-2022 | Yes | 0.02% | -| Lanchonlh_HG-UV98 | [Reported working](https://chirp.danplanet.com/issues/11179) | 23-Feb-2024 | Yes | 0.00% | -| Leixen_VV-898 | [Implied by Jetstream_JT270MH](#user-content-Jetstream_JT270MH) | 13-Dec-2022 | Yes | 0.16% | -| Leixen_VV-898E | | | Yes | 0.02% | -| Leixen_VV-898E_Dual_Bank | [Implied by Leixen_VV-898S_Dual_Bank](#user-content-Leixen_VV-898S_Dual_Bank) | 10-Feb-2024 | Yes | | -| Leixen_VV-898S | [@READ10](https://github.com/READ10) | 19-Dec-2022 | Yes | 0.08% | -| Leixen_VV-898S_Dual_Bank | [Reported working](https://chirp.danplanet.com/issues/4069) | 10-Feb-2024 | Yes | | -| MMLradio_JC-8629 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2023 | Yes | 0.01% | -| MTC_UV-5R-3 | [Implied by BTECH_UV-5X3](#user-content-BTECH_UV-5X3) | 9-Dec-2022 | Yes | 0.02% | -| Maverick_RA-100 | [@cetinajero](https://github.com/cetinajero) | 7-Jul-2023 | Yes | | -| Maverick_RA-425 | [@cetinajero](https://github.com/cetinajero) | 7-Jul-2023 | Yes | | -| Midland_DBR2500 | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.05% | -| Polmar_DB-50M | [Implied by AnyTone_5888UV](#user-content-AnyTone_5888UV) | 9-Dec-2022 | Yes | 0.03% | -| Powerwerx_DB-750X | [Implied by AnyTone_5888UV](#user-content-AnyTone_5888UV) | 9-Dec-2022 | Yes | 0.01% | -| Puxing_PX-2R | | | | 0.05% | -| Puxing_PX-777 | | | Yes | 0.11% | -| Puxing_PX-888K | [Reported working](https://chirp.danplanet.com/issues/10544) | 09-May-2023 | Yes | 0.07% | -| Q-MAC_HF-90_v300_or_earlier | [@fthain](https://github.com/fthain) | 9-Mar-2023 | Yes | | -| Q-MAC_HF-90_v301_or_later | [@fthain](https://github.com/fthain) | 9-Mar-2023 | Yes | | -| QYT_KT-8R | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.09% | -| QYT_KT-UV980 | [Implied by WACCOM_MINI-8900](#user-content-WACCOM_MINI-8900) | 11-Nov-2022 | Yes | 0.04% | -| QYT_KT-WP12 | [Implied by Anysecu_WP-9900](#user-content-Anysecu_WP-9900) | 11-Nov-2022 | Yes | 0.02% | -| QYT_KT5800 | [Implied by BTECH_UV-25X2](#user-content-BTECH_UV-25X2) | 11-Nov-2022 | Yes | 0.01% | -| QYT_KT7900D | [Implied by BTECH_UV-25X4](#user-content-BTECH_UV-25X4) | 11-Nov-2022 | Yes | 0.37% | -| QYT_KT8900 | [Implied by LUITON_LT-588UV](#user-content-LUITON_LT-588UV) | 11-Nov-2022 | Yes | 0.42% | -| QYT_KT8900D | [Implied by BTECH_UV-25X2](#user-content-BTECH_UV-25X2) | 11-Nov-2022 | Yes | 0.52% | -| QYT_KT8900R | [Implied by BTECH_UV-2501+220](#user-content-BTECH_UV-2501+220) | 11-Nov-2022 | Yes | 0.13% | -| QYT_KT980PLUS | [Implied by BTECH_UV-25X2](#user-content-BTECH_UV-25X2) | 11-Nov-2022 | Yes | 0.09% | -| Quansheng_TG-UV2+ | [Reported working](https://chirp.danplanet.com/issues/10398) | 26-Feb-2023 | Yes | 0.05% | -| Quansheng_UV-K5 | [@sq5bpf](https://github.com/sq5bpf) | 29-May-2023 | Yes | | -| Quansheng_UV-K5_egzumer | [@egzumer](https://github.com/egzumer) | 23-Jan-2024 | Yes | | -| Quansheng_UV-K5_unsupported | | | Yes | | -| RT_Systems_CSV | | | | | -| Radioddity_DB25-G | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.17% | -| Radioddity_GA-2S | [@KC9HI](https://github.com/KC9HI) | 4-Dec-2022 | Yes | 0.19% | -| Radioddity_GA-510 | [@kk7ds](https://github.com/kk7ds) | 21-Oct-2022 | Yes | 0.42% | -| Radioddity_GA-510_V2 | | | Yes | | -| Radioddity_GS-5B | [@lunapiercook](https://github.com/lunapiercook) | 5-Mar-2023 | Yes | | -| Radioddity_R2 | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.04% | -| Radioddity_UV-5G | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | 0.47% | -| Radioddity_UV-5G_Plus | | | Yes | | -| Radioddity_UV-5RX3 | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | 0.90% | -| Radioddity_UV-82X3 | [@KC9HI](https://github.com/KC9HI) | 18-Nov-2022 | Yes | 0.05% | -| Radtel_RT-470 | [@KC9HI](https://github.com/KC9HI) | 2-Apr-2023 | Yes | 0.00% | -| Radtel_RT-470L | [@KC9HI](https://github.com/KC9HI) | 5-May-2023 | Yes | | -| Radtel_RT-470X | [@KC9HI](https://github.com/KC9HI) | 10-Aug-2023 | Yes | | -| Radtel_RT-490 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2023 | Yes | 0.08% | -| Radtel_RT-495 | [@KC9HI](https://github.com/KC9HI) | 14-Jun-2024 | Yes | | -| Radtel_RT-630 | [@KC9HI](https://github.com/KC9HI) | 14-Jun-2024 | Yes | | -| Radtel_RT-730 | [@KC9HI](https://github.com/KC9HI) | 11-May-2024 | Yes | | -| Radtel_T18 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.07% | -| Retevis_H777S | [@KC9HI](https://github.com/KC9HI) | 22-Dec-2022 | Yes | | -| Retevis_H777_Plus | [@KC9HI](https://github.com/KC9HI) | 4-Dec-2022 | Yes | 0.06% | -| Retevis_P2 | [@KC9HI](https://github.com/KC9HI) | 15-Jun-2024 | Yes | | -| Retevis_P62 | [@KC9HI](https://github.com/KC9HI) | 15-Jun-2024 | Yes | | -| Retevis_RA685 | [@KC9HI](https://github.com/KC9HI) | 19-Nov-2022 | Yes | 0.25% | -| Retevis_RA79 | [@KC9HI](https://github.com/KC9HI) | 27-Oct-2023 | Yes | | -| Retevis_RA85 | [@KC9HI](https://github.com/KC9HI) | 19-Nov-2022 | Yes | 0.05% | -| Retevis_RA87 | [@KC9HI](https://github.com/KC9HI) | 16-May-2024 | Yes | | -| Retevis_RA89 | [@KC9HI](https://github.com/KC9HI) | 23-Nov-2023 | Yes | | -| Retevis_RB15 | [@KC9HI](https://github.com/KC9HI) | 18-Dec-2022 | Yes | 0.01% | -| Retevis_RB17 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.02% | -| Retevis_RB17A | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.01% | -| Retevis_RB17P | [@KC9HI](https://github.com/KC9HI) | 18-Dec-2022 | Yes | 0.02% | -| Retevis_RB17V | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.01% | -| Retevis_RB18 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.04% | -| Retevis_RB19 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.00% | -| Retevis_RB19P | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.01% | -| Retevis_RB23 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.00% | -| Retevis_RB26 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.04% | -| Retevis_RB27 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.09% | -| Retevis_RB27B | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.02% | -| Retevis_RB27V | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.01% | -| Retevis_RB28 | [@KC9HI](https://github.com/KC9HI) | 9-Feb-2023 | Yes | 0.00% | -| Retevis_RB28B | [@KC9HI](https://github.com/KC9HI) | 27-Jan-2023 | Yes | | -| Retevis_RB29 | [@KC9HI](https://github.com/KC9HI) | 24-Dec-2022 | Yes | 0.00% | -| Retevis_RB615 | [@KC9HI](https://github.com/KC9HI) | 18-Dec-2022 | Yes | 0.01% | -| Retevis_RB617 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.02% | -| Retevis_RB618 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.16% | -| Retevis_RB619 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.01% | -| Retevis_RB627B | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.05% | -| Retevis_RB628 | [@KC9HI](https://github.com/KC9HI) | 10-Feb-2023 | Yes | | -| Retevis_RB628B | [@KC9HI](https://github.com/KC9HI) | 28-Jan-2023 | Yes | | -| Retevis_RB629 | [@KC9HI](https://github.com/KC9HI) | 24-Dec-2022 | Yes | 0.00% | -| Retevis_RB75 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.02% | -| Retevis_RB85 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.02% | -| Retevis_RB87 | [@KC9HI](https://github.com/KC9HI) | 10-Mar-2023 | Yes | | -| Retevis_RB89 | [@KC9HI](https://github.com/KC9HI) | 6-Aug-2024 | Yes | | -| Retevis_RT1 | [@KC9HI](https://github.com/KC9HI) | 11-Dec-2022 | Yes | 0.08% | -| Retevis_RT15 | [@KC9HI](https://github.com/KC9HI) | 18-Feb-2023 | Yes | 0.00% | -| Retevis_RT16 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.02% | -| Retevis_RT19 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.00% | -| Retevis_RT20 | [@k9ps-paul](https://github.com/k9ps-paul) | 7-Sep-2023 | Yes | | -| Retevis_RT21 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.20% | -| Retevis_RT21V | [@KC9HI](https://github.com/KC9HI) | 24-Jul-2023 | Yes | 0.00% | -| Retevis_RT22 | [@KC9HI](https://github.com/KC9HI) | 9-Dec-2022 | Yes | 0.53% | -| Retevis_RT22FRS | [@KC9HI](https://github.com/KC9HI) | 9-Dec-2022 | Yes | 0.04% | -| Retevis_RT22S | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.04% | -| Retevis_RT23 | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.04% | -| Retevis_RT24 | [@KC9HI](https://github.com/KC9HI) | 22-Dec-2022 | Yes | 0.31% | -| Retevis_RT24V | [@KC9HI](https://github.com/KC9HI) | 27-Aug-2023 | Yes | | -| Retevis_RT26 | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.03% | -| Retevis_RT29_UHF | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.03% | -| Retevis_RT29_VHF | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.02% | -| Retevis_RT40B | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.00% | -| Retevis_RT47 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.00% | -| Retevis_RT47V | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.00% | -| Retevis_RT6 | [@KC9HI](https://github.com/KC9HI) | 3-Dec-2022 | Yes | 0.04% | -| Retevis_RT619 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.00% | -| Retevis_RT622 | [@KC9HI](https://github.com/KC9HI) | 9-Dec-2022 | Yes | 0.09% | -| Retevis_RT647 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.00% | -| Retevis_RT668 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.03% | -| Retevis_RT68 | [@KC9HI](https://github.com/KC9HI) | 28-Nov-2022 | Yes | 0.03% | -| Retevis_RT76 | [@KC9HI](https://github.com/KC9HI) | 30-Nov-2022 | Yes | 0.02% | -| Retevis_RT76P | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.04% | -| Retevis_RT85 | [@KC9HI](https://github.com/KC9HI) | 5-Dec-2022 | Yes | 0.22% | -| Retevis_RT86 | [@KC9HI](https://github.com/KC9HI) | 17-Feb-2023 | Yes | | -| Retevis_RT87 | [@KC9HI](https://github.com/KC9HI) | 17-Dec-2022 | Yes | 0.03% | -| Retevis_RT9000D_136-174 | [@KC9HI](https://github.com/KC9HI) | 8-Dec-2022 | Yes | 0.01% | -| Retevis_RT9000D_220-260 | [@KC9HI](https://github.com/KC9HI) | 8-Dec-2022 | Yes | 0.01% | -| Retevis_RT9000D_400-490 | [@KC9HI](https://github.com/KC9HI) | 8-Dec-2022 | Yes | 0.01% | -| Retevis_RT9000D_66-88 | [@KC9HI](https://github.com/KC9HI) | 8-Dec-2022 | Yes | 0.00% | -| Retevis_RT95 | [@KC9HI](https://github.com/KC9HI) | 13-Nov-2022 | Yes | 0.08% | -| Retevis_RT95_VOX | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.15% | -| Retevis_RT98 | [@KC9HI](https://github.com/KC9HI) | 14-Dec-2022 | Yes | 0.05% | -| Rugged_RH5R-V2 | | | | 0.05% | -| Ruyage_UV58Plus | [@KC9HI](https://github.com/KC9HI) | 18-Mar-2023 | Yes | | -| Sainsonic_AP510 | | | | 0.00% | -| SenhaiX_8800 | [Implied by Radioddity_GS-5B](#user-content-Radioddity_GS-5B) | 17-Mar-2023 | Yes | | -| Socotran_FB-8629 | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | 0.00% | -| Socotran_JC-8629 | [Implied by Radtel_RT-490](#user-content-Radtel_RT-490) | 11-Nov-2023 | Yes | | -| TDXone_TD-Q8A | [@KC9HI](https://github.com/KC9HI) | 18-Dec-2022 | | 0.02% | -| TIDRADIO_TD-H3 | [@songjunbiao](https://github.com/songjunbiao) | 1-Dec-2023 | Yes | | -| TIDRADIO_TD-H3-GMRS | [@songjunbiao](https://github.com/songjunbiao) | 1-Dec-2023 | Yes | | -| TIDRADIO_TD-H3-HAM | [@songjunbiao](https://github.com/songjunbiao) | 1-Dec-2023 | Yes | | -| TIDRADIO_TD-H6 | [@kk7ds](https://github.com/kk7ds) | 21-Oct-2022 | Yes | 0.43% | -| TIDRADIO_TD-H8 | [@Sandmann34](https://github.com/Sandmann34) | 7-Feb-2023 | Yes | | -| TIDRADIO_TD-H8-GMRS | [@Sandmann34](https://github.com/Sandmann34) | 7-Feb-2023 | Yes | | -| TIDRADIO_TD-H8-HAM | [@Sandmann34](https://github.com/Sandmann34) | 7-Feb-2023 | Yes | | -| TID_TD-M8 | [Implied by Retevis_RT22](#user-content-Retevis_RT22) | 9-Dec-2022 | Yes | 0.04% | -| TID_TD-UV68 | [@Sandmann34](https://github.com/Sandmann34) | 7-Feb-2023 | Yes | | -| TYT_TH-350 | | | Yes | 0.07% | -| TYT_TH-7800 | [Reported working](https://chirp.danplanet.com/issues/10585) | 4-Jul-2023 | Yes | 0.13% | -| TYT_TH-7800_File | | | | 0.00% | -| TYT_TH-9800 | [Reported working](https://chirp.danplanet.com/issues/10755) | 30-Jul-2023 | Yes | 0.65% | -| TYT_TH-9800_File | | | Yes | 0.00% | -| TYT_TH-UV3R | | | Yes | 0.04% | -| TYT_TH-UV3R-25 | | | Yes | 0.02% | -| TYT_TH-UV8000 | [@KC9HI](https://github.com/KC9HI) | 6-Jan-2023 | Yes | 0.31% | -| TYT_TH-UV88 | [@KC9HI](https://github.com/KC9HI) | 5-Dec-2022 | Yes | 0.51% | -| TYT_TH-UVF1 | [@kk7ds](https://github.com/kk7ds) | 13-Dec-2022 | Yes | 0.06% | -| TYT_TH-UVF8D | [@MELERIX](https://github.com/MELERIX) | 2-Feb-2023 | Yes | 0.05% | -| TYT_TH9000_144 | [Implied by Retevis_RT9000D_136-174](#user-content-Retevis_RT9000D_136-174) | 8-Dec-2022 | Yes | 0.06% | -| TYT_TH9000_220 | [Implied by Retevis_RT9000D_220-260](#user-content-Retevis_RT9000D_220-260) | 8-Dec-2022 | Yes | 0.04% | -| TYT_TH9000_440 | [Implied by Retevis_RT9000D_400-490](#user-content-Retevis_RT9000D_400-490) | 8-Dec-2022 | Yes | 0.04% | -| Talkpod_A36plus | [@KC9HI](https://github.com/KC9HI) | 12-Jun-2023 | Yes | | -| Talkpod_A36plus_8w | [@KC9HI](https://github.com/KC9HI) | 16-Feb-2024 | Yes | | -| Vertex_Standard_FTL-1011 | | | | 0.02% | -| Vertex_Standard_FTL-2011 | | | | 0.05% | -| Vertex_Standard_FTL-7011 | | | | 0.03% | -| Vertex_Standard_FTL-8011 | | | | 0.01% | -| Vertex_Standard_VXA-700 | | | | 0.02% | -| WACCOM_MINI-8900 | [@KC9HI](https://github.com/KC9HI) | 11-Nov-2022 | Yes | 0.12% | -| WLN_KD-C1 | [Implied by Retevis_RT22](#user-content-Retevis_RT22) | 9-Dec-2022 | Yes | **1.73%** | -| Wouxun_KG-1000G | [@mrtjr1](https://github.com/mrtjr1) | 23-jan-2023 | Yes | | -| Wouxun_KG-1000G_Plus | [@mrtjr1](https://github.com/mrtjr1) | 23-jan-2023 | Yes | 0.00% | -| Wouxun_KG-816 | [Implied by Wouxun_KG-UV6](#user-content-Wouxun_KG-UV6) | 11-Dec-2022 | Yes | 0.07% | -| Wouxun_KG-818 | [Implied by Wouxun_KG-UV6](#user-content-Wouxun_KG-UV6) | 11-Dec-2022 | Yes | 0.04% | -| Wouxun_KG-935G | [@mrtjr1](https://github.com/mrtjr1) | 4-Jan-2022 | Yes | 0.05% | -| Wouxun_KG-935G_Plus | [@mrtjr1](https://github.com/mrtjr1) | 7-Feb-2023 | Yes | | -| Wouxun_KG-UV6 | [@KC9HI](https://github.com/KC9HI) | 11-Dec-2022 | Yes | 0.19% | -| Wouxun_KG-UV8D | Unit tested; needs confirm | 24-Dec-2022 | Yes | 0.24% | -| Wouxun_KG-UV8D_Plus | Unit tested; needs confirm | 2-Jan-2022 | Yes | 0.08% | -| Wouxun_KG-UV8E | W5EGL | 2-Jan-2022 | Yes | 0.05% | -| Wouxun_KG-UV8H | [@mrtjr1](https://github.com/mrtjr1) | 27-Mar-2023 | Yes | 0.01% | -| Wouxun_KG-UV920P-A | [@KC9HI](https://github.com/KC9HI) | 22-Dec-2022 | Yes | 0.04% | -| Wouxun_KG-UV980P | [@mrtjr1](https://github.com/mrtjr1) | 23-jan-2023 | Yes | 0.01% | -| Wouxun_KG-UV9D_Plus | [@samwich](https://github.com/samwich) | 10-Jan-2023 | Yes | 0.39% | -| Wouxun_KG-UV9GX | [@mrtjr1](https://github.com/mrtjr1) | 27-Mar-2023 | Yes | | -| Wouxun_KG-UV9G_Pro | [@mrtjr1](https://github.com/mrtjr1) | 25-Apr-2023 | Yes | | -| Wouxun_KG-UV9K | [@mrtjr1](https://github.com/mrtjr1) | 14-Apr-2023 | Yes | | -| Wouxun_KG-UV9PX | [@mrtjr1](https://github.com/mrtjr1) | 20-Jan-2022 | Yes | | -| Wouxun_KG-UVD1P | [Implied by Wouxun_KG-UV6](#user-content-Wouxun_KG-UV6) | 11-Dec-2022 | Yes | 0.35% | -| Yaesu_FT-1500M | [@f3sty](https://github.com/f3sty) | 05-Dec-2022 | Yes | 0.02% | -| Yaesu_FT-1802M | | | Yes | 0.02% | -| Yaesu_FT-1D_R | [Implied by Yaesu_FT3D_R](#user-content-Yaesu_FT3D_R) | 30-Dec-2022 | Yes | 0.03% | -| Yaesu_FT-25R | [Implied by Yaesu_FT-4XE](#user-content-Yaesu_FT-4XE) | 24-Dec-2022 | Yes | 0.01% | -| Yaesu_FT-2800M | [Reported working](https://chirp.danplanet.com/issues/10616) | 05-Jun-2023 | Yes | 0.03% | -| Yaesu_FT-2900R_1900R | [Reported working](https://chirp.danplanet.com/issues/10274) | 14-Jan-2023 | Yes | 0.05% | -| Yaesu_FT-2900R_1900RTXMod_Opened_Xmit | [Implied by Yaesu_FT-2900R_1900R](#user-content-Yaesu_FT-2900R_1900R) | 14-Jan-2023 | Yes | | -| Yaesu_FT-450 | [@WCurlew](https://github.com/WCurlew) | 03-Nov-2023 | Yes | | -| Yaesu_FT-450D | [@Old-Phart](https://github.com/Old-Phart) | 01-Jun-2023 | Yes | 0.01% | -| Yaesu_FT-4VR | [Implied by Yaesu_FT-4XE](#user-content-Yaesu_FT-4XE) | 24-Dec-2022 | Yes | 0.01% | -| Yaesu_FT-4XE | Unit tested; needs confirm | 24-Dec-2022 | Yes | 0.14% | -| Yaesu_FT-4XR | [Implied by Yaesu_FT-4XE](#user-content-Yaesu_FT-4XE) | 24-Dec-2022 | Yes | 0.11% | -| Yaesu_FT-50 | [Reported working](https://chirp.danplanet.com/issues/10824) | 5-Sep-2023 | Yes | 0.04% | -| Yaesu_FT-60 | N0EYE | 9-Jan-2023 | Yes | 0.49% | -| Yaesu_FT-65E | [@kwirk](https://github.com/kwirk) | 27-Jan-2023 | Yes | 0.08% | -| Yaesu_FT-65R | [Reported working](https://chirp.danplanet.com/issues/10266) | 13-Jan-2022 | Yes | 0.18% | -| Yaesu_FT-70D | [@n8sqt](https://github.com/n8sqt) | 05-Dec-2022 | Yes | 0.27% | -| Yaesu_FT-7100M | | | Yes | 0.03% | -| Yaesu_FT-7800_7900 | [@kk7ds](https://github.com/kk7ds) | 24-Oct-2022 | Yes | 0.14% | -| Yaesu_FT-8100 | [Reported working](https://chirp.danplanet.com/issues/10904) | 19-Oct-2023 | Yes | 0.01% | -| Yaesu_FT-817 | [@kk7ds](https://github.com/kk7ds) | 14-Feb-2019 | Yes | 0.04% | -| Yaesu_FT-817ND | [Implied by Yaesu_FT-817](#user-content-Yaesu_FT-817) | 14-Feb-2019 | Yes | 0.07% | -| Yaesu_FT-817ND_US | [Implied by Yaesu_FT-817](#user-content-Yaesu_FT-817) | 14-Feb-2019 | Yes | 0.02% | -| Yaesu_FT-818 | [@thomasrussellmurphy](https://github.com/thomasrussellmurphy) | 4-Feb-2023 | Yes | 0.05% | -| Yaesu_FT-818ND_US | [Implied by Yaesu_FT-817](#user-content-Yaesu_FT-817) | 14-Feb-2019 | Yes | 0.02% | -| Yaesu_FT-857_897 | [Implied by Yaesu_FT-817](#user-content-Yaesu_FT-817) | 14-Feb-2019 | Yes | 0.25% | -| Yaesu_FT-857_897_US | [Implied by Yaesu_FT-817](#user-content-Yaesu_FT-817) | 14-Feb-2019 | Yes | 0.08% | -| Yaesu_FT-8800 | [@kk7ds](https://github.com/kk7ds) | 24-Oct-2022 | Yes | 0.08% | -| Yaesu_FT-8900 | [Reported working](https://chirp.danplanet.com/issues/10753) | 30-Jul-2023 | Yes | 0.11% | -| Yaesu_FT-90 | [Reported working](https://chirp.danplanet.com/issues/10386) | 22-Feb-2023 | Yes | 0.02% | -| Yaesu_FT2D_R | [Implied by Yaesu_FT3D_R](#user-content-Yaesu_FT3D_R) | 30-Dec-2022 | Yes | 0.02% | -| Yaesu_FT2D_Rv2 | [Implied by Yaesu_FT3D_R](#user-content-Yaesu_FT3D_R) | 30-Dec-2022 | Yes | | -| Yaesu_FT3D_R | [@kk7ds](https://github.com/kk7ds) | 30-Dec-2022 | Yes | 0.03% | -| Yaesu_FTM-3200D_R | | | Yes | 0.02% | -| Yaesu_FTM-350 | [@kk7ds](https://github.com/kk7ds) | 4-Dec-2022 | Yes | 0.02% | -| Yaesu_FTM-7250D_R | | | Yes | 0.04% | -| Yaesu_VX-170 | | | Yes | 0.03% | -| Yaesu_VX-2 | [@thomasrussellmurphy](https://github.com/thomasrussellmurphy) | 20-Jan-2023 | Yes | 0.04% | -| Yaesu_VX-3 | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.08% | -| Yaesu_VX-5 | [Probably works](https://github.com/kk7ds/chirp/blob/py3/chirp/drivers/yaesu_clone.py) | 12-Dec-2022 | Yes | 0.07% | -| Yaesu_VX-6 | [@dominickpastore](https://github.com/dominickpastore) | 10-Dec-2022 | Yes | 0.16% | -| Yaesu_VX-7 | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.09% | -| Yaesu_VX-8DR | [@kk7ds](https://github.com/kk7ds) | 15-Feb-2019 | Yes | 0.03% | -| Yaesu_VX-8GE | [Implied by Yaesu_VX-8DR](#user-content-Yaesu_VX-8DR) | 15-Feb-2019 | Yes | 0.01% | -| Yaesu_VX-8R | [Implied by Yaesu_VX-8DR](#user-content-Yaesu_VX-8DR) | 15-Feb-2019 | Yes | 0.03% | -| Yedro_YC-M04VUS | [Implied by Retevis_RT95](#user-content-Retevis_RT95) | 13-Nov-2022 | Yes | 0.02% | -| Zastone_ZT-X6 | [Implied by Retevis_RT22](#user-content-Retevis_RT22) | 9-Dec-2022 | Yes | 0.11% | -## Stats - -**Drivers:** 467 - -**Tested:** 87% (407/60) (93% of usage stats) - -**Byte clean:** 91% (428/39) - -## Meaning of this testing - -The goal here is not necessarily to test the drivers themselves in terms of -actual functionality, but rather to validate the Python 3 conversion -work required of nearly all drivers. Thus, we are not trying to -comprehensively test these models so much as make sure they work at least -as well as they do on the Python 2 branch. Uncovering and reporting new -bugs is definitely welcome, but for the purpoes of this effort, "no worse -than the legacy branch" is good enough. There are multiple levels of -confirmation in the matrix above: -* Tested with real hardware (i.e. a person listed in the "Tester" column) - using roughly the procedure below. -* An "implied by (model)" link means that another model was tested, and it - is so similar, that the model on that line can be considered tested as - well. -* A "probably works" link means that the driver has not been tested with - real hardware, nor is it substantially similar to another model, but - shares a common base that entirely provides the cloning routines with - other drivers that have been tested with real hardware, such that - confidence is high that it will work. Only drivers with test images in - the tree (or live drivers) should be marked with this class. -* A "unit tested" link means that the driver has not been tested with - real hardware, nor does it share common cloning routines with another - radio. However, synthetic simulation tests have been added to exercise - the parts of the cloning routines that are likely to fail under python3. - This is the lowest-confidence status and a real confirmation is needed. - -If you have a model listed in this matrix with either "implied" or -"probably works" status, an actual confirmation with real hardware is -welcome and can replace the weaker reference. - -## Minimal test procedure -For the purposes of the Python 3 effort, a "tested" radio means -at least the following procedure was followed: -1. Download from the radio -1. Make some change to a memory -1. If the radio has settings support, make sure settings load and tweak - one setting -1. Upload to the radio -1. Confirm that the changes stick and look correct, or at least are not a - regression from the master py2 branch. - -The drivers are all passing the automated tests, but tests with real -hardware and serial ports is important, especially around bytes-vs-string -safety. - -To update this document, add/edit entries in `tests/py3_driver_testers.txt` -and then run `tox -e makesupported`. Commit the result (including the -changes to this `.md` file) and submit a PR. - -The "Byte Clean" flag refers to whether or not the radio has set the -`NEEDS_COMPAT_SERIAL = False` flag on the radio class, and thus uses -`MemoryMapBytes` exclusively internally. Whenever possible, all radios -that are fixed for py3 should do so with this flag set to False and with -the byte-native memory map. diff --git a/tests/py3-untested-drivers.txt b/tests/py3-untested-drivers.txt new file mode 100644 index 00000000..2528354c --- /dev/null +++ b/tests/py3-untested-drivers.txt @@ -0,0 +1,54 @@ +# These drivers have not been converted (or confirmed working) for python3 +ARRL_Travel_Plus +Baofeng_K5-Plus +Baojie_BJ-9900 +Baojie_BJ-UV55 +Boblov_X3Plus +Commander_KG-UV +Feidaxin_FD-150A +Feidaxin_FD-160A +Feidaxin_FD-268A +Feidaxin_FD-268B +Feidaxin_FD-288A +Feidaxin_FD-288B +Feidaxin_FD-450A +Feidaxin_FD-460A +Feidaxin_FD-460UH +KSUN_M6 +KYD_IP-620 +KYD_NC-630A +Kenwood_ITM +Kenwood_TK-260 +Kenwood_TK-270 +Kenwood_TK-272 +Kenwood_TK-278 +Kenwood_TK-360 +Kenwood_TK-370 +Kenwood_TK-372 +Kenwood_TK-378 +Kenwood_TM-D710_CloneMode +Kenwood_TS-480_CloneMode +Kenwood_TS-480_LiveMode +Kenwood_TS-590SG_CloneMode +Kenwood_TS-590S_CloneMode +Kenwood_TS-590S_SG_LiveMode +Kenwood_TS-850 +Puxing_PX-2R +RT_Systems_CSV +Rugged_RH5R-V2 +Sainsonic_AP510 +TYT_TH-350 +TYT_TH-7800_File +TYT_TH-9800_File +TYT_TH-UV3R +TYT_TH-UV3R-25 +Vertex_Standard_FTL-1011 +Vertex_Standard_FTL-2011 +Vertex_Standard_FTL-7011 +Vertex_Standard_FTL-8011 +Vertex_Standard_VXA-700 +Yaesu_FT-1802M +Yaesu_FT-7100M +Yaesu_FTM-3200D_R +Yaesu_FTM-7250D_R +Yaesu_VX-170 diff --git a/tools/py3_driver_progress.py b/tools/py3_driver_progress.py deleted file mode 100755 index bd0f22a8..00000000 --- a/tools/py3_driver_progress.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/python3 - -import argparse -import csv -import os -import sys -import textwrap - -from chirp import directory - -directory.import_drivers() - - -def tester_link(text): - if text.startswith('@'): - return '[%s](https://github.com/%s)' % (text, text[1:]) - elif text.startswith('+'): - assert text[1:] in directory.DRV_TO_RADIO, \ - '%s is not in the driver directory' % text[1:] - return '[Implied by %s](#user-content-%s)' % (text[1:], text[1:]) - elif text.startswith('*'): - assert os.path.exists(os.path.join('chirp', 'drivers', - text[1:] + '.py')) - return ('[Probably works](' - 'https://github.com/kk7ds/chirp' - '/blob/py3/chirp/drivers/%s.py)' % ( - text[1:])) - elif text.startswith('#') and text[1:].isdigit(): - return ('[Reported working]' - '(https://chirp.danplanet.com/issues/%i)' % int(text[1:])) - else: - return text - - -def read_stats(statsfile): - with open(statsfile) as f: - lines = f.readlines() - - models = {} - total = 0 - skip = ['Repeaterbook', 'Radio Reference', 'CHIRP', 'CSV'] - for line in lines[1:]: - model, count = line.strip().split('\t') - model = model.replace(' ', '_').\ - replace('(', '').\ - replace(')', '').\ - replace('/', '_') - if any(s in model for s in skip): - continue - count = int(count) - models[model] = count - total += count - - return total, models - - -def read_testers(testersfile): - headers = ['Driver', 'Tester', 'Tested'] - line = 0 - testers = {} - for fields in csv.reader(open(testersfile)): - line += 1 - if fields[0][0] == '#': - continue - - if len(fields) != len(headers): - print('Error on line %i: invalid number of fields in: %s' % ( - line, ','.join(fields)), - file=sys.stderr) - return 1 - - if fields[0] in testers: - print('Error: duplicate driver %r in testers file' % fields[0], - file=sys.stderr) - return 2 - - testers[fields[0]] = fields[1:] - - return testers - - -def get_share_for_radio(stats, stats_total, parent_cls): - count = 0 - for cls in [parent_cls] + parent_cls.ALIASES: - driver = directory.radio_class_id(cls) - simple_driver = '%s_%s' % (cls.VENDOR, cls.MODEL) - if driver in stats: - count += stats.pop(driver, 0) - elif simple_driver in stats: - count += stats.pop(simple_driver, 0) - - if count == 0: - share = '' - else: - pct = (count * 100 / stats_total) - share = '%.2f%%' % pct - if pct > 1: - share = '**%s**' % share - return count, share - - -def main(): - p = argparse.ArgumentParser() - p.add_argument('testers') - p.add_argument('stats') - p.add_argument('-o', '--output', default='-') - args = p.parse_args() - - testers = read_testers(args.testers) - stats_total, stats = read_stats(args.stats) - - if args.output == '-': - output = sys.stdout - else: - output = open(args.output, 'w') - - print('## Status', file=output) - - print('| Driver | Tester | Tested | Byte Clean | "Market Share" |', - file=output) - print('| ------ | ------ | ------ | ---------- | -------------- |', - file=output) - - drivers = sorted([ident for ident in directory.DRV_TO_RADIO]) - drvstested = 0 - byteclean = 0 - tested_stats = 0 - for driver in drivers: - cls = directory.get_radio(driver) - tester, tested = testers.pop(driver, ('', '')) - if tester: - drvstested += 1 - count, share = get_share_for_radio(stats, stats_total, cls) - if tester: - tested_stats += count - if not cls.NEEDS_COMPAT_SERIAL: - byteclean += 1 - print('| %s | %s | %s | %s | %s |' % ( - driver, driver, tester_link(tester), tested, - '' if cls.NEEDS_COMPAT_SERIAL else 'Yes', share), - file=output) - - print('## Stats', file=output) - print('\n**Drivers:** %i' % (len(drivers)), file=output) - print('\n**Tested:** %i%% (%i/%i) (%i%% of usage stats)' % ( - drvstested / len(drivers) * 100, - drvstested, len(drivers) - drvstested, - tested_stats * 100 / stats_total), - file=output) - print('\n**Byte clean:** %i%% (%i/%i)' % ( - byteclean / len(drivers) * 100, - byteclean, - len(drivers) - byteclean), - file=output) - - print(textwrap.dedent(""" - ## Meaning of this testing - - The goal here is not necessarily to test the drivers themselves in terms of - actual functionality, but rather to validate the Python 3 conversion - work required of nearly all drivers. Thus, we are not trying to - comprehensively test these models so much as make sure they work at least - as well as they do on the Python 2 branch. Uncovering and reporting new - bugs is definitely welcome, but for the purpoes of this effort, "no worse - than the legacy branch" is good enough. There are multiple levels of - confirmation in the matrix above: - * Tested with real hardware (i.e. a person listed in the "Tester" column) - using roughly the procedure below. - * An "implied by (model)" link means that another model was tested, and it - is so similar, that the model on that line can be considered tested as - well. - * A "probably works" link means that the driver has not been tested with - real hardware, nor is it substantially similar to another model, but - shares a common base that entirely provides the cloning routines with - other drivers that have been tested with real hardware, such that - confidence is high that it will work. Only drivers with test images in - the tree (or live drivers) should be marked with this class. - * A "unit tested" link means that the driver has not been tested with - real hardware, nor does it share common cloning routines with another - radio. However, synthetic simulation tests have been added to exercise - the parts of the cloning routines that are likely to fail under python3. - This is the lowest-confidence status and a real confirmation is needed. - - If you have a model listed in this matrix with either "implied" or - "probably works" status, an actual confirmation with real hardware is - welcome and can replace the weaker reference. - - ## Minimal test procedure - For the purposes of the Python 3 effort, a "tested" radio means - at least the following procedure was followed: - 1. Download from the radio - 1. Make some change to a memory - 1. If the radio has settings support, make sure settings load and tweak - one setting - 1. Upload to the radio - 1. Confirm that the changes stick and look correct, or at least are not a - regression from the master py2 branch. - - The drivers are all passing the automated tests, but tests with real - hardware and serial ports is important, especially around bytes-vs-string - safety. - - To update this document, add/edit entries in `tests/py3_driver_testers.txt` - and then run `tox -e makesupported`. Commit the result (including the - changes to this `.md` file) and submit a PR. - - The "Byte Clean" flag refers to whether or not the radio has set the - `NEEDS_COMPAT_SERIAL = False` flag on the radio class, and thus uses - `MemoryMapBytes` exclusively internally. Whenever possible, all radios - that are fixed for py3 should do so with this flag set to False and with - the byte-native memory map."""), - file=output) - - for driver, (tester, tested) in testers.items(): - print('Error in testers file; driver %s by %s on %s unknown' % ( - driver, tester, tested), file=sys.stderr) - if testers: - return 3 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/tox.ini b/tox.ini index ea24f9c1..2776bad5 100644 --- a/tox.ini +++ b/tox.ini @@ -70,5 +70,3 @@ deps = -rtest-requirements.txt commands = python chirp/share/make_supported.py model_support.html - python tools/py3_driver_progress.py -o tests/Python3_Driver_Testing.md tests/py3_driver_testers.txt tests/model_stats.tsv - git diff --exit-code tests/Python3_Driver_Testing.md