From e878ac7788fef44639145ffd971ab0eb06d692ad Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 08 一月 2026 19:48:18 +0800
Subject: [PATCH] 1.EAP模拟器,远程控件切换状态;

---
 SourceCode/Bond/EAPSimulator/CHsmsActive.cpp     |   42 +++++++++++++++++++++
 SourceCode/Bond/EAPSimulator/Resource.h          |    5 ++
 SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp |   55 +++++++++++++++++++++++++++
 SourceCode/Bond/EAPSimulator/CHsmsActive.h       |    8 ++++
 SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h   |    3 +
 5 files changed, 112 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
index 5b98173..8d74257 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
@@ -143,6 +143,48 @@
 	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;
+}
+
 int CHsmsActive::hsmsDatetimeSync()
 {
 	CTime time = CTime::GetCurrentTime();
diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.h b/SourceCode/Bond/EAPSimulator/CHsmsActive.h
index 04bb2c1..2ba9fea 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.h
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.h
@@ -42,6 +42,14 @@
 	// Are You There
 	int hsmsAreYouThere();
 
+	// ControlState: Request Online/Offline (S1F17 / S1F15)
+	int hsmsRequestOnline();
+	int hsmsRequestOffline();
+
+	// ControlState: GoLocal/GoRemote (S2F41)
+	int hsmsGoLocal();
+	int hsmsGoRemote();
+
 	// Date time sync
 	int hsmsDatetimeSync();
 
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
index 9e0a4de..271f175 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
@@ -98,6 +98,9 @@
 	ON_BN_CLICKED(IDC_BUTTON_QUERY_PJ_SPACE, &CEAPSimulatorDlg::OnBnClickedButtonQueryPjSpace)
 	ON_BN_CLICKED(IDC_BUTTON_CREATE_PJ, &CEAPSimulatorDlg::OnBnClickedButtonCreatePj)
 	ON_BN_CLICKED(IDC_BUTTON_CREATE_CJ, &CEAPSimulatorDlg::OnBnClickedButtonCreateCj)
+	ON_BN_CLICKED(IDC_BUTTON_CTRL_OFFLINE, &CEAPSimulatorDlg::OnBnClickedButtonCtrlOffline)
+	ON_BN_CLICKED(IDC_BUTTON_CTRL_ONLINE_LOCAL, &CEAPSimulatorDlg::OnBnClickedButtonCtrlOnlineLocal)
+	ON_BN_CLICKED(IDC_BUTTON_CTRL_ONLINE_REMOTE, &CEAPSimulatorDlg::OnBnClickedButtonCtrlOnlineRemote)
 END_MESSAGE_MAP()
 
 
@@ -191,6 +194,32 @@
 			m_hWnd, (HMENU)IDC_BUTTON_PROCEED_WITH_SLOTMAP, AfxGetInstanceHandle(), nullptr);
 		if (hBtn != nullptr) {
 			::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
+		}
+	}
+	// ControlState test buttons at runtime (resource file is UTF-16, keep it unchanged)
+	{
+		const int y = 120;
+		const int w = 70;
+		const int h = 14;
+		const int gap = 3;
+
+		struct BtnDef { int x; int id; const TCHAR* text; };
+		BtnDef defs[] = {
+			{ 238, IDC_BUTTON_CTRL_OFFLINE, _T("Ctrl Offline") },
+			{ 238 + (w + gap), IDC_BUTTON_CTRL_ONLINE_LOCAL, _T("Ctrl Local") },
+			{ 238 + 2 * (w + gap), IDC_BUTTON_CTRL_ONLINE_REMOTE, _T("Ctrl Remote") },
+		};
+
+		for (const auto& d : defs) {
+			CRect rc(d.x, y, d.x + w, y + h); // dialog units
+			MapDialogRect(&rc);
+			HWND hBtn = ::CreateWindow(_T("BUTTON"), d.text,
+				WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+				rc.left, rc.top, rc.Width(), rc.Height(),
+				m_hWnd, (HMENU)d.id, AfxGetInstanceHandle(), nullptr);
+			if (hBtn != nullptr) {
+				::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
+			}
 		}
 	}
 
