From e48a55eb3cc807fa5a45cf398b6f523e96aa5312 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 15 七月 2025 15:10:31 +0800
Subject: [PATCH] 1.Variable列表显示到界面; 2.从文件中加载CReport列表;
---
SourceCode/Bond/EAPSimulator/CHsmsActive.cpp | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 107 insertions(+), 1 deletions(-)
diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
index 8a60924..e3e2286 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,96 @@
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::hsmsEDEventReport(bool bEnable, std::vector<int>& ids)
+{
+ IMessage* pMessage = nullptr;
+ int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 37, ++m_nSystemByte);
+ ISECS2Item* pItem = pMessage->getBody();
+ pItem->addBoolItem(bEnable, "CEED");
+ ISECS2Item* pItem2 = pItem->addItem();
+ for (auto item : ids) {
+ pItem2->addU4Item(item, "CEID");
+ }
+ m_pActive->sendMessage(pMessage);
+ HSMS_Destroy1Message(pMessage);
+
+ return 0;
+}
+
+int CHsmsActive::hsmsEDAlarmReport(bool bEnable, unsigned int id)
+{
+ char szEnable[2] = {128, 0};
+
+ IMessage* pMessage = nullptr;
+ int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 5 | REPLY, 3, ++m_nSystemByte);
+ ISECS2Item* pItem = pMessage->getBody();
+ pItem->addBinaryItem(&szEnable[bEnable ? 0 : 1], 1, "ALED");
+ pItem->addU4Item(id, "ALID");
+ 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