mirror of https://github.com/lwvmobile/dsd-fme.git
DMR: Fix EMB_PDU CC Assignment;
This commit is contained in:
parent
bd1dcd2a7f
commit
db7bc75739
24
src/dmr_bs.c
24
src/dmr_bs.c
|
|
@ -30,8 +30,11 @@ void dmrBS (dsd_opts * opts, dsd_state * state)
|
|||
|
||||
const int *w, *x, *y, *z;
|
||||
char sync[25];
|
||||
char syncdata[48];
|
||||
unsigned char EmbeddedSignalling[16];
|
||||
uint8_t syncdata[48];
|
||||
memset (syncdata, 0, sizeof(syncdata));
|
||||
|
||||
uint8_t emb_pdu[16];
|
||||
memset (emb_pdu, 0, sizeof(emb_pdu));
|
||||
|
||||
uint8_t emb_ok = 0;
|
||||
uint8_t tact_okay = 0;
|
||||
|
|
@ -114,6 +117,8 @@ void dmrBS (dsd_opts * opts, dsd_state * state)
|
|||
memset (ambe_fr, 0, sizeof(ambe_fr));
|
||||
memset (ambe_fr2, 0, sizeof(ambe_fr2));
|
||||
memset (ambe_fr3, 0, sizeof(ambe_fr3));
|
||||
memset (emb_pdu, 0, sizeof(emb_pdu));
|
||||
memset (syncdata, 0, sizeof(syncdata));
|
||||
|
||||
internalslot = -1; //reset here so we know if this value is being set properly
|
||||
for(i = 0; i < 12; i++)
|
||||
|
|
@ -202,7 +207,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state)
|
|||
{
|
||||
dibit = getDibit(opts, state);
|
||||
state->dmr_stereo_payload[i+66] = dibit;
|
||||
sync[i] = (dibit | 1) + 48; //how does this work again?
|
||||
sync[i] = (dibit | 1) + 48; //Sync Burst String as ones and threes
|
||||
|
||||
syncdata[(2*i)] = (1 & (dibit >> 1)); // bit 1
|
||||
syncdata[(2*i)+1] = (1 & dibit); // bit 0
|
||||
|
|
@ -223,8 +228,8 @@ void dmrBS (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];
|
||||
for(i = 0; i < 8; i++) emb_pdu[i + 0] = syncdata[i];
|
||||
for(i = 0; i < 8; i++) emb_pdu[i + 8] = syncdata[i + 40];
|
||||
|
||||
//Continue Second AMBE Frame, 18 after Sync or EmbeddedSignalling
|
||||
for(i = 0; i < 18; i++)
|
||||
|
|
@ -354,16 +359,17 @@ void dmrBS (dsd_opts * opts, dsd_state * state)
|
|||
{
|
||||
|
||||
//check the embedded signalling, if bad at this point, we probably aren't quite in sync
|
||||
if(QR_16_7_6_decode(EmbeddedSignalling)) emb_ok = 1;
|
||||
if(QR_16_7_6_decode(emb_pdu)) emb_ok = 1;
|
||||
else emb_ok = 0;
|
||||
|
||||
//disable the goto END; if this causes more problems than fixing on late entry dual voices i.e., lots of forced resyncs
|
||||
if ( (strcmp (sync, DMR_BS_VOICE_SYNC) != 0) && emb_ok == 0) goto END; //fprintf (stderr, "EMB BAD? ");
|
||||
else if (emb_ok == 1)
|
||||
{
|
||||
cc = ((EmbeddedSignalling[0] << 3) + (EmbeddedSignalling[1] << 2) + (EmbeddedSignalling[2] << 1) + EmbeddedSignalling[3]);
|
||||
power = EmbeddedSignalling[4];
|
||||
lcss = ((EmbeddedSignalling[5] << 1) + EmbeddedSignalling[6]);
|
||||
cc = ((emb_pdu[0] << 3) + (emb_pdu[1] << 2) + (emb_pdu[2] << 1) + emb_pdu[3]);
|
||||
power = emb_pdu[4];
|
||||
lcss = ((emb_pdu[5] << 1) + emb_pdu[6]);
|
||||
state->dmr_color_code = state->color_code = cc;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
29
src/dmr_ms.c
29
src/dmr_ms.c
|
|
@ -26,8 +26,11 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
|
|||
|
||||
const int *w, *x, *y, *z;
|
||||
char sync[25];
|
||||
char syncdata[48];
|
||||
uint8_t EmbeddedSignalling[16];
|
||||
uint8_t syncdata[48];
|
||||
memset (syncdata, 0, sizeof(syncdata));
|
||||
|
||||
uint8_t emb_pdu[16];
|
||||
memset (emb_pdu, 0, sizeof(emb_pdu));
|
||||
|
||||
//cach
|
||||
char cachdata[25];
|
||||
|
|
@ -36,8 +39,8 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
|
|||
uint8_t tact_bits[7];
|
||||
|
||||
uint8_t tact_okay = 0;
|
||||
uint8_t EmbeddedSignallingOk = 0;
|
||||
UNUSED(EmbeddedSignallingOk);
|
||||
uint8_t emb_ok = 0;
|
||||
UNUSED(emb_ok);
|
||||
|
||||
uint8_t internalslot;
|
||||
uint8_t vc;
|
||||
|
|
@ -196,17 +199,17 @@ void dmrMS (dsd_opts * opts, dsd_state * state)
|
|||
|
||||
}
|
||||
|
||||
for(i = 0; i < 8; i++) EmbeddedSignalling[i] = syncdata[i];
|
||||
for(i = 0; i < 8; i++) EmbeddedSignalling[i + 8] = syncdata[i + 40];
|
||||
for(i = 0; i < 8; i++) emb_pdu[i + 0] = syncdata[i];
|
||||
for(i = 0; i < 8; i++) emb_pdu[i + 8] = syncdata[i + 40];
|
||||
|
||||
EmbeddedSignallingOk = -1;
|
||||
if(QR_16_7_6_decode(EmbeddedSignalling))
|
||||
emb_ok = -1;
|
||||
if(QR_16_7_6_decode(emb_pdu))
|
||||
{
|
||||
EmbeddedSignallingOk = 1;
|
||||
state->dmr_color_code = cc = ((EmbeddedSignalling[0] << 3) + (EmbeddedSignalling[1] << 2) + (EmbeddedSignalling[2] << 1) + EmbeddedSignalling[3]);
|
||||
power = EmbeddedSignalling[4];
|
||||
lcss = ((EmbeddedSignalling[5] << 1) + EmbeddedSignalling[6]);
|
||||
|
||||
emb_ok = 1;
|
||||
cc = ((emb_pdu[0] << 3) + (emb_pdu[1] << 2) + (emb_pdu[2] << 1) + emb_pdu[3]);
|
||||
power = emb_pdu[4];
|
||||
lcss = ((emb_pdu[5] << 1) + emb_pdu[6]);
|
||||
state->dmr_color_code = state->color_code = cc;
|
||||
}
|
||||
|
||||
//Continue Second AMBE Frame, 18 after Sync or EmbeddedSignalling
|
||||
|
|
|
|||
11
src/fec.c
11
src/fec.c
|
|
@ -1521,12 +1521,15 @@ bool QR_16_7_6_decode(unsigned char *rxBits)
|
|||
{
|
||||
return false;
|
||||
}
|
||||
if (corrections > 1) //no more than 1-bit error, else consider failure
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//disabling again for now
|
||||
// if (corrections > 1) //no more than 1-bit error, else consider failure?
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue