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) {