diff --git a/include/dsd.h b/include/dsd.h index e703fb3..8f9a744 100644 --- a/include/dsd.h +++ b/include/dsd.h @@ -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 diff --git a/src/dmr_sync.c b/src/dmr_sync.c index 857276e..007b5ef 100644 --- a/src/dmr_sync.c +++ b/src/dmr_sync.c @@ -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); diff --git a/src/dsd_file.c b/src/dsd_file.c index 9acc3e5..a05e960 100644 --- a/src/dsd_file.c +++ b/src/dsd_file.c @@ -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)) diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index 173e5a2..052a7e0 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -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** "); diff --git a/src/p25p1_hdu.c b/src/p25p1_hdu.c index 8d7e9f7..eaf49a8 100644 --- a/src/p25p1_hdu.c +++ b/src/p25p1_hdu.c @@ -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) diff --git a/src/p25p1_ldu2.c b/src/p25p1_ldu2.c index b431385..097baca 100644 --- a/src/p25p1_ldu2.c +++ b/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)