diff --git a/src/dmr/lc/csbk/CSBK_MAINT.cpp b/src/dmr/lc/csbk/CSBK_MAINT.cpp index 042323cc..51acee38 100644 --- a/src/dmr/lc/csbk/CSBK_MAINT.cpp +++ b/src/dmr/lc/csbk/CSBK_MAINT.cpp @@ -42,7 +42,8 @@ using namespace dmr; /// /// Initializes a new instance of the CSBK_MAINT class. /// -CSBK_MAINT::CSBK_MAINT() : CSBK() +CSBK_MAINT::CSBK_MAINT() : CSBK(), + m_maintKind(0U) { m_CSBKO = CSBKO_MAINT; } @@ -65,6 +66,7 @@ bool CSBK_MAINT::decode(const uint8_t* data) ulong64_t csbkValue = CSBK::toValue(csbk); + m_maintKind = (uint8_t)(((csbkValue >> 48) & 0xFFU) >> 1); // Maintainence Kind m_dstId = (uint32_t)((csbkValue >> 24) & 0xFFFFU); // Target Radio Address m_srcId = (uint32_t)(csbkValue & 0xFFFFFFU); // Source Radio Address @@ -81,6 +83,7 @@ void CSBK_MAINT::encode(uint8_t* data) ulong64_t csbkValue = 0U; + csbkValue = (csbkValue << 3) + (m_maintKind & 0x07U); // Maintainence Kind csbkValue = (csbkValue << 25) + m_dstId; // Target Radio Address csbkValue = (csbkValue << 24) + m_srcId; // Source Radio Address @@ -96,3 +99,18 @@ std::string CSBK_MAINT::toString() { return std::string("CSBKO_MAINT (Call Maintainence)"); } + +// --------------------------------------------------------------------------- +// Private Class Members +// --------------------------------------------------------------------------- + +/// +/// Internal helper to copy the the class. +/// +/// +void CSBK_MAINT::copy(const CSBK_MAINT& data) +{ + CSBK::copy(data); + + m_maintKind = data.m_maintKind; +} diff --git a/src/dmr/lc/csbk/CSBK_MAINT.h b/src/dmr/lc/csbk/CSBK_MAINT.h index ac1fb9ff..6184f9bd 100644 --- a/src/dmr/lc/csbk/CSBK_MAINT.h +++ b/src/dmr/lc/csbk/CSBK_MAINT.h @@ -52,6 +52,12 @@ namespace dmr /// Returns a string that represents the current CSBK. virtual std::string toString() override; + + public: + /// Maintainence Kind. + __PROPERTY(uint8_t, maintKind, MaintKind); + + __COPY(CSBK_MAINT); }; } // namespace csbk } // namespace lc diff --git a/src/dmr/packet/ControlSignaling.cpp b/src/dmr/packet/ControlSignaling.cpp index 5a84735c..50a69815 100644 --- a/src/dmr/packet/ControlSignaling.cpp +++ b/src/dmr/packet/ControlSignaling.cpp @@ -351,6 +351,15 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len) VERBOSE_LOG_CSBK(csbk->toString(), srcId, dstId); } break; + case CSBKO_MAINT: + { + CSBK_MAINT* isp = static_cast(csbk.get()); + if (m_verbose) { + LogMessage(LOG_RF, "DMR Slot %u, DT_CSBK, %s, kind = $%02X, srcId = %u", + m_slot->m_slotNo, csbk->toString().c_str(), isp->getMaintKind(), srcId); + } + } + break; case CSBKO_PRECCSBK: { if (m_verbose) {