code cleanup; properly apply RCCH post field after scrambler;

pull/12/head
Bryan Biedenkapp 4 years ago
parent 0d331ecb78
commit e4d135849a

@ -77,6 +77,8 @@ namespace nxdn
const uint8_t NXDN_FSW_BYTES_MASK[] = { 0xFFU, 0xFFU, 0xF0U }; const uint8_t NXDN_FSW_BYTES_MASK[] = { 0xFFU, 0xFFU, 0xF0U };
const uint32_t NXDN_FSW_BYTES_LENGTH = 3U; 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_BITS = 16U;
const uint32_t NXDN_LICH_LENGTH_BYTES = NXDN_LICH_LENGTH_BITS / 8U; 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_LONG_LENGTH_BITS = 128U;
const uint32_t NXDN_RCCH_CAC_LC_SHORT_LENGTH_BITS = 96U; 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_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; const uint32_t NXDN_FSW_LICH_SACCH_LENGTH_BYTES = NXDN_FSW_LICH_SACCH_LENGTH_BITS / 8U;

@ -339,15 +339,8 @@ void CAC::encode(uint8_t* data) const
WRITE_BIT(data, n, b); 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 #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 #endif
} }

@ -410,6 +410,8 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite)
m_nxdn->scrambler(data + 2U); m_nxdn->scrambler(data + 2U);
addPostBits(data + 2U);
if (!noNetwork) if (!noNetwork)
writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@ -706,7 +708,7 @@ void Trunk::writeRF_CC_Message_Site_Info()
channel::CAC cac; channel::CAC cac;
cac.setVerbose(m_dumpRCCH); cac.setVerbose(m_dumpRCCH);
cac.setRAN(m_nxdn->m_ran); cac.setRAN(m_nxdn->m_ran);
cac.setStructure(NXDN_SR_RCCH_HEAD_SINGLE); cac.setStructure(NXDN_SR_RCCH_SINGLE);
cac.setData(buffer); cac.setData(buffer);
cac.encode(data + 2U); cac.encode(data + 2U);
@ -715,6 +717,8 @@ void Trunk::writeRF_CC_Message_Site_Info()
m_nxdn->scrambler(data + 2U); m_nxdn->scrambler(data + 2U);
addPostBits(data + 2U);
if (m_nxdn->m_duplex) { if (m_nxdn->m_duplex) {
m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U); 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); m_nxdn->scrambler(data + 2U);
addPostBits(data + 2U);
if (m_nxdn->m_duplex) { if (m_nxdn->m_duplex) {
m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U); m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U);
} }
} }
/// <summary>
/// Helper to add the post field bits on NXDN frame data.
/// </summary>
/// <param name="data"></param>
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);
}
}

@ -118,6 +118,9 @@ namespace nxdn
void writeRF_CC_Message_Site_Info(); void writeRF_CC_Message_Site_Info();
/// <summary>Helper to write a CC SRV_INFO broadcast packet on the RF interface.</summary> /// <summary>Helper to write a CC SRV_INFO broadcast packet on the RF interface.</summary>
void writeRF_CC_Message_Service_Info(); void writeRF_CC_Message_Service_Info();
/// <summary>Helper to add the post field bits on NXDN frame data.</summary>
void addPostBits(uint8_t* data);
}; };
} // namespace packet } // namespace packet
} // namespace nxdn } // namespace nxdn

Loading…
Cancel
Save

Powered by TurnKey Linux.