libdrmconf 0.12.1
A library to program DMR radios.
|
Represents, encodes and decodes the device specific codeplug for a Radioddity GD-77. More...
#include <gd77_codeplug.hh>
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) |
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!
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.
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 ??? |