reduce number of P_GRANTs; ensure late entry is properly transmitting;

3.56-maint
Bryan Biedenkapp 2 years ago
parent d76bb77966
commit 9da279ac88

@ -1371,12 +1371,13 @@ void Slot::writeRF_ControlData(uint16_t frameCnt, uint8_t n)
if (j == m_lastLateEntry) { if (j == m_lastLateEntry) {
uint32_t dstId = entry.first; uint32_t dstId = entry.first;
uint32_t srcId = m_affiliations->getGrantedSrcId(dstId); uint32_t srcId = m_affiliations->getGrantedSrcId(dstId);
bool grp = m_affiliations->isGroup(dstId);
if (m_debug) { if (m_debug) {
LogDebug(LOG_DMR, "writeRF_ControlData, frameCnt = %u, seq = %u, late entry, dstId = %u, srcId = %u", frameCnt, n, dstId, srcId); 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++; m_lastLateEntry = j++;
break; break;
} }

@ -1323,21 +1323,34 @@ void ControlSignaling::writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOpt
/// </summary> /// </summary>
/// <param name="dstId"></param> /// <param name="dstId"></param>
/// <param name="srcId"></param> /// <param name="srcId"></param>
void ControlSignaling::writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId) /// <param name="grp"></param>
void ControlSignaling::writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId, bool grp)
{ {
Slot *m_tscc = m_slot->m_dmr->getTSCCSlot(); Slot *m_tscc = m_slot->m_dmr->getTSCCSlot();
uint32_t chNo = m_tscc->m_affiliations->getGrantedCh(dstId); uint32_t chNo = m_tscc->m_affiliations->getGrantedCh(dstId);
uint8_t slot = m_tscc->m_affiliations->getGrantedSlot(dstId); uint8_t slot = m_tscc->m_affiliations->getGrantedSlot(dstId);
std::unique_ptr<CSBK_TV_GRANT> csbk = new_unique(CSBK_TV_GRANT); if (grp) {
csbk->setLogicalCh1(chNo); std::unique_ptr<CSBK_TV_GRANT> csbk = new_unique(CSBK_TV_GRANT);
csbk->setSlotNo(slot); csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot);
csbk->setSrcId(srcId); csbk->setSrcId(srcId);
csbk->setDstId(dstId); csbk->setDstId(dstId);
writeRF_CSBK(csbk.get()); writeRF_CSBK(csbk.get());
}
else {
std::unique_ptr<CSBK_PV_GRANT> csbk = new_unique(CSBK_PV_GRANT);
csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot);
csbk->setSrcId(srcId);
csbk->setDstId(dstId);
writeRF_CSBK(csbk.get());
}
} }
/// <summary> /// <summary>
@ -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); 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); writeRF_CSBK(csbk.get(), false, true);
for (int i = 0; i < 3; i++) writeRF_CSBK(csbk.get());
writeRF_CSBK(csbk.get());
} }
} }

@ -110,7 +110,7 @@ namespace dmr
void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions); void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions);
/// <summary>Helper to write a TSCC late entry channel grant packet on the RF interface.</summary> /// <summary>Helper to write a TSCC late entry channel grant packet on the RF interface.</summary>
void writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId); void writeRF_CSBK_Grant_LateEntry(uint32_t dstId, uint32_t srcId, bool grp);
/// <summary>Helper to write a payload random access to a TSCC payload channel on the RF interface.</summary> /// <summary>Helper to write a payload random access to a TSCC payload channel on the RF interface.</summary>
void writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t srcId, bool grp, bool voice); void writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t srcId, bool grp, bool voice);

Loading…
Cancel
Save

Powered by TurnKey Linux.