DMR CPSProgrammer by DL5MCC


Content

What is CPSProgrammer
Features and Limitations
Installing
Start the Program
Concepts for Programming CPs
Coding Channels
Coding Scan- & Roaminglists
Coding Zones
Coding RXgrp
ini-File
Export Function
List Generator
Bulk Edit
Downloads
Codeplugs
History
Legal note


What is CPSProgrammer?

DMR (Digital Mobile Radio) is a digital voice (DV) modulation scheme, which becomes more and more popular in amateur radio (ham radio). To be able to use the radio transceivers, all frequencies (channels) used must be entered as a „memory channel“ into the so called codeplug (CP). There is a huge number of local radio repeaters, as well as analogue FM repeaters and simplex frequencies, which all have to be entered into the CP by typing it manually into a programming software (CPS). Only in Germany we currently have about 270 DMR repeater, which expand to about 600 channels (2 timeslots + many mixed mode FM) only for DMR.
.
CPSProgrammer Principle
Principle of the CPSProgrammer: CPSProgrammer is designed to interact with the existing vendor-provided CPS software.
The vendor's CPS software must be running for CPSProgrammer to update the codeplug that is open in vendor's CPS software
 
Programming this huge numbers of channels (callsigns, frequencies, timeslot & colour code, scanlist, RXGroup, TXContact, etc.) is a huge, boring and annoying pile of work, which can sum up to days

CPSProgrammer will make that work much more simple. All DV channels can be downloaded from the DMR database and than can easily be managed and extended by analogue channels, using Excel. A CSV file, to be generated from the Excel table, then will be used by the CPSProgrammer to program the channel information into the CPS.
CPSProgrammer directly accesses the CPS windows controls to transfer the programming information from the CSV-file into the codeplug. The automatic transfer of a few hundred channels into the Radio Programming Software takes a few minutes only.

CPSProgrammer requires a well prepared codeplug and a well prepared database (CSV), to be able to minimize your typing work on the codeplug.

Additional information can be found at this Yahoo group (founded in April 2016):
https://groups.yahoo.com/neo/groups/DMR-CPS-programming/info

Features and Limitations

DMR portables CPSProgrammer is an automatic programming (programming robot) of the channel information of a CPS. CPSProgrammer reads all input-information from a CSV file.

CPSProgrammer is designed to interact with the existing vendor-provided CPS software. CPSProgrammer does not read or write codeplug-files (.rdt, .rcd, .rcdx).  The vendor's CPS software must be running for CPSProgrammer to update the codeplug that is open in vendor's CPS software (see picture above:  "Principle of the CPSProgrammer").

Currently supported CPS software.
  • CSI CS700 Radio Programming Software V1.25 (2015-06-04): CS700, CS701, Kirisun DR7100
  • CSI CS750 CPS HAM2000 R4.00.27: CS750, CS751, CS800, CS801
  • Tytera MD380 Radio Programming Software V1.29.0, V1.30.0: MD380, MD390
  • Typtera MD390 → edit [MD380] section in .ini file: WindowTitle=CPS MD-390. Then select MD380 as CPS
  • Retevis RT3 Radio Programming SW, V1.30.0
  • Hytera PD365 Hytera Customer Programming Software, V1.04.03.003.EM5: PD365, PD375
  • Hytera PD785 Customer Programming Software (CPS), V7.00.07.020.EM5 / v7.06.02.006.EM5: MD 655 (G), MD785 (G), PD785 (G), X1p

Compatibility

Table: Compatibility and functionality, currently implemented
  Write to CPS / Import from .CSV Bulk Edit Export to .CSV
Supported
CPS
RX-
Group3)
Channels
DMR
Channels
FM
Scanlists
gen./fill
Zones Roaming Lists Delete
Channel
Edit
Channels
Channels Scanlists
Zones
RXGroups
CS700 ok (32) ok ok ok ok n. a. ok planned ok ok ok
CS750 planned ok ok planned planned n.a. planned planned planned planned planned
MD380 ok (32) ok ok ok ok n.a. ok planned ok ok ok
RT3 ok (32) ok ok ok ok n.a. ok planned ok ok ok
PD365 planned ok 1) ok 1) to do 2) ok 2) n.a. planned planned ok ok planned
PD785x planned slow 1) ok 1) ok 2) ok 2) ok 2) planned planned ok ok planned

1) switch off "help view", to speed up programming
2) due to problems accessing the CPS, the CPS window is forced to stay in foreground and keep focus
3) The number in parentheses, shows the maximum number of TGs in a single RX-group, supported by this CPS

Installing

Unzip all files of the download in a single directory. Thats it ...
The zip-file contains the following files:
  • CPSProgrammer_[version-number].exe:  Executeable: Supports CS700, MD380 and RT3. Does NOT require admin rights
  • CPSProgrammer_[version-number]H.exe:  Executeable: Supports PD785x, CS700,MD380 and RT3. Requires admin rights to be able to access Hytera's PD785 CPS. Programming speed is significantly lower, compared with CS700/MD380, due to slow CPS.
  • CPSProgrammer.ini
  • Some sample CSV, just for demonstration. Not for a real codeplug.
  • Prepared codeplug samples for CS700 / PD785G with scanlists, zones, RXgroups and TXcontacts, but without channels. This codeplug will intentionally cause warnings while programming, just to show how the software works.
  • This page as pdf
  • A tutorial with a prepared, empty codeplug, some CSVs and description

Sample and first steps

Just follow the description ("start the programmer") below with the CSV provided with the download ZIP-file, to get a first impression. You may analyse the attached CSV-files and follow the provided tutorial, to get a better understanding of how this files controle programming.

