From 22803a857e77f79cf3d534c8e09e877e4bacfde0 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Sat, 15 Jun 2024 13:33:10 -0400 Subject: [PATCH] update fw/hotspot and fw/modem to latest master; fix issue where block alignment would be lost for P25 PDUs if individual blocks failed to decode; --- src/fw/hotspot | 2 +- src/fw/modem | 2 +- src/host/p25/packet/Data.cpp | 20 ++++++++++++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/fw/hotspot b/src/fw/hotspot index 88224479..07ec4612 160000 --- a/src/fw/hotspot +++ b/src/fw/hotspot @@ -1 +1 @@ -Subproject commit 882244795b9bec1f2c86d596d4ab4ecd4346c8b9 +Subproject commit 07ec4612fc6e7c018b77a880c59154bd88e80492 diff --git a/src/fw/modem b/src/fw/modem index 98d3bb1c..93a59264 160000 --- a/src/fw/modem +++ b/src/fw/modem @@ -1 +1 @@ -Subproject commit 98d3bb1cd9bd1bdfa8d723c15f8847841739e9ca +Subproject commit 93a59264ff2e8515d11aa259577ee106287fd51d diff --git a/src/host/p25/packet/Data.cpp b/src/host/p25/packet/Data.cpp index 5925331e..5dcd299a 100644 --- a/src/host/p25/packet/Data.cpp +++ b/src/host/p25/packet/Data.cpp @@ -303,11 +303,27 @@ bool Data::process(uint8_t* data, uint32_t len) } } else { - if (m_rfData[i].getFormat() == PDU_FMT_CONFIRMED) + if (m_rfData[i].getFormat() == PDU_FMT_CONFIRMED) { LogWarning(LOG_RF, P25_PDU_STR ", unfixable PDU data (3/4 rate or CRC), block %u", i); - else + + // to prevent data block offset errors fill the bad block with 0's + uint8_t blankBuf[P25_PDU_CONFIRMED_DATA_LENGTH_BYTES]; + ::memset(blankBuf, 0x00U, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES); + ::memcpy(m_pduUserData + dataOffset, blankBuf, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES); + dataOffset += P25_PDU_CONFIRMED_DATA_LENGTH_BYTES; + m_pduUserDataLength = dataOffset; + } + else { LogWarning(LOG_RF, P25_PDU_STR ", unfixable PDU data (1/2 rate or CRC), block %u", i); + // to prevent data block offset errors fill the bad block with 0's + uint8_t blankBuf[P25_PDU_UNCONFIRMED_LENGTH_BYTES]; + ::memset(blankBuf, 0x00U, P25_PDU_UNCONFIRMED_LENGTH_BYTES); + ::memcpy(m_pduUserData + dataOffset, blankBuf, P25_PDU_UNCONFIRMED_LENGTH_BYTES); + dataOffset += P25_PDU_UNCONFIRMED_LENGTH_BYTES; + m_pduUserDataLength = dataOffset; + } + if (m_dumpPDUData) { Utils::dump(1U, "Unfixable PDU Data", buffer, P25_PDU_FEC_LENGTH_BYTES); }