diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index 3999f65..c957b63 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -2600,6 +2600,17 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) if (state->ea_mode == 0) printw (" AFS: %d:%d:%d;", state->edacs_a_bits, state->edacs_f_bits, state->edacs_s_bits); + //TG Hold on EDACS, if specified by user + if (state->tg_hold != 0) + { + // Compute AFS for display purposes only + int a = (state->tg_hold >> state->edacs_a_shift) & state->edacs_a_mask; + int f = (state->tg_hold >> state->edacs_f_shift) & state->edacs_f_mask; + int s = state->tg_hold & state->edacs_s_mask; + if (state->ea_mode == 1) printw ("\n| \\TG HOLD: %d; ", state->tg_hold); + else printw ("\n| \\TG HOLD: %d [%02d-%02d%01d]; ", state->tg_hold, a, f, s); + } + attron(COLOR_PAIR(4)); printw ("\n"); } @@ -2630,6 +2641,17 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) if (state->ea_mode == 0) printw (" AFS: %d:%d:%d;", state->edacs_a_bits, state->edacs_f_bits, state->edacs_s_bits); + //TG Hold on EDACS, if specified by user + if (state->tg_hold != 0) + { + // Compute AFS for display purposes only + int a = (state->tg_hold >> state->edacs_a_shift) & state->edacs_a_mask; + int f = (state->tg_hold >> state->edacs_f_shift) & state->edacs_f_mask; + int s = state->tg_hold & state->edacs_s_mask; + if (state->ea_mode == 1) printw ("\n| \\TG HOLD: %d; ", state->tg_hold); + else printw ("\n| \\TG HOLD: %d [%02d-%02d%01d]; ", state->tg_hold, a, f, s); + } + printw ("\n"); } #endif @@ -2684,16 +2706,6 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) //debug -- troubleshoot voice tuning after grant on DMR CC, subsequent grant may not tune because tuner isn't available if (opts->p25_trunk == 1 && opts->p25_is_tuned == 1) printw ("Tuner Locked "); if (opts->p25_trunk == 1 && opts->p25_is_tuned == 0) printw ("Tuner Available "); - //TG Hold on EDACS, if specified by user - if ( (opts->frame_provoice == 1) && (state->tg_hold != 0) ) - { - // Compute AFS for display purposes only - int a = (state->tg_hold >> state->edacs_a_shift) & state->edacs_a_mask; - int f = (state->tg_hold >> state->edacs_f_shift) & state->edacs_f_mask; - int s = state->tg_hold & state->edacs_s_mask; - if (state->ea_mode == 1) printw ("TG HOLD: %d; ", state->tg_hold); - else printw ("TG HOLD: %d [%02d-%02d%01d]; ", state->tg_hold, a, f, s); - } printw ("\n"); printw ("| In Level: [%02d%%] \n", level); diff --git a/src/edacs-fme.c b/src/edacs-fme.c index 0d7d0c4..901a8cb 100644 --- a/src/edacs-fme.c +++ b/src/edacs-fme.c @@ -878,6 +878,20 @@ void edacs(dsd_opts * opts, dsd_state * state) //if we are using allow/whitelist mode, then write 'B' to mode for block - no allow/whitelist support for i-calls if (opts->trunk_use_allow_list == 1) sprintf (mode, "%s", "B"); + //Get target mode for calls that are in the allow/whitelist + for (int i = 0; i < state->group_tally; i++) + { + if (state->group_array[i].groupNumber == target) + { + strcpy (mode, state->group_array[i].groupMode); + break; + } + } + + //TG hold on EDACS EA I-CALL -- block non-matching target + if (state->tg_hold != 0 && state->tg_hold != target) sprintf (mode, "%s", "B"); + if (state->tg_hold != 0 && state->tg_hold == target) sprintf (mode, "%s", "A"); + //this is working now with the new import setup if (opts->trunk_tune_private_calls == 1 && opts->p25_trunk == 1 && (strcmp(mode, "DE") != 0) && (strcmp(mode, "B") != 0) ) //DE is digital encrypted, B is block { @@ -979,6 +993,10 @@ void edacs(dsd_opts * opts, dsd_state * state) //if we are using allow/whitelist mode, then write 'A' to mode for allow - always allow all-calls by default if (opts->trunk_use_allow_list == 1) sprintf (mode, "%s", "A"); + //TG hold on EDACS ALL-CALL -- block ALL CALL in favor of hold? + // if (state->tg_hold != 0 && state->tg_hold != target) sprintf (mode, "%s", "B"); + // if (state->tg_hold != 0 && state->tg_hold == target) sprintf (mode, "%s", "A"); + //this is working now with the new import setup if (opts->trunk_tune_group_calls == 1 && opts->p25_trunk == 1 && (strcmp(mode, "DE") != 0) && (strcmp(mode, "B") != 0) ) //DE is digital encrypted, B is block { @@ -1375,11 +1393,15 @@ void edacs(dsd_opts * opts, dsd_state * state) break; } } - //TG hold on EDACS Standard/Net -- block non-matching target, allow matching group - if (state->tg_hold != 0 && state->tg_hold != target) sprintf (mode, "%s", "B"); - if (state->tg_hold != 0 && state->tg_hold == target) sprintf (mode, "%s", "A"); + //moved to below, we want the TG HOLD to override either group or individual calls + // + // } + //TG hold on EDACS STD/NET -- block non-matching abstract target (moved here to fix tuning that occurs on I-CALL during TG HOLD) + if (state->tg_hold != 0 && state->tg_hold != target) sprintf (mode, "%s", "B"); + if (state->tg_hold != 0 && state->tg_hold == target) sprintf (mode, "%s", "A"); + //NOTE: Restructured below so that analog and digital are handled the same, just that when //its analog, it will now start edacs_analog which will while loop analog samples until //signal level drops (RMS, or a dotting sequence is detected)