@@ -307,6 +336,15 @@
 	GetDlgItem(IDC_BUTTON_QUERY_PJ_SPACE)->EnableWindow(enabled);
 	GetDlgItem(IDC_BUTTON_CREATE_PJ)->EnableWindow(enabled);	
 	GetDlgItem(IDC_BUTTON_CREATE_CJ)->EnableWindow(enabled);	
+	if (GetDlgItem(IDC_BUTTON_CTRL_OFFLINE) != nullptr) {
+		GetDlgItem(IDC_BUTTON_CTRL_OFFLINE)->EnableWindow(enabled);
+	}
+	if (GetDlgItem(IDC_BUTTON_CTRL_ONLINE_LOCAL) != nullptr) {
+		GetDlgItem(IDC_BUTTON_CTRL_ONLINE_LOCAL)->EnableWindow(enabled);
+	}
+	if (GetDlgItem(IDC_BUTTON_CTRL_ONLINE_REMOTE) != nullptr) {
+		GetDlgItem(IDC_BUTTON_CTRL_ONLINE_REMOTE)->EnableWindow(enabled);
+	}
 }
 
 void CEAPSimulatorDlg::OnBnClickedButtonConnect()
@@ -454,3 +492,20 @@
 	std::vector<std::string> processJobIds = {"PJ0001"};
 	theApp.m_model.m_pHsmsActive->hsmsCreateControlJob("CJ5007", processJobIds);
 }
+
+void CEAPSimulatorDlg::OnBnClickedButtonCtrlOffline()
+{
+	theApp.m_model.m_pHsmsActive->hsmsRequestOffline();
+}
+
+void CEAPSimulatorDlg::OnBnClickedButtonCtrlOnlineLocal()
+{
+	theApp.m_model.m_pHsmsActive->hsmsRequestOnline();
+	theApp.m_model.m_pHsmsActive->hsmsGoLocal();
+}
+
+void CEAPSimulatorDlg::OnBnClickedButtonCtrlOnlineRemote()
+{
+	theApp.m_model.m_pHsmsActive->hsmsRequestOnline();
+	theApp.m_model.m_pHsmsActive->hsmsGoRemote();
+}
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
index 7efa6a4..ffc3f40 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
@@ -64,4 +64,7 @@
 	afx_msg void OnBnClickedButtonQueryPjSpace();
 	afx_msg void OnBnClickedButtonCreatePj();
 	afx_msg void OnBnClickedButtonCreateCj();
+	afx_msg void OnBnClickedButtonCtrlOffline();
+	afx_msg void OnBnClickedButtonCtrlOnlineLocal();
+	afx_msg void OnBnClickedButtonCtrlOnlineRemote();
 };
diff --git a/SourceCode/Bond/EAPSimulator/Resource.h b/SourceCode/Bond/EAPSimulator/Resource.h
index 5677b18..4758455 100644
--- a/SourceCode/Bond/EAPSimulator/Resource.h
+++ b/SourceCode/Bond/EAPSimulator/Resource.h
@@ -58,6 +58,9 @@
 #define IDC_BUTTON_CREATE_CJ            1040
 #define IDC_BUTTON_DELETE               1041
 #define IDC_BUTTON_PROCEED_WITH_SLOTMAP 1042
+#define IDC_BUTTON_CTRL_OFFLINE         1043
+#define IDC_BUTTON_CTRL_ONLINE_LOCAL    1044
+#define IDC_BUTTON_CTRL_ONLINE_REMOTE   1045
 
 // Next default values for new objects
 // 
@@ -65,7 +68,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        143
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1043
+#define _APS_NEXT_CONTROL_VALUE         1046
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif

--
Gitblit v1.9.3