From d3d45fbfb0fdff9fb49c3dd2ce7de323625347bf Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Mon, 23 Jun 2025 19:52:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E4=B8=8A=E4=BC=A0=E9=80=BB=E8=BE=91,=20comto?= =?UTF-8?q?ol=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=8F=91=E9=80=81?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/comtool-plugin-hsjl.py | 25 +++++++----- src/networking/link_layer/scan.c | 20 +++++++--- src/networking/link_layer/service.c | 60 ++++++++++++++++++++--------- src/system_monitor.h | 2 +- 4 files changed, 73 insertions(+), 34 deletions(-) diff --git a/doc/comtool-plugin-hsjl.py b/doc/comtool-plugin-hsjl.py index 2bd606c..9195d5d 100644 --- a/doc/comtool-plugin-hsjl.py +++ b/doc/comtool-plugin-hsjl.py @@ -38,11 +38,19 @@ class Plugin(Plugin_Base): "icon": "fa5.question-circle", "data": "5A 54 E1 EE 00 CF 02 5A FE" }, - # { - # "caption": "数据发送测试 - 1", - # "icon": "fa5.play-circle", - # "data": "" - # }, + { + "caption": "数据发送测试 - 40 Byte", + "icon": "fa5.play-circle", + "data": ( + "5A 54 E4 EE 00 00 00 00 02 00 28 " + "00 01 02 03 04 05 06 07 " + "08 09 0A 0B 0C 0D 0E 0F " + "10 11 12 13 14 15 16 17 " + "18 19 1A 1B 1C 1D 1E 1F " + "20 21 22 23 24 25 26 27 " + "00 08 31 5A FE" + ) + }, # { # "caption": "数据发送测试 - 2", # "icon": "fa5.play-circle", @@ -198,8 +206,7 @@ class Plugin(Plugin_Base): # frame struct self.structSelfTestRsp = Struct("log.timeDev)); // Get data payload & upload - SYSMON_SVC_PAYLOAD recvPayload; - recvPayload.dataId = message->dataId; - recvPayload.nodeId = message->common.src; - recvPayload.dataLen = message->dataLen; - memcpy(recvPayload.data, message->data, maxDataLen); - SysMonitor_GenRecvRsp(&recvPayload); + if (message->dataId != DATA_ID_NONE) + { + if (message->dataLen > maxDataLen) + { + DBG_ERROR("Payload length" PRIu16 " out of range.\n", message->dataLen); + return EIGNORE; + } + SYSMON_SVC_PAYLOAD *recvPayload = calloc(1, NORMALIZE_SIZE(sizeof(SYSMON_SVC_PAYLOAD))); + recvPayload->dataId = message->dataId; + recvPayload->nodeId = message->common.src; + recvPayload->dataLen = message->dataLen; + memcpy(recvPayload->data, message->data, message->dataLen); + SysMonitor_GenRecvRsp(recvPayload); + } // Logging... instPtr->log.rxLog.dataId = message->dataId; diff --git a/src/networking/link_layer/service.c b/src/networking/link_layer/service.c index 9afae22..7e737f5 100644 --- a/src/networking/link_layer/service.c +++ b/src/networking/link_layer/service.c @@ -528,12 +528,20 @@ static int32_t Service_PktHandler128K(L2_INST *instPtr, uint8_t *msg) } // Get data payload - SYSMON_SVC_PAYLOAD recvPayload; - recvPayload.dataId = message->dataId; - recvPayload.nodeId = message->common.src; - recvPayload.dataLen = message->dataLen; - memcpy(recvPayload.data, message->data, maxDataLen); - SysMonitor_GenRecvRsp(&recvPayload); + if (message->dataId != DATA_ID_NONE) + { + if (message->dataLen > maxDataLen) + { + DBG_ERROR("Payload length" PRIu16 " out of range.\n", message->dataLen); + return EIGNORE; + } + SYSMON_SVC_PAYLOAD *recvPayload = calloc(1, NORMALIZE_SIZE(sizeof(SYSMON_SVC_PAYLOAD))); + recvPayload->dataId = message->dataId; + recvPayload->nodeId = message->common.src; + recvPayload->dataLen = message->dataLen; + memcpy(recvPayload->data, message->data, message->dataLen); + SysMonitor_GenRecvRsp(recvPayload); + } // Logging... instPtr->log.rxLog.dataId = message->dataId; @@ -608,12 +616,20 @@ static int32_t Service_PktHandler512K(L2_INST *instPtr, uint8_t *msg) } // Get data payload - SYSMON_SVC_PAYLOAD recvPayload; - recvPayload.dataId = message->dataId; - recvPayload.nodeId = message->common.src; - recvPayload.dataLen = message->dataLen; - memcpy(recvPayload.data, message->data, maxDataLen); - SysMonitor_GenRecvRsp(&recvPayload); + if (message->dataId != DATA_ID_NONE) + { + if (message->dataLen > maxDataLen) + { + DBG_ERROR("Payload length" PRIu16 " out of range.\n", message->dataLen); + return EIGNORE; + } + SYSMON_SVC_PAYLOAD *recvPayload = calloc(1, NORMALIZE_SIZE(sizeof(SYSMON_SVC_PAYLOAD))); + recvPayload->dataId = message->dataId; + recvPayload->nodeId = message->common.src; + recvPayload->dataLen = message->dataLen; + memcpy(recvPayload->data, message->data, message->dataLen); + SysMonitor_GenRecvRsp(recvPayload); + } // Logging... instPtr->log.rxLog.dataId = message->dataId; @@ -688,12 +704,20 @@ static int32_t Service_PktHandler2M(L2_INST *instPtr, uint8_t *msg) } // Get data payload - SYSMON_SVC_PAYLOAD recvPayload; - recvPayload.dataId = message->dataId; - recvPayload.nodeId = message->common.src; - recvPayload.dataLen = message->dataLen; - memcpy(recvPayload.data, message->data, maxDataLen); - SysMonitor_GenRecvRsp(&recvPayload); + if (message->dataId != DATA_ID_NONE) + { + if (message->dataLen > maxDataLen) + { + DBG_ERROR("Payload length" PRIu16 " out of range.\n", message->dataLen); + return EIGNORE; + } + SYSMON_SVC_PAYLOAD *recvPayload = calloc(1, NORMALIZE_SIZE(sizeof(SYSMON_SVC_PAYLOAD))); + recvPayload->dataId = message->dataId; + recvPayload->nodeId = message->common.src; + recvPayload->dataLen = message->dataLen; + memcpy(recvPayload->data, message->data, message->dataLen); + SysMonitor_GenRecvRsp(recvPayload); + } // Logging... instPtr->log.rxLog.dataId = message->dataId; diff --git a/src/system_monitor.h b/src/system_monitor.h index 5a94d07..82fe857 100644 --- a/src/system_monitor.h +++ b/src/system_monitor.h @@ -16,7 +16,7 @@ * @name SystemMonitor_Constants * @{ */ -#define PAYLOAD_LEN_MAX 1000 +#define PAYLOAD_LEN_MAX 2048 #define DATA_ID_NONE UINT32_MAX #define DATA_ID_TEST 0x02030203