diff --git a/p25/TrunkPacket.cpp b/p25/TrunkPacket.cpp index a7e03553..38d659cb 100644 --- a/p25/TrunkPacket.cpp +++ b/p25/TrunkPacket.cpp @@ -158,9 +158,9 @@ void TrunkPacket::resetNet() /// /// Buffer containing data frame. /// Length of data frame. -/// Flag indicating the data parameter contains raw TSBK data. +/// Flag indicating the TSBK data is pre-decoded TSBK data. /// -bool TrunkPacket::process(uint8_t* data, uint32_t len, bool blockData) +bool TrunkPacket::process(uint8_t* data, uint32_t len, bool mbtDecoded) { assert(data != NULL); @@ -168,7 +168,7 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len, bool blockData) return false; uint8_t duid = 0U; - if (!blockData) { + if (!mbtDecoded) { // Decode the NID bool valid = m_p25->m_nid.decode(data + 2U); @@ -190,17 +190,19 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len, bool blockData) m_p25->m_queue.clear(); - // special case to avoid resetting the TSBK state and handle MBTs (this is a horrible hack) - if (len > 1U && !blockData) { + if (!mbtDecoded) { resetRF(); + resetNet(); + + bool ret = m_rfTSBK.decode(data + 2U); + if (!ret) { + LogWarning(LOG_RF, P25_TSDU_STR ", undecodable LC"); + m_p25->m_rfState = prevRfState; + return false; + } } - resetNet(); - - bool ret = m_rfTSBK.decode(data + 2U); - if (!ret) { - LogWarning(LOG_RF, P25_TSDU_STR ", undecodable LC"); - m_p25->m_rfState = prevRfState; - return false; + else { + resetNet(); } uint32_t srcId = m_rfTSBK.getSrcId(); diff --git a/p25/TrunkPacket.h b/p25/TrunkPacket.h index a0062798..dd677258 100644 --- a/p25/TrunkPacket.h +++ b/p25/TrunkPacket.h @@ -63,7 +63,7 @@ namespace p25 void resetNet(); /// Process a data frame from the RF interface. - bool process(uint8_t* data, uint32_t len, bool blockData = false); + bool process(uint8_t* data, uint32_t len, bool mbtDecoded = false); /// Process a data frame from the network. bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid); diff --git a/p25/lc/TSBK.cpp b/p25/lc/TSBK.cpp index 207582bf..3e36282b 100644 --- a/p25/lc/TSBK.cpp +++ b/p25/lc/TSBK.cpp @@ -188,20 +188,10 @@ bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block) uint8_t pduBlock[P25_PDU_UNCONFIRMED_LENGTH_BYTES]; uint32_t len = block.getData(pduBlock); if (len != P25_PDU_UNCONFIRMED_LENGTH_BYTES) { - m_decodedMBT = false; - LogError(LOG_P25, "TSBK::decode(), failed to read PDU data block"); + LogError(LOG_P25, "TSBK::decodeMBT(), failed to read PDU data block"); return false; } -/* - bool ret = block.decode(pduBlock, dataHeader); - if (!ret) { - m_decodedMBT = false; - LogError(LOG_P25, "TSBK::decode(), failed to decode PDU data block"); - return false; - } -*/ - m_lco = dataHeader.getAMBTOpcode(); // LCO m_lastBlock = true; m_mfId = dataHeader.getMFId(); // Mfg Id. @@ -279,7 +269,6 @@ bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block) break; } - m_decodedMBT = true; return true; } @@ -290,11 +279,6 @@ bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block) /// True, if TSBK was decoded, otherwise false. bool TSBK::decode(const uint8_t* data) { - if (!m_decodedMBT) { - m_decodedMBT = false; - return true; - } - assert(data != NULL); // deinterleave