From 6c373f004d79b28c735bbee2bd391bd412270535 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期五, 09 一月 2026 15:58:51 +0800
Subject: [PATCH] 完成统一 PortStateChange 事件与变量维护

---
 SourceCode/Bond/EAPSimulator/CHsmsActive.cpp |   83 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 80 insertions(+), 3 deletions(-)

diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
index 5b98173..d4e6fe5 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
@@ -5,6 +5,19 @@
 
 static unsigned short DATAID = 1;
 
+// Truncated SECS message logging to avoid overly long strings crashing UI/log
+static void LogSecsMessageBrief(const char* tag, IMessage* pMessage, size_t maxLen = 1024)
+{
+	if (pMessage == nullptr) return;
+	const char* msgStr = pMessage->toString();
+	if (msgStr == nullptr) return;
+	std::string buf(msgStr);
+	if (buf.size() > maxLen) {
+		buf = buf.substr(0, maxLen) + "...<truncated>";
+	}
+	LOGI("%s%s", tag, buf.c_str());
+}
+
 CHsmsActive::CHsmsActive()
 {
 	m_listener = {};
@@ -65,8 +78,8 @@
 		int nStream = (pHeader->stream & 0x7F);
 
 		TRACE("鏀跺埌娑堟伅 S%dF%d================\n", pHeader->stream & 0x7F, pHeader->function);
-		TRACE("Body:%s\n", pMessage->toString());
-		LOGI("onRecvDataMessage(%s).", pMessage->toString());
+		LogSecsMessageBrief("Body:", pMessage);
+		LogSecsMessageBrief("onRecvDataMessage:", pMessage);
 
 		if (nStream == 5 && pHeader->function == 1) {
 			// S5F1
@@ -140,6 +153,48 @@
 	m_pActive->sendMessage(pMessage);
 	HSMS_Destroy1Message(pMessage);
 
+	return 0;
+}
+
+int CHsmsActive::hsmsRequestOnline()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 17, ++m_nSystemByte);
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+	return 0;
+}
+
+int CHsmsActive::hsmsRequestOffline()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 15, ++m_nSystemByte);
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+	return 0;
+}
+
+int CHsmsActive::hsmsGoLocal()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 41, ++m_nSystemByte);
+	ISECS2Item* pBody = pMessage->getBody();
+	pBody->addItem("GoLocal", "RCMD");
+	pBody->addItem(); // L: empty params
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+	return 0;
+}
+
+int CHsmsActive::hsmsGoRemote()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 41, ++m_nSystemByte);
+	ISECS2Item* pBody = pMessage->getBody();
+	pBody->addItem("GoRemote", "RCMD");
+	pBody->addItem(); // L: empty params
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
 	return 0;
 }
 
@@ -300,13 +355,35 @@
 	IMessage* pMessage = nullptr;
 	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 3, ++m_nSystemByte);
 
-	pMessage->getBody()->addU4Item(SVID, "SVID");
+	pMessage->getBody()->addU2Item(static_cast<unsigned short>(SVID), "SVID");
 	m_pActive->sendMessage(pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 	return 0;
 }
 
+int CHsmsActive::hsmsQueryAllStatusVariables()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 11, ++m_nSystemByte);
+	// Host sends L:0 (empty list) to request all SVIDs.
+	pMessage->getBody()->addItem(); // empty list
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+	return 0;
+}
+
+int CHsmsActive::hsmsQueryAllCollectionEvents()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 23, ++m_nSystemByte);
+	// Host sends L:0 (empty list) to request all CEIDs.
+	pMessage->getBody()->addItem(); // empty list
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+	return 0;
+}
+
 int CHsmsActive::hsmsQueryPPIDList()
 {
 	IMessage* pMessage = nullptr;

--
Gitblit v1.9.3