From 155cb7fe0dcb564729c6aecdb65815f3f0ed24e2 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期二, 13 一月 2026 11:28:26 +0800
Subject: [PATCH] 1.ECID, DVID的查询和实现;

---
 SourceCode/Bond/Servo/CMaster.cpp |   51 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 0ab057f..ee0b951 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -1540,7 +1540,7 @@
 				unlock();
 			}
 		};
-		listener.onProcessStateChanged = [&](void* pEquipment, int slotNo, PROCESS_STATE state) -> void {
+		listener.onProcessStateChanged = [&](void* pEquipment, int slotNo, PROCESS_STATE prevState, PROCESS_STATE state) -> void {
 			ASSERT(1 <= slotNo && slotNo <= 8);
 			int eqid = ((CEquipment*)pEquipment)->getID();
 			CGlass* pGlass = ((CEquipment*)pEquipment)->getGlassFromSlot(slotNo);
@@ -1558,7 +1558,12 @@
 			}
 
 			if (m_listener.onProcessStateChanged != nullptr) {
-				m_listener.onProcessStateChanged(this, (CEquipment*)pEquipment, slotNo, state);
+				m_listener.onProcessStateChanged(this, (CEquipment*)pEquipment, slotNo, prevState, state);
+			}
+		};
+		listener.onProcessDataReport = [&](void* pEquipment, const std::vector<CParam>& params) {
+			if (m_listener.onProcessDataReport != nullptr) {
+				m_listener.onProcessDataReport(this, (CEquipment*)pEquipment, params);
 			}
 		};
 		listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) {
@@ -1781,6 +1786,10 @@
 				strOut.append(szBuffer);
 			}
 			LOGD("<CMaster-%s>SVDataReport:%s", ((CEquipment*)pEquipment)->getName().c_str(), strOut.c_str());
+
+			if (m_listener.onSVDataReport != nullptr) {
+				m_listener.onSVDataReport(this, (CEquipment*)pEquipment, params);
+			}
 		};
 		listener.onPanelDataReport = [&](void* pEquipment, void* pContext) {
 			LOGD("<CMaster-%s>onPanelDataReport", ((CEquipment*)pEquipment)->getName().c_str());
@@ -1800,6 +1809,11 @@
 				}
 			}
 
+		};
+		listener.onReceivedJob = [&](void* pEquipment, int port, CJobDataS* pJobDataS) {
+			if (m_listener.onJobReceived != nullptr) {
+				m_listener.onJobReceived(this, (CEquipment*)pEquipment, port, pJobDataS);
+			}
 		};
 		pEquipment->setListener(listener);
 		pEquipment->setCcLink(&m_cclink);
@@ -2115,8 +2129,9 @@
 					}
 				};
 				auto fireProcessState = [&](SERVO::CEquipment* pEq, int slotNo, SERVO::PROCESS_STATE st) {
-					if (m_listener.onProcessStateChanged != nullptr && pEq != nullptr) {
-						m_listener.onProcessStateChanged(this, pEq, slotNo, st);
+					// Drive equipment state so listeners receive prev/current states consistently.
+					if (pEq != nullptr) {
+						pEq->fireSetProcessState(slotNo, st);
 					}
 				};
 
@@ -2199,6 +2214,34 @@
 					fireLoadPortStatus(PORT_LOAD_READY);
 					fireLoadPortStatus(PORT_EMPTY); // will also raise LoadPortNotAssoc via Model
 					break;
+				case 24: { // 妯℃嫙 SV Data锛堢ず渚嬶細Bonder1锛�
+					SERVO::CEquipment* pEq = getEquipment(EQ_ID_Bonder1);
+					if (pEq != nullptr && m_listener.onSVDataReport != nullptr) {
+						static int counter = 0;
+						++counter;
+						std::vector<CParam> params;
+						params.emplace_back("MockSV_Temp", "1", "C", 25 + (counter % 5));
+						params.emplace_back("MockSV_Pressure", "2", "kPa", 100 + (counter % 3));
+						params.emplace_back("MockSV_Speed", "3", "mm/s", 50 + (counter % 7));
+						m_listener.onSVDataReport(this, pEq, params);
+						LOGI("<Master>SIM_EAP step24: mock SVData (Bonder1), params=%zu", params.size());
+					}
+					break;
+				}
+				case 25: { // 妯℃嫙 Process Data锛堢ず渚嬶細Bonder1锛�
+					SERVO::CEquipment* pEq = getEquipment(EQ_ID_Bonder1);
+					if (pEq != nullptr && m_listener.onProcessDataReport != nullptr) {
+						static int counter = 0;
+						++counter;
+						std::vector<CParam> params;
+						params.emplace_back("MockProc_CycleTime", "1", "s", 30 + (counter % 4));
+						params.emplace_back("MockProc_MaxTemp", "2", "C", 200 + (counter % 6));
+						params.emplace_back("MockProc_Result", "3", "", (counter % 2) ? 1 : 0);
+						m_listener.onProcessDataReport(this, pEq, params);
+						LOGI("<Master>SIM_EAP step25: mock ProcessData (Bonder1), params=%zu", params.size());
+					}
+					break;
+				}
 				default:
 					break;
 				}

--
Gitblit v1.9.3