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

Represents the device specific binary codeplug for Anytone AT-D868UV radios. More...

#include <d868uv_codeplug.hh>

Inheritance diagram for D868UVCodeplug:
Collaboration diagram for D868UVCodeplug:

Classes

class  ChannelElement
 Represents the channel element for AnyTone D868UV devices. More...
struct  Color
 Colors supported by the D868UVE. More...
class  GeneralSettingsElement
 Represents the general config of the radio within the D868UV binary codeplug. More...
struct  Limit
 Some limits for the codeplug. More...
struct  Offset
 Some internal used offsets within the codeplug. More...
struct  Size
 Internal used sizes. More...

Public Member Functions

 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.
Configpreprocess (Config *config, const ErrorStack &err) const
 Retruns a prepared configuration for this particular radio.
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
 Retruns 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 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.
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

 D868UVCodeplug (const QString &label, QObject *parent=nullptr)
 Hidden constructor constructor.
bool allocateBitmaps ()
 Allocates the bitmaps.
virtual void setBitmaps (Context &ctx)
 Sets all bitmaps for the given config.
virtual void allocateUpdated ()
 Allocate all code-plug elements that must be written back to the device to maintain a working codeplug.
virtual void allocateForDecoding ()
 Allocate all code-plug elements that must be downloaded for decoding.
virtual void allocateForEncoding ()
 Allocate all code-plug elements that are defined through the common Config.
