diff --git a/src/dmr/Slot.cpp b/src/dmr/Slot.cpp
index 1f82af18..84e2aeb1 100644
--- a/src/dmr/Slot.cpp
+++ b/src/dmr/Slot.cpp
@@ -1371,12 +1371,13 @@ void Slot::writeRF_ControlData(uint16_t frameCnt, uint8_t n)
if (j == m_lastLateEntry) {
uint32_t dstId = entry.first;
uint32_t srcId = m_affiliations->getGrantedSrcId(dstId);
+ bool grp = m_affiliations->isGroup(dstId);
if (m_debug) {
LogDebug(LOG_DMR, "writeRF_ControlData, frameCnt = %u, seq = %u, late entry, dstId = %u, srcId = %u", frameCnt, n, dstId, srcId);
}
- m_control->writeRF_CSBK_Grant_LateEntry(dstId, srcId);
+ m_control->writeRF_CSBK_Grant_LateEntry(dstId, srcId, grp);
m_lastLateEntry = j++;
break;
}
diff --git a/src/dmr/packet/ControlSignaling.cpp b/src/dmr/packet/ControlSignaling.cpp
index 6c9974b6..2b2670ad 100644
--- a/src/dmr/packet/ControlSignaling.cpp
+++ b/src/dmr/packet/ControlSignaling.cpp
@@ -1323,21 +1323,34 @@ void ControlSignaling::writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOpt
///
///
///
-void ControlSignaling::writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId)
+///
+void ControlSignaling::writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId, bool grp)
{
Slot *m_tscc = m_slot->m_dmr->getTSCCSlot();
uint32_t chNo = m_tscc->m_affiliations->getGrantedCh(dstId);
uint8_t slot = m_tscc->m_affiliations->getGrantedSlot(dstId);
- std::unique_ptr csbk = new_unique(CSBK_TV_GRANT);
- csbk->setLogicalCh1(chNo);
- csbk->setSlotNo(slot);
+ if (grp) {
+ std::unique_ptr csbk = new_unique(CSBK_TV_GRANT);
+ csbk->setLogicalCh1(chNo);
+ csbk->setSlotNo(slot);
- csbk->setSrcId(srcId);
- csbk->setDstId(dstId);
+ csbk->setSrcId(srcId);
+ csbk->setDstId(dstId);
- writeRF_CSBK(csbk.get());
+ writeRF_CSBK(csbk.get());
+ }
+ else {
+ std::unique_ptr csbk = new_unique(CSBK_PV_GRANT);
+ csbk->setLogicalCh1(chNo);
+ csbk->setSlotNo(slot);
+
+ csbk->setSrcId(srcId);
+ csbk->setDstId(dstId);
+
+ writeRF_CSBK(csbk.get());
+ }
}
///
@@ -1381,10 +1394,9 @@ void ControlSignaling::writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t sr
}
m_slot->setShortLC_Payload(m_slot->m_siteData, 1U);
- for (int i = 0; i < 3; i++) {
+ for (int i = 0; i < 2; i++) {
writeRF_CSBK(csbk.get(), false, true);
- for (int i = 0; i < 3; i++)
- writeRF_CSBK(csbk.get());
+ writeRF_CSBK(csbk.get());
}
}
diff --git a/src/dmr/packet/ControlSignaling.h b/src/dmr/packet/ControlSignaling.h
index ebc99647..4c88a353 100644
--- a/src/dmr/packet/ControlSignaling.h
+++ b/src/dmr/packet/ControlSignaling.h
@@ -110,7 +110,7 @@ namespace dmr
void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions);
/// Helper to write a TSCC late entry channel grant packet on the RF interface.
- void writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId);
+ void writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId, bool grp);
/// Helper to write a payload random access to a TSCC payload channel on the RF interface.
void writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t srcId, bool grp, bool voice);