From 8823fc09b6521682adf580237bc84d8d58c0cbd5 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Wed, 5 Mar 2025 21:41:18 -0500 Subject: [PATCH] correct erroneous log messages; fix remote UDP mode handler (this was mishandling frames in some situations); update hotspot and modem submodules; --- src/common/p25/data/DataHeader.cpp | 2 +- src/fw/hotspot | 2 +- src/fw/modem | 2 +- src/host/Host.cpp | 26 +++++++++++++++++++---- src/host/modem/Modem.cpp | 34 +++++++++++++++--------------- 5 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/common/p25/data/DataHeader.cpp b/src/common/p25/data/DataHeader.cpp index 5baa3e09..923ded10 100644 --- a/src/common/p25/data/DataHeader.cpp +++ b/src/common/p25/data/DataHeader.cpp @@ -353,7 +353,7 @@ void DataHeader::encodeExtAddr(uint8_t* data, bool noTrellis) header[1U] = m_exSap & 0x3FU; // Service Access Point header[1U] |= 0xC0U; - header[2U] = m_mfId; // Mfg Id. + //header[2U] = m_mfId; // Mfg Id. header[3U] = (m_srcLlId >> 16) & 0xFFU; // Source Logical Link ID header[4U] = (m_srcLlId >> 8) & 0xFFU; diff --git a/src/fw/hotspot b/src/fw/hotspot index c45ec691..718093ae 160000 --- a/src/fw/hotspot +++ b/src/fw/hotspot @@ -1 +1 @@ -Subproject commit c45ec691a04741443f390354a366798db841900c +Subproject commit 718093aea3a5a6c80f7fceb1bbbc940168b8d98c diff --git a/src/fw/modem b/src/fw/modem index ca0882a6..f8358ed3 160000 --- a/src/fw/modem +++ b/src/fw/modem @@ -1 +1 @@ -Subproject commit ca0882a6de99c0dc05eac5de14a5e096c77232ff +Subproject commit f8358ed3118c28d35617dc2ba9209b2ed20e541b diff --git a/src/host/Host.cpp b/src/host/Host.cpp index 96750a5e..09d418f4 100644 --- a/src/host/Host.cpp +++ b/src/host/Host.cpp @@ -1519,6 +1519,10 @@ bool Host::rmtPortModemHandler(Modem* modem, uint32_t ms, modem::RESP_TYPE_DVM r if (modem->getTrace()) Utils::dump(1U, "TX Remote Data", buffer, len); + // never send less then 3 bytes + if (len < 3U) + return false; + // send entire modem packet over the remote port m_modemRemotePort->write(buffer, len); } @@ -1540,10 +1544,24 @@ bool Host::rmtPortModemHandler(Modem* modem, uint32_t ms, modem::RESP_TYPE_DVM r return true; } - uint8_t len = data[1U]; - int ret = modem->write(data, len); - if (ret != int(len)) - LogError(LOG_MODEM, "Error writing remote data"); + uint32_t pktLength = 0U; + switch (data[0U]) { + case DVM_SHORT_FRAME_START: + pktLength = data[1U]; + break; + case DVM_LONG_FRAME_START: + pktLength = ((data[1U] & 0xFFU) << 8) + (data[2U] & 0xFFU); + break; + default: + LogError(LOG_MODEM, "Invalid start of modem frame!"); + break; + } + + if (pktLength > 0U) { + int ret = modem->write(data, pktLength); + if (ret != int(pktLength)) + LogError(LOG_MODEM, "Error writing remote data"); + } } // handled modem response diff --git a/src/host/modem/Modem.cpp b/src/host/modem/Modem.cpp index 4e217546..b3e6d500 100644 --- a/src/host/modem/Modem.cpp +++ b/src/host/modem/Modem.cpp @@ -1381,8 +1381,8 @@ bool Modem::writeDMRFrame1(const uint8_t* data, uint32_t length) if (data[0U] != TAG_DATA && data[0U] != TAG_EOT) return false; if (length > MAX_LENGTH) { - LogError(LOG_MODEM, "Modem::writeDMRData1(); request data to write >%u?, len = %u", MAX_LENGTH, length); - Utils::dump(1U, "[Modem::writeDMRData1()] Attmpted Data", data, length); + LogError(LOG_MODEM, "Modem::writeDMRFrame1(); request data to write >%u?, len = %u", MAX_LENGTH, length); + Utils::dump(1U, "[Modem::writeDMRFrame1()] Attmpted Data", data, length); return false; } @@ -1399,9 +1399,9 @@ bool Modem::writeDMRFrame1(const uint8_t* data, uint32_t length) // write or buffer DMR slot 1 data to air interface if (m_dmrSpace1 >= length) { if (m_debug) - LogDebugEx(LOG_MODEM, "Modem::writeDMRData1()", "immediate write (len %u)", length); + LogDebugEx(LOG_MODEM, "Modem::writeDMRFrame1()", "immediate write (len %u)", length); if (m_trace) - Utils::dump(1U, "[Modem::writeDMRData1()] Immediate TX DMR Data 1", buffer + 3U, length - 1U); + Utils::dump(1U, "[Modem::writeDMRFrame1()] Immediate TX DMR Data 1", buffer + 3U, length - 1U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1435,8 +1435,8 @@ bool Modem::writeDMRFrame2(const uint8_t* data, uint32_t length) if (data[0U] != TAG_DATA && data[0U] != TAG_EOT) return false; if (length > MAX_LENGTH) { - LogError(LOG_MODEM, "Modem::writeDMRData2(); request data to write >%u?, len = %u", MAX_LENGTH, length); - Utils::dump(1U, "Modem::writeDMRData2(); Attmpted Data", data, length); + LogError(LOG_MODEM, "Modem::writeDMRFrame2(); request data to write >%u?, len = %u", MAX_LENGTH, length); + Utils::dump(1U, "Modem::writeDMRFrame2(); Attmpted Data", data, length); return false; } @@ -1453,9 +1453,9 @@ bool Modem::writeDMRFrame2(const uint8_t* data, uint32_t length) // write or buffer DMR slot 2 data to air interface if (m_dmrSpace2 >= length) { if (m_debug) - LogDebugEx(LOG_MODEM, "Modem::writeDMRData2()", "immediate write (len %u)", length); + LogDebugEx(LOG_MODEM, "Modem::writeDMRFrame2()", "immediate write (len %u)", length); if (m_trace) - Utils::dump(1U, "[Modem::writeDMRData2()] Immediate TX DMR Data 2", buffer + 3U, length - 1U); + Utils::dump(1U, "[Modem::writeDMRFrame2()] Immediate TX DMR Data 2", buffer + 3U, length - 1U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1492,8 +1492,8 @@ bool Modem::writeP25Frame(const uint8_t* data, uint32_t length) if (data[0U] != TAG_DATA && data[0U] != TAG_EOT) return false; if (length > MAX_LENGTH) { - LogError(LOG_MODEM, "Modem::writeP25Data(); request data to write >%u?, len = %u", MAX_LENGTH, length); - Utils::dump(1U, "[Modem::writeP25Data()] Attmpted Data", data, length); + LogError(LOG_MODEM, "Modem::writeP25Frame(); request data to write >%u?, len = %u", MAX_LENGTH, length); + Utils::dump(1U, "[Modem::writeP25Frame()] Attmpted Data", data, length); return false; } @@ -1514,14 +1514,14 @@ bool Modem::writeP25Frame(const uint8_t* data, uint32_t length) ::memcpy(buffer + 4U, data + 1U, length - 1U); } - uint8_t len = length + 2U; + uint32_t len = length + 2U; // write or buffer P25 data to air interface if (m_p25Space >= length) { if (m_debug) - LogDebugEx(LOG_MODEM, "Modem::writeP25Data()", "immediate write (len %u)", length); + LogDebugEx(LOG_MODEM, "Modem::writeP25Frame()", "immediate write (len %u)", length); if (m_trace) - Utils::dump(1U, "[Modem::writeP25Data()] Immediate TX P25 Data", buffer + 3U, length - 3U); + Utils::dump(1U, "[Modem::writeP25Frame()] Immediate TX P25 Data", buffer + 3U, length - 3U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1555,8 +1555,8 @@ bool Modem::writeNXDNFrame(const uint8_t* data, uint32_t length) if (data[0U] != TAG_DATA && data[0U] != TAG_EOT) return false; if (length > MAX_LENGTH) { - LogError(LOG_MODEM, "Modem::writeNXDNData(); request data to write >%u?, len = %u", MAX_LENGTH, length); - Utils::dump(1U, "[Modem::writeNXDNData()] Attmpted Data", data, length); + LogError(LOG_MODEM, "Modem::writeNXDNFrame(); request data to write >%u?, len = %u", MAX_LENGTH, length); + Utils::dump(1U, "[Modem::writeNXDNFrame()] Attmpted Data", data, length); return false; } @@ -1573,9 +1573,9 @@ bool Modem::writeNXDNFrame(const uint8_t* data, uint32_t length) // write or buffer NXDN data to air interface if (m_nxdnSpace >= length) { if (m_debug) - LogDebugEx(LOG_MODEM, "Modem::writeNXDNData()", "immediate write (len %u)", length); + LogDebugEx(LOG_MODEM, "Modem::writeNXDNFrame()", "immediate write (len %u)", length); if (m_trace) - Utils::dump(1U, "[Modem::writeNXDNData()] Immediate TX NXDN Data", buffer + 3U, length - 1U); + Utils::dump(1U, "[Modem::writeNXDNFrame()] Immediate TX NXDN Data", buffer + 3U, length - 1U); int ret = write(buffer, len); if (ret != int(len)) {