From 6b306b81f8a07c3e36676a0a5c305b3b1ea68c60 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期五, 09 一月 2026 15:33:05 +0800
Subject: [PATCH] 1.实现S1F23_QueryAllCEID和S1F11_QueryAllSVID

---
 SourceCode/Bond/EAPSimulator/CHsmsActive.cpp     |   39 +++++++
 SourceCode/Bond/EAPSimulator/Resource.h          |    4 
 SourceCode/Bond/Servo/HsmsPassive.h              |    2 
 SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp |   44 ++++++++
 SourceCode/Bond/EAPSimulator/CHsmsActive.h       |    2 
 SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h   |    2 
 SourceCode/Bond/Servo/HsmsPassive.cpp            |  201 +++++++++++++++++++++++++++++++++++++--
 7 files changed, 277 insertions(+), 17 deletions(-)

diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
index f7f7ffa..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
@@ -349,6 +362,28 @@
 	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;
diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.h b/SourceCode/Bond/EAPSimulator/CHsmsActive.h
index cb63df1..6362b6e 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.h
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.h
@@ -79,6 +79,8 @@
 
 	// 鏌ヨ鍙橀噺
 	int hsmsSelectedEquipmentStatusRequest(unsigned int SVID);
+	int hsmsQueryAllStatusVariables();      // S1F11
+	int hsmsQueryAllCollectionEvents();     // S1F23
 
 	// 鏌ヨPPID List
 	int hsmsQueryPPIDList();
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
index 1ec5d11..93dd187 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
@@ -103,6 +103,8 @@
 	ON_BN_CLICKED(IDC_BUTTON_CTRL_ONLINE_REMOTE, &CEAPSimulatorDlg::OnBnClickedButtonCtrlOnlineRemote)
 	ON_BN_CLICKED(IDC_BUTTON_QUERY_CONTROL_STATE, &CEAPSimulatorDlg::OnBnClickedButtonQueryControlState)
 	ON_BN_CLICKED(IDC_BUTTON_QUERY_PROCESS_STATE, &CEAPSimulatorDlg::OnBnClickedButtonQueryProcessState)
+	ON_BN_CLICKED(IDC_BUTTON_QUERY_ALL_SVID, &CEAPSimulatorDlg::OnBnClickedButtonQueryAllSvid)
+	ON_BN_CLICKED(IDC_BUTTON_QUERY_ALL_CEID, &CEAPSimulatorDlg::OnBnClickedButtonQueryAllCeid)
 END_MESSAGE_MAP()
 
 
@@ -239,12 +241,36 @@
 	}
 	// S1F3 Query ProcessState (SVID=700) button
 	{
-		CRect rc(14, 152, 14 + 140, 152 + 14); // dialog units, new row
+		CRect rc(14 + 140 + 5, 136, 14 + 140 + 5 + 140, 136 + 14); // dialog units, same row offset
 		MapDialogRect(&rc);
 		HWND hBtn = ::CreateWindow(_T("BUTTON"), _T("S1F3_QueryProcessState"),
 			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
 			rc.left, rc.top, rc.Width(), rc.Height(),
 			m_hWnd, (HMENU)IDC_BUTTON_QUERY_PROCESS_STATE, AfxGetInstanceHandle(), nullptr);
+		if (hBtn != nullptr) {
+			::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
+		}
+	}
+	// S1F11 QueryAllSVID
+	{
+		CRect rc(14 + 140 + 5 + 140 + 5, 136, 14 + 140 + 5 + 140 + 5 + 140, 136 + 14); // dialog units, next row
+		MapDialogRect(&rc);
+		HWND hBtn = ::CreateWindow(_T("BUTTON"), _T("S1F11_QueryAllSVID"),
+			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+			rc.left, rc.top, rc.Width(), rc.Height(),
+			m_hWnd, (HMENU)IDC_BUTTON_QUERY_ALL_SVID, AfxGetInstanceHandle(), nullptr);
+		if (hBtn != nullptr) {
+			::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
+		}
+	}
+	// S1F23 QueryAllCEID
+	{
+		CRect rc(14, 152, 14 + 140, 152 + 14); // dialog units, next row
+		MapDialogRect(&rc);
+		HWND hBtn = ::CreateWindow(_T("BUTTON"), _T("S1F23_QueryAllCEID"),
+			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+			rc.left, rc.top, rc.Width(), rc.Height(),
+			m_hWnd, (HMENU)IDC_BUTTON_QUERY_ALL_CEID, AfxGetInstanceHandle(), nullptr);
 		if (hBtn != nullptr) {
 			::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
 		}
@@ -377,6 +403,12 @@
 	}
 	if (GetDlgItem(IDC_BUTTON_QUERY_PROCESS_STATE) != nullptr) {
 		GetDlgItem(IDC_BUTTON_QUERY_PROCESS_STATE)->EnableWindow(enabled);
+	}
+	if (GetDlgItem(IDC_BUTTON_QUERY_ALL_SVID) != nullptr) {
+		GetDlgItem(IDC_BUTTON_QUERY_ALL_SVID)->EnableWindow(enabled);
+	}
+	if (GetDlgItem(IDC_BUTTON_QUERY_ALL_CEID) != nullptr) {
+		GetDlgItem(IDC_BUTTON_QUERY_ALL_CEID)->EnableWindow(enabled);
 	}
 }
 
