diff --git a/include/dsd.h b/include/dsd.h index 666d84a..a6d386e 100644 --- a/include/dsd.h +++ b/include/dsd.h @@ -1329,7 +1329,7 @@ rs_12_9_checksum_t *rs_12_9_calc_checksum(rs_12_9_codeword_t *codeword); //DMR CRC Functions uint16_t ComputeCrcCCITT(uint8_t * DMRData); -uint16_t ComputeCrcCCITT16d(const uint8_t buf[], uint8_t len); +uint16_t ComputeCrcCCITT16d(const uint8_t * buf, uint32_t len); uint32_t ComputeAndCorrectFullLinkControlCrc(uint8_t * FullLinkControlDataBytes, uint32_t * CRCComputed, uint32_t CRCMask); uint8_t ComputeCrc5Bit(uint8_t * DMRData); uint16_t ComputeCrc9Bit(uint8_t * DMRData, uint32_t NbData); diff --git a/src/dmr_block.c b/src/dmr_block.c index 43f33f6..c54abb6 100644 --- a/src/dmr_block.c +++ b/src/dmr_block.c @@ -693,7 +693,6 @@ void dmr_udt_decoder (dsd_opts * opts, dsd_state * state, uint8_t * block_bytes, if (utf16c >= 0x20 && utf16c != 0x7F) //avoid control chars { fprintf (stderr, "%lc", utf16c); //will using lc work here? May depend on console locale settings? - // strcat (udt_string, u16); if (utf16c >= 0x20 && utf16c < 0x7F) strcat (state->event_history_s[slot].Event_History_Items[0].text_message, u16); } @@ -744,7 +743,6 @@ void dmr_udt_decoder (dsd_opts * opts, dsd_state * state, uint8_t * block_bytes, if (utf16c >= 0x20 && utf16c != 0x7F) //avoid control chars { fprintf (stderr, "%lc", utf16c); - // strcat (udt_string, u16); if (utf16c >= 0x20 && utf16c < 0x7F) strcat (state->event_history_s[slot].Event_History_Items[0].text_message, u16); } @@ -756,7 +754,7 @@ void dmr_udt_decoder (dsd_opts * opts, dsd_state * state, uint8_t * block_bytes, { //Would be nice to be able to test these all out to make sure the conditions are okay, etc fprintf (stderr, "NMEA" ); - // strcat (udt_string, "NMEA; "); + strcat (udt_string, "NMEA; "); if (cs_bits[96] == 1) //check if its encrypted first fprintf (stderr, " Encrypted Format :(" ); //sad face else if (udt_uab == 1) @@ -774,9 +772,9 @@ void dmr_udt_decoder (dsd_opts * opts, dsd_state * state, uint8_t * block_bytes, //unsure of how this is structured for UDT Blocks, would assume one appended block of same format //but could also be full blown LIP protocol that is also found in tetra that would require the PDU //type bit to be read and then to decode accordingly, this assumes its the modified Short PDU that USBD uses + strcat (udt_string, "LIP; "); fprintf (stderr, "\n"); lip_protocol_decoder (opts, state, cs_bits+96); //start on first appended block, and not header - // strcat (udt_string, "LIP; "); } else if (udt_format2 == 0x08 || udt_format2 == 0x09) @@ -1364,7 +1362,7 @@ void dmr_block_assembler (dsd_opts * opts, dsd_state * state, uint8_t block_byte mbc_block_bits[i] = dmr_pdu_sf_bits[i+96]; //skip udt header } } - + //there was a bug built into ComputeCrcCCITT16d where len was uint8_t, so len could never exceed 255 CRCComputed = ComputeCrcCCITT16d (mbc_block_bits, ((blocks+0)*96)-16 ); if (CRCComputed == CRCExtracted) mbc_crc_good[1] = 1; @@ -1385,7 +1383,7 @@ void dmr_block_assembler (dsd_opts * opts, dsd_state * state, uint8_t block_byte //debug print fprintf (stderr, " %X - %X", CRCExtracted, CRCComputed); - + // fprintf (stderr, " Len: %d", ((blocks+0)*96)-16); fprintf (stderr, "%s", KNRM); } diff --git a/src/dmr_dburst.c b/src/dmr_dburst.c index ac78c10..91a66b6 100644 --- a/src/dmr_dburst.c +++ b/src/dmr_dburst.c @@ -140,7 +140,9 @@ void dmr_data_burst_handler(dsd_opts * opts, dsd_state * state, uint8_t info[196 if (state->data_header_format[slot] == 0) //UDT 1/2 Encoded Blocks { is_udt = 1; - sprintf(state->fsubtype, " UDTC "); + if (state->data_conf_data[slot] == 1) + sprintf(state->fsubtype, " UDTC "); //confirmed data + else sprintf(state->fsubtype, " UDTU "); //unconfirmed data } break; case 0x08: //3/4 Rate Data diff --git a/src/dmr_utils.c b/src/dmr_utils.c index dfc2f06..c9a9aa2 100644 --- a/src/dmr_utils.c +++ b/src/dmr_utils.c @@ -10,7 +10,7 @@ #include "dsd.h" //modified to accept variable payload size and len -uint16_t ComputeCrcCCITT16d(const uint8_t buf[], uint8_t len) +uint16_t ComputeCrcCCITT16d(const uint8_t * buf, uint32_t len) { uint32_t i; uint16_t CRC = 0x0000; /* Initialization value = 0x0000 */ diff --git a/src/dsd_gps.c b/src/dsd_gps.c index b047d3b..e82b6cf 100644 --- a/src/dsd_gps.c +++ b/src/dsd_gps.c @@ -16,10 +16,10 @@ void lip_protocol_decoder (dsd_opts * opts, dsd_state * state, uint8_t * input) int slot = state->currentslot; //May need to set this in the UDT header, or pass it into this function to be sure - uint32_t src = 0; - if (slot == 0) - src = state->lastsrc; - else src = state->lastsrcR; + // uint32_t src = 0; + // if (slot == 0) + // src = state->lastsrc; + // else src = state->lastsrcR; //NOTE: This format is pretty much the same as DMR EMB GPS, but has a few extra elements, //so I got lazy and just lifted most of the code from there, also assuming same lat/lon calcs @@ -122,8 +122,7 @@ void lip_protocol_decoder (dsd_opts * opts, dsd_state * state, uint8_t * input) else sprintf (state->dmr_embedded_gps[slot], "%03d; LIP: %.5lf%s%s %.5lf%s%s Unknown Pos Err; Spd: %d km/h; Dir %d%s", add_hash, latitude, deg_glyph, latstr, longitude, deg_glyph, lonstr, vt, dt, deg_glyph); //save to event history string - if (state->event_history_s[slot].Event_History_Items[0].source_id == src) - sprintf (state->event_history_s[slot].Event_History_Items[0].gps_s, "%s", state->dmr_embedded_gps[slot]); + sprintf (state->event_history_s[slot].Event_History_Items[0].gps_s, "%s", state->dmr_embedded_gps[slot]); //save to LRRP report for mapping/logging FILE * pFile; //file pointer @@ -241,8 +240,7 @@ void nmea_iec_61162_1 (dsd_opts * opts, dsd_state * state, uint8_t * input, uint sprintf (state->dmr_embedded_gps[slot], "GPS: (%f%s, %f%s)", latitude, deg_glyph, longitude, deg_glyph); //save to event history string - if (state->event_history_s[slot].Event_History_Items[0].source_id == src) - sprintf (state->event_history_s[slot].Event_History_Items[0].gps_s, "%s", state->dmr_embedded_gps[slot]); + sprintf (state->event_history_s[slot].Event_History_Items[0].gps_s, "(%f%s, %f%s)", latitude, deg_glyph, longitude, deg_glyph); //save to LRRP report for mapping/logging FILE * pFile; //file pointer