virtual bool encodeElements (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes the given config (via context) to the binary codeplug.
virtual bool decodeElements (Context &ctx, const ErrorStack &err=ErrorStack())
 Decodes the downloaded codeplug.
virtual void allocateChannels ()
 Allocate channels from bitmap.
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.
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, 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, 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 allocateGeneralSettings ()
 Allocates general settings memory section.
virtual bool encodeGeneralSettings (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes the general settings section.
virtual bool decodeGeneralSettings (Context &ctx, const ErrorStack &err=ErrorStack())
 Decodes the general settings section.
virtual bool linkGeneralSettings (Context &ctx, const ErrorStack &err=ErrorStack())
 Link the general settings.
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 allocateGPSSystems ()
 Allocates GPS settings memory section.
virtual bool encodeGPSSystems (const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack())
 Encodes the GPS settings section.
virtual bool createGPSSystems (Context &ctx, const ErrorStack &err=ErrorStack())
 Create GPS systems from codeplug.
virtual bool linkGPSSystems (Context &ctx, const ErrorStack &err=ErrorStack())
 Link GPS systems.
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 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.
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 Anytone AT-D868UV radios.

In contrast to many other code-plugs, the code-plug for Anytone radios are spread over a large memory area. 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.

Codeplug structure within radio

Channels
StartSizeContent
024C1500000200Bitmap of 4000 channels, default 0x00, 0x00 padded.
00800000max. 002000Channel bank 0 of up to 128 channels, see AnytoneCodeplug::ChannelElement 64 b each.
00840000max. 002000Channel bank 1 of up to 128 channels.
.........
00FC0000max. 000800Channel bank 32, up to 32 channels.
00FC0800000040VFO A settings, see AnytoneCodeplug::ChannelElement.
00FC0840000040VFO B settings, see AnytoneCodeplug::ChannelElement.
Zones
StartSizeContent
024C1300000020Bitmap of 250 zones.
01000000max. 01f400250 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.
02540000max. 001f40250 Zone names. Each zone name is up to 16 ASCII chars long and gets 0-padded to 32b.
Contacts
StartSizeContent
02600000max. 009C40Index list of valid contacts. 10000 32bit indices, little endian, default 0xffffffff
02640000000500Contact bitmap, 10000 bit, inverted, default 0xff, 0x00 padded.
02680000max. 0186a0Bank 1 of 1000 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. There are 10 banks, each containing 1000 contacts. The offset between banks is 0x40000.
04340000max. 013880DMR ID to contact index map, see AnytoneCodeplug::ContactMapElement. Sorted by ID, empty entries set to 0xffffffffffffffff.
Analog Contacts
StartSizeContent
02900000000080Index list of valid analog contacts.
02900100000080Bytemap for 128 analog contacts.
02940000max. 000180128 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
StartSizeContent
025C0B10000020Bitmap of 250 RX group lists, default/padding 0x00.
02980000max. 000120Grouplist 0, see AnytoneCodeplug::GroupListElement.
02980200max. 000120Grouplist 1
.........
0299f200max. 000120Grouplist 250
Scan lists
StartSizeContent
024C1340000020Bitmap of 250 scan lists.
01080000000090Bank 0, Scanlist 1, see AnytoneCodeplug::ScanListElement.
01080200000090Bank 0, Scanlist 2
.........
01081E00000090Bank 0, Scanlist 16
010C0000000090Bank 1, Scanlist 17
.........
01440000000090Bank 15, Scanlist 241
.........
01441400000090Bank 15, Scanlist 250
Radio IDs
StartSizeContent
024C1320000020Bitmap of 250 radio IDs.
02580000max. 001f40250 Radio IDs. See AnytoneCodeplug::RadioIDElement.
GPS
StartSizeContent
02501000000030GPS settings, see AnytoneCodeplug::DMRAPRSSettingsElement.
02501100000030GPS message.
General Settings
StartSizeContent
025000000000D0General settings, see D868UVCodeplug::GeneralSettingsElement.
02500100000400Zone A & B channel list.
02500500000100DTMF list
02500600000030Power on settings, see AnytoneCodeplug::BootSettingsElement.
024C20000003F0List of 250 auto-repeater offset frequencies. 32bit little endian frequency in 10Hz. I.e., 600kHz = 60000. Default 0x00000000, 0x00 padded.
Messages
StartSizeContent
01640000max. 000100Some kind of linked list of messages. See AnytoneCodeplug::MessageListElement. Each entry has a size of 0x10.
01640800000090Bytemap of up to 100 valid messages. 0x00=valid, 0xff=invalid, remaining 46b set to 0x00.
02140000max. 000800Bank 0, Messages 1-8. Each message consumes 0x100b. See AnytoneCodeplug::MessageElement.
02180000max. 000800Bank 1, Messages 9-16
.........
02440000max. 000800Bank 12, Messages 97-100
Hot Keys
StartSizeContent
025C00000001004 analog quick-call settings. See AnytoneCodeplug::AnalogQuickCallElement.
025C0B00000010Status message bitmap.
025C0100000400Up to 32 status messages. Length unknown, offset 0x20. ASCII 0x00 terminated and padded.
025C050000036018 hot-key settings, see AnytoneCodeplug::HotKeyElement
Misc
StartSizeContent
024C1400000020Alarm setting, see AnytoneCodeplug::AlarmSettingElement.
024C1440000030Digital alarm settings extension, see AnytoneCodeplug::DigitalAlarmExtensionElement.
FM Broadcast
StartSizeContent
02480210000020Bitmap of 100 FM broadcast channels.
02480000max. 000200100 FM broadcast channels. Encoded as 8-digit BCD little-endian in 100Hz. Filled with 0x00.
02480200000010FM broadcast VFO frequency. Encoded as 8-digit BCD little-endian in 100Hz. Filled with 0x00.
DTMF, 2-tone & 5-tone signaling.
StartSizeContent
024C0C800000105-tone encoding bitmap for 100 IDs.
024C0000000020List of 100 5-tone IDs, see AnytoneCodeplug::FiveToneIDElement
024C0D00000200List of 16 5-tone functions, see AnytoneCodeplug::FiveToneFunctionElement.
024C10000000805-tone settings, see AnytoneCodeplug::FiveToneSettingsElement.
024C1080000050DTMF settings, see AnytoneCodeplug::DTMFSettingsElement.
024C12800000102-tone encoding bitmap.
024C11000000102-tone encoding.
024C12900000102-tone settings.
024C26000000102-tone decoding bitmap.
024C24000000302-tone decoding.
Encryption
StartSizeContent
024C170000004032 Encryption IDs, 0-based, 16bit big-endian.
024C180000050032 DMR-Encryption keys, see dmr_encryption_key_t, 40b each.

Member Function Documentation

◆ allocateBitmaps()

bool D868UVCodeplug::allocateBitmaps ( )
protectedvirtual

Allocates the bitmaps.

This is also performed during a clear.

Implements AnytoneCodeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ allocateChannels()

void D868UVCodeplug::allocateChannels ( )
protectedvirtual

Allocate channels from bitmap.

Reimplemented in D878UVCodeplug.

◆ allocateContacts()

void D868UVCodeplug::allocateContacts ( )
protectedvirtual

Allocate contacts from bitmaps.

Reimplemented in D578UVCodeplug, and D878UV2Codeplug.

◆ allocateForDecoding()

void D868UVCodeplug::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.

Implements AnytoneCodeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ allocateForEncoding()

void D868UVCodeplug::allocateForEncoding ( )
protectedvirtual

Allocate all code-plug elements that are defined through the common Config.

Implements AnytoneCodeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ allocateGeneralSettings()

void D868UVCodeplug::allocateGeneralSettings ( )
protectedvirtual

Allocates general settings memory section.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ allocateGPSSystems()

void D868UVCodeplug::allocateGPSSystems ( )
protectedvirtual

Allocates GPS settings memory section.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ allocateHotKeySettings()

void D868UVCodeplug::allocateHotKeySettings ( )
protectedvirtual

Allocates hot key settings memory section.

Reimplemented in D578UVCodeplug.

◆ allocateUpdated()

void D868UVCodeplug::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.

Implements AnytoneCodeplug.

Reimplemented in D578UVCodeplug, and D878UVCodeplug.

◆ allocateZones()

void D868UVCodeplug::allocateZones ( )
protectedvirtual

Allocate zones from bitmaps.

Reimplemented in D878UVCodeplug.

◆ createChannels()

bool D868UVCodeplug::createChannels ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Create channels from codeplug.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ createGPSSystems()

bool D868UVCodeplug::createGPSSystems ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Create GPS systems from codeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ decodeElements()

bool D868UVCodeplug::decodeElements ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Decodes the downloaded codeplug.

Implements AnytoneCodeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ decodeGeneralSettings()

bool D868UVCodeplug::decodeGeneralSettings ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Decodes the general settings section.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ decodeZone()

bool D868UVCodeplug::decodeZone ( int i,
Zone * zone,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Function to decode a single zone.

Reimplemented in D878UVCodeplug.

◆ encodeChannels()

bool D868UVCodeplug::encodeChannels ( const Flags & flags,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Encode channels into codeplug.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ encodeContacts()

bool D868UVCodeplug::encodeContacts ( const Flags & flags,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Encode contacts into codeplug.

Reimplemented in D578UVCodeplug, and D878UV2Codeplug.

◆ encodeElements()

bool D868UVCodeplug::encodeElements ( const Flags & flags,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Encodes the given config (via context) to the binary codeplug.

Implements AnytoneCodeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ encodeGeneralSettings()

bool D868UVCodeplug::encodeGeneralSettings ( const Flags & flags,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Encodes the general settings section.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ encodeGPSSystems()

bool D868UVCodeplug::encodeGPSSystems ( const Flags & flags,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Encodes the GPS settings section.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ encodeZone()

bool D868UVCodeplug::encodeZone ( int i,
Zone * zone,
const Flags & flags,
Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Function to encode a single zone.

Reimplemented in D878UVCodeplug.

◆ linkChannels()

bool D868UVCodeplug::linkChannels ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Link channels.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ linkGeneralSettings()

bool D868UVCodeplug::linkGeneralSettings ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Link the general settings.

Reimplemented in D578UVCodeplug, D878UVCodeplug, and DMR6X2UVCodeplug.

◆ linkGPSSystems()

bool D868UVCodeplug::linkGPSSystems ( Context & ctx,
const ErrorStack & err = ErrorStack() )
protectedvirtual

Link GPS systems.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.

◆ setBitmaps()

void D868UVCodeplug::setBitmaps ( Context & ctx)
protectedvirtual

Sets all bitmaps for the given config.

Implements AnytoneCodeplug.

Reimplemented in D878UVCodeplug, and DMR6X2UVCodeplug.


The documentation for this class was generated from the following files:
  • /builddir/build/BUILD/qdmr-0.12.1-build/qdmr-0.12.1/lib/d868uv_codeplug.hh
  • /builddir/build/BUILD/qdmr-0.12.1-build/qdmr-0.12.1/lib/d868uv_codeplug.cc