|
libdrmconf 0.13.2
A library to program DMR radios.
|
Represents the device specific binary codeplug for Anytone AT-D878UV radios. More...
#include <d878uv_codeplug.hh>


Classes | |
| class | AESEncryptionKeyBitmapElement |
| Represents the bitmap, indicating which AES key is valid. More... | |
| class | AESEncryptionKeyElement |
| Represents an AES encryption key. More... | |
| class | AnalogAPRSMessageElement |
| Represents an (analog/FM) APRS message. More... | |
| class | AnalogAPRSRXEntryElement |
| Represents an analog APRS RX entry. More... | |
| class | APRSSettingsElement |
| Represents the APRS settings within the binary D878UV codeplug. More... | |
| class | ARC4EncryptionKeyBitmapElement |
| Represents the bitmap, indicating which ARC4 key is valid. More... | |
| class | ARC4EncryptionKeyElement |
| Represents an ARC4 encryption key. More... | |
| class | ChannelElement |
| Represents the actual channel encoded within the binary D878UV codeplug. More... | |
| class | ChannelExtensionElement |
| Starting from AT-D878UV, all AnyTone devices encode an channel settings extension element at an offset 0x2000 to the original channel. More... | |
| class | ExtendedSettingsElement |
| General settings extension element for the D878UV. More... | |
| class | FMAPRSFrequencyNamesElement |
| Implements some storage to hold the names for the FM APRS frequencies. More... | |
| class | GeneralSettingsElement |
| Represents the general config of the radio within the D878UV binary codeplug. More... | |
| class | HiddenZoneBitmapElement |
| Encodes the bitmap, indicating which zone is hidden. More... | |
| struct | Limit |
| Some limits. More... | |
| struct | NameColor |
| Channel name and call-sign colors supported by the D878UV. More... | |
| struct | Offset |
| Internal offsets within the codeplug. More... | |
| class | RadioInfoElement |
| Encodes some information about the radio and firmware. More... | |
| class | RoamingChannelBitmapElement |
| Represents the bitmap, indicating which roaming channel is valid. More... | |
| class | RoamingChannelElement |
| Implements the binary representation of a roaming channel within the codeplug. More... | |
| class | RoamingZoneBitmapElement |
| Represents the bitmap, indicating which roaming zone is valid. More... | |
| class | RoamingZoneElement |
| Represents a roaming zone within the binary codeplug. More... | |
| struct | TextColor |
| Text colors supported by the D878UV. More... | |
Public Member Functions | |
| D878UVCodeplug (QObject *parent=nullptr) | |
| Empty constructor. | |
| Config * | preprocess (Config *config, const ErrorStack &err) const |
| Returns a prepared configuration for this particular radio. | |
Public Member Functions inherited from D868UVCodeplug | |
| D868UVCodeplug (QObject *parent=nullptr) | |
| Empty constructor. | |
Public Member Functions inherited from AnytoneCodeplug | |
| virtual | ~AnytoneCodeplug () |
| Destructor. | |
| virtual void | clear () |
| Clears and resets the complete codeplug to some default values. | |
| bool | encode (Config *config, const Flags &flags, const ErrorStack &err) |
Encodes a given abstract configuration (config) to the device specific binary code-plug. | |
| bool | decode (Config *config, const ErrorStack &err) |
Decodes a binary codeplug to the given abstract configuration config. | |
| bool | postprocess (Config *config, const ErrorStack &err) const |
| Returns a post-processed configuration of the decoded config. | |
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 Image & | image (int i) const |
Returns a reference to the i-th image of the file. | |
| Image & | image (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. | |
| bool | read (QFile &file, const ErrorStack &err=ErrorStack()) |
| Reads the specified DFU file. | |
| bool | write (const QString &filename, const ErrorStack &err=ErrorStack()) |
| Writes to the specified file. | |
| bool | write (QFile &file, const ErrorStack &err=ErrorStack()) |
| Writes to the specified file. | |
| 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. | |
Protected Member Functions | |
| D878UVCodeplug (const QString &label, QObject *parent=nullptr) | |
| Hidden constructor. | |
| bool | allocateBitmaps () |
| Allocates the bitmaps. | |
| void | setBitmaps (Context &ctx) |
| Sets all bitmaps for the given config. | |
| void | allocateForDecoding () |
| Allocate all code-plug elements that must be downloaded for decoding. | |
| void | allocateUpdated () |
| Allocate all code-plug elements that must be written back to the device to maintain a working codeplug. | |
| void | allocateForEncoding () |
| Allocate all code-plug elements that are defined through the common Config. | |
| bool | encodeElements (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes the given config (via context) to the binary codeplug. | |
| bool | createElements (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Creates all config objects from the downloaded codeplug. | |
| bool | linkElements (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Links all previously created config objects. | |
| void | allocateChannels () |
| Allocate channels from bitmap. | |
| bool | encodeChannels (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode channels into codeplug. | |
| bool | createChannels (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create channels from codeplug. | |
| bool | linkChannels (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link channels. | |
| virtual void | allocateZones () |
| Allocate zones from bitmaps. | |
| virtual bool | encodeZone (int i, Zone *zone, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Function to encode a single zone. | |
| virtual bool | decodeZone (int i, Zone *zone, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Function to decode a single zone. | |
| void | allocateGeneralSettings () |
| Allocates general settings memory section. | |
| bool | encodeGeneralSettings (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes the general settings section. | |
| bool | decodeGeneralSettings (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decodes the general settings section. | |
| bool | linkGeneralSettings (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link the general settings. | |
| void | allocateGPSSystems () |
| Allocates GPS settings memory section. | |
| bool | encodeGPSSystems (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes the GPS settings section. | |
| bool | createGPSSystems (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create GPS systems from codeplug. | |
| bool | linkGPSSystems (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link GPS systems. | |
| virtual void | allocateRoaming () |
| Allocates memory to store all roaming channels and zones. | |
| virtual bool | encodeRoaming (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes the roaming channels and zones. | |
| virtual bool | createRoaming (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Creates roaming channels and zones from codeplug. | |
| virtual bool | linkRoaming (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Links roaming channels and zones. | |
| virtual void | allocateAESKeys () |
| Allocates memory to encode/decode AES keys. | |
| virtual bool | encodeAESKeys (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode all AES keys. | |
| virtual bool | createAESKeys (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decode AES keys from the codeplug. | |
| virtual void | allocateARC4Keys () |
| Allocates memory to encode/decode ARC4 keys. | |
| virtual bool | encodeARC4Keys (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode all ARC4 keys. | |
| virtual bool | createARC4Keys (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decode ARC4 keys from the codeplug. | |
Protected Member Functions inherited from D868UVCodeplug | |
| D868UVCodeplug (const QString &label, QObject *parent=nullptr) | |
| Hidden constructor constructor. | |
| virtual void | allocateVFOSettings () |
| Allocate VFO settings. | |
| virtual void | allocateContacts () |
| Allocate contacts from bitmaps. | |
| virtual bool | encodeContacts (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode contacts into codeplug. | |
| virtual bool | createContacts (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create contacts from codeplug. | |
| virtual void | allocateAnalogContacts () |
| Allocate analog contacts from bitmaps. | |
| virtual bool | encodeAnalogContacts (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode analog contacts into codeplug. | |
| virtual bool | createAnalogContacts (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create analog contacts from codeplug. | |
| virtual void | allocateRadioIDs () |
| Allocate radio IDs from bitmaps. | |
| virtual bool | encodeRadioID (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode radio ID into codeplug. | |
| virtual bool | setRadioID (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Set radio ID from codeplug. | |
| virtual void | allocateRXGroupLists () |
| Allocates RX group lists from bitmaps. | |
| virtual bool | encodeRXGroupLists (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode RX group lists into codeplug. | |
| virtual bool | createRXGroupLists (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create RX group lists from codeplug. | |
| virtual bool | linkRXGroupLists (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link RX group lists. | |
| virtual bool | encodeZones (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode zones into codeplug. | |
| virtual bool | createZones (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create zones from codeplug. | |
| virtual bool | linkZones (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link zones. | |
| virtual bool | linkZone (int i, Zone *zone, bool isB, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Function to link a single zone. | |
| virtual void | allocateScanLists () |
| Allocate scanlists from bitmaps. | |
| virtual bool | encodeScanLists (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encode scan lists into codeplug. | |
| virtual bool | createScanLists (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create scan lists from codeplug. | |
| virtual bool | linkScanLists (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link scan lists. | |
| virtual void | allocateZoneChannelList () |
| Allocates zone channel list memory section. | |
| virtual void | allocateDTMFNumbers () |
| Allocates DTMF number list memory section. | |
| virtual void | allocateBootSettings () |
| Allocates boot settings memory section. | |
| virtual bool | encodeBootSettings (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes the boot settings section. | |
| virtual bool | decodeBootSettings (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decodes the boot settings section. | |
| virtual void | allocateSMSMessages () |
| Allocate prefab SMS messages. | |
| virtual bool | encodeSMSMessages (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes prefab SMS messages. | |
| virtual bool | createSMSMessages (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Create SMS messages from codeplug. | |
| virtual bool | linkSMSMessages (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Link SMS messages. | |
| virtual void | allocateHotKeySettings () |
| Allocates hot key settings memory section. | |
| virtual void | allocateRepeaterOffsetFrequencies () |
| Allocates repeater offset settings memory section. | |
| virtual bool | encodeRepeaterOffsetFrequencies (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes auto-repeater offset frequencies. | |
| virtual bool | decodeRepeaterOffsetFrequencies (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decodes auto-repeater offset frequencies. | |
| virtual void | allocatDMREncryptionKeys () |
| Allocates DMR encryption keys. | |
| virtual bool | encodeDMREncryptionKeys (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) |
| Encodes DMR encryption keys. | |
| virtual bool | decodeDMREncryptionKeys (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decodes DMR encryption keys. | |
| virtual void | allocatEnhancedEncryptionKeys () |
| Allocates 'enhanced' encryption keys. | |
| virtual void | allocateAlarmSettings () |
| Allocates alarm settings memory section. | |
| virtual void | allocateFMBroadcastSettings () |
| Allocates FM broadcast settings memory section. | |
| virtual void | allocate5ToneIDs () |
| Allocates all 5-Tone IDs used. | |
| virtual void | allocate5ToneFunctions () |
| Allocates 5-Tone functions. | |
| virtual void | allocate5ToneSettings () |
| Allocates 5-Tone settings. | |
| virtual void | allocate2ToneIDs () |
| Allocates all 2-Tone IDs used. | |
| virtual void | allocate2ToneFunctions () |
| Allocates 2-Tone functions. | |
| virtual void | allocate2ToneSettings () |
| Allocates 2-Tone settings. | |
| virtual void | allocateDTMFSettings () |
| Allocates DTMF settings. | |
Protected Member Functions inherited from AnytoneCodeplug | |
| AnytoneCodeplug (const QString &label, QObject *parent=nullptr) | |
| Hidden constructor. | |
| virtual bool | index (Config *config, Context &ctx, const ErrorStack &err=ErrorStack()) const |
| Indexes all elements of the codeplug. | |
| virtual bool | decodeElements (Context &ctx, const ErrorStack &err=ErrorStack()) |
| Decodes the downloaded codeplug. | |
Protected Member Functions inherited from Codeplug | |
| Codeplug (QObject *parent=nullptr) | |
| Hidden default constructor. | |
Additional Inherited Members | |
Protected Attributes inherited from AnytoneCodeplug | |
| QString | _label |
| Holds the image label. | |
Protected Attributes inherited from DFUFile | |
| QVector< Image > | _images |
| The list of images. | |
Represents the device specific binary codeplug for Anytone AT-D878UV radios.
In contrast to many other code-plugs, the code-plug for Anytone radios are spread over a large memory area. In principle, this is a good idea, as it allows one to upload only the portion of the codeplug that is actually configured. For example, if only a small portion of the available contacts and channels are used, the amount of data that is written to the device can be reduced.
However, the implementation of this idea in this device is utter shit. The amount of fragmentation of the codeplug is overwhelming. For example, while channels are organized more or less nicely in continuous banks, zones are distributed throughout the entire code-plug. That is, the names of zones are located in a different memory section that the channel lists. Some lists are defined though bit-masks others by byte-masks. All bit-masks are positive, that is 1 indicates an enabled item while the bit-mask for contacts is inverted.
In general the code-plug is huge and complex. Moreover, the radio provides a huge amount of options and features. To this end, reverse-engineering this code-plug was a nightmare.
More over, the binary code-plug file generate by the windows CPS does not directly relate to the data being written to the radio. To this end the code-plug has been reverse-engineered using wireshark to monitor the USB communication between the windows CPS (running in a virtual box) and the device. The latter makes the reverse-engineering particularly cumbersome.
For more details, see https://dmr-tools.github.io/codeplugs.
|
protectedvirtual |
|
protectedvirtual |
Allocate channels from bitmap.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Allocate all code-plug elements that must be downloaded for decoding.
All code-plug elements within the radio that are not represented within the common Config are omitted.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Allocate all code-plug elements that are defined through the common Config.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Allocates general settings memory section.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Allocates GPS settings memory section.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Allocate all code-plug elements that must be written back to the device to maintain a working codeplug.
These elements might be updated during encoding.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Allocate zones from bitmaps.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Create channels from codeplug.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Creates all config objects from the downloaded codeplug.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Create GPS systems from codeplug.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Decodes the general settings section.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Function to decode a single zone.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Encode channels into codeplug.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Encodes the given config (via context) to the binary codeplug.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Encodes the general settings section.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Encodes the GPS settings section.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Function to encode a single zone.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Link channels.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Links all previously created config objects.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Link the general settings.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Link GPS systems.
Reimplemented from D868UVCodeplug.
|
virtual |
Returns a prepared configuration for this particular radio.
All unsupported features are removed from the copy. The default implementation only copies the config.
Reimplemented from D868UVCodeplug.
|
protectedvirtual |
Sets all bitmaps for the given config.
Reimplemented from D868UVCodeplug.