some corrections for NXDN CC;

3.0-rcon_maint
Bryan Biedenkapp 3 years ago
parent 1b6ba3e3aa
commit 5f0df4d943

@ -690,8 +690,9 @@ bool CRC::checkCRC16(const uint8_t* in, uint32_t bitLength)
/// </summary> /// </summary>
/// <param name="in">Input byte array.</param> /// <param name="in">Input byte array.</param>
/// <param name="bitLength">Length of byte array in bits.</param> /// <param name="bitLength">Length of byte array in bits.</param>
/// <param name="offset">Offset in bits to write CRC.</param>
/// <returns>16-bit CRC.</returns> /// <returns>16-bit CRC.</returns>
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); assert(in != nullptr);
@ -704,7 +705,7 @@ uint16_t CRC::addCRC16(uint8_t* in, uint32_t bitLength)
uint32_t n = bitLength; uint32_t n = bitLength;
for (uint32_t i = 0U; i < 16U; i++, n++) { for (uint32_t i = 0U; i < 16U; i++, n++) {
bool b = READ_BIT(temp, i); bool b = READ_BIT(temp, i);
WRITE_BIT(in, n, b); WRITE_BIT(in, n + offset, b);
} }
#if DEBUG_CRC #if DEBUG_CRC

@ -85,8 +85,8 @@ namespace edac
/// <summary>Check 16-bit CRC-CCITT.</summary> /// <summary>Check 16-bit CRC-CCITT.</summary>
static bool checkCRC16(const uint8_t* in, uint32_t bitLength); static bool checkCRC16(const uint8_t* in, uint32_t bitLength);
/// <summary>Encode 15-bit CRC.</summary> /// <summary>Encode 16-bit CRC.</summary>
static uint16_t addCRC16(uint8_t* in, uint32_t bitLength); static uint16_t addCRC16(uint8_t* in, uint32_t bitLength, uint32_t offset = 0);
private: private:
/// <summary></summary> /// <summary></summary>

@ -261,11 +261,8 @@ void CAC::encode(uint8_t* data) const
{ {
assert(data != nullptr); assert(data != nullptr);
m_data[0U] &= 0xC0U; m_data[0U] = m_ran;
m_data[0U] |= m_ran; m_data[0U] |= ((m_structure << 6) & 0xC0U);
m_data[0U] &= 0x3FU;
m_data[0U] |= (m_structure << 6) & 0xC0U;
uint8_t buffer[NXDN_CAC_FEC_LENGTH_BYTES]; uint8_t buffer[NXDN_CAC_FEC_LENGTH_BYTES];
::memset(buffer, 0x00U, 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); 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 #if DEBUG_NXDN_CAC
Utils::dump(2U, "Encoded CAC", buffer, NXDN_CAC_FEC_LENGTH_BYTES); Utils::dump(2U, "Encoded CAC", buffer, NXDN_CAC_FEC_LENGTH_BYTES);

@ -758,12 +758,12 @@ void Trunk::writeRF_CC_Message_Service_Info()
std::unique_ptr<rcch::MESSAGE_TYPE_SRV_INFO> rcch = new_unique(rcch::MESSAGE_TYPE_SRV_INFO); std::unique_ptr<rcch::MESSAGE_TYPE_SRV_INFO> 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);
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 // generate the CAC
channel::CAC cac; channel::CAC cac;
cac.setRAN(m_nxdn->m_ran); cac.setRAN(m_nxdn->m_ran);
cac.setStructure(NXDN_SR_RCCH_DUAL); cac.setStructure(NXDN_SR_RCCH_SINGLE);
cac.setData(buffer); cac.setData(buffer);
cac.encode(data + 2U); cac.encode(data + 2U);

Loading…
Cancel
Save

Powered by TurnKey Linux.