From 4a102d22d449d0230f01a77f661ab667c36a648e Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 11 七月 2025 11:33:37 +0800
Subject: [PATCH] 1.EAP模拟器之警告信息模拟

---
 SourceCode/Bond/EAPSimulator/CHsmsActive.cpp |   77 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 76 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
index 8a60924..94f5bb7 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
@@ -1,5 +1,6 @@
 #include "pch.h"
 #include "CHsmsActive.h"
+#include "Log.h"
 
 
 CHsmsActive::CHsmsActive()
@@ -24,7 +25,6 @@
 {
 	m_strIp = pszIp;
 	m_nPort = port;
-	++m_nSessionId;
 
 	auto onStatusChanged = [&](void* pFrom, ACTIVESTATE state) -> void {
 		if (m_listener.onStateChanged != nullptr) {
@@ -32,16 +32,21 @@
 		}
 
 		if (ACTIVESTATE::NOT_SELECTED == state) {
+			LOGI("Active state changed(NOT_SELECTED).");
 			hsmsSelectRequest();
 		}
 		else if (ACTIVESTATE::SELECTED == state) {
+			LOGI("Active state changed(SELECTED).");
 			hsmsEstablishCommunications();
 		}
 		else if (ACTIVESTATE::NOT_CONNECTED == state) {
+			LOGI("Active state changed(NOT_CONNECTED).");
 			m_pActive->disconnect();
 		}
 	};
 	auto onRecvSysMessage = [&](void* pFrom, IMessage* pMessage) -> void {
+		LOGI("onRecvSysMessage(sessionId:%d, sType:%d).", 
+			pMessage->getHeader()->sessionId, pMessage->getHeader()->sType);
 		TRACE("sessionId:%d, sType:%d\n", pMessage->getHeader()->sessionId, pMessage->getHeader()->sType);
 	};
 
@@ -55,8 +60,16 @@
 
 	auto onRecvDataMessage = [&](void* pFrom, IMessage* pMessage) -> void {
 		HEADER* pHeader = pMessage->getHeader();
+		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());
+
+		if (nStream == 5 && pHeader->function == 1) {
+			// S1F1
+			replyAck(5, 2, pMessage->getHeader()->systemBytes, 0, _T("ACK0"));
+		}
 	};
 
 	ActiveListener listener;
@@ -113,3 +126,65 @@
 
 	return 0;
 }
+
+int CHsmsActive::hsmsAreYouThere()
+{
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 1, ++m_nSystemByte);
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+
+	return 0;
+}
+
+int CHsmsActive::hsmsDatetimeSync()
+{
+	CTime time = CTime::GetCurrentTime();
+	char szTime[256];
+	sprintf_s(szTime, 256, _T("%4d%02d%02d%02d%02d%02d00"), time.GetYear(),
+		time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 31, ++m_nSystemByte);
+	ISECS2Item* pItem = pMessage->getBody();
+	pItem->setString((const char*)szTime, _T("Date time"));
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+
+	return 0;
+}
+
+int CHsmsActive::hsmsTerminalDisplay(BYTE tid, const char* pszText)
+{
+	char szTid[1];
+	szTid[0] = tid;
+
+	IMessage* pMessage = nullptr;
+	int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 10 | REPLY, 3, ++m_nSystemByte);
+	ISECS2Item* pItem = pMessage->getBody();
+	pItem->addBinaryItem(szTid, 1, _T("TID"));
+	pItem->addItem(pszText, _T("TEXT"));
+	m_pActive->sendMessage(pMessage);
+	HSMS_Destroy1Message(pMessage);
+
+	return 0;
+}
+
+int CHsmsActive::replyAck0(IMessage* pMessage)
+{
+	return 0;
+}
+
+// 通用的reply ack函数
+void CHsmsActive::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((const char*)&ack, 1, pszAckName);
+	m_pActive->sendMessage(pMessage);
+	LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, systemBytes);
+	HSMS_Destroy1Message(pMessage);
+}
+

--
Gitblit v1.9.3