More DMR Staging, Fix MI to Hex in P25

More DMR Staging, Fix MI to Hex in P25
-switch back to 7 octets on AMB payloads
--will break compatibility with 6 octets
-Print MI values as Hex now, not as binary strings
This commit is contained in:
lwvmobile 2022-03-06 22:38:29 -05:00 committed by GitHub
parent c994f00e5d
commit f053e53e76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 199 deletions

View File

@ -218,6 +218,7 @@ typedef struct
unsigned int GroupAddress; /* Destination ID or TG (in Air Interface format) */
unsigned int SourceAddress; /* Source ID (in Air Interface format) */
unsigned int DataValidity; /* 0 = All Full LC data are incorrect ; 1 = Full LC data are correct (CRC checked OK) */
unsigned int LeftOvers; //what is the 8 bits for that isn't used
}FullLinkControlPDU_t;
typedef struct

View File

@ -104,7 +104,7 @@ void ProcessDmrVoiceLcHeader(dsd_opts * opts, dsd_state * state, uint8_t info[19
DmrDataBit[j + 6] = (DmrDataByte[i] >> 1) & 0x01;
DmrDataBit[j + 7] = (DmrDataByte[i] >> 0) & 0x01;
}
//fprintf (stderr, "\nDDB = 0x%X \n", DmrDataBit);
/* Store the Protect Flag (PF) bit */
TSVoiceSupFrame->FullLC.ProtectFlag = (unsigned int)(DmrDataBit[0]);
@ -303,7 +303,7 @@ void ProcessDmrTerminaisonLC(dsd_opts * opts, dsd_state * state, uint8_t info[19
DmrDataBit[j + 6] = (DmrDataByte[i] >> 1) & 0x01;
DmrDataBit[j + 7] = (DmrDataByte[i] >> 0) & 0x01;
}
//fprintf (stderr, "\nDDB = 0x%X \n", DmrDataBit);
/* Store the Protect Flag (PF) bit */
TSVoiceSupFrame->FullLC.ProtectFlag = (unsigned int)(DmrDataBit[0]);
@ -326,6 +326,8 @@ void ProcessDmrTerminaisonLC(dsd_opts * opts, dsd_state * state, uint8_t info[19
/* Store the Source address */
TSVoiceSupFrame->FullLC.SourceAddress = (unsigned int)ConvertBitIntoBytes(&DmrDataBit[48], 24);
//state->lastsrc = TSVoiceSupFrame->FullLC.SourceAddress;
//TSVoiceSupFrame->FullLC.LeftOvers = (unsigned int)ConvertBitIntoBytes(&DmrDataBit[64], 8);
//fprintf (stderr, "\nBPTC Left Overs = %02X \n", TSVoiceSupFrame->FullLC.LeftOvers);
if((IrrecoverableErrors == 0))// && CRCCorrect)
{
/* CRC is correct so consider the Full LC data as correct/valid */
@ -472,7 +474,7 @@ void ProcessVoiceBurstSync(dsd_opts * opts, dsd_state * state)
CRCExtracted |= (LC_DataBit[74] & 1) << 2;
CRCExtracted |= (LC_DataBit[75] & 1) << 1;
CRCExtracted |= (LC_DataBit[76] & 1) << 0;
//fprintf (stderr, "\nLCDB = 0x%X \n", LC_DataBit);
/* Compute the 5 bit CRC */
CRCComputed = ComputeCrc5Bit(LC_DataBit);

View File

@ -73,7 +73,7 @@ saveAmbe2450Data (dsd_opts * opts, dsd_state * state, char *ambe_d)
fprintf(stderr, "\n");
}
//for (i = 0; i < 6; i++)
for (i = 0; i < 7; i++)
for (i = 0; i < 7; i++) //using 7 seems to break older amb files where it was 6, need to test 7 on 7 some more
{
b = 0;
@ -162,8 +162,8 @@ readAmbe2450Data (dsd_opts * opts, dsd_state * state, char *ambe_d)
{
fprintf(stderr, "\n");
}
for (i = 0; i < 6; i++)
//for (i = 0; i < 7; i++) //this will really break backwards compatability
//for (i = 0; i < 6; i++)
for (i = 0; i < 7; i++) //breaks backwards compatablilty with 6 files
{
b = fgetc (opts->mbe_in_f);
if (feof (opts->mbe_in_f))

View File

@ -374,9 +374,9 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
if (lls == 12 || lls == 13) //DMR Voice Types
{
//printw ("| DCC: [%i] FID: [%02X]\n", dcc, state->dmr_fid);
printw ("| DCC: [%i] FID: [%02X] SOP: [%X] \n", dcc, state->dmr_fid, state->dmr_so);
printw ("| DCC: [%i] MFID: [%02X] SOP: [%X] \n", dcc, state->dmr_fid, state->dmr_so);
printw ("| TID: [%i] RID: [%i]", tg, rd);
if(state->dmr_so & 0x80) //& apparently is same as ==
if(state->dmr_so & 0x80) //1000 0000
{
attron(COLOR_PAIR(2));
printw (" **Emergency** ");
@ -384,17 +384,17 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
attron(COLOR_PAIR(3));
}
if(state->dmr_so & 0x40)
if(state->dmr_so & 0x40) //0100 0000
{
attron(COLOR_PAIR(2));
printw (" **ENC** ");
//printw ("0x%X", state->payload_algid);
attroff(COLOR_PAIR(2));
attron(COLOR_PAIR(3));
//opts->p25enc = 1; //just testing for now
opts->p25enc = 1; //just testing for now
}
if(state->dmr_so & 0x30)
if(state->dmr_so & 0x30) //0010 0000
{
attron(COLOR_PAIR(2));
printw (" **Private Call** ");

View File

@ -222,7 +222,7 @@ processHDU(dsd_opts* opts, dsd_state* state)
char hex[6];
int status_count;
int status;
unsigned long long int mihex1, mihex2, mihex3;
char hex_data[20][6]; // Data in hex-words (6 bit words). A total of 20 hex words.
char hex_parity[16][6]; // Parity of the data, again in hex-word format. A total of 16 parity hex words.
@ -461,14 +461,17 @@ processHDU(dsd_opts* opts, dsd_state* state)
state->payload_algid = algidhex;
state->payload_keyid = kidhex;
mihex1 = (unsigned long long int)ConvertBitIntoBytes(&mi[0], 32);
mihex2 = (unsigned long long int)ConvertBitIntoBytes(&mi[32], 32);
mihex3 = (unsigned long long int)ConvertBitIntoBytes(&mi[64], 8);
}
//if (opts->payload == 1)
//if (opts->payload == 0)
if (opts->payload == 1 && state->errs == 0)
{
//fprintf (stderr, "ALG ID: 0x%X KEY ID: 0x%X\n", algidhex, kidhex);
fprintf (stderr, "HDU ALG ID: 0x%X KEY ID: 0x%X MI: %s \n", algidhex, kidhex, mi);
//fprintf (stderr, "ALG ID: 0x%X KEY ID: 0x%X MI: 0x%016X%02X\n", algidhex, kidhex, mihex1, mihex2);
//fprintf (stderr, "HDU ALG ID: 0x%X KEY ID: 0x%X MI: %s \n", algidhex, kidhex, mi);
fprintf (stderr, "HDU ALG ID: 0x%X KEY ID: 0x%X MI: 0x%08X%08X%02X\n", algidhex, kidhex, mihex1, mihex2, mihex3);
}
if (opts->p25enc == 1 && opts->payload == 0)

View File

@ -22,8 +22,6 @@
#include "p25p1_check_ldu.h"
#include "p25p1_hdu.h"
long long int mihex1 = 0;
long long int mihex2 = 0;
void
processLDU2 (dsd_opts * opts, dsd_state * state)
@ -33,7 +31,7 @@ processLDU2 (dsd_opts * opts, dsd_state * state)
char mi[73], algid[9], kid[17];
char lsd1[9], lsd2[9];
int algidhex, kidhex;
unsigned long long int mihex1, mihex2, mihex3;
int status_count;
char hex_data[16][6]; // Data in hex-words (6 bit words). A total of 16 hex words.
@ -249,165 +247,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state)
lsd1[8] = 0;
lsd2[8] = 0;
mihex1 = 0;
mihex2 = 0;
/*
mihex1 |= atoi(&hex_data[15][0]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[15][1]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[15][2]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[15][3]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[15][4]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[15][5]);
mihex1 << 1;
//fprintf(stderr, "\n%X\n", mihex1);
mihex1 |= atoi(&hex_data[14][0]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[14][1]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[14][2]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[14][3]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[14][4]);
mihex1 << 1;
mihex1 |= atoi(&hex_data[14][5]);
mihex1 << 1;
mihex1 |= hex_data[13][0];
mihex1 << 1;
mihex1 |= hex_data[13][1];
mihex1 << 1;
mihex1 |= hex_data[13][2];
mihex1 << 1;
mihex1 |= hex_data[13][3];
mihex1 << 1;
mihex1 |= hex_data[13][4];
mihex1 << 1;
mihex1 |= hex_data[13][5];
mihex1 << 1;
mihex1 |= hex_data[12][0];
mihex1 << 1;
mihex1 |= hex_data[12][1];
mihex1 << 1;
mihex1 |= hex_data[12][2];
mihex1 << 1;
mihex1 |= hex_data[12][3];
mihex1 << 1;
mihex1 |= hex_data[12][4];
mihex1 << 1;
mihex1 |= hex_data[12][5];
mihex1 << 1;
mihex1 |= hex_data[113][0];
mihex1 << 1;
mihex1 |= hex_data[11][1];
mihex1 << 1;
mihex1 |= hex_data[11][2];
mihex1 << 1;
mihex1 |= hex_data[11][3];
mihex1 << 1;
mihex1 |= hex_data[11][4];
mihex1 << 1;
mihex1 |= hex_data[11][5];
mihex1 << 1;
mihex1 |= hex_data[10][0];
mihex1 << 1;
mihex1 |= hex_data[10][1];
mihex1 << 1;
mihex1 |= hex_data[10][2];
mihex1 << 1;
mihex1 |= hex_data[10][3];
mihex1 << 1;
mihex1 |= hex_data[10][4];
mihex1 << 1;
mihex1 |= hex_data[10][5];
mihex1 << 1;
mihex1 |= hex_data[9][0];
mihex1 << 1;
mihex1 |= hex_data[9][1];
mihex1 << 1;
mihex1 |= hex_data[9][2];
mihex1 << 1;
mihex1 |= hex_data[9][3];
mihex1 << 1;
mihex1 |= hex_data[9][4];
mihex1 << 1;
mihex1 |= hex_data[9][5];
mihex1 << 1;
mihex1 |= hex_data[8][0];
mihex1 << 1;
mihex1 |= hex_data[8][1];
mihex1 << 1;
mihex1 |= hex_data[8][2];
mihex1 << 1;
mihex1 |= hex_data[8][3];
mihex1 << 1;
mihex1 |= hex_data[8][4];
mihex1 << 1;
mihex1 |= hex_data[8][5];
mihex1 << 1;
mihex1 |= hex_data[7][0];
mihex1 << 1;
mihex1 |= hex_data[7][1];
mihex1 << 1;
mihex1 |= hex_data[7][2];
mihex1 << 1;
mihex1 = hex_data[7][3];
mihex1 << 1;
mihex1 |= hex_data[7][4];
mihex1 << 1;
mihex1 |= hex_data[7][5];
mihex1 << 1;
mihex1 |= hex_data[6][0];
mihex1 << 1;
mihex1 |= hex_data[6][1];
mihex1 << 1;
mihex1 |= hex_data[6][2];
mihex1 << 1;
mihex1 |= hex_data[6][3];
mihex1 << 1;
mihex1 |= hex_data[6][4];
mihex1 << 1;
mihex1 |= hex_data[6][5];
mihex1 << 1;
mihex1 |= hex_data[5][0];
mihex1 << 1;
mihex1 |= hex_data[5][1];
mihex1 << 1;
mihex1 |= hex_data[5][2];
mihex1 << 1;
mihex1 |= hex_data[5][3];
//mihex1 << 1;
mihex2 |= hex_data[5][4];
mihex2 << 1;
mihex2 |= hex_data[5][5];
mihex2 << 1;
mihex2 |= hex_data[4][0];
mihex2 << 1;
mihex2 |= hex_data[4][1];
mihex2 << 1;
mihex2 |= hex_data[4][2];
mihex2 << 1;
mihex2 |= hex_data[4][3];
mihex2 << 1;
mihex2 |= hex_data[4][4];
mihex2 << 1;
mihex2 |= hex_data[4][5];
//mihex2 << 1;
*/
mi[ 0] = hex_data[15][0] + '0';
mi[ 1] = hex_data[15][1] + '0';
mi[ 2] = hex_data[15][2] + '0';
@ -520,40 +359,27 @@ processLDU2 (dsd_opts * opts, dsd_state * state)
kid[14] = hex_data[ 0][4] + '0';
kid[15] = hex_data[ 0][5] + '0';
//if (state->carrier == 1 && state->errs2 == 0) //only update when carrier is present, and no errors??
if (state->carrier == 1 && state->errs == 0) //only update when carrier is present, and no errors??
//if (state->carrier == 1)
{
/*
for (short i = 0; i < 64; i++)
{
mihex1 << 1;
//mihex1 |= strtoll(&mi[i], NULL, 2);
mihex1 |= atoi(&mi[i]);
//fprintf (stderr, "%c", mi[i]);
}
for (short i = 0; i < 8; i++)
{
mihex2 << 1;
//mihex2 |= strtoll(&mi[64+i], NULL, 2);
mihex2 |= atoi(&mi[i+64]);
//fprintf (stderr, "%c", mi[i+64]);
}
*/
algidhex = strtol (algid, NULL, 2);
kidhex = strtol (kid, NULL, 2);
state->payload_algid = algidhex;
state->payload_keyid = kidhex;
mihex1 = (unsigned long long int)ConvertBitIntoBytes(&mi[0], 32);
mihex2 = (unsigned long long int)ConvertBitIntoBytes(&mi[32], 32);
mihex3 = (unsigned long long int)ConvertBitIntoBytes(&mi[64], 8);
}
//if (opts->payload == 1)
//if (opts->payload == 0)
if (opts->payload == 1 && state->errs == 0)
{
//fprintf (stderr, "ALG ID: 0x%X KEY ID: 0x%X\n", algidhex, kidhex);
fprintf (stderr, "LDU2 ALG ID: 0x%X KEY ID: 0x%X MI: %s \n", algidhex, kidhex, mi);
//fprintf (stderr, "ALG ID: 0x%X KEY ID: 0x%X MI: 0x%016X%02X\n", algidhex, kidhex, mihex1, mihex2);
//fprintf (stderr, "LDU2 ALG ID: 0x%X KEY ID: 0x%X MI: %s \n", algidhex, kidhex, mi);
fprintf (stderr, "LDU2 ALG ID: 0x%X KEY ID: 0x%X MI: 0x%08X%08X%02X\n", algidhex, kidhex, mihex1, mihex2, mihex3);
}
//if (opts->p25enc == 1 && opts->payload == 0)
if (opts->payload == 0)