Merge branch 'anytone'
This commit is contained in:
commit
e4c3c3f920
317
d868uv.c
317
d868uv.c
@ -49,23 +49,32 @@
|
||||
//
|
||||
#define OFFSET_BANK1 0x000040 // Channels
|
||||
#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_ZONE_MAP 0x070940 // Bitmap of valid zones
|
||||
#define OFFSET_SCANL_MAP 0x070980 // Bitmap of valid scanlists
|
||||
#define OFFSET_SETTINGS 0x071600 // General settings
|
||||
#define OFFSET_ZONENAMES 0x071dc0 // Names of zones
|
||||
#define OFFSET_RADIOID 0x073d00 // Table of radio IDs
|
||||
#define OFFSET_CONTACT_MAP 0x080140 // Bitmap of invalid 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_RADIOID() ((radioid_t*) &radio_mem[OFFSET_RADIOID])
|
||||
#define GET_ZONEMAP() (&radio_mem[OFFSET_ZONE_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_ZONELIST(i) ((uint16_t*) &radio_mem[OFFSET_ZONELISTS + (i)*512])
|
||||
#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_GROUPLIST(gl) ((gl)->member[0] != 0xffffffff && VALID_TEXT((gl)->name))
|
||||
|
||||
//
|
||||
// Size of memory image.
|
||||
@ -223,9 +232,9 @@ typedef struct {
|
||||
|
||||
//
|
||||
// General settings: 0x640 bytes at 0x02500000.
|
||||
// TODO: verify the general settings with official CPS
|
||||
//
|
||||
typedef struct {
|
||||
|
||||
// Bytes 0-5.
|
||||
uint8_t _unused0[6];
|
||||
|
||||
@ -254,6 +263,7 @@ typedef struct {
|
||||
// Radio ID table: 250 entries, 0x1f40 bytes at 0x02580000.
|
||||
//
|
||||
typedef struct {
|
||||
|
||||
// Bytes 0-3.
|
||||
uint8_t id[4]; // Up to 8 BCD digits
|
||||
#define GET_ID(x) (((x)[0] >> 4) * 10000000 +\
|
||||
@ -315,6 +325,66 @@ typedef struct {
|
||||
|
||||
} 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 *DIGITAL_ADMIT_NAME[] = { "-", "Free", "NColor", "Color" };
|
||||
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)
|
||||
{
|
||||
//TODO
|
||||
#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
|
||||
// Empty.
|
||||
}
|
||||
|
||||
//
|
||||
@ -644,11 +698,9 @@ static void print_chan_base(FILE *out, channel_t *ch, int cnum)
|
||||
else
|
||||
fprintf(out, "%-4d ", ch->scan_list_index + 1);
|
||||
|
||||
//TODO
|
||||
// if (ch->tot == 0)
|
||||
fprintf(out, "- ");
|
||||
// else
|
||||
// fprintf(out, "%-3d ", ch->tot * 15);
|
||||
// Transmit timeout timer on D868UV is configured globally,
|
||||
// not per channel. So we don't print it here.
|
||||
fprintf(out, "- ");
|
||||
|
||||
fprintf(out, "%c ", "-+"[ch->rx_only]);
|
||||
}
|
||||
@ -827,6 +879,21 @@ static int have_zones()
|
||||
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.
|
||||
// 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 range = 0;
|
||||
@ -880,6 +960,65 @@ static void print_chanlist(FILE *out, uint16_t *unsorted, int nchan)
|
||||
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.
|
||||
//
|
||||
@ -925,11 +1064,11 @@ static void d868uv_print_config(radio_device_t *radio, FILE *out, int verbose)
|
||||
continue;
|
||||
}
|
||||
|
||||
fprintf(out, "%4d ", i + 1);
|
||||
fprintf(out, "%5d ", i + 1);
|
||||
print_ascii(out, zname, 16, 1);
|
||||
fprintf(out, " ");
|
||||
if (*zlist != 0xffff) {
|
||||
print_chanlist(out, zlist, 250);
|
||||
print_chanlist16(out, zlist, 250);
|
||||
} else {
|
||||
fprintf(out, "-");
|
||||
}
|
||||
@ -940,7 +1079,68 @@ static void d868uv_print_config(radio_device_t *radio, FILE *out, int verbose)
|
||||
//
|
||||
// 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.
|
||||
@ -975,12 +1175,57 @@ static void d868uv_print_config(radio_device_t *radio, FILE *out, int verbose)
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//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.
|
||||
print_id(out, verbose);
|
||||
@ -1135,7 +1380,7 @@ static int d868uv_verify_config(radio_device_t *radio)
|
||||
|
||||
nchannels++;
|
||||
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)) {
|
||||
fprintf(stderr, "Channel %d '", i+1);
|
||||
@ -1194,9 +1439,9 @@ static int d868uv_verify_config(radio_device_t *radio)
|
||||
|
||||
// Scanlists: check references to channels.
|
||||
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;
|
||||
|
||||
nscanlists++;
|
||||
@ -1224,15 +1469,15 @@ static int d868uv_verify_config(radio_device_t *radio)
|
||||
continue;
|
||||
|
||||
ngrouplists++;
|
||||
for (k=0; k<32; k++) {
|
||||
for (k=0; k<64; k++) {
|
||||
int cnum = gl->member[k];
|
||||
|
||||
if (cnum != 0) {
|
||||
contact_t *ct = get_contact(cnum - 1);
|
||||
if (cnum != 0xffffffff) {
|
||||
contact_t *ct = get_contact(cnum);
|
||||
|
||||
if (!ct) {
|
||||
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);
|
||||
nerrors++;
|
||||
}
|
||||
|
@ -17,19 +17,28 @@ CONF = md2017-7-23-2017.conf \
|
||||
rd5r-factory.conf \
|
||||
gd77-ver311-W5NOR-Oklahoma.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)
|
||||
|
||||
clean:
|
||||
rm -f $(CONF)
|
||||
|
||||
.SUFFIXES: .conf .rdt .dat
|
||||
.SUFFIXES: .conf .rdt .dat .img
|
||||
|
||||
.rdt.conf:
|
||||
dmrconfig $< > $@
|
||||
|
||||
.dat.conf:
|
||||
dmrconfig $< > $@
|
||||
|
||||
.img.conf:
|
||||
dmrconfig $< > $@
|
||||
|
103
examples/d868uv-empty.conf
Normal file
103
examples/d868uv-empty.conf
Normal 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
|
355
examples/d868uv-rmham-2018-10-20.conf
Normal file
355
examples/d868uv-rmham-2018-10-20.conf
Normal 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: -
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/10/04 by dmrconfig,
|
||||
# Version 0.8.127, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Radioddity GD-77
|
||||
Last Programmed Date: 2018-10-04 21:05
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/10/04 by dmrconfig,
|
||||
# Version 0.8.127, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Radioddity GD-77
|
||||
Last Programmed Date: 2018-03-23 15:19
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/10/04 by dmrconfig,
|
||||
# Version 0.8.127, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Radioddity GD-77
|
||||
Last Programmed Date: 2018-05-05 01:54
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-UV380
|
||||
Last Programmed Date: 2018-08-20 12:41:08
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-UV380
|
||||
Last Programmed Date: 2018-07-13 16:02:59
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-UV380
|
||||
Last Programmed Date: 2018-08-05 17:54:47
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-UV380
|
||||
Last Programmed Date: 2017-07-23 19:19:23
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-UV380
|
||||
Last Programmed Date: 2017-07-19 07:09:13
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-380
|
||||
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
|
||||
# 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
|
||||
4 Simplex_446 446.000 +0 High - - - - Normal - - 25
|
||||
5 Crystal_FM 443.550 +5 High - - - - Normal - 100.0 25
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-380
|
||||
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
|
||||
# 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
|
||||
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
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/20 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: TYT MD-380
|
||||
Last Programmed Date: 2016-10-20 17:49:09
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-13 13:25
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-20 16:52
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 0000-00-00 00:00
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-04-23 15:10
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-16 14:41
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-12 23:16
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-12 23:16
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-07-05 16:02
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# This configuration was generated 2018/09/24 by dmrconfig,
|
||||
# Version 0.7.107, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
# This configuration was generated 2018/10/27 by dmrconfig,
|
||||
# Version 0.9.155, Copyright (C) 2018 Serge Vakulenko KK6ABQ
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-12 23:16
|
||||
|
67
serial.c
67
serial.c
@ -35,6 +35,7 @@
|
||||
|
||||
#if defined(__WIN32__) || defined(WIN32)
|
||||
#include <windows.h>
|
||||
#include <setupapi.h>
|
||||
#include <malloc.h>
|
||||
static void *fd = INVALID_HANDLE_VALUE;
|
||||
static DCB saved_mode;
|
||||
@ -505,7 +506,67 @@ static char *find_path(int vid, int pid)
|
||||
IOObjectRelease(devices);
|
||||
|
||||
#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
|
||||
|
||||
return result;
|
||||
@ -585,6 +646,10 @@ void serial_close()
|
||||
{
|
||||
#if defined(__WIN32__) || defined(WIN32)
|
||||
if (fd != INVALID_HANDLE_VALUE) {
|
||||
unsigned char ack[1];
|
||||
|
||||
send_recv(CMD_END, 3, ack, 1);
|
||||
|
||||
SetCommState(fd, &saved_mode);
|
||||
CloseHandle(fd);
|
||||
fd = INVALID_HANDLE_VALUE;
|
||||
|
21
util.c
21
util.c
@ -28,6 +28,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
@ -597,6 +598,26 @@ int compare_index_ffff(const void *pa, const void *pb)
|
||||
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.
|
||||
//
|
||||
|
1
util.h
1
util.h
@ -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_ffff(const void *pa, const void *pb);
|
||||
int compare_index_ffffffff(const void *pa, const void *pb);
|
||||
|
||||
//
|
||||
// Print CTSS or DCS tone.
|
||||
|
Loading…
Reference in New Issue
Block a user