NXDN Multi-Key CSV Import; Example Updt;

This commit is contained in:
lwvmobile
2023-01-18 12:18:56 -05:00
parent ec7d7c24a5
commit 5b994f5129
8 changed files with 82 additions and 10 deletions

View File

@@ -145,3 +145,48 @@ int csvChanImport(dsd_opts * opts, dsd_state * state) //channel map import
fclose(fp);
return 0;
}
int csvKeyImport(dsd_opts * opts, dsd_state * state) //multi-key support for NXDN
{
char filename[1024] = "filename.csv";
sprintf (filename, "%s", opts->key_in_file);
char buffer[BSIZE];
FILE * fp;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Unable to open file '%s'\n", filename);
exit(1);
}
int row_count = 0;
int field_count = 0;
unsigned long long int keynumber;
while (fgets(buffer, BSIZE, fp)) {
field_count = 0;
row_count++;
if (row_count == 1)
continue; //don't want labels
char * field = strtok(buffer, ","); //seperate by comma
while (field) {
if (field_count == 0)
{
sscanf (field, "%lld", &keynumber);
}
if (field_count == 1)
{
sscanf (field, "%lld", &state->rkey_array[keynumber]);
}
field = strtok(NULL, ",");
field_count++;
}
fprintf (stderr, "Key [%03lld] [%05lld]", keynumber, state->rkey_array[keynumber]);
fprintf (stderr, "\n");
}
fclose(fp);
return 0;
}

View File

@@ -393,6 +393,7 @@ initOpts (dsd_opts * opts)
opts->group_in_file[0] = 0;
opts->lcn_in_file[0] = 0;
opts->chan_in_file[0] = 0;
opts->key_in_file[0] = 0;
//end import filenames
opts->szNumbers[0] = 0;
opts->symbol_out_f = NULL;
@@ -815,7 +816,10 @@ initState (dsd_state * state)
//site/srv/cch info
state->nxdn_location_site_code = 0;
state->nxdn_location_sys_code = 0;
sprintf (state->nxdn_location_category, "%s", " ");
sprintf (state->nxdn_location_category, "%s", " ");
//multi-key array
memset (state->rkey_array, 0, sizeof(state->rkey_array));
//Remus DMR End Call Alert Beep
state->dmr_end_alert[0] = 0;
@@ -976,6 +980,7 @@ usage ()
printf (" -H '20029736A5D91042 C923EB0697484433 005EFC58A1905195 E28E9C7836AA2DB8' \n");
printf ("\n");
printf (" -R <dec> Manually Enter dPMR or NXDN EHR Scrambler Key Value (Decimal Value)\n");
printf (" -k <file> Import NXDN Scrambler Key List from csv file.\n");
printf (" \n");
printf (" -4 Force Privacy Key over FID and SVC bits \n");
printf ("\n");
@@ -1212,7 +1217,7 @@ main (int argc, char **argv)
exitflag = 0;
// signal (SIGINT, sigfun);
while ((c = getopt (argc, argv, "haepPqs:t:v:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:VU:Y:K:H:X:NQ:WrlZTF01:2:345:6:7:89:E")) != -1)
while ((c = getopt (argc, argv, "haepPqs:t:v:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:VU:Y:K:H:X:NQ:WrlZTF01:2:345:6:7:89:Ek:")) != -1)
{
opterr = 0;
switch (c)
@@ -1230,6 +1235,12 @@ main (int argc, char **argv)
//Disabled the Serial Port Dev and Baud Rate, etc, If somebody uses that function, sorry...
case 'k': //NXDN multi-key loader
strncpy(opts.key_in_file, optarg, 1023);
opts.key_in_file[1023] = '\0';
csvKeyImport(&opts, &state);
break;
case 'Q': //'DSP' Structured Output file for OKDMRlib
sprintf (wav_file_directory, "./DSP");
wav_file_directory[1023] = '\0';

View File

@@ -667,6 +667,9 @@ void NXDN_decode_VCALL(dsd_opts * opts, dsd_state * state, uint8_t * Message)
fprintf (stderr, "%s", KNRM);
}
//check the rkey array for a scrambler key value
if (state->rkey_array[KeyID] != 0) state->R = state->rkey_array[KeyID];
if (state->nxdn_cipher_type == 0x01 && state->R > 0) //scrambler key value
{
fprintf (stderr, "%s", KYEL);