Merge branch 'anytone'

This commit is contained in:
Serge Vakulenko 2018-10-27 22:56:42 -07:00
commit e4c3c3f920
27 changed files with 881 additions and 82 deletions

317
d868uv.c
View File

@ -49,23 +49,32 @@
// //
#define OFFSET_BANK1 0x000040 // Channels #define OFFSET_BANK1 0x000040 // Channels
#define OFFSET_ZONELISTS 0x03e8c0 // Channel lists of zones #define OFFSET_ZONELISTS 0x03e8c0 // Channel lists of zones
#define OFFSET_SCANLISTS 0x05dcc0 // Scanlists
#define OFFSET_MESSAGES 0x069f40 // Messages
#define OFFSET_CHAN_MAP 0x070a40 // Bitmap of valid channels #define OFFSET_CHAN_MAP 0x070a40 // Bitmap of valid channels
#define OFFSET_ZONE_MAP 0x070940 // Bitmap of valid zones #define OFFSET_ZONE_MAP 0x070940 // Bitmap of valid zones
#define OFFSET_SCANL_MAP 0x070980 // Bitmap of valid scanlists
#define OFFSET_SETTINGS 0x071600 // General settings #define OFFSET_SETTINGS 0x071600 // General settings
#define OFFSET_ZONENAMES 0x071dc0 // Names of zones #define OFFSET_ZONENAMES 0x071dc0 // Names of zones
#define OFFSET_RADIOID 0x073d00 // Table of radio IDs #define OFFSET_RADIOID 0x073d00 // Table of radio IDs
#define OFFSET_CONTACT_MAP 0x080140 // Bitmap of invalid contacts #define OFFSET_CONTACT_MAP 0x080140 // Bitmap of invalid contacts
#define OFFSET_CONTACTS 0x080640 // Contacts #define OFFSET_CONTACTS 0x080640 // Contacts
#define OFFSET_GLISTS 0x174b00 // RX group lists
#define GET_SETTINGS() ((general_settings_t*) &radio_mem[OFFSET_SETTINGS]) #define GET_SETTINGS() ((general_settings_t*) &radio_mem[OFFSET_SETTINGS])
#define GET_RADIOID() ((radioid_t*) &radio_mem[OFFSET_RADIOID]) #define GET_RADIOID() ((radioid_t*) &radio_mem[OFFSET_RADIOID])
#define GET_ZONEMAP() (&radio_mem[OFFSET_ZONE_MAP]) #define GET_ZONEMAP() (&radio_mem[OFFSET_ZONE_MAP])
#define GET_CONTACT_MAP() (&radio_mem[OFFSET_CONTACT_MAP]) #define GET_CONTACT_MAP() (&radio_mem[OFFSET_CONTACT_MAP])
#define GET_SCANL_MAP() (&radio_mem[OFFSET_SCANL_MAP])
#define GET_ZONENAME(i) (&radio_mem[OFFSET_ZONENAMES + (i)*32]) #define GET_ZONENAME(i) (&radio_mem[OFFSET_ZONENAMES + (i)*32])
#define GET_ZONELIST(i) ((uint16_t*) &radio_mem[OFFSET_ZONELISTS + (i)*512]) #define GET_ZONELIST(i) ((uint16_t*) &radio_mem[OFFSET_ZONELISTS + (i)*512])
#define GET_CONTACT(i) ((contact_t*) &radio_mem[OFFSET_CONTACTS + (i)*100]) #define GET_CONTACT(i) ((contact_t*) &radio_mem[OFFSET_CONTACTS + (i)*100])
#define GET_GROUPLIST(i) ((grouplist_t*) &radio_mem[OFFSET_GLISTS + (i)*320])
#define GET_SCANLIST(i) ((scanlist_t*) &radio_mem[OFFSET_SCANLISTS + (i)*192])
#define GET_MESSAGE(i) ((uint8_t*) &radio_mem[OFFSET_MESSAGES + (i)*256])
#define VALID_TEXT(txt) (*(txt) != 0 && *(txt) != 0xff) #define VALID_TEXT(txt) (*(txt) != 0 && *(txt) != 0xff)
#define VALID_GROUPLIST(gl) ((gl)->member[0] != 0xffffffff && VALID_TEXT((gl)->name))
// //
// Size of memory image. // Size of memory image.
@ -223,9 +232,9 @@ typedef struct {
// //
// General settings: 0x640 bytes at 0x02500000. // General settings: 0x640 bytes at 0x02500000.
// TODO: verify the general settings with official CPS
// //
typedef struct { typedef struct {
// Bytes 0-5. // Bytes 0-5.
uint8_t _unused0[6]; uint8_t _unused0[6];
@ -254,6 +263,7 @@ typedef struct {
// Radio ID table: 250 entries, 0x1f40 bytes at 0x02580000. // Radio ID table: 250 entries, 0x1f40 bytes at 0x02580000.
// //
typedef struct { typedef struct {
// Bytes 0-3. // Bytes 0-3.
uint8_t id[4]; // Up to 8 BCD digits uint8_t id[4]; // Up to 8 BCD digits
#define GET_ID(x) (((x)[0] >> 4) * 10000000 +\ #define GET_ID(x) (((x)[0] >> 4) * 10000000 +\
@ -315,6 +325,66 @@ typedef struct {
} contact_t; } contact_t;
//
// Group list data.
//
typedef struct {
// Bytes 0-255
uint32_t member[64]; // Contacts: 0=Contact1, 0xffffffff=Empty
// Bytes 256-319
uint8_t name[35]; // Group List Name (ASCII)
uint8_t unused[29]; // 0
} grouplist_t;
//
// Scan list data: 192 bytes.
//
typedef struct {
// Bytes 0-1
uint8_t _unused0; // 0
uint8_t prio_ch_select; // Priority Channel Select
#define PRIO_CHAN_OFF 0 // Off
#define PRIO_CHAN_SEL1 1 // Priority Channel Select1
#define PRIO_CHAN_SEL2 2 // Priority Channel Select2
#define PRIO_CHAN_SEL12 3 // Priority Channel Select1 + Priority Channel Select2
// Bytes 2-5
uint16_t priority_ch1; // Priority Channel 1: 0=Current Channel, 0xffff=Off
uint16_t priority_ch2; // Priority Channel 2: 0=Current Channel, 0xffff=Off
// Bytes 6-13
uint16_t look_back_a; // Look Back Time A, sec*10
uint16_t look_back_b; // Look Back Time B, sec*10
uint16_t dropout_delay; // Dropout Delay Time, sec*10
uint16_t dwell; // Dwell Time, sec*10
// Byte 14
uint8_t revert_channel; // Revert Channel
#define REVCH_SELECTED 0 // Selected
#define REVCH_SEL_TB 1 // Selected + TalkBack
#define REVCH_PRIO_CH1 2 // Priority Channel Select1
#define REVCH_PRIO_CH2 3 // Priority Channel Select2
#define REVCH_LAST_CALLED 4 // Last Called
#define REVCH_LAST_USED 5 // Last Used
#define REVCH_PRIO_CH1_TB 6 // Priority Channel Select1 + TalkBack
#define REVCH_PRIO_CH2_TB 7 // Priority Channel Select2 + TalkBack
// Bytes 15-31
uint8_t name[16]; // Scan List Name (ASCII)
uint8_t _unused31; // 0
// Bytes 32-131
uint16_t member[50]; // Channels, 0xffff=empty
// Bytes 132-191
uint8_t _unused132[60]; // 0
} scanlist_t;
static const char *POWER_NAME[] = { "Low", "Mid", "High", "Turbo" }; static const char *POWER_NAME[] = { "Low", "Mid", "High", "Turbo" };
static const char *DIGITAL_ADMIT_NAME[] = { "-", "Free", "NColor", "Color" }; static const char *DIGITAL_ADMIT_NAME[] = { "-", "Free", "NColor", "Color" };
static const char *ANALOG_ADMIT_NAME[] = { "-", "Tone", "Free", "Free" }; static const char *ANALOG_ADMIT_NAME[] = { "-", "Tone", "Free", "Free" };
@ -341,23 +411,7 @@ static const int CTCSS_TONES[NCTCSS] = {
// //
static void d868uv_print_version(radio_device_t *radio, FILE *out) static void d868uv_print_version(radio_device_t *radio, FILE *out)
{ {
//TODO // Empty.
#if 0
unsigned char *timestamp = GET_TIMESTAMP();
static const char charmap[16] = "0123456789:;<=>?";
if (*timestamp != 0xff) {
fprintf(out, "Last Programmed Date: %d%d%d%d-%d%d-%d%d",
timestamp[0] >> 4, timestamp[0] & 15, timestamp[1] >> 4, timestamp[1] & 15,
timestamp[2] >> 4, timestamp[2] & 15, timestamp[3] >> 4, timestamp[3] & 15);
fprintf(out, " %d%d:%d%d:%d%d\n",
timestamp[4] >> 4, timestamp[4] & 15, timestamp[5] >> 4, timestamp[5] & 15,
timestamp[6] >> 4, timestamp[6] & 15);
fprintf(out, "CPS Software Version: V%c%c.%c%c\n",
charmap[timestamp[7] & 15], charmap[timestamp[8] & 15],
charmap[timestamp[9] & 15], charmap[timestamp[10] & 15]);
}
#endif
} }
// //
@ -644,11 +698,9 @@ static void print_chan_base(FILE *out, channel_t *ch, int cnum)
else else
fprintf(out, "%-4d ", ch->scan_list_index + 1); fprintf(out, "%-4d ", ch->scan_list_index + 1);
//TODO // Transmit timeout timer on D868UV is configured globally,
// if (ch->tot == 0) // not per channel. So we don't print it here.
fprintf(out, "- "); fprintf(out, "- ");
// else
// fprintf(out, "%-3d ", ch->tot * 15);
fprintf(out, "%c ", "-+"[ch->rx_only]); fprintf(out, "%c ", "-+"[ch->rx_only]);
} }
@ -827,6 +879,21 @@ static int have_zones()
return 0; return 0;
} }
//
// Return true when any scanlists are present.
//
static int have_scanlists()
{
uint8_t *slmap = GET_SCANL_MAP();
int i;
for (i=0; i<(NSCANL+7)/8; i++) {
if (slmap[i] != 0)
return 1;
}
return 0;
}
// //
// Find a zone with given index. // Find a zone with given index.
// Return false when zone is not valid. // Return false when zone is not valid.
@ -846,7 +913,20 @@ static int get_zone(int i, uint8_t **zname, uint16_t **zlist)
} }
} }
static void print_chanlist(FILE *out, uint16_t *unsorted, int nchan) //
// Get scanlist by index.
//
static scanlist_t *get_scanlist(int i)
{
uint8_t *slmap = GET_SCANL_MAP();
if ((slmap[i / 8] >> (i & 7)) & 1)
return GET_SCANLIST(i);
return 0;
}
static void print_chanlist16(FILE *out, uint16_t *unsorted, int nchan)
{ {
int last = -1; int last = -1;
int range = 0; int range = 0;
@ -880,6 +960,65 @@ static void print_chanlist(FILE *out, uint16_t *unsorted, int nchan)
fprintf(out, "-%d", last); fprintf(out, "-%d", last);
} }
static void print_chanlist32(FILE *out, uint32_t *unsorted, int nchan)
{
int last = -1;
int range = 0;
int n;
uint32_t data[nchan];
// Sort the list before printing.
memcpy(data, unsorted, nchan * sizeof(uint32_t));
qsort(data, nchan, sizeof(uint32_t), compare_index_ffffffff);
for (n=0; n<nchan; n++) {
int cnum = data[n];
if (cnum == 0xffffffff)
break;
cnum++;
if (cnum == last+1) {
range = 1;
} else {
if (range) {
fprintf(out, "-%d", last);
range = 0;
}
if (n > 0)
fprintf(out, ",");
fprintf(out, "%d", cnum);
}
last = cnum;
}
if (range)
fprintf(out, "-%d", last);
}
static int have_grouplists()
{
int i;
for (i=0; i<NGLISTS; i++) {
grouplist_t *gl = GET_GROUPLIST(i);
if (VALID_GROUPLIST(gl))
return 1;
}
return 0;
}
static int have_messages()
{
int i;
for (i=0; i<NMESSAGES; i++) {
uint8_t *msg = GET_MESSAGE(i);
if (VALID_TEXT(msg))
return 1;
}
return 0;
}
// //
// Print full information about the device configuration. // Print full information about the device configuration.
// //
@ -925,11 +1064,11 @@ static void d868uv_print_config(radio_device_t *radio, FILE *out, int verbose)
continue; continue;
} }
fprintf(out, "%4d ", i + 1); fprintf(out, "%5d ", i + 1);
print_ascii(out, zname, 16, 1); print_ascii(out, zname, 16, 1);
fprintf(out, " "); fprintf(out, " ");
if (*zlist != 0xffff) { if (*zlist != 0xffff) {
print_chanlist(out, zlist, 250); print_chanlist16(out, zlist, 250);
} else { } else {
fprintf(out, "-"); fprintf(out, "-");
} }
@ -940,7 +1079,68 @@ static void d868uv_print_config(radio_device_t *radio, FILE *out, int verbose)
// //
// Scan lists. // Scan lists.
// //
//TODO if (have_scanlists()) {
fprintf(out, "\n");
if (verbose) {
fprintf(out, "# Table of scan lists.\n");
fprintf(out, "# 1) Scan list number: 1-%d\n", NSCANL);
fprintf(out, "# 2) Name: up to 16 characters, use '_' instead of space\n");
fprintf(out, "# 3) Priority channel 1: -, Curr or index\n");
fprintf(out, "# 4) Priority channel 2: -, Curr or index\n");
fprintf(out, "# 5) Designated transmit channel: Sel or Last\n");
fprintf(out, "# 6) List of channels: numbers and ranges (N-M) separated by comma\n");
fprintf(out, "#\n");
}
fprintf(out, "Scanlist Name PCh1 PCh2 TxCh Channels\n");
for (i=0; i<NSCANL; i++) {
scanlist_t *sl = get_scanlist(i);
if (!sl) {
// Scan list is disabled.
continue;
}
fprintf(out, "%5d ", i + 1);
print_ascii(out, sl->name, 16, 1);
if ((sl->prio_ch_select == PRIO_CHAN_SEL1 ||
sl->prio_ch_select == PRIO_CHAN_SEL12) &&
sl->priority_ch1 != 0xffff) {
if (sl->priority_ch1 == 0) {
fprintf(out, " Curr ");
} else {
fprintf(out, " %-4d ", sl->priority_ch1);
}
} else {
fprintf(out, " - ");
}
if ((sl->prio_ch_select == PRIO_CHAN_SEL2 ||
sl->prio_ch_select == PRIO_CHAN_SEL12) &&
sl->priority_ch2 != 0xffff) {
if (sl->priority_ch2 == 0) {
fprintf(out, "Curr ");
} else {
fprintf(out, "%-4d ", sl->priority_ch2);
}
} else {
fprintf(out, "- ");
}
if (sl->revert_channel == REVCH_LAST_CALLED) {
fprintf(out, "Last ");
} else {
fprintf(out, "Sel ");
}
if (sl->member[0] != 0xffff) {
print_chanlist16(out, sl->member, 50);
} else {
fprintf(out, "-");
}
fprintf(out, "\n");
}
}
// //
// Contacts. // Contacts.
@ -975,12 +1175,57 @@ static void d868uv_print_config(radio_device_t *radio, FILE *out, int verbose)
// //
// Group lists. // Group lists.
// //
//TODO if (have_grouplists()) {
fprintf(out, "\n");
if (verbose) {
fprintf(out, "# Table of group lists.\n");
fprintf(out, "# 1) Group list number: 1-%d\n", NGLISTS);
fprintf(out, "# 2) Name: up to 35 characters, use '_' instead of space\n");
fprintf(out, "# 3) List of contacts: numbers and ranges (N-M) separated by comma\n");
fprintf(out, "#\n");
}
fprintf(out, "Grouplist Name Contacts\n");
for (i=0; i<NGLISTS; i++) {
grouplist_t *gl = GET_GROUPLIST(i);
if (!VALID_GROUPLIST(gl)) {
// Group list is disabled.
continue;
}
fprintf(out, "%5d ", i + 1);
print_ascii(out, gl->name, 35, 1);
fprintf(out, " ");
print_chanlist32(out, gl->member, 64);
fprintf(out, "\n");
}
}
// //
// Text messages. // Text messages.
// //
//TODO if (have_messages()) {
fprintf(out, "\n");
if (verbose) {
fprintf(out, "# Table of text messages.\n");
fprintf(out, "# 1) Message number: 1-%d\n", NMESSAGES);
fprintf(out, "# 2) Text: up to 200 characters\n");
fprintf(out, "#\n");
}
fprintf(out, "Message Text\n");
for (i=0; i<NMESSAGES; i++) {
uint8_t *msg = GET_MESSAGE(i);
if (!VALID_TEXT(msg)) {
// Message is disabled
continue;
}
fprintf(out, "%5d ", i+1);
print_ascii(out, msg, 200, 0);
fprintf(out, "\n");
}
}
// General settings. // General settings.
print_id(out, verbose); print_id(out, verbose);
@ -1135,7 +1380,7 @@ static int d868uv_verify_config(radio_device_t *radio)
nchannels++; nchannels++;
if (ch->scan_list_index != 0) { if (ch->scan_list_index != 0) {
scanlist_t *sl = GET_SCANLIST(ch->scan_list_index - 1); scanlist_t *sl = get_scanlist(ch->scan_list_index - 1);
if (!VALID_SCANLIST(sl)) { if (!VALID_SCANLIST(sl)) {
fprintf(stderr, "Channel %d '", i+1); fprintf(stderr, "Channel %d '", i+1);
@ -1194,9 +1439,9 @@ static int d868uv_verify_config(radio_device_t *radio)
// Scanlists: check references to channels. // Scanlists: check references to channels.
for (i=0; i<NSCANL; i++) { for (i=0; i<NSCANL; i++) {
scanlist_t *sl = GET_SCANLIST(i); scanlist_t *sl = get_scanlist(i);
if (!VALID_SCANLIST(sl)) if (!sl)
continue; continue;
nscanlists++; nscanlists++;
@ -1224,15 +1469,15 @@ static int d868uv_verify_config(radio_device_t *radio)
continue; continue;
ngrouplists++; ngrouplists++;
for (k=0; k<32; k++) { for (k=0; k<64; k++) {
int cnum = gl->member[k]; int cnum = gl->member[k];
if (cnum != 0) { if (cnum != 0xffffffff) {
contact_t *ct = get_contact(cnum - 1); contact_t *ct = get_contact(cnum);
if (!ct) { if (!ct) {
fprintf(stderr, "Grouplist %d '", i+1); fprintf(stderr, "Grouplist %d '", i+1);
print_ascii(stderr, gl->name, 16, 0); print_ascii(stderr, gl->name, 35, 0);
fprintf(stderr, "': contact %d not found.\n", cnum); fprintf(stderr, "': contact %d not found.\n", cnum);
nerrors++; nerrors++;
} }

View File

@ -17,19 +17,28 @@ CONF = md2017-7-23-2017.conf \
rd5r-factory.conf \ rd5r-factory.conf \
gd77-ver311-W5NOR-Oklahoma.conf \ gd77-ver311-W5NOR-Oklahoma.conf \
gd77-empty.conf \ gd77-empty.conf \
gd77-factory.conf gd77-factory.conf \
d868uv-rmham-2018-10-20.conf \
d868uv-empty.conf
VPATH = ../../dmrconfig.wiki/files VPATH = ../../dmrconfig.wiki/files/uv380 \
../../dmrconfig.wiki/files/md380 \
../../dmrconfig.wiki/files/rd5r \
../../dmrconfig.wiki/files/gd77 \
../../dmrconfig.wiki/files/d868uv
all: $(CONF) all: $(CONF)
clean: clean:
rm -f $(CONF) rm -f $(CONF)
.SUFFIXES: .conf .rdt .dat .SUFFIXES: .conf .rdt .dat .img
.rdt.conf: .rdt.conf:
dmrconfig $< > $@ dmrconfig $< > $@
.dat.conf: .dat.conf:
dmrconfig $< > $@ dmrconfig $< > $@
.img.conf:
dmrconfig $< > $@

103
examples/d868uv-empty.conf Normal file
View File

@ -0,0 +1,103 @@
#
# This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
#
Radio: Anytone AT-D868UV
# Table of digital channels.
# 1) Channel number: 1-4000
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Receive frequency in MHz
# 4) Transmit frequency or +/- offset in MHz
# 5) Transmit power: High, Mid, Low, Turbo
# 6) Scan list: - or index in Scanlist table
# 7) Transmit timeout timer: (unused)
# 8) Receive only: -, +
# 9) Admit criteria: -, Free, Color, NColor
# 10) Color code: 0, 1, 2, 3... 15
# 11) Time slot: 1 or 2
# 12) Receive group list: - or index in Grouplist table
# 13) Contact for transmit: - or index in Contacts table
#
Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot RxGL TxContact
2 Channel_2 436.325 +0 Turbo 1 - - - 1 1 1 1 # Contact1
4 Channel_4 438.875 +0 Turbo 1 - - - 1 1 1 1 # Contact1
6 Channel_6 146.325 +0 Turbo 1 - - - 1 1 1 1 # Contact1
8 Channel_8 148.875 +0 Turbo 1 - - - 1 1 1 1 # Contact1
# Table of analog channels.
# 1) Channel number: 1-4000
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Receive frequency in MHz
# 4) Transmit frequency or +/- offset in MHz
# 5) Transmit power: High, Mid, Low, Turbo
# 6) Scan list: - or index
# 7) Transmit timeout timer: (unused)
# 8) Receive only: -, +
# 9) Admit criteria: -, Free, Tone
# 10) Squelch level: Normal (unused)
# 11) Guard tone for receive, or '-' to disable
# 12) Guard tone for transmit, or '-' to disable
# 13) Bandwidth in kHz: 12.5, 25
#
Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
1 Channel_1 435.525 +0 Turbo 1 - - - Normal - - 25
3 Channel_3 437.575 +0 Turbo 1 - - - Normal - - 25
5 Channel_5 144.525 +0 Turbo 1 - - - Normal - - 25
7 Channel_7 147.575 +0 Turbo 1 - - - Normal - - 25
# Table of channel zones.
# 1) Zone number: 1-250
# 2) Name: up to 16 characters, use '_' instead of space
# 3) List of channels: numbers and ranges (N-M) separated by comma
#
Zone Name Channels
1 Zone_1 1-8
# Table of scan lists.
# 1) Scan list number: 1-250
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Priority channel 1: -, Curr or index
# 4) Priority channel 2: -, Curr or index
# 5) Designated transmit channel: Sel or Last
# 6) List of channels: numbers and ranges (N-M) separated by comma
#
Scanlist Name PCh1 PCh2 TxCh Channels
1 Scan_List_1 - - Sel 1-8
# Table of contacts.
# 1) Contact number: 1-10000
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Call type: Group, Private, All
# 4) Call ID: 1...16777215
# 5) Incoming call alert: -, +, Online
#
Contact Name Type ID RxTone
1 Contact1 Group 12345678 -
# Table of group lists.
# 1) Group list number: 1-250
# 2) Name: up to 35 characters, use '_' instead of space
# 3) List of contacts: numbers and ranges (N-M) separated by comma
#
Grouplist Name Contacts
1 Group_List_1 1
# Table of text messages.
# 1) Message number: 1-100
# 2) Text: up to 200 characters
#
Message Text
1 Hello!
2 Welcome!
3 Thank you!
4 Good bye!
5 Happy every day!
# Unique DMR ID and name of this radio.
ID: 12345678
Name: My Radio
# Text displayed when the radio powers up.
Intro Line 1: WELCOM
Intro Line 2: ANYTONE

View File

@ -0,0 +1,355 @@
#
# This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
#
Radio: Anytone AT-D868UV
# Table of digital channels.
# 1) Channel number: 1-4000
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Receive frequency in MHz
# 4) Transmit frequency or +/- offset in MHz
# 5) Transmit power: High, Mid, Low, Turbo
# 6) Scan list: - or index in Scanlist table
# 7) Transmit timeout timer: (unused)
# 8) Receive only: -, +
# 9) Admit criteria: -, Free, Color, NColor
# 10) Color code: 0, 1, 2, 3... 15
# 11) Time slot: 1 or 2
# 12) Receive group list: - or index in Grouplist table
# 13) Contact for transmit: - or index in Contacts table
#
Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot RxGL TxContact
94 ABQ_Rk_Mtn 442.900 +5 High 3 - - NColor 7 1 7 9 # Rocky Mountain
95 ABQ_South 442.900 +5 High 3 - - NColor 7 2 9 11 # South
96 Akron_Rk_Mtn 448.175 -5 High 2 - - NColor 7 1 7 9 # Rocky Mountain
97 Akron_North 448.175 -5 High 2 - - NColor 7 2 8 13 # North
98 Almagre_Rk_Mtn 446.950 -5 High 3 - - NColor 7 1 7 9 # Rocky Mountain
99 Almagre_South 446.950 -5 High 3 - - NColor 7 2 9 11 # South
100 Badger_Rk_Mtn 446.7625 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
101 Badger_Central 446.7625 -5 High 1 - - NColor 7 2 10 12 # Central
102 Boulder_Rk_Mtn 446.9875 -5 High 2 - - NColor 7 1 7 9 # Rocky Mountain
103 Boulder_North 446.9875 -5 High 2 - - NColor 7 2 8 13 # North
104 Breck_Rk_Mtn 445.0875 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
105 Breck_Central 445.0875 -5 High 1 - - NColor 7 2 10 12 # Central
106 Canon_Rk_Mtn 446.7375 -5 High 3 - - NColor 7 1 7 9 # Rocky Mountain
107 Canon_South 446.7375 -5 High 3 - - NColor 7 2 9 11 # South
108 Cheyenne_Rk_Mtn 449.9375 -5 High 2 - - NColor 7 1 7 9 # Rocky Mountain
109 Cheyenne_North 449.9375 -5 High 2 - - NColor 7 2 8 13 # North
110 Devils_South 446.925 -5 High 3 - - NColor 7 1 9 11 # South
111 Devils_Central 446.925 -5 High 1 - - NColor 7 2 10 12 # Central
112 Durango_Rk_Mtn 446.7375 -5 High 3 - - NColor 6 1 7 9 # Rocky Mountain
113 Durango_South 446.7375 -5 High 3 - - NColor 6 2 9 11 # South
114 Ft_Morgan_Rk_Mtn 448.200 -5 High 2 - - NColor 7 1 7 9 # Rocky Mountain
115 Ft_Morgan_North 448.200 -5 High 2 - - NColor 7 2 8 13 # North
116 Genoa_Rk_Mtn 446.7375 -5 High 1 - - NColor 8 1 7 9 # Rocky Mountain
117 Genoa_Central 446.7375 -5 High 1 - - NColor 8 2 10 12 # Central
118 Horsetooth_Rk_Mt 446.750 -5 High 2 - - NColor 7 1 7 9 # Rocky Mountain
119 Horsetooth_North 446.750 -5 High 2 - - NColor 7 2 8 13 # North
120 Leadville_Rk_Mtn 445.050 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
121 Leadville_Centra 445.050 -5 High 1 - - NColor 7 2 10 12 # Central
122 Lookout_Local 446.8375 -5 High 1 - - NColor 7 1 11 10 # Lookout Local
123 Lookout_Central 446.8375 -5 High 1 - - NColor 7 2 10 12 # Central
124 Pueblo_Rk_Mtn 446.9875 -5 High 3 - - NColor 6 1 7 9 # Rocky Mountain
125 Pueblo_South 446.9875 -5 High 3 - - NColor 6 2 9 11 # South
126 Salida_Rk_Mtn 446.8125 -5 High 3 - - NColor 7 1 7 9 # Rocky Mountain
127 Salida_South 446.8125 -5 High 3 - - NColor 7 2 9 11 # South
128 Squaw_Rk_Mtn 446.9375 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
129 Squaw_Central 446.9375 -5 High 1 - - NColor 7 2 10 12 # Central
130 Thorodin_Rk_Mtn 446.800 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
131 Thorodin_Central 446.800 -5 High 1 - - NColor 7 2 10 12 # Central
132 Vail_Rk_Mtn 445.075 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
133 Vail_Central 445.075 -5 High 1 - - NColor 7 2 10 12 # Central
134 Westcreek_Rk_Mtn 446.875 -5 High 1 - - NColor 6 1 7 9 # Rocky Mountain
135 Westcreek_Centra 446.875 -5 High 1 - - NColor 6 2 10 12 # Central
136 Trailer_Rk_Mtn 438.225 -5 High 1 - - NColor 7 1 7 9 # Rocky Mountain
137 Trailer_North 438.225 -5 High 2 - - NColor 7 2 8 13 # North
138 Trailer_Central 438.225 -5 High 1 - - NColor 7 2 10 12 # Central
139 Trailer_South 438.225 -5 High 3 - - NColor 7 2 9 11 # South
140 446.2000_SX_Dig 446.200 +0 High - - - NColor 1 1 - 25 # All Call
141 446.2125_SX_Dig 446.2125 +0 High - - - NColor 1 1 - 25 # All Call
142 446.2250_SX_Dig 446.225 +0 High - - - NColor 1 1 - 25 # All Call
143 446.2375_SX_Dig 446.2375 +0 High - - - NColor 1 1 - 25 # All Call
144 446.2500_SX_Dig 446.250 +0 High - - - NColor 1 1 - 25 # All Call
145 446.2625_SX_Dig 446.2625 +0 High - - - NColor 1 1 - 25 # All Call
146 446.2750_SX_Dig 446.275 +0 High - - - NColor 1 1 - 25 # All Call
147 446.2875_SX_Dig 446.2875 +0 High - - - NColor 1 1 - 25 # All Call
148 446.3000_SX_Dig 446.300 +0 High - - - NColor 1 1 - 25 # All Call
149 DMR.MARC_Simplex 446.075 +0 High - - - NColor 1 1 6 7 # DMR MARC Simplex
150 W0CFI_S1 446.625 -5 High - - - NColor 7 1 - 25 # All Call
151 W0TX_WorldWide 446.7875 -5 High - - - NColor 1 1 - 6 # BM Worldwide
152 W0TX_USA 446.7875 -5 High - - - NColor 1 1 - 14 # BM USA
153 W0TX_Mtn_West 446.7875 -5 High - - - NColor 1 1 - 19 # BM MTN West
154 W0TX_Colorado 446.7875 -5 High - - - NColor 1 1 - 15 # BM Colorado
155 W0TX_T310 446.7875 -5 High - - - NColor 1 1 - 8 # BM TAC 310
156 W0TX_Parrot 446.7875 -5 High - - - NColor 1 1 13 18 # BM Parrot
157 W0TX_TS1_Unlink 446.7875 -5 High - - - NColor 1 1 - 17 # BM Unlink
158 W0TX_Local 446.7875 -5 High - - - NColor 1 2 - 20 # BM W0TX Lcl
159 SlvrH_WorldWide 446.825 -5 High - - - NColor 1 1 - 6 # BM Worldwide
160 SlvrH_USA 446.825 -5 High - - - NColor 1 1 - 14 # BM USA
161 SlvrH_Mtn_West 446.825 -5 High - - - NColor 1 1 - 19 # BM MTN West
162 SlvrH_Colorado 446.825 -5 High - - - NColor 1 1 - 15 # BM Colorado
163 SlvrH_T310 446.825 -5 High - - - NColor 1 1 - 8 # BM TAC 310
164 SlvrH_Parrot 446.825 -5 High - - - NColor 1 1 13 18 # BM Parrot
165 SlvrH_TS1_Unlink 446.825 -5 High - - - NColor 1 1 - 17 # BM Unlink
166 SlvrH_ARESDEC 446.825 -5 High - - - NColor 1 2 - 23 # BM ARESDEC
167 PRA_Worldwide 445.075 -5 High - - - NColor 1 1 - 6 # BM Worldwide
168 PRA_USA 445.075 -5 High - - - NColor 1 1 - 14 # BM USA
169 PRA_Mtn_West 445.075 -5 High - - - NColor 1 1 - 19 # BM MTN West
170 PRA_Colorado 445.075 -5 High - - - NColor 1 1 - 15 # BM Colorado
171 PRA_T310 445.075 -5 High - - - NColor 1 1 - 8 # BM TAC 310
172 PRA_Parrot 445.075 -5 High - - - NColor 1 1 13 18 # BM Parrot
173 PRA_TS1_Unlink 445.075 -5 High - - - NColor 1 1 - 17 # BM Unlink
174 PRA_Local 445.075 -5 High - - - NColor 1 2 - 24 # BM PRA Lcl
175 Lee_Hill_WW 445.050 -5 High - - - NColor 1 1 13 6 # BM Worldwide
176 Lee_Hill_USA 445.050 -5 High - - - NColor 1 1 13 14 # BM USA
177 Lee_Hill_MtnWest 445.050 -5 High - - - NColor 1 1 13 19 # BM MTN West
178 Lee_Hill_Colo 445.050 -5 High - - - NColor 1 1 13 15 # BM Colorado
179 Lee_Hill_T310 445.050 -5 High - - - NColor 1 1 13 8 # BM TAC 310
180 Lee_Hill_Parrot 445.050 -5 High - - - NColor 1 1 13 18 # BM Parrot
181 Lee_Hill_TS1_UNL 445.050 -5 High - - - NColor 1 1 13 17 # BM Unlink
182 Lee_Hill_Local 445.050 -5 High - - - NColor 1 2 13 21 # Lee Hill Local
183 C_Sprgs_WW 445.0625 -5 High - - - NColor 1 1 13 6 # BM Worldwide
184 C_Sprgs_USA 445.0625 -5 High - - - NColor 1 1 13 14 # BM USA
185 C_Sprgs_MtnWest 445.0625 -5 High - - - NColor 1 1 13 19 # BM MTN West
186 C_Sprgs_Colorado 445.0625 -5 High - - - NColor 1 1 13 15 # BM Colorado
187 C_Sprgs_T310 445.0625 -5 High - - - NColor 1 1 13 8 # BM TAC 310
188 C_Sprgs_Parrot 445.0625 -5 High - - - NColor 1 1 13 18 # BM Parrot
189 C_Sprgs_TS1_UNL 445.0625 -5 High - - - NColor 1 1 13 17 # BM Unlink
190 C_Sprgs_Local 445.0625 -5 High - - - NColor 1 2 13 22 # C Spgs Local
191 Mission_Rk_Mtn 445.1375 -5 High 3 - - NColor 7 1 7 9 # Rocky Mountain
192 Mission_South 445.1375 -5 High 3 - - NColor 7 2 9 11 # South
193 Rangely_Rk_Mtn 445.2625 -5 High 3 - - NColor 7 1 7 9 # Rocky Mountain
194 Rangely_Central 445.2625 -5 High 1 - - NColor 7 2 10 12 # Central
# Table of analog channels.
# 1) Channel number: 1-4000
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Receive frequency in MHz
# 4) Transmit frequency or +/- offset in MHz
# 5) Transmit power: High, Mid, Low, Turbo
# 6) Scan list: - or index
# 7) Transmit timeout timer: (unused)
# 8) Receive only: -, +
# 9) Admit criteria: -, Free, Tone
# 10) Squelch level: Normal (unused)
# 11) Guard tone for receive, or '-' to disable
# 12) Guard tone for transmit, or '-' to disable
# 13) Bandwidth in kHz: 12.5, 25
#
Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
1 Denver_Thorodin 449.225 -5 High 5 - - - Normal 141.3 141.3 25
2 Denver_Squaw 448.225 -5 High 5 - - - Normal 141.3 141.3 25
3 Denver_Lookout 449.625 -5 High 5 - - - Normal 141.3 141.3 25
4 Denver_Lee_Hill 447.750 -5 High 5 - - - Normal 141.3 141.3 25
5 Breckenridge 447.850 -5 High 5 - - - Normal 100.0 100.0 25
6 446.000_Simplex 446.000 +0 High - - - - Normal - - 25
7 446.000_Smplx_PL 446.000 +0 High - - - - Normal 141.3 141.3 25
8 446.025_Simplex 446.025 +0 High - - - - Normal - - 25
9 446.025_Smplx_PL 446.025 +0 High - - - - Normal 141.3 141.3 25
10 446.050_Simplex 446.050 +0 High - - - - Normal - - 25
11 446.050_Smplx_PL 446.050 +0 High - - - - Normal 141.3 141.3 25
12 446.075_Simplex 446.075 +0 High - - - - Normal - - 25
13 446.075_Smplx_PL 446.075 +0 High - - - - Normal 141.3 141.3 25
14 446.100_Simplex 446.100 +0 High - - - - Normal - - 25
15 446.100_Smplx_PL 446.100 +0 High - - - - Normal 141.3 141.3 25
16 446.125_Simplex 446.125 +0 High - - - - Normal - - 25
17 446.125_Smplx_PL 446.125 +0 High - - - - Normal 141.3 141.3 25
18 446.150_Simplex 446.150 +0 High - - - - Normal - - 25
19 446.150_Smplx_PL 446.150 +0 High - - - - Normal 141.3 141.3 25
20 446.175_Simplex 446.175 +0 High - - - - Normal - - 25
21 446.175_Smplx_PL 446.175 +0 High - - - - Normal 141.3 141.3 25
22 446.200_Simplex 446.200 +0 High - - - - Normal - - 12.5
23 446.200_SmplxDCS 446.200 +0 High - - - - Normal D023N D023N 12.5
24 446.225_Simplex 446.225 +0 High - - - - Normal - - 12.5
25 446.225_SmplxDCS 446.225 +0 High - - - - Normal D023N D023N 12.5
26 446.250_Simplex 446.250 +0 High - - - - Normal - - 12.5
27 446.250_SmplxDCS 446.250 -0.025 High - - - - Normal D023N D023N 12.5
28 446.275_Simplex 446.275 +0 High - - - - Normal - - 12.5
29 446.275_SmplxDCS 446.275 +0 High - - - - Normal D023N D023N 12.5
30 446.300_Simplex 446.275 +0 High - - - - Normal - - 12.5
31 446.300_SmplxDCS 446.275 +0 High - - - - Normal D023N D023N 12.5
32 438.225_91.5 438.225 -5 High - - - - Normal 91.5 91.5 25
33 447.225_103.5 447.225 -5 High - - - - Normal 103.5 103.5 25
34 449.075_141.3 449.075 -5 High - - - - Normal 141.3 141.3 25
35 449.100_141.3 449.100 -5 High - - - - Normal 141.3 141.3 25
36 447.300_BZZ_Rptr 447.300 -5 High - - - - Normal 141.3 141.3 25
37 448.050_K0PWO1 448.050 -5 High - - - - Normal 179.9 179.9 25
38 448.050_K0PWO2 448.050 -5 High - - - - Normal D023N D023N 25
39 448.325_K0PWO3 448.325 -5 High - - - - Normal 179.9 179.9 25
40 448.325_K0PWO4 448.325 -5 High - - - - Normal D023N D023N 25
41 447.125_91.5 447.125 -5 High 6 - - - Normal 91.5 91.5 25
42 447.150_107.2 447.150 -5 High 6 - - - Normal - 107.2 25
43 447.175_186.2 447.175 -5 High 6 - - - Normal - 186.2 25
44 447.225_141.3 447.225 -5 High 6 - - - Normal 141.3 141.3 25
45 447.275_100.0 447.275 -5.15 High 6 - - - Normal - 100.0 25
46 447.350_151.4 447.350 -5 High 6 - - - Normal 151.4 151.4 25
47 447.450_123.0 447.450 -5 High 6 - - - Normal - 123.0 25
48 447.500_88.5 447.500 -5 High 6 - - - Normal - 88.5 25
49 447.650_141.3 447.650 -5 High 6 - - - Normal 141.3 141.3 25
50 447.700_100.0 447.700 -5 High 6 - - - Normal 100.0 100.0 25
51 447.750_141.3 447.750 -5 High 6 - - - Normal 141.3 141.3 25
52 447.825_NB_073 447.825 -5 High 6 - - - Normal D073N D073N 12.5
53 447.925_100.0 447.925 -5 High 6 - - - Normal - 100.0 25
54 447.975_107.2 447.975 -5 High 6 - - - Normal - 107.2 25
55 448.025_100.0 448.025 -5 High 7 - - - Normal - 100.0 25
56 448.075_123.0 448.075 -5 High 7 - - - Normal - 123.0 25
57 448.125_107.2 448.125 -5 High 7 - - - Normal - 107.2 25
58 448.200_NB_023 448.200 -5 High 7 - - - Normal D023N D023N 12.5
59 448.200_141.3 448.200 -5 High 7 - - - Normal 141.3 141.3 25
60 448.225_141.3 448.225 -5 High 7 - - - Normal - 141.3 25
61 448.450_100.0 448.450 -5 High 7 - - - Normal 100.0 100.0 25
62 448.475_100.0 448.475 -5 High 7 - - - Normal - 100.0 25
63 448.500_100.0 448.500 -5 High 7 - - - Normal - 100.0 25
64 448.625_100.0 448.625 -5 High 7 - - - Normal - 100.0 25
65 448.675_100.0 448.625 -5 High 7 - - - Normal - 100.0 25
66 448.700_146.2 448.700 -5 High 7 - - - Normal - 146.2 25
67 448.850_88.5 448.850 -5 High 7 - - - Normal - 88.5 25
68 448.900_100.0 448.900 -5 High 7 - - - Normal - 100.0 25
69 448.975_123.0 448.975 -5 High 7 - - - Normal - 123.0 25
70 448.975_100.0 448.975 -5 High 7 - - - Normal 100.0 100.0 25
71 449.050_107.2 449.050 -5 High 8 - - - Normal - 107.2 25
72 449.125_103.5 449.125 -5 High 8 - - - Normal - 103.5 25
73 449.350_100.0 449.350 -5 High 8 - - - Normal - 100.0 25
74 449.450_103.5 449.450 -5 High 8 - - - Normal - 103.5 25
75 449.525_100.0 449.525 -5 High 8 - - - Normal - 100.0 25
76 449.600_100.0 449.600 -5 High 8 - - - Normal - 100.0 25
77 449.625_141.3 449.625 -5 High 8 - - - Normal 141.3 141.3 25
78 449.650_136.5 449.650 -5 High 8 - - - Normal - 136.5 25
79 449.725_127.3 449.725 -5 High 8 - - - Normal - 127.3 25
80 449.750_103.5 449.750 -5 High 8 - - - Normal - 103.5 25
81 449.800_123.0 449.800 -5 High 8 - - - Normal - 123.0 25
82 449.825_103.5 449.825 -5 High 8 - - - Normal - 103.5 25
83 449.850_100.0 449.850 -5 High 8 - - - Normal - 100.0 25
84 449.875_103.5 449.875 -5 High 8 - - - Normal - 103.5 25
85 Devilshead 448.950 -5 High - - - - Normal 100.0 100.0 25
86 Cordova_Pass 449.750 -5 High - - - - Normal 100.0 100.0 25
87 Black_Forest 447.625 -5 High - - - - Normal 100.0 100.0 25
88 Boone 447.275 -5 High - - - - Normal 100.0 100.0 25
89 Pueblo_Salida 449.975 -5 High - - - - Normal 100.0 100.0 25
90 Canon_City 447.975 -5 High - - - - Normal 100.0 100.0 25
91 Canon_Fremont 447.250 -5 High - - - - Normal 100.0 100.0 25
92 DIA_Denver 448.150 -5 High - - - - Normal 141.3 141.3 25
93 Pueblo_West 448.975 -5 High - - - - Normal 100.0 100.0 25
# Table of channel zones.
# 1) Zone number: 1-250
# 2) Name: up to 16 characters, use '_' instead of space
# 3) List of channels: numbers and ranges (N-M) separated by comma
#
Zone Name Channels
1 TRBO_CentralEast 111,116-117,122-123,128-131,134-135
2 TRBO_CentralWest 100-101,104-105,120-121,132-133,193-194
3 TRBO_North 96-97,102-103,108-109,114-115,118-119,136-137
4 TRBO_South 94-95,98-99,106-107,110-113,124-127,191-192
5 BM_RMHAM 175-190
6 BM_Other_1 151-158
7 BM_Other_2 159-174
8 RMHAM_Analog 1-5
9 Fun_Machines 85-93
10 SX_Analog 6-21
11 SX_Analog_NB 22-31
12 SX_Digital 140-149
13 W0CFI_Local 150
14 Portable_Rptrs 32-36,39-40,136-137,139
15 HAM_447 33,41-54
16 Ham_448 55-70
17 HAM_449 71-84
18 ARES_525 1
# Table of scan lists.
# 1) Scan list number: 1-250
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Priority channel 1: -, Curr or index
# 4) Priority channel 2: -, Curr or index
# 5) Designated transmit channel: Sel or Last
# 6) List of channels: numbers and ranges (N-M) separated by comma
#
Scanlist Name PCh1 PCh2 TxCh Channels
1 TRBO_Central - - Sel 100-102,104-105,111,116-117,120-123,128-135,193-194
2 TRBO_North - - Sel 96-97,102-103,108-109,114-115,118-119,136-137
3 TRBO_South - - Sel 94-95,98-99,106-107,110-113,124-127,136,139,191-192
4 DMR_MARC_RMHAM - - Sel 175
5 RMHAM_Analog - - Sel 1-5
6 HAM_447 - - Sel 33,41-54
7 HAM_448 - - Sel 55-70
8 HAM_449 - - Sel 71-84
# Table of contacts.
# 1) Contact number: 1-10000
# 2) Name: up to 16 characters, use '_' instead of space
# 3) Call type: Group, Private, All
# 4) Call ID: 1...16777215
# 5) Incoming call alert: -, +, Online
#
Contact Name Type ID RxTone
1 Contact_1 Group 1 -
2 Local Group 2 -
3 DMR_MARC_NA Group 3 -
4 BM_Rflctr Group 9 -
5 DMR_MARC_WW_Eng Group 13 -
6 BM_Worldwide Group 91 -
7 DMR_MARC_Simplex Group 99 -
8 BM_TAC_310 Group 310 -
9 Rocky_Mountain Group 700 -
10 Lookout_Local Group 710 -
11 South Group 719 -
12 Central Group 720 -
13 North Group 721 -
14 BM_USA Group 3100 -
15 BM_Colorado Group 3108 -
16 DMR_MARC_MTN Group 3177 -
17 BM_Unlink Group 4000 -
18 BM_Parrot Private 9990 -
19 BM_MTN_West Group 31062 -
20 BM_W0TX_Lcl Group 310804 -
21 Lee_Hill_Local Group 310819 -
22 C_Spgs_Local Group 310820 -
23 BM_ARESDEC Group 310842 -
24 BM_PRA_Lcl Group 310844 -
25 All_Call All 16777215 -
# Table of group lists.
# 1) Group list number: 1-250
# 2) Name: up to 35 characters, use '_' instead of space
# 3) List of contacts: numbers and ranges (N-M) separated by comma
#
Grouplist Name Contacts
2 DMR_MARC_NA 3
3 DMR_MARC_WW_Eng 5
4 Local 16
5 DMR_MARC_MTN 16
6 DMR_MARC_Simplex 7
7 Rocky_Mountain 9
8 North 13
9 South 11
10 Central 12
11 Lookout_Local 10
13 BM_All 2,4,6,8,14-15,17,19-24
14 BM_TAC_310 8
15 BM_USA 14
16 BM_Colorado 15
17 BM_MTN_West 19
18 BM_Unlink 17
20 BM_ARESDEC 23
21 BM_Worldwide 6
22 BM_W0TX_Lcl 20
# Table of text messages.
# 1) Message number: 1-100
# 2) Text: up to 200 characters
#
Message Text
1 Hello!
2 Welcome!
3 Thank you!
4 Good bye!
5 Happy every day!
# Unique DMR ID and name of this radio.
ID: 54321
Name: RMHAM Sample
# Text displayed when the radio powers up.
Intro Line 1: -
Intro Line 2: -

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/10/04 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.8.127, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Radioddity GD-77 Radio: Radioddity GD-77
Last Programmed Date: 2018-10-04 21:05 Last Programmed Date: 2018-10-04 21:05

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/10/04 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.8.127, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Radioddity GD-77 Radio: Radioddity GD-77
Last Programmed Date: 2018-03-23 15:19 Last Programmed Date: 2018-03-23 15:19

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/10/04 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.8.127, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Radioddity GD-77 Radio: Radioddity GD-77
Last Programmed Date: 2018-05-05 01:54 Last Programmed Date: 2018-05-05 01:54

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-UV380 Radio: TYT MD-UV380
Last Programmed Date: 2018-08-20 12:41:08 Last Programmed Date: 2018-08-20 12:41:08

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-UV380 Radio: TYT MD-UV380
Last Programmed Date: 2018-07-13 16:02:59 Last Programmed Date: 2018-07-13 16:02:59

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-UV380 Radio: TYT MD-UV380
Last Programmed Date: 2018-08-05 17:54:47 Last Programmed Date: 2018-08-05 17:54:47

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-UV380 Radio: TYT MD-UV380
Last Programmed Date: 2017-07-23 19:19:23 Last Programmed Date: 2017-07-23 19:19:23

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-UV380 Radio: TYT MD-UV380
Last Programmed Date: 2017-07-19 07:09:13 Last Programmed Date: 2017-07-19 07:09:13

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-380 Radio: TYT MD-380
Last Programmed Date: 2018-03-29 10:33:50 Last Programmed Date: 2018-03-29 10:33:50
@ -43,7 +43,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
# 12) Guard tone for transmit, or '-' to disable # 12) Guard tone for transmit, or '-' to disable
# 13) Bandwidth in kHz: 12.5, 20, 25 # 13) Bandwidth in kHz: 12.5, 20, 25
# #
Analog Name Receive Transmit Power Scan AS TOT RO Admit Squelch RxTone TxTone Width Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
3 Black_FM 443.225 +5 High - - - - Normal 100.0 100.0 25 3 Black_FM 443.225 +5 High - - - - Normal 100.0 100.0 25
4 Simplex_446 446.000 +0 High - - - - Normal - - 25 4 Simplex_446 446.000 +0 High - - - - Normal - - 25
5 Crystal_FM 443.550 +5 High - - - - Normal - 100.0 25 5 Crystal_FM 443.550 +5 High - - - - Normal - 100.0 25

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-380 Radio: TYT MD-380
Last Programmed Date: 2016-09-11 21:46:59 Last Programmed Date: 2016-09-11 21:46:59
@ -960,7 +960,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
# 12) Guard tone for transmit, or '-' to disable # 12) Guard tone for transmit, or '-' to disable
# 13) Bandwidth in kHz: 12.5, 20, 25 # 13) Bandwidth in kHz: 12.5, 20, 25
# #
Analog Name Receive Transmit Power Scan AS TOT RO Admit Squelch RxTone TxTone Width Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
323 NatlSmplx_446.0 446.000 +0 High 14 90 - - Normal - - 25 323 NatlSmplx_446.0 446.000 +0 High 14 90 - - Normal - - 25
324 w6ash_440.800 440.800 +5 High - 90 - - Normal - 100.0 25 324 w6ash_440.800 440.800 +5 High - 90 - - Normal - 100.0 25
325 wb6led_440.950 440.950 +5 High - 90 - - Normal - 162.2 25 325 wb6led_440.950 440.950 +5 High - 90 - - Normal - 162.2 25

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/20 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: TYT MD-380 Radio: TYT MD-380
Last Programmed Date: 2016-10-20 17:49:09 Last Programmed Date: 2016-10-20 17:49:09

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-05-13 13:25 Last Programmed Date: 2018-05-13 13:25

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-05-20 16:52 Last Programmed Date: 2018-05-20 16:52

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 0000-00-00 00:00 Last Programmed Date: 0000-00-00 00:00

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-04-23 15:10 Last Programmed Date: 2018-04-23 15:10

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-05-16 14:41 Last Programmed Date: 2018-05-16 14:41

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-05-12 23:16 Last Programmed Date: 2018-05-12 23:16

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-05-12 23:16 Last Programmed Date: 2018-05-12 23:16

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-07-05 16:02 Last Programmed Date: 2018-07-05 16:02

View File

@ -1,6 +1,6 @@
# #
# This configuration was generated 2018/09/24 by dmrconfig, # This configuration was generated 2018/10/27 by dmrconfig,
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ # Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
# #
Radio: Baofeng RD-5R Radio: Baofeng RD-5R
Last Programmed Date: 2018-05-12 23:16 Last Programmed Date: 2018-05-12 23:16

View File

@ -35,6 +35,7 @@
#if defined(__WIN32__) || defined(WIN32) #if defined(__WIN32__) || defined(WIN32)
#include <windows.h> #include <windows.h>
#include <setupapi.h>
#include <malloc.h> #include <malloc.h>
static void *fd = INVALID_HANDLE_VALUE; static void *fd = INVALID_HANDLE_VALUE;
static DCB saved_mode; static DCB saved_mode;
@ -505,7 +506,67 @@ static char *find_path(int vid, int pid)
IOObjectRelease(devices); IOObjectRelease(devices);
#else #else
printf("Don't know how to get the list of CD devices on this system.\n"); // Prepare a pattern for device name matching.
char pattern[128];
int pattern_len;
sprintf(pattern, "\\\\?\\usb#vid_%04x&pid_%04x", vid, pid);
pattern_len = strlen(pattern);
// Get access to serial device information.
static GUID guid = { 0xa5dcbf10, 0x6530, 0x11d2, { 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed } };
HDEVINFO devinfo = SetupDiGetClassDevs(&guid, NULL, NULL,
DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if (devinfo == INVALID_HANDLE_VALUE) {
printf("Cannot get devinfo!\n");
return 0;
}
// Loop through available devices with a given GUID.
int index;
SP_INTERFACE_DEVICE_DATA iface;
iface.cbSize = sizeof(iface);
for (index=0; SetupDiEnumDeviceInterfaces(devinfo, NULL, &guid, index, &iface); ++index) {
// Obtain a required size of device detail structure.
DWORD needed;
SetupDiGetDeviceInterfaceDetail(devinfo, &iface, NULL, 0, &needed, NULL);
// Allocate the device detail structure.
PSP_INTERFACE_DEVICE_DETAIL_DATA detail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)alloca(needed);
detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
SP_DEVINFO_DATA did = { sizeof(SP_DEVINFO_DATA) };
// Get device information.
if (!SetupDiGetDeviceInterfaceDetail(devinfo, &iface, detail, needed, NULL, &did)) {
//printf("Device %d: cannot get path!\n", index);
continue;
}
//printf("Device %d: path %s\n", index, detail->DevicePath);
// Check vid/pid.
if (strncmp(detail->DevicePath, pattern, pattern_len) != 0) {
//printf("Wrong vid/pid.\n");
continue;
}
// Figure out the COM port name.
HKEY key = SetupDiOpenDevRegKey(devinfo, &did, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
static char comname[128];
DWORD size = sizeof(comname), type = REG_SZ;
if (ERROR_SUCCESS != RegQueryValueEx(key, "PortName",
NULL, &type, (LPBYTE)comname, &size)) {
//printf("Cannot find 'portname' in registry!\n");
RegCloseKey(key);
continue;
}
RegCloseKey(key);
//printf("COM port: %s\n", comname);
// Required device found.
result = comname;
break;
}
SetupDiDestroyDeviceInfoList(devinfo);
#endif #endif
return result; return result;
@ -585,6 +646,10 @@ void serial_close()
{ {
#if defined(__WIN32__) || defined(WIN32) #if defined(__WIN32__) || defined(WIN32)
if (fd != INVALID_HANDLE_VALUE) { if (fd != INVALID_HANDLE_VALUE) {
unsigned char ack[1];
send_recv(CMD_END, 3, ack, 1);
SetCommState(fd, &saved_mode); SetCommState(fd, &saved_mode);
CloseHandle(fd); CloseHandle(fd);
fd = INVALID_HANDLE_VALUE; fd = INVALID_HANDLE_VALUE;

21
util.c
View File

@ -28,6 +28,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdint.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
@ -597,6 +598,26 @@ int compare_index_ffff(const void *pa, const void *pb)
return 0; return 0;
} }
//
// Compare channel index for qsort().
// Treat 0xffffffff as empty element.
//
int compare_index_ffffffff(const void *pa, const void *pb)
{
uint32_t a = *(uint32_t*) pa;
uint32_t b = *(uint32_t*) pb;
if (a == 0xffffffff)
return (b != 0xffffffff);
if (b == 0xffffffff)
return -1;
if (a < b)
return -1;
if (a > b)
return 1;
return 0;
}
// //
// Print CTSS or DCS tone. // Print CTSS or DCS tone.
// //

1
util.h
View File

@ -194,6 +194,7 @@ void print_offset(FILE *out, unsigned rx_bcd, unsigned tx_bcd);
// //
int compare_index(const void *pa, const void *pb); int compare_index(const void *pa, const void *pb);
int compare_index_ffff(const void *pa, const void *pb); int compare_index_ffff(const void *pa, const void *pb);
int compare_index_ffffffff(const void *pa, const void *pb);
// //
// Print CTSS or DCS tone. // Print CTSS or DCS tone.