DMR SB/RC Additions; Cap+ LC/CSBK; RAS;

This commit is contained in:
lwvmobile
2023-01-17 23:58:52 -05:00
parent 1d49481f2d
commit ec7d7c24a5
11 changed files with 383 additions and 38 deletions

View File

@@ -50,6 +50,11 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
uint8_t internalslot;
uint8_t vc;
//assign as nonsensical numbers
uint8_t cc = 25;
uint8_t power = 9; //power and pre-emption indicator
uint8_t lcss = 9;
//dummy bits to pass to dburst for link control
uint8_t dummy_bits[196];
memset (dummy_bits, 0, sizeof (dummy_bits));
@@ -171,7 +176,7 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
sync[i] = (dibit | 1) + 48;
// load the superframe to do embedded signal processing
if(vc > 1 && vc < 6) //grab on vc1 values 2-5 B C D and E
if(vc > 1) //grab on vc1 values 2-5 B C D and E
{
state->dmr_embedded_signalling[internalslot][vc-1][i*2] = (1 & (dibit >> 1)); // bit 1
state->dmr_embedded_signalling[internalslot][vc-1][i*2+1] = (1 & dibit); // bit 0
@@ -180,10 +185,18 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
}
sync[24] = 0;
for(i = 0; i < 8; i++) EmbeddedSignalling[i] = syncdata[i];
for(i = 0; i < 8; i++) EmbeddedSignalling[i + 8] = syncdata[i + 40];
EmbeddedSignallingOk = -1;
if(QR_16_7_6_decode(EmbeddedSignalling))
{
EmbeddedSignallingOk = 1;
cc = ((EmbeddedSignalling[0] << 3) + (EmbeddedSignalling[1] << 2) + (EmbeddedSignalling[2] << 1) + EmbeddedSignalling[3]);
power = EmbeddedSignalling[4];
lcss = ((EmbeddedSignalling[5] << 1) + EmbeddedSignalling[6]);
}
//Continue Second AMBE Frame, 18 after Sync or EmbeddedSignalling
@@ -268,6 +281,9 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
if (vc == 6)
{
dmr_data_burst_handler(opts, state, (uint8_t *)dummy_bits, 0xEB);
//check the single burst/reverse channel opportunity
dmr_sbrc (opts, state, power);
fprintf (stderr, "\n");
dmr_alg_refresh (opts, state);
}
@@ -282,6 +298,12 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
state->last_vc_sync_time = time(NULL);
vc++;
//reset emb components
cc = 25;
power = 9; //power and pre-emption indicator
lcss = 9;
//this is necessary because we need to skip and collect dibits, not just skip them
if (vc > 6) goto END;