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