From a2180eb5d34ff91ce662cca5559a92eb9272f8b5 Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Tue, 6 Jun 2023 19:01:37 -0400 Subject: [PATCH] Switch to New NXDN FS (again) #123 --- src/dsd_frame_sync.c | 147 +++++++++++++++++++++---------------------- 1 file changed, 73 insertions(+), 74 deletions(-) diff --git a/src/dsd_frame_sync.c b/src/dsd_frame_sync.c index d9352dd..cd682e2 100644 --- a/src/dsd_frame_sync.c +++ b/src/dsd_frame_sync.c @@ -1294,9 +1294,80 @@ getFrameSync (dsd_opts * opts, dsd_state * state) } - #ifdef NXDNTESTSYNC //Use Experimental FS + #ifdef NXDNOLDSYNC //Use FSW vs strncmperr method + + //NXDN FSW sync and handling - moved to very bottom of sync stack for falsing sanity + else if ((opts->frame_nxdn96 == 1) || (opts->frame_nxdn48 == 1)) + { + strncpy (synctest10, (synctest_p - 9), 10); //FSW only + strncpy (synctest19, (synctest_p - 18), 19); //Preamble + FSW + + //Preamble plus FSW, proceed right away + if ( (strncmperr (synctest19, NXDN_PANDFSW, 19, 1) == 0) ) + { + state->carrier = 1; + state->offset = synctest_pos; + state->max = ((state->max) + lmax) / 2; + state->min = ((state->min) + lmin) / 2; + state->lastsynctype = 28; + state->last_cc_sync_time = time(NULL); + // if (opts->payload == 1) fprintf (stderr, "PANDF "); + // fprintf (stderr, " %s ", synctest19); + return (28); + } + + else if ( (strncmperr (synctest19, INV_NXDN_PANDFSW, 19, 1) == 0) ) + { + state->carrier = 1; + state->offset = synctest_pos; + state->max = ((state->max) + lmax) / 2; + state->min = ((state->min) + lmin) / 2; + state->lastsynctype = 29; + state->last_cc_sync_time = time(NULL); + // if (opts->payload == 1) fprintf (stderr, "PANDF "); + // fprintf (stderr, " %s ", synctest19); + return (29); + } + + else if ( (strncmperr (synctest10, NXDN_FSW, 10, 1) == 0) ) + { + state->carrier = 1; + state->offset = synctest_pos; + state->max = ((state->max) + lmax) / 2; + state->min = ((state->min) + lmin) / 2; + + if (state->lastsynctype == 28) + { + state->last_cc_sync_time = time(NULL); + // if (opts->payload == 1) fprintf (stderr, "FSW "); + // fprintf (stderr, " %s ", synctest10); + return (28); + } + state->lastsynctype = 28; //need two consecutive patterns to continue + + } + + else if ( (strncmperr (synctest10, INV_NXDN_FSW, 10, 1) == 0) ) + { + state->carrier = 1; + state->offset = synctest_pos; + state->max = ((state->max) + lmax) / 2; + state->min = ((state->min) + lmin) / 2; + + if (state->lastsynctype == 29) + { + state->last_cc_sync_time = time(NULL); + // if (opts->payload == 1) fprintf (stderr, "FSW "); + // fprintf (stderr, " %s ", synctest10); + return (29); + } + state->lastsynctype = 29; //need two consecutive patterns to continue + + } + } + + #else //use Current FSW Pattern - //NOTE: Current Issue with Syncing when using RTL Input on some NXDN48 Type-C Trunking System //NXDN FSW sync and handling - using more exact frame sync values else if ((opts->frame_nxdn96 == 1) || (opts->frame_nxdn48 == 1)) { @@ -1414,78 +1485,6 @@ getFrameSync (dsd_opts * opts, dsd_state * state) } } - #else //use previously 'stable' NXDN Sync pattern detection - - //NXDN FSW sync and handling - moved to very bottom of sync stack for falsing sanity - else if ((opts->frame_nxdn96 == 1) || (opts->frame_nxdn48 == 1)) - { - strncpy (synctest10, (synctest_p - 9), 10); //FSW only - strncpy (synctest19, (synctest_p - 18), 19); //Preamble + FSW - - //Preamble plus FSW, proceed right away - if ( (strncmperr (synctest19, NXDN_PANDFSW, 19, 1) == 0) ) - { - state->carrier = 1; - state->offset = synctest_pos; - state->max = ((state->max) + lmax) / 2; - state->min = ((state->min) + lmin) / 2; - state->lastsynctype = 28; - state->last_cc_sync_time = time(NULL); - // if (opts->payload == 1) fprintf (stderr, "PANDF "); - // fprintf (stderr, " %s ", synctest19); - return (28); - } - - else if ( (strncmperr (synctest19, INV_NXDN_PANDFSW, 19, 1) == 0) ) - { - state->carrier = 1; - state->offset = synctest_pos; - state->max = ((state->max) + lmax) / 2; - state->min = ((state->min) + lmin) / 2; - state->lastsynctype = 29; - state->last_cc_sync_time = time(NULL); - // if (opts->payload == 1) fprintf (stderr, "PANDF "); - // fprintf (stderr, " %s ", synctest19); - return (29); - } - - else if ( (strncmperr (synctest10, NXDN_FSW, 10, 1) == 0) ) - { - state->carrier = 1; - state->offset = synctest_pos; - state->max = ((state->max) + lmax) / 2; - state->min = ((state->min) + lmin) / 2; - - if (state->lastsynctype == 28) - { - state->last_cc_sync_time = time(NULL); - // if (opts->payload == 1) fprintf (stderr, "FSW "); - // fprintf (stderr, " %s ", synctest10); - return (28); - } - state->lastsynctype = 28; //need two consecutive patterns to continue - - } - - else if ( (strncmperr (synctest10, INV_NXDN_FSW, 10, 1) == 0) ) - { - state->carrier = 1; - state->offset = synctest_pos; - state->max = ((state->max) + lmax) / 2; - state->min = ((state->min) + lmin) / 2; - - if (state->lastsynctype == 29) - { - state->last_cc_sync_time = time(NULL); - // if (opts->payload == 1) fprintf (stderr, "FSW "); - // fprintf (stderr, " %s ", synctest10); - return (29); - } - state->lastsynctype = 29; //need two consecutive patterns to continue - - } - } - #endif //NXDN Sync Type Selection //Provoice Conventional -- Some False Positives due to shortened frame sync pattern, so use squelch if possible