From ab5c056111332094a031c3eb8b2a6567e8f9bf32 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Thu, 24 Feb 2022 11:53:38 -0500 Subject: [PATCH] more AMBT handling, AMBT doesn't utilize these fields so we will zero them; --- p25/data/DataHeader.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/p25/data/DataHeader.cpp b/p25/data/DataHeader.cpp index 30e13d4a..1f9f25c3 100644 --- a/p25/data/DataHeader.cpp +++ b/p25/data/DataHeader.cpp @@ -121,12 +121,21 @@ bool DataHeader::decode(const uint8_t* data) m_dataOctets = 12 * m_blocksToFollow - 4 - m_padCount; } - m_sync = (header[8U] & 0x80U) == 0x80U; // Re-synchronize Flag + if (m_fmt == PDU_FMT_AMBT) { + m_sync = false; - m_n = (header[8U] >> 4) & 0x07U; // Packet Sequence No. - m_seqNo = header[8U] & 0x0FU; // Fragment Sequence No. + m_n = 0U; + m_seqNo = 0U; + m_headerOffset = 0U; + } + else { + m_sync = (header[8U] & 0x80U) == 0x80U; // Re-synchronize Flag - m_headerOffset = header[9U] & 0x3FU; // Data Header Offset + m_n = (header[8U] >> 4) & 0x07U; // Packet Sequence No. + m_seqNo = header[8U] & 0x0FU; // Fragment Sequence No. + + m_headerOffset = header[9U] & 0x3FU; // Data Header Offset + } return true; } @@ -163,13 +172,13 @@ void DataHeader::encode(uint8_t* data) } else { header[7U] = (m_padCount & 0x1FU); // Pad Count - } - header[8U] = (m_sync ? 0x80U : 0x00U) + // Re-synchronize Flag - ((m_n << 4) && 0x07U) + // Packet Sequence No. - (m_seqNo & 0x0F); // Fragment Sequence No. + header[8U] = (m_sync ? 0x80U : 0x00U) + // Re-synchronize Flag + ((m_n << 4) && 0x07U) + // Packet Sequence No. + (m_seqNo & 0x0F); // Fragment Sequence No. - header[9U] = m_headerOffset & 0x3FU; // Data Header Offset + header[9U] = m_headerOffset & 0x3FU; // Data Header Offset + } // compute CRC-CCITT 16 edac::CRC::addCCITT162(header, P25_PDU_HEADER_LENGTH_BYTES);