@@ -552,3 +584,13 @@
 {
 	theApp.m_model.m_pHsmsActive->hsmsSelectedEquipmentStatusRequest(SVID_CurrentProcessState);
 }
+
+void CEAPSimulatorDlg::OnBnClickedButtonQueryAllSvid()
+{
+	theApp.m_model.m_pHsmsActive->hsmsQueryAllStatusVariables();
+}
+
+void CEAPSimulatorDlg::OnBnClickedButtonQueryAllCeid()
+{
+	theApp.m_model.m_pHsmsActive->hsmsQueryAllCollectionEvents();
+}
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
index 6dd9524..6bfda45 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
@@ -69,4 +69,6 @@
 	afx_msg void OnBnClickedButtonCtrlOnlineRemote();
 	afx_msg void OnBnClickedButtonQueryControlState();
 	afx_msg void OnBnClickedButtonQueryProcessState();
+	afx_msg void OnBnClickedButtonQueryAllSvid();
+	afx_msg void OnBnClickedButtonQueryAllCeid();
 };
diff --git a/SourceCode/Bond/EAPSimulator/Resource.h b/SourceCode/Bond/EAPSimulator/Resource.h
index 35a9c71..21dbcc7 100644
--- a/SourceCode/Bond/EAPSimulator/Resource.h
+++ b/SourceCode/Bond/EAPSimulator/Resource.h
@@ -63,6 +63,8 @@
 #define IDC_BUTTON_CTRL_ONLINE_REMOTE   1045
 #define IDC_BUTTON_QUERY_CONTROL_STATE  1046
 #define IDC_BUTTON_QUERY_PROCESS_STATE  1047
+#define IDC_BUTTON_QUERY_ALL_SVID       1048
+#define IDC_BUTTON_QUERY_ALL_CEID       1049
 
 // Next default values for new objects
 // 
@@ -70,7 +72,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        143
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1048
+#define _APS_NEXT_CONTROL_VALUE         1050
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif
diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index 20ae2db..d35b5b8 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -20,6 +20,19 @@
 const char* ACK0 = &ACK[0];
 const char* ACK1 = &ACK[1];
 
+// Log SECS-II message briefly to avoid huge strings causing issues.
+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());
+}
+
 unsigned __stdcall CimWorkThreadFunction(LPVOID lpParam)
 {
 	CHsmsPassive* pPassive = (CHsmsPassive*)lpParam;
@@ -1298,13 +1311,19 @@
 		HEADER* pHeader = pMessage->getHeader();
 		int nStream = (pHeader->stream & 0x7F);
 
-		LOGI("<HSMS>[Received]%s", pMessage->toString());
+		LogSecsMessageBrief("<HSMS>[Received]", pMessage);
 		if (nStream == 1 && pHeader->function == 1) {
 			// S1F1
 			replyAreYouThere(pMessage);
 		}
 		else if (nStream == 1 && pHeader->function == 3) {
 			replySelectedEquipmentStatusData(pMessage);
+		}
+		else if (nStream == 1 && pHeader->function == 11) {
+			replyStatusVariableNamelistRequest(pMessage);
+		}
+		else if (nStream == 1 && pHeader->function == 23) {
+			replyCollectionEventNamelistRequest(pMessage);
 		}
 		else if (nStream == 1 && pHeader->function == 13) {
 			replyEstablishCommunications(pMessage);
@@ -1632,7 +1651,7 @@
 				ASSERT(pMessage);
 				m_pPassive->sendMessage(pMessage);
 				LOGI("<HSMS>[SEND]SysByte=%u sessionId:%d", pMessage->getHeader()->systemBytes, pMessage->getHeader()->sessionId);
-				LOGI("<HSMS>[SEND]%s", pMessage->toString());
+				LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 
 				int nRet = WaitForSingleObject(pAction->getEvent(), pAction->getTimeout() * 1000);
 				if (nRet == WAIT_TIMEOUT) {
@@ -1658,7 +1677,7 @@
 				ASSERT(pMessage);
 				m_pPassive->sendMessage(pMessage);
 				LOGI("<HSMS>[SEND]SysByte=%u sessionId:%d", pMessage->getHeader()->systemBytes, pMessage->getHeader()->sessionId);
-				LOGI("<HSMS>[SEND]%s", pMessage->toString());
+				LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 
 			}
 		}
@@ -1682,7 +1701,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 }
 
