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