From 5a8bbd2426aeacdbbb2fdb1a7f7a1adce0cac7f9 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 01 八月 2025 16:23:29 +0800
Subject: [PATCH] 1. 新增以下功能函数并集成:    - InitStorage():初始化存储区域    - StartStorage():开始数据存储    - StopStorage():停止存储并自动提取、分析数据    - AnalyzeStoredData():分析指定端口数据,返回偏移量

---
 SourceCode/Bond/Servo/HsmsPassive.cpp |   61 ++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index 77e607c..902f236 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -521,6 +521,9 @@
 		else if (nStream == 2 && pHeader->function == 41) {
 			replyCommand(pMessage);
 		}
+		else if (nStream == 2 && pHeader->function == 43) {
+			replyConfigureSpooling(pMessage);
+		}
 		else if (nStream == 5 && pHeader->function == 3) {
 			replyEanbleDisableAlarmReport(pMessage);
 		}
@@ -665,6 +668,7 @@
 
 	SetEvent(m_hCimWorkEvent);
 	Unlock();
+
 
 	return ER_NOERROR;
 }
@@ -1067,6 +1071,51 @@
 	return 0;
 }
 
+// S2F43
+int CHsmsPassive::replyConfigureSpooling(IMessage* pRecv)
+{
+	if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
+		return ER_NOTSELECT;
+	}
+	ISECS2Item* pBody = pRecv->getBody();
+	if (pBody == nullptr || pBody->getType() != SITYPE::L) ER_PARAM_ERROR;
+
+	// 娓呯┖鎵�鏈�
+	if (pBody->getSubItemSize() == 0) {
+		m_spoolingConfig.clear();
+		goto MYREPLY;
+	}
+
+	// 渚濇閰嶇疆Stream
+	for (int i = 0; i < pBody->getSubItemSize(); i++) {
+		ISECS2Item* pStreamItem = pBody->getSubItem(i);
+		ASSERT(pStreamItem);
+		unsigned char STRID, FCNID;
+		pStreamItem->getSubItemU1(0, STRID);
+		ISECS2Item* pFcnItemList = pStreamItem->getSubItem(1);
+		if (pFcnItemList->getSubItemSize() == 0) {
+			m_spoolingConfig[STRID].clear();
+		}
+		else {
+			for (int j = 0; j < pFcnItemList->getSubItemSize(); j++) {
+				pFcnItemList->getSubItemU1(j, FCNID);
+				m_spoolingConfig[STRID].insert(FCNID);
+			}
+		}
+	}
+
+	// 鎵撳嵃楠岃瘉缁撴灉
+	for (auto s : m_spoolingConfig) {
+		LOGI("====> stream:%d", s.first);
+		for (auto f : s.second) {
+			LOGI("function:%d", f);
+		}
+	}
+MYREPLY:
+	replyAck(2, 42, pRecv->getHeader()->systemBytes, BYTE(0), "ERACK");
+	return 0;
+}
+
 // S5F3
 int CHsmsPassive::replyEanbleDisableAlarmReport(IMessage* pRecv)
 {
@@ -1182,6 +1231,18 @@
 	SetEvent(m_hCimWorkEvent);
 	Unlock();
 
+	int size = pAction->serialize(nullptr, 0);;
+	if (size > 0) {
+		char* pszBuffer = new char[size];
+		pAction->serialize(pszBuffer, size);
+		AfxMessageBox("abc");
+
+		CHsmsAction* pAction2 = new CHsmsAction();
+		pAction2->unserialize(pszBuffer, size);
+		AfxMessageBox("def");
+		m_pPassive->sendMessage(pAction2->getSendMessage());
+	}
+
 	return ER_NOERROR;
 }
 

--
Gitblit v1.9.3