From 6bd37821a9aae21bfdd4a3ee44fb41cef79e7d9a Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Sat, 8 Oct 2022 07:08:23 -0400 Subject: [PATCH] NXDN96 Scrambler Support; Force Key Priority CLI; --- src/dsd_main.c | 26 ++++++++++++++++---------- src/dsd_ncurses.c | 4 ++-- src/nxdn_data.c | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/dsd_main.c b/src/dsd_main.c index 3ea8ee3..59a161c 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -625,15 +625,15 @@ usage () printf ("Display Options:\n"); printf (" -N Use NCurses Terminal\n"); printf (" dsd-fme -N 2> log.ans \n"); - printf (" -e Show Frame Info and errorbars (default)\n"); - printf (" -pe Show P25 encryption sync bits\n"); - printf (" -pl Show P25 link control bits\n"); - printf (" -ps Show P25 status bits and low speed data\n"); - printf (" -pt Show P25 talkgroup info\n"); - printf (" -q Don't show Frame Info/errorbars\n"); + // printf (" -e Show Frame Info and errorbars (default)\n"); + // printf (" -pe Show P25 encryption sync bits\n"); + // printf (" -pl Show P25 link control bits\n"); + // printf (" -ps Show P25 status bits and low speed data\n"); + // printf (" -pt Show P25 talkgroup info\n"); + // printf (" -q Don't show Frame Info/errorbars\n"); printf (" -s Datascope (disables other display options)\n"); printf (" -t Show symbol timing during sync\n"); - printf (" -v Frame information Verbosity\n"); + // printf (" -v Frame information Verbosity\n"); printf (" -z Frame rate for datascope\n"); printf ("\n"); printf ("Input/Output options:\n"); @@ -702,7 +702,7 @@ usage () printf (" -mc Use only C4FM modulation optimizations\n"); printf (" -mg Use only GFSK modulation optimizations\n"); printf (" -mq Use only QPSK modulation optimizations\n"); - printf (" -m2 Use Phase 2 6000 sps CQPSK modulation optimizations (testing, not fully implemented) \n"); + printf (" -m2 Use Phase 2 6000 sps CQPSK modulation optimizations (4 Level, not 8 Level LSM) \n"); printf (" -F Relax P25 Phase 2 MAC_SIGNAL CRC Checksum Pass/Fail\n"); printf (" Use this feature to allow MAC_SIGNAL even if bad CRC errors.\n"); printf (" -F Enable DMR BS Stereo Passive Frame Sync\n"); @@ -715,8 +715,9 @@ usage () printf (" -H Manually Enter **tera 10 Privacy Key (40-Bit/10-Char Hex Value)\n"); printf (" (32/64-Char values can only be entered in the NCurses Terminal)\n"); printf ("\n"); - printf (" -R Manually Enter NXDN 4800 EHR Scrambler Key Value \n"); + printf (" -R Manually Enter NXDN 4800/9600 EHR Scrambler Key Value \n"); printf (" \n"); + printf (" -4 Force Privacy Key over FID and SVC bits \n"); printf ("\n"); exit (0); } @@ -956,7 +957,7 @@ main (int argc, char **argv) exitflag = 0; signal (SIGINT, sigfun); - while ((c = getopt (argc, argv, "haep:P:qstv:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:V:U:Y:K:H:X:NQWrlZTF")) != -1) + while ((c = getopt (argc, argv, "haep:P:qstv:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:V:U:Y:K:H:X:NQWrlZTF4")) != -1) { opterr = 0; switch (c) @@ -1069,6 +1070,11 @@ main (int argc, char **argv) state.K1 = state.H; //shim break; + case '4': + state.M = 1; + fprintf (stderr,"Force Privacy Key Priority over FID and SVC bits.\n"); + break; + //manually set Phase 2 TDMA WACN/SYSID/CC case 'X': sscanf (optarg, "%llX", &p2vars); diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index 63bf825..ece6121 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -94,8 +94,8 @@ char * SyncTypes[44] = { "DMR VOICE", "PROVOICE", "PROVOICE", - "NXDN DATA", - "NXDN DATA", + "NXDN VOICE", //DATA + "NXDN VOICE", //DATA "DSTAR HD", "DSTAR HD", "dPMR", //20 diff --git a/src/nxdn_data.c b/src/nxdn_data.c index 87d2bf3..2706ad6 100644 --- a/src/nxdn_data.c +++ b/src/nxdn_data.c @@ -15,6 +15,17 @@ void processNXDNData (dsd_opts * opts, dsd_state * state) /* Remove compiler warning */ //UNUSED_VARIABLE(dibit); + //if using NXDN Scrambling, run LFSRN (dummy ambe values) to continue seed + if (state->nxdn_cipher_type == 0x1 && state->R != 0) + { + char ambe_temp[49] = {0}; + char ambe_d[49] = {0}; + for (i = 0; i < 4; i++) + { + LFSRN(ambe_temp, ambe_d, state); + } + } + if (opts->errorbars == 1) { fprintf(stderr, "DATA - "); @@ -105,5 +116,12 @@ void processNXDNData (dsd_opts * opts, dsd_state * state) { /* Reset all CRCs of the SACCH */ for(i = 0; i < 4; i++) state->NxdnSacchRawPart[i].CrcIsGood = 0; + + //reset Scrambler seed + if (state->nxdn_cipher_type == 0x1) + { + state->payload_miN = 0; + } + } } /* End processNXDNData() */