Open-GD77 CPS

posted in: c#, DMR, Ham radio | 19

Another quick post, mainly to get some feedback.


Now that the open source GD-77 being written by Kai, DG4KLU, is progressing and can receive on both FM and DMR. One of the other things on my, rather large, To Do list is to write a CPS to support Kai’s firmware.


Currently I’ve added some functions, so that the official codeplug, which is already in the GD-77’s memory, can be partially used by anyone who would like to help with the testing.


However the official codeplug has multiple problems, and the final solution will be to have a new CPS for Kai’s firmware, which is designed with the features which Amateur Radio operators need.


So after a few false starts, I have started to build a new CPS from scratch, but to save time re-inventing the wheel, I’m going to initially use some of the screen layouts from the Community CPS.


Jumping in at the deep end, I’ve copied the layout information for the Channels screen into the new CPS, and re-arranged the layout a little, so that the screen is not as tall.


One thing which people will immediately notice in the screengrab below, is that there are a lot of items in this screen which are not in the Community or the official CPS.

This is because they are present in both the official and Community CPS, but were hidden in both these CPS’s

However, since I’m starting almost from scratch again, I thought it was probably worth making all items visible so that we can see whether any of the hidden fields are actually of any use.


Note. I don’t know what things like “Tx Reference Frequency” were intended to do, and I think that the values of these items was probably ignored by the official GD-77 firmware.


So the first task is to determine which of the many items on this screen are needed, and also whether other items, specific to Amateur Radio use are missing.

Some things which are in the official CPS, which I think probably have no use in Amateur Radio are the Privacy and Privacy Group settings. Since as far as I know, transmitting using encryption is specifically forbidden under the terms of most Amateur Radio licences (though some countries may have exceptions to this).
I’m not sure what the Emergency System  setting does or whether its used. I’ve definitely not seen it used on DMR in Australia.


One way forward may be just to specify the minimum usable set of features, especially since Kai’s software currently does not support 75% of the options on this screen, and over time add options as they become available in the firmware.


Key to this upgradability is to move away from the old codeplug data format, where the same binary data which is sent to the radio was also used as the codeplug file saved to disk.


Instead, I’m going to save to disk using XML, because this will allow additional options to be added as time goes by, and yet still allow the CPS to read an existing codeplug XML file – as long as I don’t radically change the structure.
I will also include a format version in the XML itsself, as this would future proof the CPS in case I need to make a more radical change.
Also, using XML makes it much easier for third party tools for read and write the data.


The other thing which I am dealing with from the beginning is support for Linux.
The existing Community CPS does not run on Linux ether using WINE or MONO. I’ve investigated why the existing CPS’s don’t work, but there are a multitude of reasons, and I found it was not practical to modify the Community CPS to run on Linux.
However, because I am starting from scratch, I can test the EXE on Linux, at each stage of the development and ensure it still works OK.

Note. I’m still going to write this using C# in Microsoft Visual Studio, using the DotNet framework, because this is what the Community CPS and official CPS is written in, but I will take care not to use any features which are incompatible with Linux.

This may mean that the “tree view” component, used on the left side of the CPS can’t be used, since I saw some errors in the Community CPS on Linux that seemed to be caused by the tree-view.

But I’m not sure whether a tree-view is necessary. And even if it is, there is an official Microsoft tree-view component, which is part of DotNet, which can be used instead, albeit I don’t think it looks as good.


Anyway, before diving straight in, and starting to write the new CPS, I’m going to download the CPS for a few other radios, and see if there are any better ways to display the data etc.


I have a feeling that its going to take quite a long time to write the new CPS, especially since I’m also writing the GUI and the codeplug interface for Kai’s firmware, but I know there are a few other people out there with C# Visual Studio programming experience, so with a bit of luck I may be able to get some help with this.



