libdrmconf  0.11.3
A library to program DMR radios.
Classes | Public Types | Public Member Functions | Protected Member Functions | List of all members
DMR6X2UVCodeplug Class Reference

Represents the device specific binary codeplug for BTECH DMR-6X2UV radios. More...

#include <dmr6x2uv_codeplug.hh>

Inheritance diagram for DMR6X2UVCodeplug:
Inheritance graph
[legend]
Collaboration diagram for DMR6X2UVCodeplug:
Collaboration graph
[legend]

Classes

class  APRSSettingsElement
 Represents the APRS settings within the binary DMR-6X2UV codeplug. More...
 
struct  BackgroundColor
 Background colors supported by the DMR-6X2UV. More...
 
class  ChannelElement
 Implements the channel element for the BTECH DMR-6X2UV. More...
 
struct  Color
 Colors supported by the DMR-6X2UV. More...
 
class  ExtendedSettingsElement
 Implements some settings extension for the BTECH DMR-6X2UV. More...
 
struct  FontColor
 Font colors supported by the DMR-6X2UV. More...
 
class  GeneralSettingsElement
 General settings element for the DMR-6X2UV. More...
 
struct  Limit
 Some limits for the codeplug. More...
 
struct  Offset
 Some internal used offsets within the codeplug. More...
 
struct  Size
 Some internal used sizes. More...
 

Public Types

typedef D878UVCodeplug::RoamingChannelBitmapElement RoamingChannelBitmapElement
 Reuse roaming channel bitmap from D878UV.
 
typedef D878UVCodeplug::RoamingChannelElement RoamingChannelElement
 Reuse roaming channel from D878UV.
 
typedef D878UVCodeplug::RoamingZoneBitmapElement RoamingZoneBitmapElement
 Reuse roaming zone bitmap from D878UV.
 
typedef D878UVCodeplug::RoamingZoneElement RoamingZoneElement
 Reuse roaming zone from D878UV.
 

Public Member Functions

 DMR6X2UVCodeplug (const QString &label, QObject *parent=nullptr)
 Hidden constructor.
 
 DMR6X2UVCodeplug (QObject *parent=nullptr)
 Empty constructor.
 
- 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. More...
 
bool decode (Config *config, const ErrorStack &err)
 Decodes a binary codeplug to the given abstract configuration config. More...
 
- 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.
 

Protected Member Functions

bool allocateBitmaps ()
 Allocates the bitmaps. More...
 
void setBitmaps (Context &ctx)
 Sets all bitmaps for the given config.
 
void allocateForDecoding ()
 Allocate all code-plug elements that must be downloaded for decoding. More...
 
void allocateUpdated ()
 Allocate all code-plug elements that must be written back to the device to maintain a working codeplug. More...
 
void allocateForEncoding ()
 Allocate all code-plug elements that are defined through the common Config.
 
bool decodeElements (Context &ctx, const ErrorStack &err=ErrorStack())
 Decodes the downloaded codeplug.
 