Start the Programmer

To start programming, you have to perform some steps in the following order:
  1. Open your Customer Programming Software (CS700/MD380/RT3 or Hytera radio programmer) and load a prepared codeplug, containing at least the required RXGroups and TXContacts (see coding reference below for additional information).
  2. The programmer allows you to create scanlists, write channels and fill scanlists.
  3. Switch to the directory where you have installed the programmer.
  4. Start the CPSProgrammer and switch to the function, you want to perform. Then select a CSV file, if you want to use another than the default one.
  5. Normally you first create empty scanlists (step 1, required to program the channels). Next you write the channel information (step 2). Once the channels are defined, you can fill the scanlists with the required channels (step 4).
  6. Start Programming by clicking the related button, e.g. "Write Channels" or "Fill Scanlists".
  7. Now, the Radio Programming Software gets focused, while all the information is automatically written into the codeplug.
  8. Note: Should anything go wrong, click onto the tray-icon on your task-line, to pause CPSProgrammer immediately. Then select to continue or to exit the programmer.

Main Window

Main Menue of CPS Programmer V0.22.x
Tray-Icon to stop

Click the Tray-Icon to pause immediately, then you may continue or exit

Tutorial

The download below provides a tutorial wit some sample CSVs. Please follow the tutorial to learn how CPSProgrammer interacts with your customer programming software (CPS). The tutorial can be done within 15 minutes only.
The tutorial video, embedded below, uses the CSV files used for the tutorial as well:

CPS-Programmer tutorial video
More tutorials on YouTube
 

Concepts Of Programming Codeplugs

Programming a codeplug requires a careful preparation of all the data needed. There are many fields to be filled with data and many interdependencies between this lists. To improve programming and to avoid unnecessary work, the interdependencies between different lists and fields in a codeplug should be known.

Interdependencies inside a codeplug
This picture shows the most important interdependencies in a codeplug (click to enlarge)

