fix issue with DMR site information calculations; correct slot number (range for packets is 0 - 1, not 1 - 2); fix missing clock call to the DMR affiliations class;

pull/24/head
Bryan Biedenkapp 3 years ago
parent a2a96d53af
commit 907567ec33

@ -80,15 +80,15 @@ namespace dmr
break; break;
case SITE_MODEL_LARGE: case SITE_MODEL_LARGE:
{ {
if (id > 0xFFU) { // clamp to $FF if (id > 0x7FU) { // clamp to $7F
id = 0xFFU; id = 0x7FU;
} }
} }
break; break;
case SITE_MODEL_HUGE: case SITE_MODEL_HUGE:
{ {
if (id > 0x7FFU) { // clamp to $7FF if (id > 0x3FFU) { // clamp to $3FF
id = 0x7FFU; id = 0x3FFU;
} }
} }
break; break;

@ -103,32 +103,32 @@ namespace dmr
{ {
case SITE_MODEL_TINY: case SITE_MODEL_TINY:
{ {
value = (value << 9) + m_netId; value = (value << 9) + (m_netId & 0x1FFU);
value = (value << 3) + m_siteId; value = (value << 3) + (m_siteId & 0x07U);
} }
break; break;
case SITE_MODEL_SMALL: case SITE_MODEL_SMALL:
{ {
value = (value << 7) + m_netId; value = (value << 7) + (m_netId & 0x7FU);
value = (value << 5) + m_siteId; value = (value << 5) + (m_siteId & 0x1FU);
} }
break; break;
case SITE_MODEL_LARGE: case SITE_MODEL_LARGE:
{ {
value = (value << 5) + m_netId; value = (value << 5) + (m_netId & 0x1FU);
value = (value << 7) + m_siteId; value = (value << 7) + (m_siteId & 0x7FU);
} }
break; break;
case SITE_MODEL_HUGE: case SITE_MODEL_HUGE:
{ {
value = (value << 2) + m_netId; value = (value << 2) + (m_netId & 0x03U);
value = (value << 10) + m_siteId; value = (value << 10) + (m_siteId & 0x3FFU);
} }
break; break;
} }
if (!msb) { if (!msb) {
value = (value << 2) + m_parId; value = (value << 2) + (m_parId & 0x03U);
} }
return value & 0xFFFFU; return value & 0xFFFFU;

@ -416,6 +416,9 @@ void Slot::clock()
// if we have control enabled; do clocking to generate a CC data stream // if we have control enabled; do clocking to generate a CC data stream
if (m_enableTSCC) { if (m_enableTSCC) {
// clock all the grant timers
m_affiliations->clock(ms);
if (m_ccRunning && !m_ccPacketInterval.isRunning()) { if (m_ccRunning && !m_ccPacketInterval.isRunning()) {
m_ccPacketInterval.start(); m_ccPacketInterval.start();
} }
@ -1119,6 +1122,9 @@ void Slot::setShortLC_TSCC(SiteData siteData, uint16_t counter)
lc[3U] = (uint8_t)((lcValue >> 0) & 0xFFU); lc[3U] = (uint8_t)((lcValue >> 0) & 0xFFU);
lc[4U] = edac::CRC::crc8(lc, 4U); lc[4U] = edac::CRC::crc8(lc, 4U);
//LogDebug(LOG_DMR, "setShortLC_TSCC, netId = %02X, siteId = %02X", siteData.netId(), siteData.siteId());
//Utils::dump(1U, "shortLC_TSCC", lc, 5U);
uint8_t sLC[9U]; uint8_t sLC[9U];
lc::ShortLC shortLC; lc::ShortLC shortLC;

@ -411,7 +411,7 @@ bool Trellis::fixCode(uint8_t* points, uint32_t failPos, uint8_t* payload) const
uint32_t pos = checkCode(points, tribits); uint32_t pos = checkCode(points, tribits);
if (pos == 999U) { if (pos == 999U) {
#if DEBUG_TRELLIS #if DEBUG_TRELLIS
::LogDebug(LOG_HOST, "Trellis::fixCode34() fixed, failPos = %u, pos = %u, val = %01X", failPos, bestPos, bestVal); ::LogDebug(LOG_HOST, "Trellis::fixCode() fixed, failPos = %u, pos = %u, val = %01X", failPos, bestPos, bestVal);
#endif #endif
tribitsToBits(tribits, payload); tribitsToBits(tribits, payload);
return true; return true;

@ -852,7 +852,7 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
if (broadcast) if (broadcast)
csbk->setCSBKO(CSBKO_BTV_GRANT); csbk->setCSBKO(CSBKO_BTV_GRANT);
csbk->setLogicalCh1(chNo); csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot); csbk->setSlotNo(slot - 1U);
if (m_verbose) { if (m_verbose) {
LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_GRP_VOICE_CALL (Group Voice Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u", LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_GRP_VOICE_CALL (Group Voice Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
@ -888,7 +888,7 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
std::unique_ptr<CSBK_PV_GRANT> csbk = new_unique(CSBK_PV_GRANT); std::unique_ptr<CSBK_PV_GRANT> csbk = new_unique(CSBK_PV_GRANT);
csbk->setLogicalCh1(chNo); csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot); csbk->setSlotNo(slot - 1U);
if (m_verbose) { if (m_verbose) {
LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_IND_VOICE_CALL (Individual Voice Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u", LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_IND_VOICE_CALL (Individual Voice Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
@ -1020,7 +1020,7 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
std::unique_ptr<CSBK_TD_GRANT> csbk = new_unique(CSBK_TD_GRANT); std::unique_ptr<CSBK_TD_GRANT> csbk = new_unique(CSBK_TD_GRANT);
csbk->setLogicalCh1(chNo); csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot); csbk->setSlotNo(slot - 1U);
if (m_verbose) { if (m_verbose) {
LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_GRP_DATA_CALL (Group Data Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u", LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_GRP_DATA_CALL (Group Data Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",
@ -1041,7 +1041,7 @@ bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, u
std::unique_ptr<CSBK_PD_GRANT> csbk = new_unique(CSBK_PD_GRANT); std::unique_ptr<CSBK_PD_GRANT> csbk = new_unique(CSBK_PD_GRANT);
csbk->setLogicalCh1(chNo); csbk->setLogicalCh1(chNo);
csbk->setSlotNo(slot); csbk->setSlotNo(slot - 1U);
if (m_verbose) { if (m_verbose) {
LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_IND_DATA_CALL (Individual Data Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u", LogMessage((net) ? LOG_NET : LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), SVC_KIND_IND_DATA_CALL (Individual Data Call), emerg = %u, privacy = %u, broadcast = %u, prio = %u, chNo = %u, slot = %u, srcId = %u, dstId = %u",

Loading…
Cancel
Save

Powered by TurnKey Linux.