@@ -1725,7 +1744,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 	return 0;
@@ -1788,7 +1807,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 	return 0;
@@ -1835,12 +1854,168 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 
 
 	return 0;
+}
+
+// S1F11
+int CHsmsPassive::replyStatusVariableNamelistRequest(IMessage* pRecv)
+{
+	if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
+		return ER_NOTSELECT;
+	}
+
+	std::vector<unsigned short> reqIds;
+	ISECS2Item* pBody = pRecv->getBody();
+	if (pBody != nullptr && pBody->getType() == SITYPE::L) {
+		const int sz = pBody->getSubItemSize();
+		for (int i = 0; i < sz; ++i) {
+			unsigned short id = 0;
+			if (pBody->getSubItemU2(i, id)) {
+				reqIds.push_back(id);
+			}
+		}
+	}
+
+	// Build response list items: {L:3 SVID, SVNAME, UNITS}
+	std::vector<unsigned short> svids;
+	std::set<unsigned short> requested(reqIds.begin(), reqIds.end());
+	Lock();
+	if (reqIds.empty()) {
+		for (auto v : m_variabels) {
+			svids.push_back(static_cast<unsigned short>(v->getVarialbleId()));
+		}
+	}
+	else {
+		// include requested IDs (existing + unknown marker)
+		for (auto id : requested) {
+			svids.push_back(id);
+		}
+	}
+	Unlock();
+
+	IMessage* pMessage = NULL;
+	HSMS_Create1Message(pMessage, m_nSessionId, 1, 12, pRecv->getHeader()->systemBytes);
+	ASSERT(pMessage);
+
+	ISECS2Item* pList = pMessage->getBody(); // Body is L[n] of {SVID, SVNAME, UNITS}
+	for (auto id : svids) {
+		ISECS2Item* pEntry = pList->addItem();
+		pEntry->addU2Item(id, "SVID");
+		SERVO::CVariable* v = getVariable((int)id);
+		if (v != nullptr) {
+			pEntry->addItem(v->getName().c_str(), "SVNAME");
+			// Use remark as UNITS if provided; empty string if none.
+			pEntry->addItem(v->getRemark().c_str(), "UNITS");
+		}
+		else {
+			// Unknown SVID: A:0 for name/units
+			pEntry->addItem("", "SVNAME");
+			pEntry->addItem("", "UNITS");
+		}
+	}
+
+	m_pPassive->sendMessage(pMessage);
+	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
+		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
+	HSMS_Destroy1Message(pMessage);
+
+	return ER_NOERROR;
+}
+
+// S1F23
+int CHsmsPassive::replyCollectionEventNamelistRequest(IMessage* pRecv)
+{
+	if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
+		return ER_NOTSELECT;
+	}
+
+	std::vector<unsigned short> reqIds;
+	ISECS2Item* pBody = pRecv->getBody();
+	if (pBody != nullptr && pBody->getType() == SITYPE::L) {
+		const int sz = pBody->getSubItemSize();
+		for (int i = 0; i < sz; ++i) {
+			unsigned short id = 0;
+			if (pBody->getSubItemU2(i, id)) {
+				reqIds.push_back(id);
+			}
+		}
+	}
+
+	struct CEInfo {
+		unsigned short id{ 0 };
+		std::string name;
+		std::vector<unsigned short> vids;
+	};
+	std::vector<CEInfo> ceInfos;
+	{
+		Lock();
+		if (reqIds.empty()) {
+			for (auto e : m_collectionEvents) {
+				if (e == nullptr) continue;
+				CEInfo info;
+				info.id = static_cast<unsigned short>(e->getEventId());
+				info.name = e->getName();
+				std::set<unsigned short> vidSet;
+				for (auto rpt : e->getReports()) {
+					if (rpt == nullptr) continue;
+					for (auto vid : rpt->getVids()) {
+						vidSet.insert(static_cast<unsigned short>(vid));
+					}
+				}
+				info.vids.assign(vidSet.begin(), vidSet.end());
+				ceInfos.push_back(std::move(info));
+			}
+		}
+		else {
+			for (auto id : reqIds) {
+				CEInfo info;
+				info.id = id;
+				SERVO::CCollectionEvent* e = getEvent(id);
+				if (e != nullptr) {
+					info.name = e->getName();
+					std::set<unsigned short> vidSet;
+					for (auto rpt : e->getReports()) {
+						if (rpt == nullptr) continue;
+						for (auto vid : rpt->getVids()) {
+							vidSet.insert(static_cast<unsigned short>(vid));
+						}
+					}
+					info.vids.assign(vidSet.begin(), vidSet.end());
+				}
+				ceInfos.push_back(std::move(info));
+			}
+		}
+		Unlock();
+	}
+
+	IMessage* pMessage = NULL;
+	HSMS_Create1Message(pMessage, m_nSessionId, 1, 24, pRecv->getHeader()->systemBytes);
+	ASSERT(pMessage);
+
+	ISECS2Item* pList = pMessage->getBody(); // Body is L[n] of {CEID, CENAME, L[VIDs]}
+	for (const auto& info : ceInfos) {
+		ISECS2Item* pEntry = pList->addItem();
+		pEntry->addU2Item(info.id, "CEID");
+		pEntry->addItem(info.name.c_str(), "CENAME"); // empty if unknown
+		ISECS2Item* pVidList = pEntry->addItem();
+		for (auto vid : info.vids) {
+			pVidList->addU2Item(vid, "VID");
+		}
+	}
+
+	m_pPassive->sendMessage(pMessage);
+	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
+		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
+	HSMS_Destroy1Message(pMessage);
+
+	return ER_NOERROR;
 }
 
 // S2F13