A channel defines the RX- and TX-frequency, the ColourCode and TimeSlot, the Contacts and many other information used do communicate on a specific channel, as well as the display name. Some of this information, such as GroupContacts, RX-Groups or Scanlist-Names have to be defined before programming a channel, to avoid a unnecessary programming loop. For that reason, a specific order in the programming steps is recommended.
  • First define all GroupCall, which are the Talk-Groups used in your area (e.g. TG1 world wide, TG2 Europe, TG262 Germany). This step must be done manually.
  • Second define at least one RX-Group which contains all Talk-Groups expected to be received on a single channel (check for a talk group matrix for the repeaters in your area. This step also must be done manually
  • Next we have to define scanlists. As we have not yet programmed the channels, the scanlists will be empty in the first step. The CPSProgrammer supports generating empty scanlists from a given csv. This is marked as step 1 in the CPSProgrammer.
  • Having prepared TX-Contacts (a single talk group), RX-Groups (a list of talk groups) and empty scanlists, we are able to write our channels into the CPS. This is step 2 in the CPSProgrammer.
  • Next we are able to fill our empty scanlists with the channels, we just have written into the code plug. This is step 3 in the CPSProgrammer.
  • As a last step (step 4) we can create zones and fill the zones with the channels we have written into the code plug.

Coding Reference for Channels

How to generate a propper CSV File for channels

At first start with downloading the required DMR channels from the internet: http://dmr.ham-digital.net/rptr_by_id.php for a worldwide list or http://dmr.ham-digital.net/rptr_by_id.php?id=262 for a national or regional list (e.g. 262 for Germany). Import the downloaded CSV into a table calculation (excel) and add as many DMR or FM frequencies as you like.
Next add additional rows and add the labels required in the first line. See the table below for additional information. Then enter all the information described in the table. Finally export your table into a CSV file (named 'channels-05.csv' by default).
Please use ';' (semicolon) as delimiter.

A tool providing help to create a channellist with proper coding for the CPSProgrammer is provided online:

channel creator

Just go to http://www.spacesupport.de/repeater-liste.php and select "create channel list". The DMR repeater list will directly be taken from the DMR database, which grants an up-to-date channel list.

Description of the additional labels, used

CPSProgrammer requires several information from the CSV database to program the CP. The CSV downloaded form http://dmr.ham-digital.net/rptr_by_id.php already provides all information about the RF interface of the channel, grouped by the labels in the header line:

num;dmrid;callsign;qrg;shift;cc;mix;ctcss;net;city;cnty;country;ctry;lat;lon;longcall
489;262866;DB0RTA;438,36250;-7,600;1;;0;DMR-plus;Gilching;Bayern;Germany;DEU;48,11044;11,32423;DB0RTA

CPSProgrammer requires some of this labels, as well as additional labels to define RXGroupLists, ScanLists, names, TalkGroups and many other things required from the CP. Please have a look at he CSV file which comes with the software download:

Labels used by CPSProgrammer
([1]=x: data comes with the CSV downloaded from the dmr-database)
Label
Values
[1]
Required_for
Description
callsign text x
DMR, FM This is the callsign of the repeater which gets displayed in your transceiver, e.g. DB0RTA
qrg number x DMR, FM This is the frequency where your DMR transceiver will receive, e.g. 438.3525 or 438,3525
shift number
x
DMR, FM This is the shift of the repeater, e.g. -7,6 or 0 for simplex frequencies
cc number
x DMR This is the number of the colour code, e.g. 1
c   FM If field is left empty, CTCSS is applied to TX only. If set to "c", CTCSS is set to TX and RX.
mix m,
x
DMR Defines, whether the repeater is a pure DMR or a mixed mode repeater.
  • Must be "m" for mixed mode (TS1, TS2 and a FM channel will be generated)
s1,
s2
  DMR
  • Leave field empty for normal operation (TS1 and TS2 will be generated)
  • If set to "s1" (single TS1), only TS1 will be generated, independent of a possible frequency shift other than 0.
  • If set to "s2" (single TS2), only TS2 will be generated, independent of a possible frequency shift other than 0.
ctcss number x DMR (mixed mode), FM
Frequency of the CTCSS signal if required. Any notation may be used (e.g. 88, 88.5 or  88,5. Also Digital Coded Squelch codes can be defined (e.g. D445N). Please note, that digital codes may not be compatible between different devices (TYT, Hytera, ...).
  • For callsigns marked with mix=m (mixed more), both CTCSS encoder (TX) and decoder (RX) will be programmed with the CTCSS frequency
  • For pure analogue channels:
    •  by default, CTCSS encoder (TX) only will be programmed
    •  if field CC is set to "c", CTCSS encoder (TX) and decoder (RX) will be programmed with the CTCSS frequency.
net
text
x
DMR
DMR-net. Used to insert characters after the callsign: dmr-plus: #, hytera: H, marc: M
dmrid number x FM (optional) This field is not mandatory for CPSProgrammer, however if a FM channel contains a valid DMR-ID (Number > 100,000) in this field, it will be treated like a mixed-mode channel: A net-delimiter for MixedFM will be appended (e.g. %FM).
0
any
  -
Not required and not recognised by the programmer, but very usefull to keep the header line on top, when sorting the CSV lines in different order in your table calculation.
type
a, d
  DMR, FM
Defines the type of the cannel, Enter a for analogue (FM) or d for digital (DMR) channels
callext1
text   DMR
Additional descrition of timeslot 1, added to the callsign and displayed at the transceiver
callext2
text
  DMR
Additional descrition of timeslot 2, added to the callsign and displayed at the transceiver
txcontact1
text
  DMR
Name of the default TX Talkgroup for TG1 in the pull down menue, e.g. TG262
txcontact2
text
  DMR
Name of the default TX Talkgroup for TG1 in the pull down menue, e.g. TG9
rxgroup1
text
  DMR
Name of the RXGroup for TG1 in the pull down menue, e.g. WW
rxgroup2
text
  DMR
Name of the RXGroup for TG2 in the pull down menue, e.g. WW
pwr
h, l
  DMR, FM
Power for this channel, set to h for high or l for low
scanlist1
name
  DMR
Name of the Scanlist for TG1 in the pull down menue, e.g. Munich-DMR
(Also used to specify the Roaminglist for PD785x)
scanlist2
name
  DMR
Name of the Scanlist for TG2 in the pull down menue, e.g. Munich-DMR-FM
(Also used to specify the Roaminglist for PD785x)
scanlistfm
name
  FM
Name of the Scanlist for FM in the pull down menue, e.g. Munich-FM.
Also required for the FM channel of a mixed mode repeater (mix = 'm')
any other value - - - Not recognised by the programmer. Can be used to insert comments into the CSV. Additional columns, provided by the DMR-database can be left in the CSV.

An example for a channel.CSV accepted from CPSProgrammer, containing two repeater frequencies, is shown below. When executet, CSPProgrammer generates two channels for each line (TS1 and TS2) resulting in a total of 4 channels.

0;num;type;callsign;dmrid;qrg;shift;cc;mix;ctcss;net;city;cnty;country;ctry;lat;lon;longcall;callext1;
callext2;txcontact1;rxgroup1;txcontact2;rxgroup2;pwr;scanlist1;scanlist2;scanlistfm{line-break=@CRLF}
1;1;d;DB0DMR;262815;439.47500;-7.600;1;;;DMR-plus;Feuchtwangen;;Germany;DEU;49.15835;10.32665;DB0DMR;
1TG262;2TG9;TG262 DL;WW;TG9 Lokal/Refl.;WW;h;BY-Nord;BY-Nord;{line-break=@CRLF}
1;2;d;DB0LEO;262750;439.53750;-7.600;1;;;DMR-DL;Leonberg;;Germany;DEU;48.80621;9.01525;DB0LEO;1TG262;
2TG9;TG262 DL;WW;TG9 Lokal/Refl.;WW;h;Stuttgart;Stuttgart;{line-break=@CRLF}

Generation of display names (channel name)

Display names are made by concatenation of the callsign and callext1 or callext2 (depending on the TS). For special networks, an additional delimiter will be inserted before callextN: This allows you to distinguish between different networks, which use different talkgroups and operating techniques. Different delimiters can be configured by editing the ini-file. The following settings are provided with the default ini-file:

Network name (net)
Delimiter
BM (Brandmeister) &
DMR-DL
(none)
DMR-plus
#
Hytera
H
Marc
M
Mixed-Mode FM*) %FM

Sample: DB0RTA #1TG262, where callsign: DB0RTA, net: DMR-plus, callext1: 1TG262
Important: Please take care, that no channel name (e.g. DB0RTA #1TG262) occurs twice. CS700 programming software is not able to handle twice the same name and will respond with an error message, desynchronising the on-going program run.
*) Mixed-Mode FM: This indicates a DMR-repeater providing FM mode on the same frequency as DMR. It usually transmits an CTCSS-signal on FM to allow an RX to suppress DMR signals.

Coding Reference for Scan- and Roaminglists

To automatically generate and fill scanlists, a CSV with a specific format is required. The file contains one line for each scanlist, starting with the name of the scanlist and followed by the channel names.

ScanList;Ch1;Ch2;Ch3;Ch4;Ch5;Ch6;Ch7;Ch8;Ch9;Ch10;Ch11;Ch12;Ch13;Ch14;Ch15;Ch16;Ch17;Ch18;Ch19;
Ch20;Ch21;Ch22;Ch23;Ch24;Ch25;Ch26;Ch27;Ch28;Ch29;Ch30;Ch31{line-break=@CRLF}
MUC-DRM-FM;DB0NJ TS1;DB0NJ TS2;DB0TVM #TS1;DB0TVM #TS2;DB0PUC HTS1;DB0PUC HTS2;DB0RTA #TS1;
DB0RTA #TS2;DB0RTA %FM;DB0FSG HTS1;DB0FSG HTS2;DB0HKN TS1;DB0HKN TS2;DB0PME TS1;DB0PME TS2
;DB0AAT #TS1;DB0AAT #TS2;DB0AAT %FM;DB0ESS #TS1;DB0ESS #TS2;DB0ESS %FM;DM0ESS #TS1
;DM0ESS #TS2;DM0ESS %FM;DF0ANN TS1;DF0ANN TS2;DB0FUE #TS1; DB0FUE #TS2;DO0ET #TS1
;DO0ET #TS2;DO0ET %FM;{line-break=@CRLF}
Bodensee;DM0ESS #TS1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;{line-break=@CRLF}

The only recognised labels are "scanlist" which contains the name of the scanlist, and "ch1" through "ch31" which contain the channel names to be added to this scanlist  (Note: channel 32 is the selected channel itself). If less than 32 channels are added, the channelname is a zero-string "", which means that it's just followed by the next semicolon ";". As an example, the scanlist "Bodensee" contains only one channel.

List Generator

To generate scanlists, you may comfortably use DO1JG's scanlist & zonelist CSV-generator

For a Roaminglist the same structure is valid, as for a Scanlist. The keyword in the CSV, line 1 is "RoamList". Please note, that roaming is not supported by all devices.

Coding Reference for Zones

To automatically generate and fill Zones, a CSV with a specific format is required. The file contains one line for each zone, starting with the name of the Zone and followed by the channel names.

ZoneList;Ch1;Ch2;Ch3;Ch4;Ch5;Ch6;Ch7;Ch8;Ch9;Ch10;Ch11;Ch12;Ch13;Ch14;Ch15;Ch16{line-break=@CRLF}
Munich;DB0NJ 1TG262;DB0NJ 2TG9;DB0TVM #1TG262;DB0TVM #2TG9;DB0PUC #1TG262;
DB0PUC #2TG9;DB0RTA %FM;DB0FSG #1TG262;DB0FSG #2TG9;DB0HKN 1TG262;DB0HKN 2TG9;
DB0TTB #1TG262;DB0TTB #2TG9;DB0PME 1TG262;DB0PME 2TG9;DB0AAT #1TG262{line-break=@CRLF}

The only recognised labels are "zonelist" which contains the name of the scanlist, and "ch1" through "ch16" which contain the channel names to be added to this Zone. If less than 16 channels are added, the channelname is a zero-string "", which means that it's just followed by the next semicolon ";".
To generate zones, you may also use DO1JG's scanlist & zonelist CSV-generator

Coding Reference for RX Groups

To automatically generate and fill RXGroups, a CSV with a specific format is required. The file contains one line for each RXGroup, starting with the name of the Group and followed by the TalkGroup names.

RxGroups;tg1;tg2;tg3;tg4;tg5;tg6;tg7;tg8;tg9;tg10;tg11;tg12;tg13;tg14;tg15;tg16;tg17;tg18;tg19;
tg20;tg21;tg22;tg23;tg24;tg25;tg26;tg27;tg28;tg29;tg30;tg31;tg32;tg33;tg34;tg35;tg36;tg37;tg38;
tg39;tg40;tg41;tg42;tg43;tg44;tg45;tg46;tg47;tg48;tg49;tg50;tg51;tg52;tg53;tg54;tg55;tg56;tg57;
tg58;tg59;tg60;tg61;tg62;tg63;tg64{line-break=@CRLF}
WW;TG1 WW;TG10 DE-WW;TG110 UA-DE;TG113 UA-EN;TG119 UA-any;TG120 UA-DE;TG123 UA-EN;TG129 UA-any;
TG13 EN-WW;TG2 EU;TG20 DACH;TG204 NL;TG206 ON;TG228 HB9;TG230 Czech;TG232 OE;TG235 GB;TG238 OZ;
TG262 DE;TG2628 DE-BY;TG8 regional;TG9 local;TG99 Simplex;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;{line-break=@CRLF}

The only recognised labels are "RxGroups" which contains the name of the RXGroup, and "tg1" through "tg64" which contain the TG names to be added to this RXGroup. If less than 64 TGs are added, the TG-name is a zero-string "", which means that it's just followed by the next semicolon ";".
Please note, that different transceiver support a different number of maximum TGs per RXGroup. Please refer to "features and limitations" for manufacturer related information.

Ini-File

The CPSProgrammer may be individually configured with an ini-file, located in the same directory. The [General] section applies to the whole program, while all the other sections only apply to a specific device, selected. The ini-file can be opened and edited with any text editor (e.g. notepad). The values provided below are default values, in case the related entry is missing, misspelled or the ini-file is missing.

[General]
AutoCheckForUpdates=yes Yes/No: Set to No, to switch off automatic checking for updates.
Set to No if you experience a "COM error" at start-up!
ExportChCompileTS1TS2=on On/Off: When exporting channels, CPSProgrammer per default tries to compile consecutive channels with equal callsign and frequency on TS1, TS2 (evtl. FM) into a single CSV line. Up to 3 channels (mixed mode: TS1, TS2, FM) can be compiled into one CSV line.
Setting ExportChCompileTS1TS2=off causes CPSProgrammer to switch off the compiler. Each channel will be saved in a single CSV line, marked as mix=s1 (TS1), mix=s2 (TS2) or as an analogue channel.
MaxLenCallsign=12 Channelnames (display names) are generated by concatenation of "callsign"+"space"+"NET-delimiter"+"CallExt1/2".
MaxLenCallsign defines the maximum number of characters allowed for the callsign. Callsigns exceeding that number are cut off.
ShowStatusBarInfo=on On/Off: Switch on or off additional status bar information:
Status Bar
total time / time per channel, list, zone / current interaction with CPS
TXfmax=440 Upper band limit. TX frequencies above will generate a warning. Set this value to your regional band limits.
TXfmin=430 Lower band limit: TX frequencies below will generate a warning.  Set this value to your regional band limits.
LastUsedQTH=Locator Stores the last used locator from "convert FM-repeater list", e.g. JN58RD
LastUsedCPS=CPS Stores the last selected CPS, e.g. CS700, DM380, RT3, ...
UseLastCSV=yes Yes / No: To propose the latest used files, when program starts and save at exit.
channelsCSV=Drive/path/file.CSV Last used channels CSV
scanlistCSV=Drive/path/file.CSV Last used scanlist CSV
zonelistCSV=Drive/path/file.CSV Last used zonelist CSV
roaminglistCSV=Drive/path/file.CSV Last used roaminglist CSV
fmrepeaterlistCSV=Drive/path/file.TXT Last used FM-repeaterlist (TXT/CSV) to be imported.
[NetDelimiter]
netname=value Name of the net and delimiter, e.g. dmr-plus=#
The delimiter signalises the used network to the radio operator and additionally avoids double names, in case a repeater callsign occurs twice in the channel list (provided it is connected to different networks)
MixedFM=%FM MixedFM defines the delimiter, appended at the call of a mixed-mode FM-repeater at its analogue channel,
e.g. DO0JG %FM
[CS700]
WindowTitle=CS700 Title of the CPS Window (constant part only)
TOT=360 TX Time out timer: Global setting for all channels. Must be a valid number or "Infinite"
TOT_FM=360 TX Time out timer: Global setting for all FM channels. Must be a valid number or "Infinite". Default value is taken from TOT
DMRAdmitCriteria=Color Code Always / Color Code / Channel Free: Global setting for all channels.
PrivateCallConfirmed=UnCheck Check / UnCheck: Global setting for all channels.
[CS750]
WindowTitle=Customer Programming Software Title of the CPS Window (constant part only)
AnalogChWriteDelay=20 Write-Delay for analog channel name. Increase number, if you observe errors in writing the channel name.
TOT=360 TX Time out timer: Global setting for all channels. Must be a valid number or "Infinite"
TOT_FM=360 TX Time out timer: Global setting for all FM channels. Must be a valid number or "Infinite". Default value is taken from TOT
TOT_PreAlert=3 Alert time in seconds, before timeout (TOT). Set to 0, 1 .. 10
TXAdmit=Color Code Free Always / Color Code Free / Channel Idle
TXAdmitFM=Always Allow Never Allow / Always Allow / Channel Free / CTCSS/CDCSS Locked / Audio:
PrivateCallConfirmed=Check Check / UnCheck: Global setting for all channels.
[MD380]
WindowTitle=CPS MD_380
WindowTitle=CPS MD-390
Title of the CPS Window (constant part only): for MD 380
for MD 390
see [CS700] above for all options ...
 [PD365]
WindowTitle=Hytera Customer Programming  Software Title of the CPS Window (constant part only)
TOT=360 TX Time out timer: Global setting for all channels. Must be a valid number or "Infinite"
TOT_FM=360 TX Time out timer: Global setting for all FM channels. Must be a valid number or "Infinite". Default value is taken from TOT
TOT_PreAlert=5 Alert time in seconds, before timeout (TOT). Set to 0, 1 .. 10
PrivateCallConfirmed=check Check / UnCheck
TXAdmit=Color Code Free Always / Channel Free / Color Code Free
TXAdmitFM=Always Allow Always Allow / Channel Free / CTCSS/CDCSS Correct / CTCSS/CDCSS Incorrect
 [PD785]
WindowTitle=Customer Programming  Software Title of the CPS Window (constant part only)
TOT=360 TX Time out timer: Global setting for all channels. Must be a valid number or "Infinite"
TOT_FM=360 TX Time out timer: Global setting for all FM channels. Must be a valid number or "Infinite". Default value is taken from TOT
TOT_PreAlert=5 Alert time in seconds, before timeot (TOT). Set to 0, 1 .. 10
GPSRevertChannel=Selected Selected / None / Channel Name: Global setting for all channels
IPMultiSiteConnect=check Check / UnCheck
PhoneSystem=PhoneSystemName None / PhoneSystemName
PrivateCallConfirmed=check Check / UnCheck
RSSRevertChannel=None Selected / None / Channel Name: Global setting for all channels.
TXAdmit=Color Code Free Always / Channel Free / Color Code Free
TXAdmitFM=Always Allow Always Allow / Channel Free / CTCSS/CDCSS Correct / CTCSS/CDCSS Incorrect
[RT3]
WindowTitle=CPS RT3 Titel of the CPS Window (constant part only)
see [CS700] above for all options ...

Export Codeplug to CSV

CPSProgrammer can read the controls of the CPS and therefore export the channels of an opened codeplug into a CSV file. This can be used as backup, or as a base for codeplug development, to start from. This may also be used to copy channels between different DMR transceivers, which codeplugs are not interchangeable. Before you start "export channels", you have to open any channel with your CPS!

Channel Export

The picture above shows the export of channels from a CPS. The exported channels are written into a edit field in CSV notation first, where you can edit the data before storage. You may enter text, delete text or copy (ctrl+c) and paste (ctrl+v) text in the edit field. The red out channels are re-compiled into the CPSProgrammer format, where up to 3 channels (TS1, TS2, mixed-mode-FM) can be packed into one line, if applicable.
While exporting the channels, CPSProgrammer collects information about the used ScanLists, RXGroups and TXContacts in the codeplug being exported. This information is shown in the boxes under "Code Plug information" and can be saved in a text file by clicking the "Save Code Plug Information" button.
You may also define a range in your codeplug within the selected channels will be exported (a channel number can be found next to the navigation buttons in your CPS). With the default setting 1 ... 1024 ALL channels of a codeplug will be exported.

Exporting zones is shown in the picture below. The operation of exporting zones, scanlists and RXGroups as well, is quite similar to exporting channels, described above. Once the zones, scanlists or RXGroups are written into the edit-field, you can edit the CSV or save the data in a file by clicking "Save as".

export-scanlist-zones

List Generators

CPSProgrammer provides list generators for DMR and FM channels, to automatically generate channel-CSVs with consecutive frequencies, such as consecutive simplex- or repeater-channels. The generated channels are written into a edit field in CSV notation first, where you can edit the data before storage. You may enter text, delete text or copy (ctrl+c) and paste (ctrl+v) text in the edit field.
Below is an example, how to generate the European FM repeater channels with its former naming pattern R70, R70x ... R101x (x equals 12,5 kHz offset). The naming pattern for repeater channels now is different, but this example shows how powerful the channel list generator can be used.

List Generator FM

The callsign ("channel name") to be displayed is generated automatically and made by a concatenation of up to 6 input fields. The following functions are available for each of the 6 fields:

  • N: Insert counter value, incremented by one, each line. Usually starts by 0
  • Text: Insert text, entered in the input field just below the combo-field
  • space: Insert a single space " "
  • N, N/2 ... N/16: Insert an integer N, or N/x (to generate x times the same number, e.g. N/2: generates 0, 0, 1, 1, 2, 2, ...)
  • Nmod2 ... Nmod16: Insert the remainder of N/x. (e.g. N Mod 4 generates 0, 1, 2, 3, 0, 1, 2, 3, 0, ...)
  • C1-3-5: Insert "Cx", cycling all odd numbers from 1 to 15: C1, C3, C5 ... C13, C15, C1, C3, C5, ...
  • 0-0x: Inserts letter x, when N is an odd value (Used to generate R70, R70x, R71, R71x, ... in the sample above)
  • 0-0text: Inserts the text, entered in the input field just below, when N is an odd value
  • clr: Insert nothing (clear)
  • f-RX.5: Insert RX frequency with 5 digits, e.g. 433.58750
  • f-RX.4: Insert RX frequency with 4 digits, e.g. 433.5875
  • f-RX.3: Insert RX frequency with 3 digits, e.g. 433.587

DMR Channellist Generator

The picture above shows the DMR CSV List-Generator, which allows to generate a channel list with consecutive frequencies. The sample shown here, will generate consecutive channels according to the DMR-Find scheme.

Convert FM-Repeater List

The picture above shows the window of "Convert FM-Repeater List" with a converted repeater list. This allows you to convert a CSV file, downloaded from http://relaislisten.darc.de/ into a format required from CPSProgrammer.
Via this Interface you have access to one of the biggest databases on amateur radio voice repeaters. Currently they have more than 8000 entries from more than 60 countries in their database.
To build the channel-name for the newly generated CSV, two additional functions are provided:

  • CSV-call: Adds the text provided with the "call" field of the input file
  • CSV-info: Adds the text provided with the "info" field of the input file

Please carefully check the input file for inconsistency and doubled entries. Sometimes information (e.g. repeater input frequency) is missing.

Bulk Edit

To edit a bulk of channels in one time, CPSProgrammer does provide bulk edit functions. Bulk Delete Channels (picture below) allows you to delete channels in your codeplug.
You can select if you want to delete all channels or only FM or DMR channels. You may also skip mixed mode channels (delimiter, e.g. %FM, is defined in the ini-file). You may also define a range in your codeplug within the selected channels will be deleted (a channel number can be found next to the navigation buttons on the left side). With the default setting 1 ... 1024 ALL channels in a codeplug will be deleted.
CPSProgrammer first jumps to last channel in the codeplug and starts searching reverse. If the number of the current channel is lower or equal then "delete to ch'" the current channel will be deleted, provided it fits to the selection (all, DMR, FM). If the channel number, given in "delete from ch" is reached, bulk delete stops.

Bulk Delete
Bulk Delete: The green progress bar shows the current progress.

Downloads

0.26.0 20.11.2016 New function: Export RXGroups
See
history for details.
CPSProgrammer_V0-26-0.zip (Including Tutorial V0.02)
Add ons:
CSV 13.03.2016 Channel CSV to program channels according to the DMRFind scheme. e.g. display name "5C3" = Zone 5, Channel 3.
ZIP-file contains channellist.csv and zones.csv.
channellistDMR_DMR-Find

Codeplugs

Did you use the CPSProgrammer to create a codeplug and share it with other HAMs? Please let me know the link, to be provided here.

Country Area Description Link
DE Munich Codeplug, optimized for the Munich area. Also containing a VFO-like part. Available for CS700, MD380 (RT3, MD390), AT-585 http://cp-cs700.ddns.net/index.php/cp-muenchen
PA countrywide MD380: All Dutch DMR repeaters, all Belgian DMR repeaters, all Dutch 70cm analog repeaters, a Simplex zone with 8 DMR channels, 7 analog channels and 3 PMR446 zones. http://www.pc5e.nl/md380

History

2016-11-20 0.26.0 New Export function, to export RXGroups: Currently implemented for CS700, MD380, RT3
2016-08-02 0.25.0 Added a new function: Generate and fill RXGroups. Currently CS700, MD380 and RT3 will be supported. See description above, for detailed information.
2016-07-27 0.24.5 Minor Update: Check "dmrid"-field in CSV and treat channel as mixed-mode FM, in case a valid DMR-ID was found. See labels for info.
2016-06-16 0.24.0 Added new device CS750. This version supports writing of channels.
2016-06-01 0.23.0 New option "MaxLenCallsign=" in cpsprogrammer.ini to control the length of callsigns in display names. See "ini-file" for more information.
PD365 / PD785 CPs: Now Export of scanlists and zones is supported.
2016-05-25 0.22.1 Minor Update: New option "ExportChCompileTS1TS2=". See "ini-file" for more information.
2016-05-18 0.22.0 Added additional status bar information (time, interaction with CPS). See "ini-file" for more information.
2016-04-26 0.21.0 Added new functions for PD365 / PD785 CPs:
- Export of channels into CSV-file
- New option "TOT_PreAlert=" in cpsprogrammer.ini to set PreAlert to a defined value. See "ini-file" for more information.
For all devices: Optimized checking, if maximum number of channels is reached.
2016-04-14 0.20.0 Added new functions for PD365:
- PD365: Add and fill scanlists. PD365 separates scanlists for FM and DMR.
  First channel added, defines type of the scanlist. CPSProgrammer takes care to only add the correct channel type
- PD365/PD785: new control TXAdmitFM in cpsprogrammer.ini allows to configure TX Admit Criterias for FM, independent from DMR
All devices:
- added a new function to control whether CTCSS is applied to TX only or to RX/TX. See labels for info.
- checking the length of names for channels, scanlists and zones, before writing into CPS
2016-04-02 0.19.0 New Device Hytera PD365 is supported now!
- PD365: Write channels, generate and fill zones. Check if limits are reached.
- PD785: Now, the default channel added by the CPS to any zone created, will be deleted automatically.
- PD365/PD785: Force CPS to stay in foreground and to be focused.
- All: Check if the zone to start with, is really empty
2016-03-30 0.18.2 Minor Updates:
- If "net"-name (or delimiter) and "callext1/2" is not used, the additional "space" after callsign is suppressed now
- Mixed mode-FM ("mix"=m) sets RX and TX-CTCSS (requires a valid MixedFM-delimiter), while
- pure FM channels (type  "a") set TX-CTCSS only.
2016-03-15 0.18.1 Bug Fix: failure when writing back exported scanlists, was fixed.
CS700/MD380/RT3: Check if maximum number of channels, scanlists or zones is reached.
2016-03-14 0.18.0 New main menu export functions: Export scanlists / zones, allows to read scanlists or zones from a CPS and to store the scanlists and zones as CSV.
2016-03-06 0.17.0 New main menu function: Export channels, allows to read channels from a CPS and to store the channels as CSV.
Bug Fix for RT3: Skipping fm when writing channels, was fixed.
Bug Fix GUI: Info labels (warnings/labels) did not update after running bulk delete.
CS700/MD380/RT3: Improved reliability for Bulk Delete and Writing Channels
2016-02-27 0.16.1 Minor update: New .ini-file parameter "TOT_FM="; Defines Time-Out-Timer for FM-channels,  independent from DMR-channels. "TOT=" now is only valid for DMR. See "ini-file" for more information.
2016-02-22 0.16.0 New functions and enhanced GUI-access for PD785x:
- Writing digital channels, now is 2-3 times faster!
- New controls accessible: IP-Multi Site Connect, Private Call Confirmed, Phone System, TX Admit
Bug Fix for CS700/MD380/RT3: Increased timeout for Generating Zones (solves problems with very large numbers of channels)
Some enhancements for GUI and lists:
- Added "0-0text" option to the name generation of all list generators.
- DMR list generator: enhanced activating/deactivating controls, related to selected modes
- Added menu shortcuts (CTRL-D, CTRL-F, etc.) and controle via keyboard
- Replaced CTRL-X with a Tray-Icon
2016-02-16 0.15.0 Some improvements and new functions:
- Bug Fix: Timing problem with "fill scanlist" when CPS-GUI is too slow (programmer faster then cps) is fixed by implementing a timeout.
- Bug Fix: "Bulk Delete" with "delete from" > 1 showing error message "nothing to do ..." even when finished correctly, is fixed
- For all "Generate List CSVs": activate/deactivate controls and text-input where this is useful
- Added a short "Help/Work Around"-text for FM-repeater list
- Main Menu: "Bulk Edit" renamed to "Edit" to prepare future functions
- New Icon: Portable radio
- CS700/MD380/RT3: Added new channel control: "AdmitCriteria".
- CS700/MD380/RT3: Added new global channel control: "PrivateCallConfirmed". See "ini-file" for more information.
2016-02-12 0.14.0 Added some new tools
  - "Convert FM-Repeater List". Converts a online FM-repeater database into CPSProgrammer format.
  - "Bulk Delete Channels" to delete a selection of channels
Bug fix: Editing in drop-down boxes, causing malefunction, is disabled now.
Improved all error and other messages.
2016-02-05 0.13.0 Added some new functions:
- Last used CPS will be stored in the ini file.
- RT3-CPS now can be directly selected from "Select CPS"
- Write channels: Check if current codeplug already contains channels. If more then one channel is found: Inform user, ask for permission to append CSV, if "yes" jump to the end and append channels to be written  (CS700/MD380/RT3 only).
2016-01-31 0.12.1 Minor update: Added an error message, when CPS window is not open, or not accessible
2016-01-17 0.12.0 Added a DMR channel-list generator, to generate CSVs with consecutive channel frequencies
2016-01-14 0.11.0 Added a FM channel-list generator, to generate CSVs with consecutive channel frequencies
2016-01-10 0.10.0 Added generating and filling of Roaminglists for PD785.
2016-01-07 0.09.6 Preparing roaming lists for Hyteras, Generating of empty roaming lists works
2015-11-20 0.09.5 Added writing / filling of zones, for PD785 (Hytera)
2015-11-15 0.09.0 Added new functions for PD785 (Hytera):
- Writing analogue channels
- Generating empty scanlists
- Filling scanlists
2015-11-05 0.08.2 Added: Save last csv used. Tooltips for better description.
2015-10-29 0.08.1 Improved error handling; Check CSV-files on consistency before start (all columns required are available?)
2015-10-23 0.08.0 Added a function to generate and fill zones in the codeplug
2015-10-22 0.07.5 Added features and prepared writing of zones:
- The value for the TOT, now is read from the ini-file instead of the CSV.
- Use CTRL+x to pause the programmer. You may continue or exit the software
- Mouse position 0,0 is no longer used to stop the programmer
- Network delimiters are now defined in the ini-file
- The network delimiters defined in the ini-file can be exported into a CSV. To be used for the scanlist/zones generator
2015-10-17 0.07.0 Added features:
- Supports the generation of scanlists from CSV, for CS700/MD380)
- Supports filling scanlists wit channels from CSV, for CS700/MD380
2015-10-12 0.06.3 Added a new feature, to allow the generation of a singe DMR Channel using TS1 or TS2. Please check the table above to see the new labels and features. Download will be provided with a new and updated CSV: channels-06.csv
2015-10-11 0.06.2 Added GPSRevertChannel and RSSRevertChannel for PD785 programming. Both to be configured in the ini-file.
2015-10-10 0.06.1 Improved channel programming of PD785 in way, that no delay value has to be defined any more in the ini-file. The Programmer automatically detects, when the selection in the Tx Group List is finished.
2015-10-09 0.06.0 First version, supporting Hytera PD785 => V0.06.0H. (Due to the characteristic of the PD785 CPS, the H version requires admin rights. Performance (programming speed) is much lower, compared to CS700/MD380.
2015-10-02
0.05.5
Added features:
- Output a warning when requested Scanlist, RXGroup, TXContact, CC, ... can not be selected as it is missing in the codeplug (e.g. you try to assign scanlist "Munich" to a channel, but you have not yet created a scanlist "Munich" in this code plug.)
- Output a warning when transmit frequency is out of band. Band limits are defined in the ini-file.
- Minor improvements for saving the log
2015-09-30
0.05.2
Bug fixed: Error-message when there is no internet connection (Auto check for updates); Clean-up the code
2015-09-28
0.05.1
Added features:
- rudimentary ini file to switch on/of the update check (avoid problems behind proxies)
- MD380 should work now (not yet tested on all of the TYT software versions, currently available)
2015-09-19
0.05.0
Enhanced GUI with new functions:
- Added a log window. Content can be edited and stored as txt file.
- Software checks for updates after start up. Download page can be opened with default browser
- MD380 can be slected, but currently has no affect. / Warnings not implemented
2015-09-12
0.04.0
Software now comes with Windows GUI.
- Significantly improved speed (300 channels in abt. 90 seconds, which took 10 Min. before).
- CSV File can be selected before
- Radio Programmer Software no longer has to be in foreground while programming. No more accidently influencing of other programs.
- RXGroups, Scanlists and TXContact are no defined by their name. Currently
- NO Logfile, NO Warnings.
2015-09-02
0.03.0
Added a function to support DMR simplex frequencies, indicated by mix = s.
2015-08-29
0.02.1
Minor changes in the display functions
2015-08-28
0.02.0
Changed the starting position to "channel name". Added consistency checks for all integer values in the CSV. Added CTCSS programming, Added a log file.
2015-08-20 0.01.0
This is the initial version of the programmer, which only supports the CS700 CPS so far. Runs in a terminal window and has no configuration features.

Disclaimer and legal note

This software is a non commercial and experimental software for amateur radio (ham radio). It comes without warranty and with no support. The software is provided “as is," and you use the software at your own risk. I make no warranties as to performance, merchantability, fitness for a particular purpose, or any other warranties whether expressed or implied. No oral or written communication from or information provided by me shall create a warranty. Under no circumstances shall I be liable for direct, indirect, special, incidental, or consequential damages resulting from the use, misuse, or inability to use this software
go to top
 

  Imprint / Impressum

#37258 visitors since 2015-08-20