فهرست منبع

#IQRV #comment 实体启动时增加对m_iInWhatPage的初始化逻辑

80374374 3 ماه پیش
والد
کامیت
c119e52330
3فایلهای تغییر یافته به همراه34 افزوده شده و 12 حذف شده
  1. 3 0
      Framework/Common/SpFSM.h
  2. 1 0
      Framework/spbase/SpFSM.cpp
  3. 30 12
      Module/include/DevFSMCommBase.hpp

+ 3 - 0
Framework/Common/SpFSM.h

@@ -145,6 +145,9 @@ public:
 
 	void __ProcessEvent(FSMEvent *e);
 
+protected:
+	virtual void __PostInit() { }
+
 protected:
 	int m_iState;
 	CEntityBase *m_pEntity;

+ 1 - 0
Framework/spbase/SpFSM.cpp

@@ -114,6 +114,7 @@ ErrorCodeEnum FSMBase::Init(CEntityBase *pEntity)
 
 	ErrorCodeEnum Error = OnInit();
 	if (Error == Error_Succeed) {
+		__PostInit();
 		Trans(GetInitState());
 	}
 	else {

+ 30 - 12
Module/include/DevFSMCommBase.hpp

@@ -604,7 +604,7 @@ class CCommDevFSM : public FSMImpl<TFSM>
 public:
 	CCommDevFSM() : m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_eDevState(DEVICE_STATUS_NOT_READY),m_contiErrTimes(0), m_preUIState('X')
 	{
-
+		
 	}
 
 	ErrorCodeEnum GetAndSplitDevErrInfo(
@@ -850,17 +850,7 @@ public:
 	void OnUIState4SetWhatPage(const char* pcszValue) {
 		if (pcszValue != NULL && strlen(pcszValue) > 0) {
 			bool trigger(false);
-			//增加页面位置判断
-			if (_strnicmp(pcszValue, "M", strlen("M")) == 0) {
-				SetInWhatPage(PageType_MainPage);
-			}
-			else if (_strnicmp(pcszValue, "U", strlen("U")) == 0) {
-				SetInWhatPage(PageType_UserDesktop);
-			}
-			else {
-				SetInWhatPage(PageType_Other);
-			}
-			
+			UiState2WhatPage(pcszValue);
 			if (m_preUIState != pcszValue[0]) {
 				if (pcszValue[0] == 'M') {
 					trigger = true;
@@ -898,6 +888,18 @@ protected:
 	AdapterInfo m_adapterInfo;
 	DevStateEnum m_eDevState;
 
+	void __PostInit() override
+	{
+		if (m_pEntity != NULL) {
+			CSimpleStringA uiState(true);
+			auto err = m_pEntity->GetFunction()->GetSysVar("UIState", uiState);
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("get uistate: %s,%s",SpStrError(err), uiState.GetData());
+			if (err == Error_Succeed && !uiState.IsNullOrEmpty()) {
+				UiState2WhatPage(uiState);
+			}
+		}
+	}
+
 	void UpdateEntityIDIfZero()
 	{
 		if (m_entCode.dwEntityId == 0) {
@@ -986,6 +988,22 @@ protected:
 	
 	virtual void OnHardwareShakeHand(CSmartPointer<ITransactionContext> pTransactionContext);
 
+private:
+
+	void UiState2WhatPage(const char* pcszValue)
+	{
+		//增加页面位置判断
+		if (_strnicmp(pcszValue, "M", strlen("M")) == 0) {
+			SetInWhatPage(PageType_MainPage);
+		}
+		else if (_strnicmp(pcszValue, "U", strlen("U")) == 0) {
+			SetInWhatPage(PageType_UserDesktop);
+		}
+		else if (_strnicmp(pcszValue, "X", strlen("X")) != 0) {
+			SetInWhatPage(PageType_Other);
+		}
+	}
+
 private:
 	char m_preUIState;
 };