diff --git a/p25/dfsi/LC.cpp b/p25/dfsi/LC.cpp index 76a886bd..5e49e7c8 100644 --- a/p25/dfsi/LC.cpp +++ b/p25/dfsi/LC.cpp @@ -280,6 +280,8 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe) m_control.setEmergency((serviceOptions & 0x80U) == 0x80U); m_control.setEncrypted((serviceOptions & 0x40U) == 0x40U); m_control.setPriority((serviceOptions & 0x07U)); + LogMessage(LOG_NET, "dfsi::LC::decodeLDU1, raw control service, options = %02X, emerg = %u, encrypt = %u, prio = %u", + serviceOptions, m_control.getEmergency(), m_control.getEncrypted(), m_control.getPriority()); ::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE } break; diff --git a/p25/dfsi/packet/DFSITrunk.cpp b/p25/dfsi/packet/DFSITrunk.cpp index a0a3b555..0f7ccc6b 100644 --- a/p25/dfsi/packet/DFSITrunk.cpp +++ b/p25/dfsi/packet/DFSITrunk.cpp @@ -48,7 +48,7 @@ using namespace p25::dfsi::packet; /// Length of data frame. /// Pre-decoded TSBK. /// -bool DFSITrunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) +bool DFSITrunk::process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK) { assert(data != nullptr); @@ -59,11 +59,11 @@ bool DFSITrunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) return false; if (preDecodedTSBK != nullptr) { - return Trunk::process(data + 2U, len, preDecodedTSBK); + return Trunk::process(data + 2U, len, std::move(preDecodedTSBK)); } else { if (m_rfDFSILC.decodeTSBK(data + 2U)) { - return Trunk::process(tsbk, P25_TSBK_LENGTH_BYTES, m_rfDFSILC.tsbk()); + return Trunk::process(tsbk, P25_TSBK_LENGTH_BYTES, std::unique_ptr(m_rfDFSILC.tsbk())); } } diff --git a/p25/dfsi/packet/DFSITrunk.h b/p25/dfsi/packet/DFSITrunk.h index 075ecb34..696472ef 100644 --- a/p25/dfsi/packet/DFSITrunk.h +++ b/p25/dfsi/packet/DFSITrunk.h @@ -53,7 +53,7 @@ namespace p25 class HOST_SW_API DFSITrunk : public p25::packet::Trunk { public: /// Process a data frame from the RF interface. - virtual bool process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK = NULL); + virtual bool process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK = nullptr); protected: LC m_rfDFSILC; diff --git a/p25/packet/Trunk.cpp b/p25/packet/Trunk.cpp index 7df44fb8..b284f46e 100644 --- a/p25/packet/Trunk.cpp +++ b/p25/packet/Trunk.cpp @@ -152,7 +152,7 @@ const uint8_t CONV_FALLBACK_PACKET_DELAY = 8U; /// Length of data frame. /// Pre-decoded TSBK. /// -bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) +bool Trunk::process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK) { assert(data != nullptr); @@ -191,7 +191,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) return false; } } else { - tsbk = std::unique_ptr(preDecodedTSBK); + tsbk = std::move(preDecodedTSBK); } uint32_t srcId = tsbk->getSrcId(); @@ -907,12 +907,14 @@ bool Trunk::processMBT(DataHeader dataHeader, DataBlock* blocks) uint8_t data[1U]; ::memset(data, 0x00U, 1U); + bool ret = false; + std::unique_ptr ambt = TSBKFactory::createAMBT(dataHeader, blocks); if (ambt != nullptr) { - return process(data, 1U, ambt.get()); - } else { - return false; + ret = process(data, 1U, std::move(ambt)); } + + return ret; } /// diff --git a/p25/packet/Trunk.h b/p25/packet/Trunk.h index c7bb9ec3..af7d3d29 100644 --- a/p25/packet/Trunk.h +++ b/p25/packet/Trunk.h @@ -64,7 +64,7 @@ namespace p25 class HOST_SW_API Trunk { public: /// Process a data frame from the RF interface. - virtual bool process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK = nullptr); + virtual bool process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK = nullptr); /// Process a data frame from the network. virtual bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid); diff --git a/p25/packet/Voice.cpp b/p25/packet/Voice.cpp index 4a9c3c57..5ddd51e9 100644 --- a/p25/packet/Voice.cpp +++ b/p25/packet/Voice.cpp @@ -1120,6 +1120,9 @@ void Voice::writeNet_LDU1() m_p25->m_affiliations.touchGrant(m_rfLC.getDstId()); } + LogMessage(LOG_NET, P25_LDU1_STR " raw control service, emerg = %u, encrypt = %u, prio = %u", + control.getEmergency(), control.getEncrypted(), control.getPriority()); + // set network and RF link control states m_netLC = lc::LC(); m_netLC.setLCO(control.getLCO());