19 Responses

  1. ken

    its getting exciting, thanks for all your hard work

  2. Roger Clark

    I’ve done some more tests since posting the article and outputting to XML seems to be very easy.

    And doesn’t result in ridiculously large files…. Especially the channels no longer need to be duplicated for every TG, that people want to use on the same frequency.

    I’ll probably build some basic functionality in the next couple of weeks and begin integration into Kai’s firmware.

  3. Fernando

    Great work Roger!!

  4. Norman Heckscher

    Thanks for your efforts. I’m running XP tablet edition with all my Codeplugkit software and have not been able to get this edition to work. My knowledge of the MS ecosystem is limited and a few hours investigation tends to indicate that its the old chestnut of planned obsolescence with XP and dotNET 4.0 not playing well in 2019.

  5. Roger Clark

    I am building with DotNet 4 at the moment. But think I could build to use an older version.

    Its partially dependant on whether people using W7,8,8.1 or 10 could use it without needing to download a different version of DotNet.

    I think even W7 has EOL next year, so I may need to update to W8.1 later in 2020, but MS often backtrack on their EOL when their find a lot of commercial users are not happy with them for doing the EOL 😉

  6. Petr

    I have problem to use the radio with latest OpenGD-77 FW together to Community CPS. I got just a message that OpenGD-77 radio hasn’t been detected. Even i could see GD-77 using COM3 in device manager.

  7. Anonymous

    I am very new to this but my GD-77 appears to be working and the codeplug software functions, Win 10 Pro 64 bit, wel done with your efforts

  8. Mal

    Probably way too late to comment on this but rather than typical clunky GUI would a unix like config file together with a download/upload program be an easier and possibly better solution for amateur use.
    This would allow simple posting of channel lists using any convenient text editor, obviously parsing for correct / mandatory entries would be necessary as part of the upload. It would also be easier to port to other operating systems since there would be no dependency on any graphical framework

  9. Roger Clark

    I think someone has written a Unix command line uploader / downloader for the official Radioddity GD-77 firmware which uses USB HID for comms.

    I just decompiled and recompiled and modified the official CPS, and its currently being evolved to remove settings which are not in the OpenGD77 firmware.

    Writing stuff from scratch takes a huge amount of time, which no one has, hence it doesn’t often happen.

  10. Mal

    Many thanks for the steer on a possible command line uploader, I’ll have a search for it.
    I’ll openly admit my thoughts are initial musings but I’m thinking I could maybe write something that would read a text file with sections for channels, contacts etc and write that out as a binary codeplug. Probably just those two repetitive parts to begin with and standing data copied from an existing codeplug. Also thinking this might allow folk to organise their contacts in any favourite tool (eg a spreadsheet) and save it direct to an intermediate text format using simple macros. As you say time is the enemy but if I get a chance to look at it I’ll post back.
    Thanks again

  11. Mal

    Just to say thanks for the tip on linux codeplug tool (i previously thought linux config was limited to chirp), I found it at and at first glance it appears to do what i need for now including translation from/to text

  12. Bartolome Blanche

    Hola Roger
    quiero agradecer todo el tiempo y esfuerzo que han puesto en este proyecto del opengd77 acá en mi ciudad Viña Del Mar, ya somos dos radioaficionados que tenemos funcionando el opengd pero te quería preguntar si has experimentado poniendo dos GD77 conectados a la Raspberry pensado en usar como repetidor nosotros ya lo hicimos pero lamentablemente no resulto la pi star solo reconoce uno de los portátiles, después probamos creando dos opengdspot con dos RPI y dos portátiles pero cada cual con diferente frecuencia y tampoco resulta parece que falta el dato que envía y responde el RPT para dar la entrada de comunicación nosotros no somo ni informáticos ni electrónicos solo entusiastas de esto te lo comento por si tu ya exploraste esta posibilidad

  13. Roger Clark

    According to Google translate.

    hello Roger
    I want to thank all the time and effort they have put into this opengd77 project here in my city Viña Del Mar, we are already two radio amateurs that we have operating the opengd but I wanted to ask you if you have experienced putting two GD77s connected to the Raspberry thought to use as repeater we already did it but unfortunately it was not the pi star only recognizes one of the laptops, then we tried creating two opengdspot with two RPIs and two laptops but each one with different frequency and it does not appear that the data sent and answered by the RPT is missing to give the communication entry we are neither computer nor electronic only enthusiasts of this I tell you if you have already explored this possibility

    I think you are asking whether you can connect 2 GD-77s to a RPi to make a duplex repeater.

    The same question has been asked my several other people on the OpenGD77 forum, and No, it will not work.

    A duplex repeater requires the clock signal on both the Rx and the Tx to be synchonised, and its not possible to operate 2 radios independently because the Rx radio will not be able to determine which Ts you are transmitting on, as its not synchronised to the Tx radio.

  14. Paolo Borroni

    Hello Roger !

    Do you’ve planned a modify to import cvs user contact in this CPS ? Because at this time doesn’t work at all…

    Paolo IU2IEQ

  15. Roger Clark

    I think this bug was fixed in the OpenGD77 CPS.

    I’m no longer supporting the official GD-77 firmware.

  16. Dario Rovedo

    Hello Roger, in the future it will be possible to implement an firmware for the TYT MDUV390.
    Thanks for what you do with the Open GD 77
    Dario Rovedo IV3XHF

  17. Roger Clark

    The problem is the large around of time it takes.

    The OpenGD77 project started about 12 months ago. I think the total amount of time by the developers was probably more than 2000 hours

    I doubt anyone has that amount of time to convert to another radio, especially as no one gets any pay for writing the software and testing, and we have to buy our own radios etc, because the manufacturers will not help

  18. Jari

    Hi i asking where i found programming software for dm1801, i installing dm1081 open source firmware My radio.

Leave a Reply