Michael Maclean

Adventures in digital radio

A few years ago I got my foundation amateur radio licence. It was something I’d been considering doing for quite a long time but there were few opportunities to do so where I was at the time. I used it a bit as MM6YHF, mainly on 2m and 70cm analogue FM repeaters. It’s been a while since I did very much radio, as where I stay now is a bit further away from the repeaters so it became harder to do.

A few weeks ago I spent a weekend at the 57 North hackspace and saw Hibby using a DMR radio. What I found interesting about this was that he was using a hotspot running Pi-Star elsewhere in the hackspace, so it was possible to communicate with people without having to be within range of a repeater. This particular one was on the Brandmeister network, though other networks are available.

Eventually I got a TyT MD-UV390 radio, and borrowed Hibby’s hotspot to try it out for myself.

Programming the radio

It turns out that DMR radio, having been designed for commercial use, is a bit more complex than analogue FM. Working out how to program it was a bit of an expedition round some blogs, forums, and YouTube channels. As well as having the RF configuration for input and output frequencies, each repeater has two time slots upon which can be carried several talkgroups. The radio additionally has channels, scan groups, and zones. On my particular radio, I have opted to have one zone per digital repeater, including the hotspot, and another zone to contain the analogue FM repeaters. Each talkgroup on each repeater is then programmed as a separate channel. There is a feature for dynamically calling talkgroups but I’ll figure that one out later on.

The configuration of the radio is referred to as a “codeplug”. The software used to program the radio, referred to as “CPS” perhaps for “codeplug software” or maybe “customer programming software”, takes a bit of getting used to. There are open source options including qdmr which I have tried out briefly. I made a Nix flake for qmdr, although I later found that it doesn’t quite cover all of the features of the radio. In the end I found a variety of YouTube videos which described the features, and finally a very helpful blog post that described exactly how to make a codeplug from scratch. Before programming or using the radio, you need to register for a DMR ID at RadioID.


The firmware my radio arrived with was version D019.005. The D indicates that it’s configured to reserve space in the internal storage for recording audio. You can replace the firmware with another that has a version number starting with S that allows the storage to instead be used for storing contacts. It should hold around 100,000, which should let the radio identify most people I’m likely to talk to. You can obtain lists of contacts, which are mappings from DMR IDs to callsigns and first names, from RadioID.

Finding the firmware was a bit of fun. The manufacturer’s website doesn’t make it simple to identify what version you’re downloading, and I couldn’t find any that was newer than S018. It turns out however that this hardware is also sold as the Retevis RT3. The Retevis site was much easier to navigate than the TyT one, so I obtained version S019.005 from there and flashed that. It worked fine, although the graphic displayed when the radio is switched on will be different now.

Loading contacts

One issue I’ve had is that while I can compile a contact list in CSV from the database on RadioID, programming that to the radio using the TyT CPS requires a copy of Microsoft Excel. I don’t have that. qdmr has a UI for doing this, but trying it out displays a message about my radio not being supported. I’ve not quite worked around this yet. I’d quite like to avoid having to get a trial version of Office.


Pi-Star is a Raspbian-based Linux distribution that runs on Raspberry Pis and similar devices with appropriate radio hardware attached. It can provide repeater functionality for a variety of digital radio protocols including DMR, and will interface with networks like Brandmeister. The configuration is completely handled by a web UI, which I found intuitive once I had an understanding of talkgroups and time slots. It will backhaul the radio traffic over wifi to your chosen network, which feels a little like cheating.

As it’s been a little while since I used the radio for much I’ve mainly been listening in a bit to remind myself how it works before getting too involved. Thanks go to Hibby both for the loan of the hotspot and also putting up with many elementary questions during the process of getting set up.