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:
parent
c994f00e5d
commit
f053e53e76
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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** ");
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
192
src/p25p1_ldu2.c
192
src/p25p1_ldu2.c
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue