Ver código fonte

修改发生器状态通知逻辑,解决无法Ready问题!

lwk 1 mês atrás
pai
commit
c7fbf48449

+ 16 - 12
Generator/PSG/CCOS.Dev.Generator.PSG_HD/CCOS.Dev.Generator.PSG_HD.cpp

@@ -1047,6 +1047,9 @@ void nsGEN::PSGHDDevice::FireWarnMessage(const bool Act, const int Code, const c
 
 void nsGEN::PSGHDDevice::OnCallBack()
 {
+	// 定义全局变量用于HWDSW和HWEOK之间共享状态
+	bool isReadyFromHWDSW = false;
+
 	// 无操作处理函数
 	auto HWNotProcess = [](const char* value, int length) -> void
 		{
@@ -1332,7 +1335,7 @@ void nsGEN::PSGHDDevice::OnCallBack()
 			FINFO("HWPOW: Power status = {$}", isPowerOn ? "On" : "Off");
 		};
 
-	auto HWEOK = [this](const char* data, int length) -> void
+	auto HWEOK = [this, &isReadyFromHWDSW](const char* data, int length) -> void
 		{
 			if (length < 1) { // 需1字节(X)
 				FINFO("HWEOK: Invalid data length ({$} < 1), skip", length);
@@ -1346,8 +1349,13 @@ void nsGEN::PSGHDDevice::OnCallBack()
 			{
 				if (m_DoseUnit.m_GenState->Update(nsGEN::AttrKey::GENERATOR_STATUS_STANDBY))
 				{
-					//FireNotify(AttrKey::GENSTATE, m_DoseUnit.m_GenState->JSGet());
 					FINFO("HWEOK: Device ready, status updated to STANDBY");
+					// 检查HWDSW的isReady是否也为true,如果是则通知客户端
+					if (isReadyFromHWDSW)
+					{
+						FireNotify(AttrKey::GENSTATE, m_DoseUnit.m_GenState->JSGet());
+						FINFO("HWEOK: HWDSW isReady is true, notifying client");
+					}
 				}
 			}
 			else
@@ -1360,7 +1368,7 @@ void nsGEN::PSGHDDevice::OnCallBack()
 			}
 		};
 
-	auto HWDSW = [this](const char* data, int length) -> void
+	auto HWDSW = [this, &isReadyFromHWDSW](const char* data, int length) -> void
 		{
 			if (length < 1) { // 需1字节(X)
 				FINFO("HWDSW: Invalid data length ({$} < 1), skip", length);
@@ -1368,18 +1376,14 @@ void nsGEN::PSGHDDevice::OnCallBack()
 			}
 
 			char eokStr = data[0]; // 直接取data[0]
-			bool isReady = (eokStr == '1');
+			isReadyFromHWDSW = (eokStr == '0');
+			FINFO("HWDSW: isReady updated to {$}", isReadyFromHWDSW);
 
-			if (isReady && m_DoseUnit.m_GenState->Get()== nsGEN::AttrKey::GENERATOR_STATUS_STANDBY)
-			{
-				FireNotify(AttrKey::GENSTATE, m_DoseUnit.m_GenState->JSGet());
-				FINFO("HWDSW: Device ready, status updated to STANDBY");
-			}
-			else
+			// 如果HWDSW的isReady为true且当前状态已经是STANDBY,则通知客户端
+			if (isReadyFromHWDSW && m_DoseUnit.m_GenState->Get() == nsGEN::AttrKey::GENERATOR_STATUS_STANDBY)
 			{
-				m_DoseUnit.m_GenState->Update(nsGEN::AttrKey::GENERATOR_STATUS_SLEEP);
 				FireNotify(AttrKey::GENSTATE, m_DoseUnit.m_GenState->JSGet());
-				FINFO("HWDSW: Device not ready, status updated to SLEEP");
+				FINFO("HWDSW: Device ready and status is STANDBY, notifying client");
 			}
 		};