From 5907cf5775de374722d62648413fd46ca71cc396 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 17 一月 2025 10:34:19 +0800
Subject: [PATCH] 1.reply系列函数,修改为统一参数IMessage; 2.增加U2数据类型支持;
---
SourceCode/Bond/Servo/HsmsPassive.cpp | 92 ++++++++++++++++++++++++++-------------------
1 files changed, 53 insertions(+), 39 deletions(-)
diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index ab08dae..34738eb 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -177,10 +177,10 @@
LOGI("<HSMS>收到消息 S%dF%d", nStream, pHeader->function);
if (nStream == 1 && pHeader->function == 1) {
// S1F1
- replyAreYouThere(pHeader->systemBytes);
+ replyAreYouThere(pMessage);
}
else if (nStream == 1 && pHeader->function == 13) {
- replyEstablishCommunications(pHeader->systemBytes);
+ replyEstablishCommunications(pMessage);
}
else if (nStream == 2 && pHeader->function == 31) {
replyDatetime(pMessage);
@@ -190,6 +190,9 @@
}
else if (nStream == 5 && pHeader->function == 3) {
replyEanbleDisableAlarmReport(pMessage);
+ }
+ else if (nStream == 10 && pHeader->function == 3) {
+ replyTerminalDisplay(pMessage);
}
};
@@ -292,6 +295,19 @@
return 0;
}
+// 通用的reply ack函数
+void CHsmsPassive::replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName)
+{
+ IMessage* pMessage = NULL;
+ HSMS_Create1Message(pMessage, m_nSessionId, s, f, systemBytes);
+ ASSERT(pMessage);
+ ISECS2Item* pItem = pMessage->getBody();
+ pItem->setBinary(ack, pszAckName);
+ m_pPassive->sendMessage(pMessage);
+ LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, systemBytes);
+ HSMS_Destroy1Message(pMessage);
+}
+
// S1F1
int CHsmsPassive::requestAreYouThere()
{
@@ -314,14 +330,14 @@
}
// S1F2
-int CHsmsPassive::replyAreYouThere(unsigned int systemBytes)
+int CHsmsPassive::replyAreYouThere(IMessage* pRecv)
{
if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
return ER_NOTSELECT;
}
IMessage* pMessage = NULL;
- HSMS_Create1Message(pMessage, m_nSessionId, 1, 2, systemBytes);
+ HSMS_Create1Message(pMessage, m_nSessionId, 1, 2, pRecv->getHeader()->systemBytes);
ASSERT(pMessage);
ISECS2Item* pItem = pMessage->getBody();
@@ -335,14 +351,14 @@
}
// S1F14
-int CHsmsPassive::replyEstablishCommunications(unsigned int systemBytes)
+int CHsmsPassive::replyEstablishCommunications(IMessage* pRecv)
{
if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
return ER_NOTSELECT;
}
IMessage* pMessage = NULL;
- HSMS_Create1Message(pMessage, m_nSessionId, 1, 14, systemBytes);
+ HSMS_Create1Message(pMessage, m_nSessionId, 1, 14, pRecv->getHeader()->systemBytes);
ASSERT(pMessage);
ISECS2Item* pItem = pMessage->getBody();
@@ -387,17 +403,7 @@
SetLocalTime(&time);
}
-
- IMessage* pMessage = NULL;
- HSMS_Create1Message(pMessage, m_nSessionId, 2, 32, pRecv->getHeader()->systemBytes);
- ASSERT(pMessage);
-
- ISECS2Item* pItem = pMessage->getBody();
- pItem->setBinary(BYTE(0), "TIACK");
- m_pPassive->sendMessage(pMessage);
- LOGI("<HSMS>[SECS Msg SEND]S2F32 (SysByte=%u)", pRecv->getHeader()->systemBytes);
- HSMS_Destroy1Message(pMessage);
-
+ replyAck(2, 32, pRecv->getHeader()->systemBytes, BYTE(0), "TIACK");
return 0;
}
@@ -437,18 +443,7 @@
MYREPLY:
- int s = 2;
- int f = 38;
- IMessage* pMessage = NULL;
- HSMS_Create1Message(pMessage, m_nSessionId, s, f, pRecv->getHeader()->systemBytes);
- ASSERT(pMessage);
- ISECS2Item* pItem = pMessage->getBody();
- pItem->setBinary(BYTE(0), "ERACK");
- m_pPassive->sendMessage(pMessage);
- LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, pRecv->getHeader()->systemBytes);
- HSMS_Destroy1Message(pMessage);
-
-
+ replyAck(2, 38, pRecv->getHeader()->systemBytes, BYTE(0), "ERACK");
return 0;
}
@@ -477,18 +472,37 @@
MYREPLY:
- int s = 5;
- int f = 4;
- IMessage* pMessage = NULL;
- HSMS_Create1Message(pMessage, m_nSessionId, s, f, pRecv->getHeader()->systemBytes);
- ASSERT(pMessage);
- ISECS2Item* pItem = pMessage->getBody();
- pItem->setBinary(BYTE(0), "ACKC5");
- m_pPassive->sendMessage(pMessage);
- LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, pRecv->getHeader()->systemBytes);
- HSMS_Destroy1Message(pMessage);
+ replyAck(5, 4, pRecv->getHeader()->systemBytes, BYTE(0), "ACKC5");
+ return 0;
+}
+
+// S10F3
+int CHsmsPassive::replyTerminalDisplay(IMessage* pRecv)
+{
+ if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
+ return ER_NOTSELECT;
+ }
+ ISECS2Item* pBody = pRecv->getBody();
+ if (pBody == nullptr || pBody->getType() != SITYPE::A) ER_PARAM_ERROR;
+
+ BOOL bCheckData = FALSE;
+ BYTE tid;
+ char* pszText = nullptr;;
+ {
+ ISECS2Item* pItem = pRecv->getBody();
+ if (pItem->getSubItemSize() < 2) goto MYREPLY;
+ if (!pItem->getSubItemBinary(0, tid)) goto MYREPLY;
+ if (!pItem->getSubItemString(1, pszText)) goto MYREPLY;
+ bCheckData = TRUE;
+ LOGI("TerminalDisplay tid:%d, pszText:%s", tid, pszText);
+ m_pModel->notifyText(RX_HSMS_TERMINAL_TEXT, pszText);
+ }
+
+
+MYREPLY:
+ replyAck(10, 4, pRecv->getHeader()->systemBytes, BYTE(0), "ACKC10");
return 0;
}
--
Gitblit v1.9.3