libdrmconf 0.12.1
A library to program DMR radios.
Loading...
Searching...
No Matches
GD77Codeplug Class Reference

Represents, encodes and decodes the device specific codeplug for a Radioddity GD-77. More...

#include <gd77_codeplug.hh>

Inheritance diagram for GD77Codeplug:
Collaboration diagram for GD77Codeplug:

Classes

class  ChannelElement
 Channel representation within the binary codeplug. More...
 
class  ContactElement
 Specific codeplug representation of a DMR contact for the GD77. More...
 
class  GroupListBankElement
 Table of RX group lists. More...
 
class  GroupListElement
 Represents an RX group list within the codeplug. More...
 
struct  Limit
 Some limits for the GD77 codeplug. More...
 
struct  Offset
 Some internal offsets within the codeplug. More...
 
class  ScanListBankElement
 Bank of scan lists for the GD77. More...
 
class  ScanListElement
 Represents a single scan list within the GD77 codeplug. More...
 

Public Member Functions

 GD77Codeplug (QObject *parent=nullptr)
 Constructs an empty codeplug for the GD-77.
 
void clearGeneralSettings ()
 
bool encodeGeneralSettings (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool decodeGeneralSettings (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearButtonSettings ()
 
bool encodeButtonSettings (Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack())
 
bool decodeButtonSettings (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearMessages ()
 
bool encodeMessages (Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack())
 
bool decodeMessages (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearScanLists ()
 
bool encodeScanLists (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool createScanLists (Context &ctx, const ErrorStack &err=ErrorStack())
 
bool linkScanLists (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearContacts ()
 
bool encodeContacts (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool createContacts (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearDTMFContacts ()
 
bool encodeDTMFContacts (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool createDTMFContacts (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearChannels ()
 
bool encodeChannels (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool createChannels (Context &ctx, const ErrorStack &err=ErrorStack())
 
bool linkChannels (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearBootSettings ()
 
void clearMenuSettings ()
 
void clearBootText ()
 
bool encodeBootText (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool decodeBootText (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearVFOSettings ()
 
void clearZones ()
 
bool encodeZones (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool createZones (Context &ctx, const ErrorStack &err=ErrorStack())
 
bool linkZones (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearGroupLists ()
 
bool encodeGroupLists (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 
bool createGroupLists (Context &ctx, const ErrorStack &err=ErrorStack())
 
bool linkGroupLists (Context &ctx, const ErrorStack &err=ErrorStack())
 
void clearEncryption ()
 
bool encodeEncryption (const Flags &flags, Context &ctx, const ErrorStack &err)
 
bool createEncryption (Context &ctx, const ErrorStack &err)
 
bool linkEncryption (Context &ctx, const ErrorStack &err)
 

Detailed Description

Represents, encodes and decodes the device specific codeplug for a Radioddity GD-77.

The GD-77 & GD-77S codeplugs are almost identical to the Radioddity/Baofeng RD5RCodeplug, in fact the memory layout (see below) and almost all of the single components of the codeplug are encoded in exactly the same way. Obviously, when Baofeng and Radioddity joint to create the RD5R, Radioddity provided the firmware. However, there are some small subtile differences between these two codeplug formats, requiring a separate class for the GD-77. For example, the contacts and scan-lists swapped the addresses and the channel_t encoding analog and digital channels for the codeplugs are identical except for the squelch settings. Thanks for that!

Matching firmware versions

This class implements the codeplug for the firmware version 4.03.06. The codeplug format usually does not change much with firmware revisions, in particular not with older radios. Unfortunately, it is not possible to detect the firmware version running on the device. Consequenly, only the newest firmware version is supported. However, older revisions may still work.

Codeplug structure within radio

The memory representation of the codeplug within the radio is divided into two segments. The first segment starts at the address 0x00080 and ends at 0x07c00 while the second section starts at 0x08000 and ends at 0x1e300.

Start End Size Content
First segment 0x00080-0x07c00
0x00080 0x000e0 0x0070 ??? Unknown ???
0x000e0 0x000ec 0x000c General settings, see RadioddityCodeplug::GeneralSettingsElement.
0x000ec 0x00108 0x0028 ??? Unknown ???
0x00108 0x00128 0x0020 Button settings, see RadioddityCodeplug::ButtonSettingsElement.
0x00128 0x01370 0x1248 32 preset message texts, see RadioddityCodeplug::MessageBankElement.
0x01370 0x01790 0x0420 ??? Unknown ???
0x01790 0x02dd0 0x1640 64 scan lists, see GD77Codeplug::ScanListBankElement and GD77Codeplug::ScanListElement
0x02dd0 0x02f88 0x01b8 ??? Unknown ???
0x02f88 0x03388 0x0400 DTMF contacts, see RadioddityCodeplug::DTMFContactElement.
0x03388 0x03780 0x03f8 ??? Unknown ???
0x03780 0x05390 0x1c10 First 128 channels (bank 0), see RadioddityCodeplug::ChannelBankElement and GD77Codeplug::ChannelElement
0x05390 0x07518 0x2188 ??? Unknown ???
0x07518 0x07538 0x0020 Boot settings, see RadioddityCodeplug::BootSettingsElement.
0x07538 0x07540 0x0008 Menu settings, see RadioddityCodeplug::MenuSettingsElement.
0x07540 0x07560 0x0020 2 intro lines, RadioddityCodeplug::BootTextElement.
0x07560 0x07590 0x0030 ??? Unknown ???
0x07590 0x075c8 0x0038 VFO A settings RadioddityCodeplug::VFOChannelElement
0x075c8 0x07600 0x0038 VFO B settings RadioddityCodeplug::VFOChannelElement
0x07600 0x07c00 0x0600

??? Unknown ???

Second segment 0x08000-0x1e300
0x08000 0x08010 0x0010 ??? Unknown ???
0x08010 0x0af10 0x2f00 68 zones of 80 channels each, see RadioddityCodeplug::ZoneBankElement RadioddityCodeplug::ZoneElement.
0x0af10 0x0b1b0 0x02a0 ??? Unknown ???
0x0b1b0 0x17620 0xc470 Remaining 896 channels (bank 1-7), see RadioddityCodeplug::ChannelBankElement, GD77Codeplug::ChannelElement.
0x17620 0x1d620 0x6000 1024 contacts, see GD77Codeplug::ContactElement.
0x1d620 0x1eaa0 0x1480 64 RX group lists, see GD77Codeplug::GroupListBankElement, GD77Codeplug::GroupListElement.
0x1eaa0 0x1eb00 0x0060 ??? Unknown ???

The documentation for this class was generated from the following files: