From e4d135849aac21d4def990ee37c780b2a752b843 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 12 Aug 2022 23:27:14 -0400 Subject: [PATCH] code cleanup; properly apply RCCH post field after scrambler; --- nxdn/NXDNDefines.h | 4 ++-- nxdn/channel/CAC.cpp | 9 +-------- nxdn/packet/Trunk.cpp | 24 +++++++++++++++++++++++- nxdn/packet/Trunk.h | 3 +++ 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/nxdn/NXDNDefines.h b/nxdn/NXDNDefines.h index d0bb0032..d7b03b41 100644 --- a/nxdn/NXDNDefines.h +++ b/nxdn/NXDNDefines.h @@ -77,6 +77,8 @@ namespace nxdn const uint8_t NXDN_FSW_BYTES_MASK[] = { 0xFFU, 0xFFU, 0xF0U }; const uint32_t NXDN_FSW_BYTES_LENGTH = 3U; + const uint8_t NXDN_PREAMBLE[] = { 0x57U, 0x75U, 0xFDU }; + const uint32_t NXDN_LICH_LENGTH_BITS = 16U; const uint32_t NXDN_LICH_LENGTH_BYTES = NXDN_LICH_LENGTH_BITS / 8U; @@ -130,8 +132,6 @@ namespace nxdn const uint32_t NXDN_RCCH_CAC_LC_LONG_LENGTH_BITS = 128U; const uint32_t NXDN_RCCH_CAC_LC_SHORT_LENGTH_BITS = 96U; - const uint8_t POST_FIELD[] = { 0x57U, 0x75U, 0xFDU }; - const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BITS = NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS; const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BYTES = NXDN_FSW_LICH_SACCH_LENGTH_BITS / 8U; diff --git a/nxdn/channel/CAC.cpp b/nxdn/channel/CAC.cpp index f1f3f2be..a7e3467c 100644 --- a/nxdn/channel/CAC.cpp +++ b/nxdn/channel/CAC.cpp @@ -339,15 +339,8 @@ void CAC::encode(uint8_t* data) const WRITE_BIT(data, n, b); } - // post field - for (uint32_t i = 0U; i < NXDN_CAC_E_POST_FIELD_BITS; i++) { - uint32_t n = i + NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_CAC_FEC_LENGTH_BITS + NXDN_CAC_E_POST_FIELD_BITS; - bool b = READ_BIT(POST_FIELD, i); - WRITE_BIT(data, n, b); - } - #if DEBUG_NXDN_CAC - Utils::dump(2U, "CAC::encode(), CAC + E + Post", data, NXDN_FRAME_LENGTH_BYTES); + Utils::dump(2U, "CAC::encode(), CAC + Control", data, NXDN_FRAME_LENGTH_BYTES); #endif } diff --git a/nxdn/packet/Trunk.cpp b/nxdn/packet/Trunk.cpp index 877d944c..d62175ba 100644 --- a/nxdn/packet/Trunk.cpp +++ b/nxdn/packet/Trunk.cpp @@ -410,6 +410,8 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite) m_nxdn->scrambler(data + 2U); + addPostBits(data + 2U); + if (!noNetwork) writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); @@ -706,7 +708,7 @@ void Trunk::writeRF_CC_Message_Site_Info() channel::CAC cac; cac.setVerbose(m_dumpRCCH); cac.setRAN(m_nxdn->m_ran); - cac.setStructure(NXDN_SR_RCCH_HEAD_SINGLE); + cac.setStructure(NXDN_SR_RCCH_SINGLE); cac.setData(buffer); cac.encode(data + 2U); @@ -715,6 +717,8 @@ void Trunk::writeRF_CC_Message_Site_Info() m_nxdn->scrambler(data + 2U); + addPostBits(data + 2U); + if (m_nxdn->m_duplex) { m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U); } @@ -762,7 +766,25 @@ void Trunk::writeRF_CC_Message_Service_Info() m_nxdn->scrambler(data + 2U); + addPostBits(data + 2U); + if (m_nxdn->m_duplex) { m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U); } } + +/// +/// Helper to add the post field bits on NXDN frame data. +/// +/// +void Trunk::addPostBits(uint8_t* data) +{ + assert(data != NULL); + + // post field + for (uint32_t i = 0U; i < NXDN_CAC_E_POST_FIELD_BITS; i++) { + uint32_t n = i + NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_CAC_FEC_LENGTH_BITS + NXDN_CAC_E_POST_FIELD_BITS; + bool b = READ_BIT(NXDN_PREAMBLE, i); + WRITE_BIT(data, n, b); + } +} diff --git a/nxdn/packet/Trunk.h b/nxdn/packet/Trunk.h index 9da7ddd4..6d01cbc2 100644 --- a/nxdn/packet/Trunk.h +++ b/nxdn/packet/Trunk.h @@ -118,6 +118,9 @@ namespace nxdn void writeRF_CC_Message_Site_Info(); /// Helper to write a CC SRV_INFO broadcast packet on the RF interface. void writeRF_CC_Message_Service_Info(); + + /// Helper to add the post field bits on NXDN frame data. + void addPostBits(uint8_t* data); }; } // namespace packet } // namespace nxdn