From 5f0df4d943e54b0aff95812c11eeecd095aef8d4 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Tue, 7 Mar 2023 17:21:11 -0500 Subject: [PATCH] some corrections for NXDN CC; --- edac/CRC.cpp | 5 +++-- edac/CRC.h | 4 ++-- nxdn/channel/CAC.cpp | 9 +++------ nxdn/packet/Trunk.cpp | 4 ++-- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/edac/CRC.cpp b/edac/CRC.cpp index e0acf7ff..6883052d 100644 --- a/edac/CRC.cpp +++ b/edac/CRC.cpp @@ -690,8 +690,9 @@ bool CRC::checkCRC16(const uint8_t* in, uint32_t bitLength) /// /// Input byte array. /// Length of byte array in bits. +/// Offset in bits to write CRC. /// 16-bit CRC. -uint16_t CRC::addCRC16(uint8_t* in, uint32_t bitLength) +uint16_t CRC::addCRC16(uint8_t* in, uint32_t bitLength, uint32_t offset) { assert(in != nullptr); @@ -704,7 +705,7 @@ uint16_t CRC::addCRC16(uint8_t* in, uint32_t bitLength) uint32_t n = bitLength; for (uint32_t i = 0U; i < 16U; i++, n++) { bool b = READ_BIT(temp, i); - WRITE_BIT(in, n, b); + WRITE_BIT(in, n + offset, b); } #if DEBUG_CRC diff --git a/edac/CRC.h b/edac/CRC.h index a15a0d75..2c598f24 100644 --- a/edac/CRC.h +++ b/edac/CRC.h @@ -85,8 +85,8 @@ namespace edac /// Check 16-bit CRC-CCITT. static bool checkCRC16(const uint8_t* in, uint32_t bitLength); - /// Encode 15-bit CRC. - static uint16_t addCRC16(uint8_t* in, uint32_t bitLength); + /// Encode 16-bit CRC. + static uint16_t addCRC16(uint8_t* in, uint32_t bitLength, uint32_t offset = 0); private: /// diff --git a/nxdn/channel/CAC.cpp b/nxdn/channel/CAC.cpp index 807d27eb..ea8fd348 100644 --- a/nxdn/channel/CAC.cpp +++ b/nxdn/channel/CAC.cpp @@ -261,11 +261,8 @@ void CAC::encode(uint8_t* data) const { assert(data != nullptr); - m_data[0U] &= 0xC0U; - m_data[0U] |= m_ran; - - m_data[0U] &= 0x3FU; - m_data[0U] |= (m_structure << 6) & 0xC0U; + m_data[0U] = m_ran; + m_data[0U] |= ((m_structure << 6) & 0xC0U); uint8_t buffer[NXDN_CAC_FEC_LENGTH_BYTES]; ::memset(buffer, 0x00U, NXDN_CAC_FEC_LENGTH_BYTES); @@ -275,7 +272,7 @@ void CAC::encode(uint8_t* data) const WRITE_BIT(buffer, i, b); } - uint16_t crc = CRC::addCRC16(buffer, NXDN_CAC_LENGTH_BITS); + uint16_t crc = CRC::addCRC16(buffer, NXDN_CAC_LENGTH_BITS, 5U); #if DEBUG_NXDN_CAC Utils::dump(2U, "Encoded CAC", buffer, NXDN_CAC_FEC_LENGTH_BYTES); diff --git a/nxdn/packet/Trunk.cpp b/nxdn/packet/Trunk.cpp index dc12b020..e89f2e8e 100644 --- a/nxdn/packet/Trunk.cpp +++ b/nxdn/packet/Trunk.cpp @@ -758,12 +758,12 @@ void Trunk::writeRF_CC_Message_Service_Info() std::unique_ptr rcch = new_unique(rcch::MESSAGE_TYPE_SRV_INFO); rcch->encode(buffer, NXDN_RCCH_LC_LENGTH_BITS / 2U); - rcch->encode(buffer, NXDN_RCCH_LC_LENGTH_BITS / 2U, NXDN_RCCH_LC_LENGTH_BITS / 2U); + //rcch->encode(buffer, NXDN_RCCH_LC_LENGTH_BITS / 2U, NXDN_RCCH_LC_LENGTH_BITS / 2U); // generate the CAC channel::CAC cac; cac.setRAN(m_nxdn->m_ran); - cac.setStructure(NXDN_SR_RCCH_DUAL); + cac.setStructure(NXDN_SR_RCCH_SINGLE); cac.setData(buffer); cac.encode(data + 2U);