qdmr - A codeplug programming tool for DMR radios
Content
Introduction
Digital mobile radio (DMR) was not invented for the use in amateur radio. It was rather designed to be a radio standard for commercial applications in large companies (e.g., airports etc.). Therefore many features of this standard are of no use for ham radio or are even illegal (e.g., encryption). This complexity of the standard makes the programming of the radios cumbersome.
Moreover, the resulting configuration (code-plug) is highly device-dependent. These code-plugs cannot be shared between different devices let alone between different vendors. For commercial applications, this is not a big problem as a company will most likely buy identical radios at once from one company. Thus code-plugs can be shared between all radios.
For ham radio applications, this incompatibility is a real issue. Since assembling a decent code-plug for one region is hard enough, doing the same work all over again for different models of different vendors is not manageable.
Finally, the typical code-plug programming software (CPS), particularly those for cheap Chinese DMR radios, is by no means user-friendly and seldom documented completely. Many options are named cryptic and it is not possible to identify which options are necessary for basic DMR operation. Moreover, the CPSs provided by the vendors usually only run under Windows.
The aim of the qdmr project is to overcome these shortcomings of typical CPSs. It has a reduced feature set, only supporting those options necessary of amateur radio usage. It tries to be user-friendly by finding repeaters nearby and importing their input and output frequencies. Moreover, it does not store the final code-plug in a device-specific binary format, but in a human-readable text file that is device independent and can therefore be shared across multiple device and even across vendors.
This project is derived from work by Serge KK6ABQ, who reverse-engineered the code-plug formats and communication protocols of cheap Chinese DMR radios. Being an interactive application, I had to rework some of Serges code. Since I only own three DMR radios a Radioddity/Baofeng RD-5R, a Retevis RT3S and an AnyTone AT-D878UV, only a few radios are supported right now (see below). Serges dmrconfig application supports much more.
Supported Radios
Legend
- ☑ — Implemented and tested. This feature of the radio is fully implemented.
- ☑ — Implemented but untested. This feature of the radio is implemented in qdmr but not yet tested fully. It will likely work.
- ☐ — Not implemented yet.
- ☒ — This feature is not supported by the radio.
Low-hanging Fruits
Although only few radios are currently supported, there are a lot of radios that are basically identical to those supported. To this end, support for those radios can be added quiet easily, once I get my hands on those radios or I find someone who is willing to test the implementation.
Features
For now, all necessary ham-radio related features of the DMR radios are supported. That is, managing the radio ID, contacts (both digital an DTMF), RX groups, channels (both, analog and digital), zones, scan lists, GPS/APRS (if supported by the radio) and call-sign databases (again, if supported by the radio).
I also added some nice GUI features, that may help you to assemble code-plugs. The application downloads some information from repeatermap.de and provides auto-completion for repeaters near you (e.g., by settings your locator in the settings dialog or by enabling the OS location service there). This feature may help you to discover some nearby repeaters and also provides the RX/TX frequencies for these repeaters automatically. If your local repeater does not show up, consider helping Martin DK3ML by adding/updating it at repeatermap.
The application also downloads the complete call-sign database for all assigned DMR IDs to allow for an update of the call-sign DB within the radio (if supported). This database is also used to provide autocompletion for the DMR contacts. That is, you can easily assemble your private calls using only the call-signs of your friends and you do not need to lookup their DMR IDs.
Versions
- Version 0.12.0 — Added support for Radioddity GD-73 and BTech DR-1801UV (A6).
- Version 0.11.2 — Bugfix release.
- Version 0.11.1 — Bugfix release.
- Version 0.11.0 — Added proper support for the BTech DMR-6X2UV.
- Version 0.10.4 — Some more bugfixes.
- Version 0.10.3 — A lot of bugfixes.
- Version 0.10.2 — Added encryption, a lot of bugfixes.
- Version 0.10.1 — Bugfix release.
- Version 0.10.0 — Added support for BTech DM1701 and some bug fixes.
- Version 0.9.3 — Bugfix release.
- Version 0.9.2 — Bugfix release.
- Version 0.9.1 — Bugfix release.
- Version 0.9.0-alpha3 — Almost rewritten core library to implement device-specific settings. Likely introduced new bugs, hence the alpha release. Let me know if something does work or what works for you but is marked as "untested" above. Added support for TyT MD-2017, TyT MD-390, TyT MD-UV380.
- Version 0.8.1 — Fixed support for Radioddity GD-77 and some small bugfixes.
- Version 0.8.0 — Added support for AnyTone AT-D878UVII and AT-D578UV.
- Version 0.7.3 — Bugfix release.
- Version 0.7.2 — Bugfix release.
- Version 0.7.1 — Bugfix release.
- Version 0.7.0 — Added support for AnyTone AT-D868UVE and a lot of bugfixes.
- Version 0.6.4 — A lot of bugfixes and minor GUI improvements.
- Version 0.6.3 — Fixed a crash for empty zones in AnyTone AT-D878UV.
- Version 0.6.2 — Fixed upload/download to USB serial devices (D878UV, OpenGD77) under MacOS 11.
- Version 0.6.1 — Added APRS & roaming.
- Version 0.5.3 — Fixed detection of TYT MD-UV390 radios.
- Version 0.5.2 — Feature release adding call-sign database upload for Open GD77.
- Version 0.5.1 — Bugfix release fixing an issue with AT-D878UV code-plugs.
- Version 0.5.0 — Feature release. Added support for AnyTone AT-D878UV.
- Version 0.4.7 — Feature release enhancing the useability.
- Version 0.4.6 — Bugfix release fixing a lot of bugs with OpenGD77 devices.
- Version 0.4.5 — Unintentional reset of button and general settings for RD-5R, UV390/RT3S.
- Version 0.4.3 — Bugfix release. Implemented DCS, fixed crash on upload to Open GD77.
- Version 0.4.1 — Bugfix release. Fixed scan-list encoding/decoding for RD5R, GD77 and Open GD77.
- Version 0.4.0 — Feature release. Added support for Open GD-77. Fixed code-plug decoding for RD-5R.
- Version 0.3.0 — Bugfix release. Completed code-plug generation for TYT MD-UV390 and Retevis RT3S devices. Fixed upload for RD-5R.
- Version 0.2.3 — Bugfix release. Fixed code-plug generation for TYT MD-UV390 and Retevis RT3S devices.
- Version 0.2.2 — Bugfix release. Also added proper GPS support for the TYT MD-UV390 and Retevis RT3S devices.
- Version 0.2.1 — First public release.
Install
There are several ways to install qdmr ranging from simple App-package downloads to building qdmr from its sources. For a detailed instruction list, read the install instructions.
Documentation
- If you find any issues with qdmr, consider opening a new issue.
- There is also a discussion page where you can ask questions concerning the usage of qdmr.
- For some quick feedback, you may also chat using Matrix in #qdmr:darc.de.
- There is a manual that describes the assembly of a codeplug using qdmr,
- as well as a brief introduction into DMR in german (the english version is part of the manual above).
- The dmrconf command-line tool gets shipped with a man-page (also part of the manual).
- Finally, there is the API documentation of the Qt5 library that gets used by the GUI and command-line application.
License
qdmr - A GUI programming tool for Chinese DMR radios. Copyright (C) 2019 Hannes Matuschek, dm3mat [at] darc [dot] de
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Best & 73,
Hannes, DM3MAT