Radioddity GD-77 CPS Enhanced channels export / import – Beta version

posted in: c#, DMR | 4

Following on from my last post about improving the GD-77 CPS, channels export / import improvements I have been working on.

I’ve not got a beta version which I think  may work OK.

So if anyone is wants to give it a try, the installer can be downloaded from my google drive  using this link


Please make sure you backup your current codeplug file before experimenting with this Beta version.


The functionality improvements are basically the same as I described in my last post.

The Channels screen, export feature now exports all the data associated with a channel, and additionally includes the digital Contact ID and digital Contact Type (Group or Private call), as well as the Rx Group name and the first Zone that contains the channel in question.

The export feature only exports the channels (rows) that you select on this screen, which allows a subset of the channels to be exported separately, e.g. you could select you analogue 70cm channels or analogue 2m channels, or just some digital channels etc.


When importing, the existing channels are not cleared first, which allows new channels to be appended.

If a channel with the same name that is being imported, already exists, the existing channel is updated.

If a channel that is being imported uses a digital Contact that is not in the Digital Contacts list, the contact will be added

If a channel that is being imported uses an Rx Group that does not exist, the Rx Group will be created and the digital Contact assigned to the channel will be added to the Rx Group.

If the Rx Group already exists, but the Contact assigned to the Channel is not in that Rx Group, it will be added to the Rx Group

If the Zone which uses the channel, does not exist, it will be created and the channel will be added to that Zone.

If the Zone already exists but the channel is not already in that Zone, the channel will be added to the Zone.


One thing to be aware of with Zones, is that if the channel was in more than one Zone in the codeplug from which it was exported, only the first Zone name in the list that contain the channel, will be included in the channel data.

Hence when importing, only one Zone will be created

Currently the Zones can’t be exported in their own right as the CPS is lacking several screens, e.g. there is no Rx Group lists screen, or Zones list screen or Scan Lists screen.

When I get time I will create these screens, but its taken me quite a while to get the Beta of the “enhanced” Channels  export/import system working, and I have other higher priority things that I need to do in the CPS, like combining the DMR ID and Contacts import, to make best use of the lmiited number of Digital Contacts which have 16 characters per ID, and hence can display the Callsign and Name, unlike the DMR ID system, which only allows 8 characters per ID, hence there is only room to display the Callsign 🙁



I’ve done some testing myself and have not had any major problems, but since I’m generally just clearing my codeplug and importing sections of my previous codeplug, its probably not the best of possible tests.

So I’m keen to get feedback from other people


BTW. One niggle I already came across is that I its impossible to remove all existing Zones or all existing Contacts or Rx Groups, so you can end up with Zone which is empty and unused at the start of the Zone list.

One way to get around this is to rename the Zone to the same name as a Zone in the data you are about to import – but I agree this is not ideal and I’ll need to find a better solution.

<rant mode=”on”>

However the main problem is the underlying data structure internally in the CPS.

IMHO the internal data in the CPS has a fundamental design problem. All the data storage is almost a direct copy of the binary structure, which is sent to the GD-77. i.e its in a format thats easily readable by the firmware in the GD-77 but is a pain to manipulate in the CPS.


I think the data structure internally to the CPS should have probably been in a form of a mini database with relational links between the different sections. Or perhaps using C# objects which referenced each other.

Rather than the arrays of objects which it actually uses.


This would make the CPS more flexible, and would just require a function to generate the binary data from the CPS object data and vice versa. But this was not the way the programmers at Radioddity chose to implement things, hence the lack of functionality in the CPS 🙁


4 Responses

  1. Wilhelm Onken

    Hi Roger, the new CPS seem to work. No problems so far. I agree with you regarding the unpretty way the programmers at Radioddity handled things.

  2. Roger Clark


    The only difference should be to the “Channels” screen.

    One thing I think may be a potential problem is that a contact with the same ID as an existing contact could be imported, if the name in the CSV is different.

    The CPS does not allow them to be created, but I don’t check for this at the moment, so I think I’ll need to change the code to check for Contact ID first and if thats found, then I’ll just assign the Contact to that existing Contact (and it will get the name of the contact thats already in the codeplug)

    There may be other problems but thats the only one I’ve though of so far


    I just found a bug in the existing CPS functions to check for duplicate ID’s

    It does not let you create a new contact that has the same ID and call type as an existing ID.

    But.. It does let you create a Private Call with the same ID as an existing TalkGroup and if you open that contact again, you can change it from a Private call to a Group call

    Then if you open the original contact that you have effectively duplicated, the CPS says you can’t have a duplicate and changes the contact Id to the next available TG eg. if you had a two TG9 contacts, it change the one you open to TG10

    For amateur radio use, I doubt a TG and PC could ever have the same ID, but to prevent TG clashes, I’ll need to add a function to find if the actual ID exists and if so use that ID for the channel thats being imported

  3. vk5qs

    Roger, just tried to download the latest beta in the page above but it gives a 404 error…

    Anthony, VK5QS

  4. Roger Clark

    Hi Anthony,

    Use the version linked in this post

Leave a Reply