Central Idaho Amateur
Radio Club
CIARC - Resources - Creating DMR Code Plug Files
Creating DMR Code Plug Files

Before operating on DMR, or using the information found in the code-plugs listed below, it is absolutely essential that all operators become familiar with the DMR operating guidelines. These can be found on the Idaho ARES web-site by clicking here, or on this (i.e. CIARC) web-site by clicking here. These guidelines provide a context regarding the shared resource nature of DMR and wide-area networked repeater operation, and are structured to make the operating experience more enjoyable for all operators.

Table of Contents


Please note that this material is written with a basis in the TYT MD-380. However, the data structures and data relationships described within this document are applicable to Customer Programming Software (CPS) for both different model radios and different manufacturer radios.

This article focuses on how to program memory channels in a DMR radio. This article does not provide information on manufacturer or model specific features.

Data Structures

This article focuses on the types of data that is stored within a DMR code-plug file, and the relationship between those data types, including dependencies on order of construction of data. This article does not attempt to provide a tutorial on any specific Customer Programming Software (CPS). Rather, the goal here is to provide a fundamental understanding of the underlying data structures so that a code-plug file can be constructed.

There are four data structures that are present in all DMR radios and that are managed through the Customer Programming Software (CPS).

Figure 1


Data structures must be constructed in the order shown below. If you do not adhere to the described order of construction, you will not be able to properly configure your channels and zones without first going back and adhering to this order of data construction.

  1. Contact List
  2. Receive Group (if used - optional)
  3. Channel List
  4. Zone List

Contact List Programming Data References

Before you begin constructing a code-plug, you will need to gain access to prerequisite data that is used to construct the code-plug file.

Figure 2 Figure 3

Data from these two sources are used to populate both the Contact List, and if used, the optional Receive Group list.

Figure 4

Understanding the Data Relationships

There are dependencies between each of the data-sets, and these dependencies dictate the order of data construction. The Channel List is dependent upon the Contact List, and if used, the optional Receive Group List. The Zone List is dependent upon the Channel List.

Figure 5

Constructing the Contact List

Each record in the Contact List contains three fields:

Figure 6

The following figure shows an example for the BrandMeister Talk-Group for Idaho statewide communications, operating on Talk-Group 3116.

Figure 7

The following figure adds an individual contact, with the contact list now showing both a Talk-Group and an individual Private ID.

Figure 8

It is recommended that you attempt to maintain a sensible ordering of this data. Many of the Customer Programming Software applications do not support the re-ordering of this data, so think about how you want this organized before you start construction of the code-plug file. Ordering the data by Talk-Group ID / Private ID numeric ID values will greatly simplify locating the Contact List data when programming the individual channels.

Complete construction of your Contact List prior to moving on to the next section.

Constructing the Optional Receive Group

Use of the Receive Group is optional. It is recommended that you do not use the Receive Group feature. When no Receive Group is specified for a channel, the channel simply receives the same Talk-Group as the channel is specified to transmit on to. A Receive Group allows more than one talk-group to be heard at the same time on a given channel. If you choose to use the Receive Group, each Receive Group record contains:

Figure 9

The following figure shows a Receive Group with a single Receive Group record that defines a BrandMeister Talk-Group specified to support Idaho statewide communications.

Figure 10

The following figure shows a Receive Group with two entries, the first of which specifies the BrandMeister Talk-Group of USA Nation-wide communications, and the second specifies a BrandMeister Talk-Group specified to support Idaho statewide communications.

Figure 11

Constructing the Channel List

The Channel List contains a record for every channel that your code-plug file is intended to support, up to the number of channels supported by the radio.

Figure 12

Each channel list record will contain, at minimum, the following data:

Figure 13

There may be additional fields within the channel record. A description of these fields is beyond the scope of this document. Consult your program documentation, or embedded help file, if available, for information on any additional fields.

The following record was constructed for an OpenSpot hot-spot, operating on a frequency of 441.000 MHz, with a 3-minute time-out timer, and using the BM ID 3116 talk-group and the OS ID 3116 receive-group. If the optional receive-group were not used, the GROUP LIST entry would be set to None. This record is constructed in this manner, not to advocate the use of a receive-group, but to further illustrate the relationships between data structures, which will be more apparent towards the end of this document.

Figure 14

Constructing Zones

The Zone List contains records that specify which channels are to be included within the zone. The Customer Programming Software (CPS) usually presents a user interface where a list on the left shows all available channels by channel name, and a list on the right shows all channels contained within the zone. You can move channels from the channel list into the zone or move channels out of the zone and back into the channel list.

Each Zone record can contain up to the number of channels per zone that is supported by the radio.

Figure 15

By default, the Customer Programming Software will contain one channel in the zone. If this channel is not desired, it may be necessary to move a desired channel into the Zone prior to moving the undesired channel out of the Zone.

Data Relationship Summary

The following figure depicts a channel that is configured for an OpenSpot hot-spot device, operating on 441.000 MHz, Talk-Group 3116 (i.e. BrandMeister Idaho statewide), with a Receive Group that contains a single entry to listen on Talk-Group 3116, and with the channel residing as channel 1 in a Zone that is named as the 1 OpenSpot zone.

Figure 16

Referring to the above figure:

The following figure depicts two channels, contained within the same zone, operating on the N7IBC repeater (e.g. 444.125, + offset, color-code = 1), with both channels on time-slot 1. The first channel supports in the zone supports communications on BrandMeister talk-group 3116 / Idaho statewide communications, while the second channel supports a private call to K6JMQ. No receive groups are used in this example.

Figure 17

Referring to the above figure: