Define calldb addresses for d868uv.
This commit is contained in:
parent
93e2be9177
commit
5e4d92f2b0
122
d868uv.c
122
d868uv.c
@ -67,7 +67,10 @@
|
|||||||
//
|
//
|
||||||
// Addresses in the radio flash memory.
|
// Addresses in the radio flash memory.
|
||||||
//
|
//
|
||||||
|
#define ADDR_CALLDB_LIST 0x04000000 // Map of callsign database
|
||||||
#define ADDR_CONT_ID_LIST 0x04280000 // Map of contact IDs to contacts
|
#define ADDR_CONT_ID_LIST 0x04280000 // Map of contact IDs to contacts
|
||||||
|
#define ADDR_CALLDB_SIZE 0x044c0000 // Sizes of callsign database
|
||||||
|
#define ADDR_CALLDB_DATA 0x04500000 // Data of callsign database
|
||||||
|
|
||||||
#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])
|
||||||
@ -2669,6 +2672,121 @@ static int d868uv_verify_config(radio_device_t *radio)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Write CSV file to the callsign database.
|
||||||
|
//
|
||||||
|
// The callsign database consists of three parts:
|
||||||
|
// (1) Map of DMR IDs to data offsets: 8 bytes per record.
|
||||||
|
// 04000000: 02-60-04-02-00-00-00-00-04-60-04-02-35-00-00-00 .`.......`..5...
|
||||||
|
// 04000010: 06-60-04-02-70-00-00-00-08-60-04-02-a7-00-00-00 .`..p....`......
|
||||||
|
// ^^^^^^^^^^^ ^^^^^^^^^^^
|
||||||
|
// radio id<<1 offset
|
||||||
|
//
|
||||||
|
// (2) Sizes: count of records and last data address.
|
||||||
|
// 044c0000: bf-b7-01-00-bd-f6-34-05-00-00-00-00-00-00-00-00 ......4.........
|
||||||
|
// ^^^^^^^^^^^ ^^^^^^^^^^^
|
||||||
|
// count last address
|
||||||
|
//
|
||||||
|
// (3) Data records: radio id, name, city, callsign, state, country, remarks.
|
||||||
|
// 04500000: 00-01-02-30-01-00-57-61-79-6e-65-20-45-64-77-61 ...0..Wayne Edwa
|
||||||
|
// 04500010: 72-64-00-54-6f-72-6f-6e-74-6f-00-56-45-33-54-48 rd.Toronto.VE3TH
|
||||||
|
// 04500020: 57-00-4f-6e-74-61-72-69-6f-00-43-61-6e-61-64-61 W.Ontario.Canada
|
||||||
|
// 04500030: 00-44-4d-52-00- .DMR.
|
||||||
|
//
|
||||||
|
static void d868uv_write_csv(radio_device_t *radio, FILE *csv)
|
||||||
|
{
|
||||||
|
//TODO
|
||||||
|
#if 0
|
||||||
|
uint8_t *mem;
|
||||||
|
char line[256], *callsign, *name;
|
||||||
|
int id, bno, nbytes, nrecords = 0;
|
||||||
|
unsigned finish;
|
||||||
|
callsign_t *cs;
|
||||||
|
|
||||||
|
// Allocate memory.
|
||||||
|
nbytes = CALLSIGN_FINISH - CALLSIGN_START;
|
||||||
|
mem = malloc(nbytes);
|
||||||
|
if (!mem) {
|
||||||
|
fprintf(stderr, "Out of memory!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
memset(mem, 0xff, nbytes);
|
||||||
|
|
||||||
|
// Parse CSV file.
|
||||||
|
while (fgets(line, sizeof(line), csv)) {
|
||||||
|
if (line[0] < '0' || line[0] > '9') {
|
||||||
|
// Skip header.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip trailing spaces and newline.
|
||||||
|
char *e = line + strlen(line) - 1;
|
||||||
|
while (e >= line && (*e=='\n' || *e=='\r' || *e==' ' || *e=='\t'))
|
||||||
|
*e-- = 0;
|
||||||
|
|
||||||
|
id = strtoul(line, 0, 10);
|
||||||
|
if (id < 1 || id > 0xffffff) {
|
||||||
|
fprintf(stderr, "Bad id: %d\n", id);
|
||||||
|
fprintf(stderr, "Line: '%s'\n", line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callsign = strchr(line, ',');
|
||||||
|
if (! callsign) {
|
||||||
|
fprintf(stderr, "Cannot find callsign!\n");
|
||||||
|
fprintf(stderr, "Line: '%s'\n", line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*callsign++ = 0;
|
||||||
|
|
||||||
|
name = strchr(callsign, ',');
|
||||||
|
if (! name) {
|
||||||
|
fprintf(stderr, "Cannot find name!\n");
|
||||||
|
fprintf(stderr, "Line: '%s,%s'\n", line, callsign);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*name++ = 0;
|
||||||
|
//printf("%-10d%-10s%s\n", id, callsign, name);
|
||||||
|
|
||||||
|
cs = GET_CALLSIGN(mem, nrecords);
|
||||||
|
nrecords++;
|
||||||
|
|
||||||
|
// Fill callsign structure.
|
||||||
|
cs->dmrid = id;
|
||||||
|
strncpy(cs->callsign, callsign, sizeof(cs->callsign));
|
||||||
|
strncpy(cs->name, name, sizeof(cs->name));
|
||||||
|
}
|
||||||
|
fprintf(stderr, "Total %d contacts.\n", nrecords);
|
||||||
|
|
||||||
|
build_callsign_index(mem, nrecords);
|
||||||
|
//print_hex(mem, 0x4003);
|
||||||
|
//exit(0);
|
||||||
|
|
||||||
|
// Align to 1kbyte.
|
||||||
|
finish = CALLSIGN_START + (CALLSIGN_OFFSET + nrecords*120 + 1023) / 1024 * 1024;
|
||||||
|
if (finish > CALLSIGN_FINISH) {
|
||||||
|
// Limit is 122197 contacts.
|
||||||
|
fprintf(stderr, "Too many contacts!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write callsigns.
|
||||||
|
radio_progress = 0;
|
||||||
|
for (bno = CALLSIGN_START/1024; bno < finish/1024; bno++) {
|
||||||
|
dfu_write_block(bno, &mem[bno*1024 - CALLSIGN_START], 1024);
|
||||||
|
|
||||||
|
++radio_progress;
|
||||||
|
if (radio_progress % 512 == 0) {
|
||||||
|
fprintf(stderr, "#");
|
||||||
|
fflush(stderr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! trace_flag)
|
||||||
|
fprintf(stderr, "# done.\n");
|
||||||
|
free(mem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Anytone AT-D868UV
|
// Anytone AT-D868UV
|
||||||
//
|
//
|
||||||
@ -2686,7 +2804,7 @@ radio_device_t radio_d868uv = {
|
|||||||
d868uv_parse_header,
|
d868uv_parse_header,
|
||||||
d868uv_parse_row,
|
d868uv_parse_row,
|
||||||
d868uv_update_timestamp,
|
d868uv_update_timestamp,
|
||||||
//TODO: d868uv_write_csv,
|
d868uv_write_csv,
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -2706,5 +2824,5 @@ radio_device_t radio_dmr6x2 = {
|
|||||||
d868uv_parse_header,
|
d868uv_parse_header,
|
||||||
d868uv_parse_row,
|
d868uv_parse_row,
|
||||||
d868uv_update_timestamp,
|
d868uv_update_timestamp,
|
||||||
//TODO: d868uv_write_csv,
|
d868uv_write_csv,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user