diff --git a/p25/TrunkPacket.cpp b/p25/TrunkPacket.cpp index 789ef552..a46f0bfa 100644 --- a/p25/TrunkPacket.cpp +++ b/p25/TrunkPacket.cpp @@ -768,11 +768,23 @@ bool TrunkPacket::processMBT(DataHeader dataHeader, DataBlock* blocks) bool ret = true; for (uint32_t i = 0; i < dataHeader.getBlocksToFollow(); i++) { - bool decodeRet = m_rfTSBK.decodeMBT(dataHeader, blocks[i]); + bool decodeRet = true; + + // get the raw block data + uint8_t raw[P25_PDU_UNCONFIRMED_LENGTH_BYTES]; + uint32_t len = blocks[i].getData(raw); + if (len != P25_PDU_UNCONFIRMED_LENGTH_BYTES) { + LogError(LOG_P25, "TrunkPacket::processMBT(), failed to read PDU data block"); + decodeRet = false; + } + if (decodeRet) { - process(data, 1U, true); - } else { - ret = false; + bool decodeRet = m_rfTSBK.decodeMBT(dataHeader, raw); + if (decodeRet) { + process(data, 1U, true); + } else { + ret = false; + } } } diff --git a/p25/data/DataBlock.cpp b/p25/data/DataBlock.cpp index d7da3a49..0ed986f8 100644 --- a/p25/data/DataBlock.cpp +++ b/p25/data/DataBlock.cpp @@ -61,9 +61,7 @@ DataBlock::DataBlock() : /// DataBlock::~DataBlock() { - if (m_data != NULL) { - delete[] m_data; - } + delete[] m_data; } /// diff --git a/p25/lc/TSBK.cpp b/p25/lc/TSBK.cpp index 3e36282b..abf806fe 100644 --- a/p25/lc/TSBK.cpp +++ b/p25/lc/TSBK.cpp @@ -182,16 +182,8 @@ TSBK& TSBK::operator=(const TSBK& data) /// /// /// True, if TSBK was decoded, otherwise false. -bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block) +bool TSBK::decodeMBT(const data::DataHeader dataHeader, const uint8_t* block) { - // get the raw block data - uint8_t pduBlock[P25_PDU_UNCONFIRMED_LENGTH_BYTES]; - uint32_t len = block.getData(pduBlock); - if (len != P25_PDU_UNCONFIRMED_LENGTH_BYTES) { - LogError(LOG_P25, "TSBK::decodeMBT(), failed to read PDU data block"); - return false; - } - m_lco = dataHeader.getAMBTOpcode(); // LCO m_lastBlock = true; m_mfId = dataHeader.getMFId(); // Mfg Id. @@ -202,22 +194,22 @@ bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block) // combine bytes into rs value tsbkValue = dataHeader.getAMBTField8(); tsbkValue = (tsbkValue << 8) + dataHeader.getAMBTField9(); - tsbkValue = (tsbkValue << 8) + pduBlock[0U]; - tsbkValue = (tsbkValue << 8) + pduBlock[1U]; - tsbkValue = (tsbkValue << 8) + pduBlock[2U]; - tsbkValue = (tsbkValue << 8) + pduBlock[3U]; - tsbkValue = (tsbkValue << 8) + pduBlock[4U]; - tsbkValue = (tsbkValue << 8) + pduBlock[5U]; + tsbkValue = (tsbkValue << 8) + block[0U]; + tsbkValue = (tsbkValue << 8) + block[1U]; + tsbkValue = (tsbkValue << 8) + block[2U]; + tsbkValue = (tsbkValue << 8) + block[3U]; + tsbkValue = (tsbkValue << 8) + block[4U]; + tsbkValue = (tsbkValue << 8) + block[5U]; } else { // combine bytes into rs value - tsbkValue = pduBlock[0U]; - tsbkValue = (tsbkValue << 8) + pduBlock[1U]; - tsbkValue = (tsbkValue << 8) + pduBlock[2U]; - tsbkValue = (tsbkValue << 8) + pduBlock[3U]; - tsbkValue = (tsbkValue << 8) + pduBlock[4U]; - tsbkValue = (tsbkValue << 8) + pduBlock[5U]; - tsbkValue = (tsbkValue << 8) + pduBlock[6U]; - tsbkValue = (tsbkValue << 8) + pduBlock[7U]; + tsbkValue = block[0U]; + tsbkValue = (tsbkValue << 8) + block[1U]; + tsbkValue = (tsbkValue << 8) + block[2U]; + tsbkValue = (tsbkValue << 8) + block[3U]; + tsbkValue = (tsbkValue << 8) + block[4U]; + tsbkValue = (tsbkValue << 8) + block[5U]; + tsbkValue = (tsbkValue << 8) + block[6U]; + tsbkValue = (tsbkValue << 8) + block[7U]; } // Motorola P25 vendor opcodes diff --git a/p25/lc/TSBK.h b/p25/lc/TSBK.h index 5862f7dd..20a921bd 100644 --- a/p25/lc/TSBK.h +++ b/p25/lc/TSBK.h @@ -78,7 +78,7 @@ namespace p25 TSBK& operator=(const TSBK& data); /// Decode a alternate trunking signalling block. - bool decodeMBT(const data::DataHeader dataHeader, data::DataBlock block); + bool decodeMBT(const data::DataHeader dataHeader, const uint8_t* block); /// Decode a trunking signalling block. bool decode(const uint8_t* data);