@@ -1886,7 +2061,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 	return 0;
@@ -2287,7 +2462,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 	
 	return 0;
@@ -2392,7 +2567,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 	return 0;
@@ -2565,7 +2740,7 @@
 	m_pPassive->sendMessage(pReply);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pReply->getHeader()->sessionId, pReply->getHeader()->sType, pReply->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pReply->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pReply);
 	HSMS_Destroy1Message(pReply);
 
 
@@ -2595,7 +2770,7 @@
 		m_pPassive->sendMessage(pMessage);
 		LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 			pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-		LOGI("<HSMS>[SEND]%s", pMessage->toString());
+		LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 		HSMS_Destroy1Message(pMessage);
 		return 0;
 	}
@@ -2682,7 +2857,7 @@
 	m_pPassive->sendMessage(pMessage);
 	LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
 		pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
-	LOGI("<HSMS>[SEND]%s", pMessage->toString());
+	LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
 	HSMS_Destroy1Message(pMessage);
 
 
diff --git a/SourceCode/Bond/Servo/HsmsPassive.h b/SourceCode/Bond/Servo/HsmsPassive.h
index e38ccb5..3461a77 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.h
+++ b/SourceCode/Bond/Servo/HsmsPassive.h
@@ -234,6 +234,8 @@
 	int replyAreYouThere(IMessage* pRecv);
 	int replyEstablishCommunications(IMessage* pRecv);
 	int replySelectedEquipmentStatusData(IMessage* pRecv);
+	int replyStatusVariableNamelistRequest(IMessage* pRecv);  // S1F11/S1F12
+	int replyCollectionEventNamelistRequest(IMessage* pRecv); // S1F23/S1F24
 	int replyOnLine(IMessage* pRecv);
 	int replyOffLine(IMessage* pRecv);
 	int replyEquipmentConstantRequest(IMessage* pRecv);

--
Gitblit v1.9.3