bool encodeElements (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes the given config (via context) to the binary codeplug.
 
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.
 
virtual bool encodeChannels (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encode channels into codeplug.
 
virtual bool createChannels (Context &ctx, const ErrorStack &err=ErrorStack())
 Create channels from codeplug.
 
virtual bool linkChannels (Context &ctx, const ErrorStack &err=ErrorStack())
 Link channels.
 
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.
 
- Protected Member Functions inherited from D868UVCodeplug
 D868UVCodeplug (const QString &label, QObject *parent=nullptr)
 Hidden constructor constructor.
 
virtual void allocateChannels ()
 Allocate channels from bitmap.
 
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 void allocateZones ()
 Allocate zones from bitmaps.
 
virtual bool encodeZones (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encode zones into codeplug.
 
virtual bool encodeZone (int i, Zone *zone, bool isB, const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Function to encode a single zone.
 
virtual bool createZones (Context &ctx, const ErrorStack &err=ErrorStack())
 Create zones from codeplug.
 
virtual bool decodeZone (int i, Zone *zone, bool isB, Context &ctx, const ErrorStack &err=ErrorStack())
 Function to decode a single zone.
 
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 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 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. More...
 
- 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.
 

Detailed Description

Represents the device specific binary codeplug for BTECH DMR-6X2UV radios.

This codeplug implementation is compatible with firmware revision 2.04.

Codeplug structure within radio

Channels
Start Size Content
024C1500 000200 Bitmap of 4000 channels, default 0x00, 0x00 padded.
00800000 max. 002000 Channel bank 0 of up to 128 channels, see AnytoneCodeplug::ChannelElement 64 b each.
00840000 max. 002000 Channel bank 1 of up to 128 channels.
00FC0000 max. 000800 Channel bank 32, up to 32 channels.
00FC0800 000040 VFO A settings, see AnytoneCodeplug::ChannelElement.
00FC0840 000040

VFO B settings, see AnytoneCodeplug::ChannelElement.

Zones
Start Size Content
024C1300 000020 Bitmap of 250 zones.
01000000 max. 01f400 250 zones channel lists of 250 16bit indices each. 0-based, little endian, default/padded=0xffff. Offset between channel lists 0x200, size of each list 0x1f4.
02540000 max. 001f40 250 Zone names. Each zone name is up to 16 ASCII chars long and gets 0-padded to 32b.
02500100 000400

Zone A & B channel list.

Roaming
Start Size Content
01042000 000020 Roaming channel bitmask, up to 250 bits, 0-padded, default 0.
01040000 max. 0x1f40 Optional up to 250 roaming channels, of 32b each. See D868UVCodeplug::RoamingChannelElement for details.
01042080 000010 Roaming zone bitmask, up to 64 bits, 0-padded, default 0.
01043000 max. 0x2000

Optional up to 64 roaming zones, of 128b each. See D868UVCodeplug::RoamingZoneElement for details.

Contacts
Start Size Content
02600000 max. 009C40 Index list of valid contacts. 10000 32bit indices, little endian, default 0xffffffff
02640000 000500 Contact bitmap, 10000 bit, inverted, default 0xff, 0x00 padded.
02680000 max. 0f4240 10000 contacts, see AnytoneCodeplug::ContactElement. As each contact is 100b, they do not align with the 16b blocks being transferred to the device. Hence contacts are organized internally in groups of 4 contacts forming a "bank".
04340000 max. 013880

DMR ID to contact index map, see AnytoneCodeplug::ContactMapElement. Sorted by ID, empty entries set to 0xffffffffffffffff.

Analog Contacts
Start Size Content
02900000 000080 Index list of valid analog contacts.
02900100 000080 Bytemap for 128 analog contacts.
02940000 max. 000180

128 analog contacts. See AnytoneCodeplug::DTMFContactElement. As each analog contact is 24b, they do not align with the 16b transfer block-size. Hence analog contacts are internally organized in groups of 2.

RX Group Lists
Start Size Content
025C0B10 000020 Bitmap of 250 RX group lists, default/padding 0x00.
02980000 max. 000120 Grouplist 0, see AnytoneCodeplug::GroupListElement.
02980200 max. 000120 Grouplist 1
... ... ...
0299f200 max. 000120

Grouplist 250

Scan lists
Start Size Content
024C1340 000020 Bitmap of 250 scan lists.
01080000 000090 Bank 0, Scanlist 1, see AnytoneCodeplug::ScanListElement.
01080200 000090 Bank 0, Scanlist 2
... ... ...
01081E00 000090 Bank 0, Scanlist 16
010C0000 000090 Bank 1, Scanlist 17
... ... ...
01440000 000090 Bank 15, Scanlist 241
... ... ...
01441400 000090

Bank 15, Scanlist 250

Radio IDs
Start Size Content
024C1320 000020 Bitmap of 250 radio IDs.
02580000 max. 001f40

250 Radio IDs. See AnytoneCodeplug::RadioIDElement.

GPS/APRS
Start Size Content
02501000 0000A0 APRS settings (DMR + FM), see DMR6X2UVCodeplug::APRSSettingsElement.
02501200 000040 APRS Text, up to 60 chars ASCII, 0-padded.
02501280 000030 GPS template message, ASCII, 0-padded.
02502000 000080

FM APRS frequency names, see FMAPRSFrequencyNamesElement. This element is not part of the manufacturer codeplug. QDMR uses this memory section to store additional information.

General Settings
Start Size Content
02500000 0000e0 General settings, see DMR6X2UVCodeplug::GeneralSettingsElement.
02500500 000100 DTMF list
02500600 000030 Power on settings, see AnytoneCodeplug::BootSettingsElement.
02501400 000030 Settings extension, see DMR6X2UVCodeplug::ExtendedSettingsElement.
024C2000 0003F0

List of 250 auto-repeater offset frequencies. 32bit little endian frequency in 10Hz. I.e., 600kHz = 60000. Default 0x00000000, 0x00 padded.

Messages
Start Size Content
01640000 max. 000100 Some kind of linked list of messages. See AnytoneCodeplug::MessageListElement. Each entry has a size of 0x10.
01640800 000090 Bytemap of up to 100 valid messages. 0x00=valid, 0xff=invalid, remaining 46b set to 0x00.
02140000 max. 000800 Bank 0, Messages 1-8. Each message consumes 0x100b. See AnytoneCodeplug::MessageElement.
02180000 max. 000800 Bank 1, Messages 9-16
... ... ...
02440000 max. 000800

Bank 12, Messages 97-100

Hot Keys
Start Size Content
025C0000 000100 4 analog quick-call settings. See AnytoneCodeplug::AnalogQuickCallElement.
025C0B00 000010 Status message bitmap.
025C0100 000400 Up to 32 status messages. Length unknown, offset 0x20. ASCII 0x00 terminated and padded.
025C0500 000360

18 hot-key settings, see AnytoneCodeplug::HotKeyElement

Encryption
Start Size Content
024C1700 000040 32 Encryption IDs, 0-based, 16bit big-endian.
024C1800 000500 32 DMR-Encryption keys, see D868UVCodeplug::dmr_encryption_key_t, 40b each.
025C1000 004000

Up to 256 AES encryption keys. See D878UVCodeplug::AESEncryptionKeyElement.

Misc
Start Size Content
024C1400 000020 Alarm setting, see AnytoneCodeplug::AlarmSettingElement.
024C1440 000030

Digital alarm settings extension, see AnytoneCodeplug::DigitalAlarmExtensionElement.

FM Broadcast
Start Size Content
02480210 000020 Bitmap of 100 FM broadcast channels.
02480000 max. 000200 100 FM broadcast channels. Encoded as 8-digit BCD little-endian in 100Hz. Filled with 0x00.
02480200 000010

FM broadcast VFO frequency. Encoded as 8-digit BCD little-endian in 100Hz. Filled with 0x00.

DTMF, 2-tone & 5-tone signaling.
Start Size Content
024C0C80 000010 5-tone encoding bitmap.
024C0000 000020 5-tone encoding.
024C0D00 000200 5-tone ID list.
024C1000 000080 5-tone settings.
024C1080 000050 DTMF settings.
024C1280 000010 2-tone encoding bitmap.
024C1100 000010 2-tone encoding.
024C1290 000010 2-tone settings.
024C2600 000010 2-tone decoding bitmap.
024C2400 000030

2-tone decoding.

Unknown settings.
Start Size Content
024C2610 000020 Unknown bitmap.
024C2630 000020 Unknown bitmap.
024C3000 000020 Unknown settings.
024C5000 000020 Unknown settings.

Member Function Documentation

◆ allocateBitmaps()

bool DMR6X2UVCodeplug::allocateBitmaps ( )
protectedvirtual

Allocates the bitmaps.

This is also performed during a clear.

Reimplemented from D868UVCodeplug.

◆ allocateForDecoding()

void DMR6X2UVCodeplug::allocateForDecoding ( )
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.

◆ allocateUpdated()

void DMR6X2UVCodeplug::allocateUpdated ( )
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.


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