libdrmconf  0.12.0
A library to program DMR radios.
Classes | Public Member Functions | List of all members
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:
Inheritance graph
[legend]
Collaboration diagram for GD77Codeplug:
Collaboration graph
[legend]

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  Offset
 Internal used 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 ()
 Clears the general settings in the codeplug.
 
bool encodeGeneralSettings (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Updates the general settings from the given configuration.
 
bool decodeGeneralSettings (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Updates the given configuration from the general settings.
 
void clearButtonSettings ()
 Clears the button settings.
 
bool encodeButtonSettings (Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack())
 Encodes button settings.
 
bool decodeButtonSettings (Context &ctx, const ErrorStack &err=ErrorStack())
 Decodes the button settings.
 
void clearMessages ()
 Clears the messages.
 
bool encodeMessages (Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack())
 Encodes preset messages.
 
bool decodeMessages (Context &ctx, const ErrorStack &err=ErrorStack())
 Decodes preset messages.
 
void clearScanLists ()
 Clears all scan lists.
 
bool encodeScanLists (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes all scan lists.
 
bool createScanLists (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Creates all scan lists.
 
bool linkScanLists (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Links all scan lists.
 
void clearContacts ()
 Clears all contacts in the codeplug.
 
bool encodeContacts (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes all digital contacts in the configuration into the codeplug.
 
bool createContacts (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Adds a digital contact to the configuration for each one in the codeplug.
 
void clearDTMFContacts ()
 Clears all DTMF contacts in the codeplug.
 
bool encodeDTMFContacts (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes all DTMF contacts.
 
bool createDTMFContacts (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Adds all DTMF contacts to the configuration.
 
void clearChannels ()
 Clear all channels.
 
bool encodeChannels (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encode all channels.
 
bool createChannels (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Adds all defined channels to the configuration.
 
bool linkChannels (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Links all channels.
 
void clearBootSettings ()
 Clear boot settings.
 
void clearMenuSettings ()
 Clears menu settings.
 
void clearBootText ()
 Clears boot text.
 
bool encodeBootText (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes boot text.
 
bool decodeBootText (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Updates the given configuration from the boot text settings.
 
void clearVFOSettings ()
 Clears the VFO settings.
 
void clearZones ()
 Clears all zones.
 
bool encodeZones (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes zones.
 
bool createZones (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Adds zones to the configuration.
 
bool linkZones (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Links all zones within the configuration.
 
void clearGroupLists ()
 Clears all group lists.
 
bool encodeGroupLists (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes all group lists.
 
bool createGroupLists (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Creates all group lists.
 
bool linkGroupLists (Config *config, Context &ctx, const ErrorStack &err=ErrorStack())
 Links all group lists.
 
void clearEncryption ()
 Clears all encryption keys.
 
bool encodeEncryption (Config *config, const Flags &flags, Context &ctx, const ErrorStack &err)
 Encodes all encryption keys defined.
 
bool createEncryption (Config *config, Context &ctx, const ErrorStack &err)
 Creates all encryption keys.
 
bool linkEncryption (Config *config, Context &ctx, const ErrorStack &err)
 Links all encryption keys.
 
- Public Member Functions inherited from RadioddityCodeplug
virtual ~RadioddityCodeplug ()
 Destructor.
 
virtual void clear ()
 Clears and resets the complete codeplug to some default values.
 
bool index (Config *config, Context &ctx, const ErrorStack &err=ErrorStack()) const
 Indexes all elements of the codeplug. More...
 
bool decode (Config *config, const ErrorStack &err=ErrorStack())
 Decodes a binary codeplug to the given abstract configuration config. More...
 
bool postprocess (Config *config, const ErrorStack &err) const
 Retruns a post-processed configuration of the decoded config. More...
 
Configpreprocess (Config *config, const ErrorStack &err) const
 Retruns a prepared configuration for this particular radio. More...
 
bool encode (Config *config, const Flags &flags=Flags(), const ErrorStack &err=ErrorStack())
 Encodes a given abstract configuration (config) to the device specific binary code-plug. More...
 
virtual bool decodeElements (Context &ctx, const ErrorStack &err=ErrorStack())
 Decodes the binary codeplug and stores its content in the given generic configuration using the given context.
 
virtual bool encodeElements (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes the given generic configuration as a binary codeplug using the given context.
 
- Public Member Functions inherited from Codeplug
virtual ~Codeplug ()
 Destructor.
 
- Public Member Functions inherited from DFUFile
 DFUFile (QObject *parent=nullptr)
 Constructs an empty DFU file object.
 
uint32_t size () const
 Returns the total size of the DFU file.
 
uint32_t memSize () const
 Returns the total memory size stored in the DFU file.
 
int numImages () const
 Returns the number of images within the DFU file.
 
const Imageimage (int i) const
 Returns a reference to the i-th image of the file.
 
Imageimage (int i)
 Returns a reference to the i-th image of the file.
 
void addImage (const QString &name, uint8_t altSettings=1)
 Adds a new image to the file.
 
void addImage (const Image &img)
 Adds an image to the file.
 
void remImage (int i)
 Deletes the i-th image from the file.
 
bool isAligned (unsigned blocksize) const
 Checks if all image addresses and sizes is aligned with the given block size.
 
bool read (const QString &filename, const ErrorStack &err=ErrorStack())
 Reads the specified DFU file. More...
 
bool read (QFile &file, const ErrorStack &err=ErrorStack())
 Reads the specified DFU file. More...
 
bool write (const QString &filename, const ErrorStack &err=ErrorStack())
 Writes to the specified file. More...
 
bool write (QFile &file, const ErrorStack &err=ErrorStack())
 Writes to the specified file. More...
 
void dump (QTextStream &stream) const
 Dumps a text representation of the DFU file structure to the specified text stream.
 
virtual bool isAllocated (uint32_t offset, uint32_t img=0) const
 Returns true if the specified address (and image) is allocated.
 
virtual unsigned char * data (uint32_t offset, uint32_t img=0)
 Returns a pointer to the encoded raw data at the specified offset.
 
virtual const unsigned char * data (uint32_t offset, uint32_t img=0) const
 Returns a const pointer to the encoded raw data at the specified offset.
 

Additional Inherited Members

- Protected Member Functions inherited from RadioddityCodeplug
 RadioddityCodeplug (QObject *parent=nullptr)
 Hidden constructor, use a device specific class to instantiate.
 
- Protected Member Functions inherited from Codeplug
 Codeplug (QObject *parent=nullptr)
 Hidden default constructor.
 
- Protected Attributes inherited from DFUFile
QVector< Image_images
 The list of images.
 

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: