From c7537cca968da1d2416981b1bb66bb50a9bd8026 Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Mon, 4 Sep 2023 17:20:42 -0400 Subject: [PATCH] EDACS Analog Call Dotting Sequence Detection; --- include/dsd.h | 1 + src/dsd_dibit.c | 3 +-- src/edacs-fme.c | 22 ++++++++++++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/include/dsd.h b/include/dsd.h index f84bad1..7c113f5 100644 --- a/include/dsd.h +++ b/include/dsd.h @@ -927,6 +927,7 @@ void openAudioInDevice (dsd_opts * opts); int getDibit (dsd_opts * opts, dsd_state * state); int get_dibit_and_analog_signal (dsd_opts * opts, dsd_state * state, int * out_analog_signal); +int digitize (dsd_opts* opts, dsd_state* state, int symbol); void skipDibit (dsd_opts * opts, dsd_state * state, int count); void saveImbe4400Data (dsd_opts * opts, dsd_state * state, char *imbe_d); diff --git a/src/dsd_dibit.c b/src/dsd_dibit.c index ae71f2e..b64039a 100644 --- a/src/dsd_dibit.c +++ b/src/dsd_dibit.c @@ -219,8 +219,7 @@ invert_dibit(int dibit) return -1; } -static int digitize (dsd_opts* opts, dsd_state* state, int symbol) -//int digitize (dsd_opts* opts, dsd_state* state, int symbol) +int digitize (dsd_opts* opts, dsd_state* state, int symbol) { // determine dibit state if ((state->synctype == 6) || (state->synctype == 14)|| (state->synctype == 18) || (state->synctype == 37)) diff --git a/src/edacs-fme.c b/src/edacs-fme.c index 3f6202f..6a4b55c 100644 --- a/src/edacs-fme.c +++ b/src/edacs-fme.c @@ -228,8 +228,6 @@ void edacs_analog(dsd_opts * opts, dsd_state * state, int afs, unsigned char lcn if (opts->floating_point == 1) fprintf (stderr, "Analog Floating Point Output Not Supported"); - if (rms > sql) fprintf (stderr, "\n"); - //Update Ncurses Terminal if (opts->use_ncurses_terminal == 1) ncursesPrinter(opts, state); @@ -243,6 +241,26 @@ void edacs_analog(dsd_opts * opts, dsd_state * state, int afs, unsigned char lcn sf_write_short(opts->wav_out_f, analog2, 960); sf_write_short(opts->wav_out_f, analog3, 960); } + + //digitize analog samples for a dotting sequence check + unsigned long long int sr = 0; + for (i = 0; i < 960; i+=5) //Samples Per Symbol is 5, so incrememnt every 5 + { + sr = sr << 1; + sr += digitize (opts, state, (int)analog1[i]); + } + + //debug + // fprintf (stderr, " SR: %016llX", sr); + + if (sr == 0xAAAAAAAAAAAAAAAA || sr == 0x5555555555555555) + { + fprintf (stderr, " EDACS DOTTING SEQUENCE: "); + rms = 0; //break while loop by dropping rms value + fprintf (stderr, "\n"); + } + + if (rms > sql) fprintf (stderr, "\n"); } }