From 6d5e158808165c9c2301ca8b3a810ca7cb58ef20 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Thu, 9 Jan 2025 16:44:44 -0500 Subject: [PATCH] just ack the FSC_SEL_CHAN command when requested; fix data offset for TIA-102 DFSI data; --- src/common/p25/dfsi/frames/FrameDefines.h | 10 ++++++---- src/host/modem/ModemV24.cpp | 2 +- src/host/modem/port/specialized/V24UDPPort.cpp | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/common/p25/dfsi/frames/FrameDefines.h b/src/common/p25/dfsi/frames/FrameDefines.h index 1277a8fe..890c2671 100644 --- a/src/common/p25/dfsi/frames/FrameDefines.h +++ b/src/common/p25/dfsi/frames/FrameDefines.h @@ -44,15 +44,17 @@ namespace p25 namespace FSCMessageType { /** @brief FSC Control Service Message.*/ enum E : uint8_t { - FSC_CONNECT = 0, //! Establish connection with FSS. - FSC_HEARTBEAT = 1, //! Heartbeat/Connectivity Maintenance. + FSC_CONNECT = 0, //! Establish connection with FSS + FSC_HEARTBEAT = 1, //! Heartbeat/Connectivity Maintenance FSC_ACK = 2, //! Control Service Ack. + FSC_SEL_CHAN = 5, //! Channel Selection + FSC_REPORT_SEL_MODES = 8, //! Report Selected Modes - FSC_DISCONNECT = 9, //! Detach Control Service. + FSC_DISCONNECT = 9, //! Detach Control Service - FSC_INVALID = 127, //! Invalid Control Message. + FSC_INVALID = 127, //! Invalid Control Message }; } diff --git a/src/host/modem/ModemV24.cpp b/src/host/modem/ModemV24.cpp index f5f34744..ec15a7cb 100644 --- a/src/host/modem/ModemV24.cpp +++ b/src/host/modem/ModemV24.cpp @@ -1120,7 +1120,7 @@ void ModemV24::convertToAirTIA(const uint8_t *data, uint32_t length) uint8_t blockCnt = ctrl.getBlockHeaderCnt(); // iterate through blocks - uint8_t hdrOffs = 1U, dataOffs = blockCnt; + uint8_t hdrOffs = 1U, dataOffs = blockCnt + 1U; for (uint8_t i = 0U; i < blockCnt; i++) { BlockHeader hdr = BlockHeader(); hdr.decode(dfsiData + hdrOffs); diff --git a/src/host/modem/port/specialized/V24UDPPort.cpp b/src/host/modem/port/specialized/V24UDPPort.cpp index b81e9c67..44e69441 100644 --- a/src/host/modem/port/specialized/V24UDPPort.cpp +++ b/src/host/modem/port/specialized/V24UDPPort.cpp @@ -514,6 +514,23 @@ void* V24UDPPort::threadedCtrlNetworkRx(void* arg) } break; + case FSCMessageType::FSC_SEL_CHAN: + { + FSCACK ackResp = FSCACK(); + ackResp.setCorrelationTag(message->getCorrelationTag()); + ackResp.setAckMessageId(FSCMessageType::FSC_SEL_CHAN); + ackResp.setResponseCode(FSCAckResponseCode::CONTROL_ACK); + ackResp.setAckCorrelationTag(message->getCorrelationTag()); + ackResp.setResponseLength(0U); + + uint8_t buffer[FSCACK::LENGTH]; + ::memset(buffer, 0x00U, FSCACK::LENGTH); + ackResp.encode(buffer); + + network->m_ctrlFrameQueue->write(buffer, FSCACK::LENGTH, network->m_controlAddr, network->m_ctrlAddrLen); + } + break; + case FSCMessageType::FSC_REPORT_SEL_MODES: { FSCACK ackResp = FSCACK();