mirror of https://github.com/lwvmobile/dsd-fme.git
Test TG Trunking Hold on DMR T3 Systems; #132;
This commit is contained in:
parent
8227b49b59
commit
6a694444c5
|
|
@ -195,6 +195,10 @@ Z - Simulate NoCarrier/No VC/CC sync (capital Z)
|
||||||
|
|
||||||
! - Lockout Tuning/Playback of TG in Slot 1 or Conventional -- Current Session Only if no group.csv file specified
|
! - Lockout Tuning/Playback of TG in Slot 1 or Conventional -- Current Session Only if no group.csv file specified
|
||||||
@ - Lockout Tuning/Playback of TG in Slot 2 -- Current Session Only if no group.csv file specified
|
@ - Lockout Tuning/Playback of TG in Slot 2 -- Current Session Only if no group.csv file specified
|
||||||
|
|
||||||
|
k - Hold TG in Slot 1 or Conventional, or clear current hold (Testing/WIP: DMR T3 Only)
|
||||||
|
l - Hold TG in Slot 2 on TDMA Systems, or clear current hold (Testing/WIP: DMR T3 Only)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Sending Audio to a Icecast 2 Server via FFmpeg (Windows)
|
Sending Audio to a Icecast 2 Server via FFmpeg (Windows)
|
||||||
|
|
|
||||||
|
|
@ -681,6 +681,7 @@ typedef struct
|
||||||
int dmr_vc_lsn;
|
int dmr_vc_lsn;
|
||||||
int dmr_tuned_lcn;
|
int dmr_tuned_lcn;
|
||||||
uint16_t dmr_cc_lpcn; //dmr t3 logical physical channel number
|
uint16_t dmr_cc_lpcn; //dmr t3 logical physical channel number
|
||||||
|
uint32_t tg_hold; //single TG to hold on when enabled
|
||||||
|
|
||||||
//edacs
|
//edacs
|
||||||
int ea_mode;
|
int ea_mode;
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,11 @@ void dmr_cspdu (dsd_opts * opts, dsd_state * state, uint8_t cs_pdu_bits[], uint8
|
||||||
//if not a data channel grant (only tuning to voice channel grants)
|
//if not a data channel grant (only tuning to voice channel grants)
|
||||||
if (csbk_o == 48 || csbk_o == 49 || csbk_o == 50 || csbk_o == 53) //48, 49, 50 are voice grants, 51 and 52 are data grants, 53 Duplex Private Voice, 54 Duplex Private Data
|
if (csbk_o == 48 || csbk_o == 49 || csbk_o == 50 || csbk_o == 53) //48, 49, 50 are voice grants, 51 and 52 are data grants, 53 Duplex Private Voice, 54 Duplex Private Data
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//if tg hold is specified and matches target, allow for a call pre-emption by nullifying the last vc sync time
|
||||||
|
if (state->tg_hold != 0 && state->tg_hold == target)
|
||||||
|
state->last_vc_sync_time = 0;
|
||||||
|
|
||||||
//TIII tuner fix if voice assignment occurs to the control channel itself,
|
//TIII tuner fix if voice assignment occurs to the control channel itself,
|
||||||
//then it may not want to resume tuning due to no framesync loss after call ends
|
//then it may not want to resume tuning due to no framesync loss after call ends
|
||||||
if ( (time(NULL) - state->last_vc_sync_time > 2) )
|
if ( (time(NULL) - state->last_vc_sync_time > 2) )
|
||||||
|
|
@ -243,7 +248,11 @@ void dmr_cspdu (dsd_opts * opts, dsd_state * state, uint8_t cs_pdu_bits[], uint8
|
||||||
strcpy (mode, state->group_array[i].groupMode);
|
strcpy (mode, state->group_array[i].groupMode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TG hold on DMR T3 Systems -- block non-matching target, allow 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");
|
||||||
|
|
||||||
if (state->p25_cc_freq != 0 && opts->p25_trunk == 1 && (strcmp(mode, "B") != 0) && (strcmp(mode, "DE") != 0))
|
if (state->p25_cc_freq != 0 && opts->p25_trunk == 1 && (strcmp(mode, "B") != 0) && (strcmp(mode, "DE") != 0))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1035,6 +1035,7 @@ initState (dsd_state * state)
|
||||||
state->dmr_rest_channel = -1; //init on -1
|
state->dmr_rest_channel = -1; //init on -1
|
||||||
state->dmr_mfid = -1; //
|
state->dmr_mfid = -1; //
|
||||||
state->dmr_cc_lpcn = 0;
|
state->dmr_cc_lpcn = 0;
|
||||||
|
state->tg_hold = 0;
|
||||||
|
|
||||||
//new nxdn stuff
|
//new nxdn stuff
|
||||||
state->nxdn_part_of_frame = 0;
|
state->nxdn_part_of_frame = 0;
|
||||||
|
|
|
||||||
|
|
@ -3288,6 +3288,10 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
|
||||||
attron(COLOR_PAIR(4));
|
attron(COLOR_PAIR(4));
|
||||||
printw ("Frequency: %.06lf MHz ", (double)state->p25_vc_freq[0]/1000000);
|
printw ("Frequency: %.06lf MHz ", (double)state->p25_vc_freq[0]/1000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TG Hold, if specified by user
|
||||||
|
if (state->tg_hold != 0) printw ("TG HOLD: %d", state->tg_hold);
|
||||||
|
|
||||||
if (state->carrier == 1) attron(COLOR_PAIR(3));
|
if (state->carrier == 1) attron(COLOR_PAIR(3));
|
||||||
else attroff(COLOR_PAIR(4));
|
else attroff(COLOR_PAIR(4));
|
||||||
printw ("\n");
|
printw ("\n");
|
||||||
|
|
@ -3529,6 +3533,21 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
|
||||||
ncursesMenu (opts, state); //just a quick test
|
ncursesMenu (opts, state); //just a quick test
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//use k and l keys to test tg hold toggles on slots 1 and slots 2
|
||||||
|
if (c == 107) //'k' key, hold tg on slot 1 for trunking purposes, or toggle clear
|
||||||
|
{
|
||||||
|
if (state->tg_hold == 0)
|
||||||
|
state->tg_hold = state->lasttg;
|
||||||
|
else state->tg_hold = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == 108) //'k' key, hold tg on slot 2 for trunking purposes, or toggle clear
|
||||||
|
{
|
||||||
|
if (state->tg_hold == 0)
|
||||||
|
state->tg_hold = state->lasttgR;
|
||||||
|
else state->tg_hold = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//toggling when 48k/1 OSS still has some lag -- needed to clear out the buffer when switching
|
//toggling when 48k/1 OSS still has some lag -- needed to clear out the buffer when switching
|
||||||
if (c == 49) // '1' key, toggle slot1 on
|
if (c == 49) // '1' key, toggle slot1 on
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue