Open-GD77 CPS

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

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.



7 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

Leave a Reply