Decrease TOT field to 6 bits.
Fix incorrect last item of zone list for md380. Skip contacts with type=0.
This commit is contained in:
parent
389ea79efb
commit
fe3a79d93c
20
md380.c
20
md380.c
@ -61,6 +61,8 @@
|
|||||||
#define GET_GROUPLIST(i) ((grouplist_t*) &radio_mem[OFFSET_GLISTS + (i)*96])
|
#define GET_GROUPLIST(i) ((grouplist_t*) &radio_mem[OFFSET_GLISTS + (i)*96])
|
||||||
#define GET_MESSAGE(i) ((uint16_t*) &radio_mem[OFFSET_MSG + (i)*288])
|
#define GET_MESSAGE(i) ((uint16_t*) &radio_mem[OFFSET_MSG + (i)*288])
|
||||||
|
|
||||||
|
#define VALID_CONTACT(ct) ((ct)->type != 0 && (ct)->name[0] != 0 && (ct)->name[0] != 0xffff)
|
||||||
|
|
||||||
//
|
//
|
||||||
// Channel data.
|
// Channel data.
|
||||||
//
|
//
|
||||||
@ -137,7 +139,8 @@ typedef struct {
|
|||||||
uint16_t contact_name_index; // Contact Name: Contact1...
|
uint16_t contact_name_index; // Contact Name: Contact1...
|
||||||
|
|
||||||
// Bytes 8-9
|
// Bytes 8-9
|
||||||
uint8_t tot; // TOT x 15sec: 0-Infinite, 1=15s... 37=555s
|
uint8_t tot : 6, // TOT x 15sec: 0-Infinite, 1=15s... 37=555s
|
||||||
|
_unused13 : 2; // 0
|
||||||
uint8_t tot_rekey_delay; // TOT Rekey Delay: 0s...255s
|
uint8_t tot_rekey_delay; // TOT Rekey Delay: 0s...255s
|
||||||
|
|
||||||
// Bytes 10-11
|
// Bytes 10-11
|
||||||
@ -645,6 +648,7 @@ static void erase_channel(int i)
|
|||||||
|
|
||||||
// Bytes 8-9
|
// Bytes 8-9
|
||||||
ch->tot = 60/15;
|
ch->tot = 60/15;
|
||||||
|
ch->_unused13 = 0;
|
||||||
ch->tot_rekey_delay = 0;
|
ch->tot_rekey_delay = 0;
|
||||||
|
|
||||||
// Bytes 10-11
|
// Bytes 10-11
|
||||||
@ -689,7 +693,7 @@ static void print_chanlist(FILE *out, uint16_t *unsorted, int nchan)
|
|||||||
// Sort the list before printing.
|
// Sort the list before printing.
|
||||||
memcpy(data, unsorted, nchan * sizeof(uint16_t));
|
memcpy(data, unsorted, nchan * sizeof(uint16_t));
|
||||||
qsort(data, nchan, sizeof(uint16_t), compare_index);
|
qsort(data, nchan, sizeof(uint16_t), compare_index);
|
||||||
for (n=0; n<=nchan; n++) {
|
for (n=0; n<nchan; n++) {
|
||||||
int cnum = data[n];
|
int cnum = data[n];
|
||||||
|
|
||||||
if (cnum == 0)
|
if (cnum == 0)
|
||||||
@ -1013,7 +1017,7 @@ static int have_contacts()
|
|||||||
for (i=0; i<NCONTACTS; i++) {
|
for (i=0; i<NCONTACTS; i++) {
|
||||||
contact_t *ct = GET_CONTACT(i);
|
contact_t *ct = GET_CONTACT(i);
|
||||||
|
|
||||||
if (ct->name[0] != 0 && ct->name[0] != 0xffff)
|
if (VALID_CONTACT(ct))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1183,7 +1187,7 @@ static void md380_print_config(radio_device_t *radio, FILE *out, int verbose)
|
|||||||
for (i=0; i<NCONTACTS; i++) {
|
for (i=0; i<NCONTACTS; i++) {
|
||||||
contact_t *ct = GET_CONTACT(i);
|
contact_t *ct = GET_CONTACT(i);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff) {
|
if (!VALID_CONTACT(ct)) {
|
||||||
// Contact is disabled
|
// Contact is disabled
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2152,7 +2156,7 @@ static int md380_verify_config(radio_device_t *radio)
|
|||||||
if (ch->contact_name_index != 0) {
|
if (ch->contact_name_index != 0) {
|
||||||
contact_t *ct = GET_CONTACT(ch->contact_name_index - 1);
|
contact_t *ct = GET_CONTACT(ch->contact_name_index - 1);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff) {
|
if (!VALID_CONTACT(ct)) {
|
||||||
fprintf(stderr, "Channel %d '", i+1);
|
fprintf(stderr, "Channel %d '", i+1);
|
||||||
print_unicode(stderr, ch->name, 16, 0);
|
print_unicode(stderr, ch->name, 16, 0);
|
||||||
fprintf(stderr, "': contact %d not found.\n", ch->contact_name_index);
|
fprintf(stderr, "': contact %d not found.\n", ch->contact_name_index);
|
||||||
@ -2233,7 +2237,7 @@ static int md380_verify_config(radio_device_t *radio)
|
|||||||
if (cnum != 0) {
|
if (cnum != 0) {
|
||||||
contact_t *ct = GET_CONTACT(cnum - 1);
|
contact_t *ct = GET_CONTACT(cnum - 1);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff) {
|
if (!VALID_CONTACT(ct)) {
|
||||||
fprintf(stderr, "Grouplist %d '", i+1);
|
fprintf(stderr, "Grouplist %d '", i+1);
|
||||||
print_unicode(stderr, gl->name, 16, 0);
|
print_unicode(stderr, gl->name, 16, 0);
|
||||||
fprintf(stderr, "': contact %d not found.\n", cnum);
|
fprintf(stderr, "': contact %d not found.\n", cnum);
|
||||||
@ -2247,9 +2251,7 @@ static int md380_verify_config(radio_device_t *radio)
|
|||||||
for (i=0; i<NCONTACTS; i++) {
|
for (i=0; i<NCONTACTS; i++) {
|
||||||
contact_t *ct = GET_CONTACT(i);
|
contact_t *ct = GET_CONTACT(i);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff)
|
if (VALID_CONTACT(ct))
|
||||||
continue;
|
|
||||||
|
|
||||||
ncontacts++;
|
ncontacts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
uv380.c
18
uv380.c
@ -62,6 +62,8 @@
|
|||||||
#define GET_GROUPLIST(i) ((grouplist_t*) &radio_mem[OFFSET_GLISTS + (i)*96])
|
#define GET_GROUPLIST(i) ((grouplist_t*) &radio_mem[OFFSET_GLISTS + (i)*96])
|
||||||
#define GET_MESSAGE(i) ((uint16_t*) &radio_mem[OFFSET_MSG + (i)*288])
|
#define GET_MESSAGE(i) ((uint16_t*) &radio_mem[OFFSET_MSG + (i)*288])
|
||||||
|
|
||||||
|
#define VALID_CONTACT(ct) ((ct)->type != 0 && (ct)->name[0] != 0 && (ct)->name[0] != 0xffff)
|
||||||
|
|
||||||
//
|
//
|
||||||
// Channel data.
|
// Channel data.
|
||||||
//
|
//
|
||||||
@ -134,7 +136,8 @@ typedef struct {
|
|||||||
uint16_t contact_name_index; // Contact Name: Contact1...
|
uint16_t contact_name_index; // Contact Name: Contact1...
|
||||||
|
|
||||||
// Bytes 8-9
|
// Bytes 8-9
|
||||||
uint8_t tot; // TOT x 15sec: 0-Infinite, 1=15s... 37=555s
|
uint8_t tot : 6, // TOT x 15sec: 0-Infinite, 1=15s... 37=555s
|
||||||
|
_unused13 : 2; // 0
|
||||||
uint8_t tot_rekey_delay; // TOT Rekey Delay: 0s...255s
|
uint8_t tot_rekey_delay; // TOT Rekey Delay: 0s...255s
|
||||||
|
|
||||||
// Bytes 10-11
|
// Bytes 10-11
|
||||||
@ -683,6 +686,7 @@ static void erase_channel(int i)
|
|||||||
|
|
||||||
// Bytes 8-9
|
// Bytes 8-9
|
||||||
ch->tot = 60/15;
|
ch->tot = 60/15;
|
||||||
|
ch->_unused13 = 0;
|
||||||
ch->tot_rekey_delay = 0;
|
ch->tot_rekey_delay = 0;
|
||||||
|
|
||||||
// Bytes 10-11
|
// Bytes 10-11
|
||||||
@ -1064,7 +1068,7 @@ static int have_contacts()
|
|||||||
for (i=0; i<NCONTACTS; i++) {
|
for (i=0; i<NCONTACTS; i++) {
|
||||||
contact_t *ct = GET_CONTACT(i);
|
contact_t *ct = GET_CONTACT(i);
|
||||||
|
|
||||||
if (ct->name[0] != 0 && ct->name[0] != 0xffff)
|
if (VALID_CONTACT(ct))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1247,7 +1251,7 @@ static void uv380_print_config(radio_device_t *radio, FILE *out, int verbose)
|
|||||||
for (i=0; i<NCONTACTS; i++) {
|
for (i=0; i<NCONTACTS; i++) {
|
||||||
contact_t *ct = GET_CONTACT(i);
|
contact_t *ct = GET_CONTACT(i);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff) {
|
if (!VALID_CONTACT(ct)) {
|
||||||
// Contact is disabled
|
// Contact is disabled
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2225,7 +2229,7 @@ static int uv380_verify_config(radio_device_t *radio)
|
|||||||
if (ch->contact_name_index != 0) {
|
if (ch->contact_name_index != 0) {
|
||||||
contact_t *ct = GET_CONTACT(ch->contact_name_index - 1);
|
contact_t *ct = GET_CONTACT(ch->contact_name_index - 1);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff) {
|
if (!VALID_CONTACT(ct)) {
|
||||||
fprintf(stderr, "Channel %d '", i+1);
|
fprintf(stderr, "Channel %d '", i+1);
|
||||||
print_unicode(stderr, ch->name, 16, 0);
|
print_unicode(stderr, ch->name, 16, 0);
|
||||||
fprintf(stderr, "': contact %d not found.\n", ch->contact_name_index);
|
fprintf(stderr, "': contact %d not found.\n", ch->contact_name_index);
|
||||||
@ -2339,7 +2343,7 @@ static int uv380_verify_config(radio_device_t *radio)
|
|||||||
if (cnum != 0) {
|
if (cnum != 0) {
|
||||||
contact_t *ct = GET_CONTACT(cnum - 1);
|
contact_t *ct = GET_CONTACT(cnum - 1);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff) {
|
if (!VALID_CONTACT(ct)) {
|
||||||
fprintf(stderr, "Grouplist %d '", i+1);
|
fprintf(stderr, "Grouplist %d '", i+1);
|
||||||
print_unicode(stderr, gl->name, 16, 0);
|
print_unicode(stderr, gl->name, 16, 0);
|
||||||
fprintf(stderr, "': contact %d not found.\n", cnum);
|
fprintf(stderr, "': contact %d not found.\n", cnum);
|
||||||
@ -2353,9 +2357,7 @@ static int uv380_verify_config(radio_device_t *radio)
|
|||||||
for (i=0; i<NCONTACTS; i++) {
|
for (i=0; i<NCONTACTS; i++) {
|
||||||
contact_t *ct = GET_CONTACT(i);
|
contact_t *ct = GET_CONTACT(i);
|
||||||
|
|
||||||
if (ct->name[0] == 0 || ct->name[0] == 0xffff)
|
if (VALID_CONTACT(ct))
|
||||||
continue;
|
|
||||||
|
|
||||||
ncontacts++;
|
ncontacts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user