Print scanlists.
This commit is contained in:
parent
6d78d5d368
commit
f127060e77
91
uv380.c
91
uv380.c
@ -37,6 +37,7 @@
|
|||||||
#define NCONTACTS 10000
|
#define NCONTACTS 10000
|
||||||
#define NZONES 250
|
#define NZONES 250
|
||||||
#define NGLISTS 250
|
#define NGLISTS 250
|
||||||
|
#define NSCANL 250
|
||||||
#define NMESSAGES 50
|
#define NMESSAGES 50
|
||||||
|
|
||||||
#define MEMSZ 0xd0000
|
#define MEMSZ 0xd0000
|
||||||
@ -46,6 +47,7 @@
|
|||||||
#define OFFSET_MSG 0x02180
|
#define OFFSET_MSG 0x02180
|
||||||
#define OFFSET_GLISTS 0x0ec20
|
#define OFFSET_GLISTS 0x0ec20
|
||||||
#define OFFSET_ZONES 0x149e0
|
#define OFFSET_ZONES 0x149e0
|
||||||
|
#define OFFSET_SCANL 0x18860
|
||||||
#define OFFSET_ZONEXT 0x31000
|
#define OFFSET_ZONEXT 0x31000
|
||||||
#define OFFSET_CHANNELS 0x40000
|
#define OFFSET_CHANNELS 0x40000
|
||||||
#define OFFSET_CONTACTS 0x70000
|
#define OFFSET_CONTACTS 0x70000
|
||||||
@ -272,6 +274,36 @@ typedef struct {
|
|||||||
uint16_t member[32]; // Contacts
|
uint16_t member[32]; // Contacts
|
||||||
} grouplist_t;
|
} grouplist_t;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Scan list data.
|
||||||
|
//
|
||||||
|
typedef struct {
|
||||||
|
//
|
||||||
|
// Bytes 0-31
|
||||||
|
//
|
||||||
|
uint16_t name[16]; // Scan List Name (Unicode)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bytes 32-37
|
||||||
|
//
|
||||||
|
uint16_t priority_ch1; // Priority Channel 1 or ffff
|
||||||
|
uint16_t priority_ch2; // Priority Channel 2 or ffff
|
||||||
|
uint16_t tx_designated_ch; // Tx Designated Channel or ffff
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bytes 38-41
|
||||||
|
//
|
||||||
|
uint8_t _unused1; // 0xf1
|
||||||
|
uint8_t sign_hold_time; // Signaling Hold Time (x25 = msec)
|
||||||
|
uint8_t prio_sample_time; // Priority Sample Time (x250 = msec)
|
||||||
|
uint8_t _unused2; // 0xff
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bytes 42-103
|
||||||
|
//
|
||||||
|
uint16_t member[31]; // Channels
|
||||||
|
} scanlist_t;
|
||||||
|
|
||||||
static const char *POWER_NAME[] = { "Low", "???", "Mid", "High" };
|
static const char *POWER_NAME[] = { "Low", "???", "Mid", "High" };
|
||||||
static const char *BANDWIDTH[] = { "12.5", "20", "25" };
|
static const char *BANDWIDTH[] = { "12.5", "20", "25" };
|
||||||
static const char *CONTACT_TYPE[] = { "-", "Group", "Private", "All" };
|
static const char *CONTACT_TYPE[] = { "-", "Group", "Private", "All" };
|
||||||
@ -665,10 +697,12 @@ static void print_id(FILE *out)
|
|||||||
{
|
{
|
||||||
const unsigned char *data = &radio_mem[OFFSET_VERSION];
|
const unsigned char *data = &radio_mem[OFFSET_VERSION];
|
||||||
|
|
||||||
fprintf(out, "Radio: TYT MD-UV380");
|
fprintf(out, "Radio: TYT MD-UV380\n");
|
||||||
|
fprintf(out, "Name: ");
|
||||||
if (radio_mem[OFFSET_NAME] != 0) {
|
if (radio_mem[OFFSET_NAME] != 0) {
|
||||||
fprintf(out, "\nName: ");
|
|
||||||
print_unicode(out, (uint16_t*) &radio_mem[OFFSET_NAME], 16, 0);
|
print_unicode(out, (uint16_t*) &radio_mem[OFFSET_NAME], 16, 0);
|
||||||
|
} else {
|
||||||
|
fprintf(out, "-");
|
||||||
}
|
}
|
||||||
fprintf(out, "\nID: %d\n", *(uint32_t*) &radio_mem[OFFSET_ID]);
|
fprintf(out, "\nID: %d\n", *(uint32_t*) &radio_mem[OFFSET_ID]);
|
||||||
|
|
||||||
@ -775,6 +809,59 @@ static void uv380_print_config(FILE *out, int verbose)
|
|||||||
fprintf(out, "\n");
|
fprintf(out, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Scan lists.
|
||||||
|
//
|
||||||
|
fprintf(out, "\n");
|
||||||
|
if (verbose) {
|
||||||
|
fprintf(out, "# Table of scan lists.\n");
|
||||||
|
fprintf(out, "# 1) Zone number: 1-%d\n", NSCANL);
|
||||||
|
fprintf(out, "# 2) Name: up to 16 characters, no spaces\n");
|
||||||
|
fprintf(out, "# 3) List of channels: numbers and ranges (N-M) separated by comma\n");
|
||||||
|
fprintf(out, "#\n");
|
||||||
|
}
|
||||||
|
fprintf(out, "Scanlist Name PCh1 PCh2 TxCh Hold Smpl Channels\n");
|
||||||
|
for (i=0; i<NSCANL; i++) {
|
||||||
|
scanlist_t *sl = (scanlist_t*) &radio_mem[OFFSET_SCANL + i*104];
|
||||||
|
|
||||||
|
if (sl->name[0] == 0) {
|
||||||
|
// Scan list is disabled.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(out, "%5d ", i + 1);
|
||||||
|
print_unicode(out, sl->name, 16, 1);
|
||||||
|
if (sl->priority_ch1 == 0xffff) {
|
||||||
|
fprintf(out, " - ");
|
||||||
|
} else if (sl->priority_ch1 == 0) {
|
||||||
|
fprintf(out, " Sel ");
|
||||||
|
} else {
|
||||||
|
fprintf(out, " %-4d ", sl->priority_ch1);
|
||||||
|
}
|
||||||
|
if (sl->priority_ch2 == 0xffff) {
|
||||||
|
fprintf(out, "- ");
|
||||||
|
} else if (sl->priority_ch2 == 0) {
|
||||||
|
fprintf(out, "Sel ");
|
||||||
|
} else {
|
||||||
|
fprintf(out, "%-4d ", sl->priority_ch2);
|
||||||
|
}
|
||||||
|
if (sl->tx_designated_ch == 0xffff) {
|
||||||
|
fprintf(out, "- ");
|
||||||
|
} else if (sl->tx_designated_ch == 0) {
|
||||||
|
fprintf(out, "Last ");
|
||||||
|
} else {
|
||||||
|
fprintf(out, "%-4d ", sl->tx_designated_ch);
|
||||||
|
}
|
||||||
|
fprintf(out, "%-4d %-4d ",
|
||||||
|
sl->sign_hold_time * 25, sl->prio_sample_time * 250);
|
||||||
|
if (sl->member[0]) {
|
||||||
|
print_chanlist(out, sl->member, 31);
|
||||||
|
} else {
|
||||||
|
fprintf(out, "-");
|
||||||
|
}
|
||||||
|
fprintf(out, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Contacts.
|
// Contacts.
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user