From e79663687c8fb7ee873183613a5e0e4c1b42ed4d Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 12 Aug 2022 20:19:40 -0400 Subject: [PATCH] fix issue where messageType on RTCH was not being set properly; cleanup and properly comment code; use appropriate SACCH and FACCH1 for Tx_REL; --- nxdn/Control.cpp | 28 ++++++++++++++++++++-------- nxdn/lc/RTCH.cpp | 2 +- nxdn/packet/Trunk.cpp | 9 ++++++++- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/nxdn/Control.cpp b/nxdn/Control.cpp index 412e250f..2fd88cad 100644 --- a/nxdn/Control.cpp +++ b/nxdn/Control.cpp @@ -32,7 +32,8 @@ #include "nxdn/NXDNDefines.h" #include "nxdn/Control.h" #include "nxdn/acl/AccessControl.h" -#include "nxdn/channel/UDCH.h" +#include "nxdn/channel/SACCH.h" +#include "nxdn/channel/FACCH1.h" #include "nxdn/lc/RTCH.h" #include "nxdn/Sync.h" #include "edac/AMBEFEC.h" @@ -467,6 +468,8 @@ void Control::clock(uint32_t ms) } if (m_ccPrevRunning && !m_ccRunning) { + m_queue.clear(); + m_ccPacketInterval.stop(); m_ccPrevRunning = m_ccRunning; } } @@ -705,10 +708,11 @@ void Control::writeRF_Message_Tx_Rel(bool noNetwork) Sync::addNXDNSync(data + 2U); + // generate the LICH channel::LICH lich; - lich.setRFCT(NXDN_LICH_RFCT_RDCH); - lich.setFCT(NXDN_LICH_USC_UDCH); - lich.setOption(NXDN_LICH_USC_UDCH); + lich.setRFCT(NXDN_LICH_RFCT_RTCH); + lich.setFCT(NXDN_LICH_USC_SACCH_NS); + lich.setOption(NXDN_LICH_STEAL_FACCH); lich.setOutbound(true); lich.encode(data + 2U); @@ -718,10 +722,18 @@ void Control::writeRF_Message_Tx_Rel(bool noNetwork) m_rfLC.setMessageType(RTCH_MESSAGE_TYPE_TX_REL); m_rfLC.encode(buffer, NXDN_UDCH_LENGTH_BITS); - channel::UDCH udch; - udch.setRAN(m_ran); - udch.setData(buffer); - udch.encode(data + 2U); + // generate the SACCH + channel::SACCH sacch; + sacch.setData(SACCH_IDLE); + sacch.setRAN(m_ran); + sacch.setStructure(NXDN_SR_SINGLE); + sacch.encode(data + 2U); + + // generate the FACCH1 + channel::FACCH1 facch; + facch.setData(buffer); + facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS); + facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS); data[0U] = modem::TAG_DATA; data[1U] = 0x00U; diff --git a/nxdn/lc/RTCH.cpp b/nxdn/lc/RTCH.cpp index 62f7ad3e..065ed4fd 100644 --- a/nxdn/lc/RTCH.cpp +++ b/nxdn/lc/RTCH.cpp @@ -359,7 +359,7 @@ bool RTCH::decodeLC(const uint8_t* data) /// void RTCH::encodeLC(uint8_t* data) { - m_messageType = m_data[0U] & 0x3FU; // Message Type + m_data[0U] = m_messageType & 0x3FU; // Message Type // message type opcodes switch (m_messageType) { diff --git a/nxdn/packet/Trunk.cpp b/nxdn/packet/Trunk.cpp index b9f0db0f..948c12fa 100644 --- a/nxdn/packet/Trunk.cpp +++ b/nxdn/packet/Trunk.cpp @@ -384,10 +384,11 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite) Sync::addNXDNSync(data + 2U); + // generate the LICH channel::LICH lich; lich.setRFCT(NXDN_LICH_RFCT_RCCH); lich.setFCT(NXDN_LICH_CAC_OUTBOUND); - lich.setOption(NXDN_LICH_DATA_NORMAL); + lich.setOption(NXDN_LICH_DATA_COMMON); lich.setOutbound(true); lich.encode(data + 2U); @@ -396,9 +397,11 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite) m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS); + // generate the CAC channel::CAC cac; cac.setVerbose(m_dumpRCCH); cac.setRAN(m_nxdn->m_ran); + cac.setStructure(NXDN_SR_RCCH_SINGLE); cac.setData(buffer); cac.encode(data + 2U); @@ -685,6 +688,7 @@ void Trunk::writeRF_CC_Message_Site_Info() Sync::addNXDNSync(data + 2U); + // generate the LICH channel::LICH lich; lich.setRFCT(NXDN_LICH_RFCT_RCCH); lich.setFCT(NXDN_LICH_CAC_OUTBOUND); @@ -698,6 +702,7 @@ void Trunk::writeRF_CC_Message_Site_Info() m_rfLC.setMessageType(RCCH_MESSAGE_TYPE_SITE_INFO); m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS); + // generate the CAC channel::CAC cac; cac.setVerbose(m_dumpRCCH); cac.setRAN(m_nxdn->m_ran); @@ -729,6 +734,7 @@ void Trunk::writeRF_CC_Message_Service_Info() Sync::addNXDNSync(data + 2U); + // generate the LICH channel::LICH lich; lich.setRFCT(NXDN_LICH_RFCT_RCCH); lich.setFCT(NXDN_LICH_CAC_OUTBOUND); @@ -742,6 +748,7 @@ void Trunk::writeRF_CC_Message_Service_Info() m_rfLC.setMessageType(MESSAGE_TYPE_SRV_INFO); m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS); + // generate the CAC channel::CAC cac; cac.setVerbose(m_dumpRCCH); cac.setRAN(m_nxdn->m_ran);