Browse Source

#IQRV #comment 优化硬件实体异常后不设置窗口坐标的问题

80374374 1 year ago
parent
commit
929cea2c5e

+ 2 - 0
Module/mod_ScannerSet/ScannerSetFSM.cpp

@@ -87,6 +87,7 @@ CScannerFSM::CScannerFSM(void)
 	m_dwErroCode(0),
 	m_nFatalTimes(0),
 	m_nSrcState(s0),
+	m_resetPosFlag(false),
 	m_iEvt(-1)
 {
 }
@@ -608,6 +609,7 @@ int CScannerFSM::SetWinPos(SpReqAnsContext<ScannerService_SetWindowPos_Req,
 	erroCode = (*m_pHSPSClient)(EntityResource::getLink().upgradeLink())->SetWinPos(req, ans, MILLISECOND_WAIT_TIMEOUT_DEFAULT, dwUserCode);
 
 	if (FAILURED(erroCode)) {
+		m_resetPosFlag = true;
 		if (MapErrorCode2Level(erroCode)) {
 			LogWarn(Severity_Middle, erroCode, LOG_ERR_SCANNERSET_API_INVOKE_SetWinPos,
 				CSimpleStringA::Format("SetWinPos context failed, ErrCode:%s, userCode: 0x%08X.", SpStrError(erroCode), dwUserCode));

+ 11 - 5
Module/mod_ScannerSet/ScannerSetFSM.h

@@ -305,12 +305,18 @@ private:
 	DWORD m_dwErroCode;
 	int m_nFatalTimes;
 	int m_nSrcState;
-
+	bool m_resetPosFlag;
 	int m_iEvt;
 public:
 	DWORD GetCustLastErrorCode() { return m_dwErroCode; }
 	void SetCustLastErrorCode(DWORD dwVal = 0) { m_dwErroCode = dwVal; }
-
+	bool GetResetFlag()
+	{
+		if (m_resetPosFlag) {
+			return true;
+		}
+		return false;
+	}
 public:
 
 	bool IsHSPSConnectSessionOK();
@@ -357,8 +363,10 @@ private:
 	bool IsSuitableEntityAvailable() 
 	{
 		if(ISSUCCEEDED(ConnectToHSPScanner())) {
-				return true;
+			m_resetPosFlag = false;
+			return true;
 		}
+		m_resetPosFlag = true;
 		return false;
 	}
 
@@ -368,8 +376,6 @@ private:
 		return;
 	}
 
-	ErrorCodeEnum LoadConfigAboutCamera();
-
 	template <class TReq, class TAns>
 	PVOID inline TransferCtx(CSmartPointer<SpReqAnsContext<TReq, TAns> > ctx)
 	{

+ 30 - 21
Module/mod_ScannerSet/mod_ScannerSet.h

@@ -25,7 +25,11 @@ class ScannerServerSession: public ScannerService_ServerSessionBase
 {
 
 public:
-	ScannerServerSession(CScannerEntity *pEntity):m_pEntity(pEntity){}
+	ScannerServerSession(CScannerEntity *pEntity):m_pEntity(pEntity){
+	
+		
+
+	}
 	virtual ~ScannerServerSession(){}
 
 	virtual void Handle_StartPreview(SpReqAnsContext<ScannerService_StartPreview_Req, 
@@ -70,7 +74,10 @@ public:
 class CScannerEntity : public CEntityBase, public IEntityStateListener
 {
 public:
-	CScannerEntity() {}
+	CScannerEntity() {
+		ResetLastSetWinPosParam();
+	}
+
 	virtual ~CScannerEntity() 
 	{
 		if(GetFunction()->HasPrivilege()) {
@@ -114,15 +121,6 @@ public:
 	virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		LOG_FUNCTION();
-
-#ifdef TWINKLE_LOCAL_DEBUG
-
-		const UINT result = UniTest(this);
-		if(result != 0) {
-			LogError(Severity_High, Error_Unexpect, result, CSimpleStringA::Format("line: %u", result));
-		}
-
-#endif
 		SpReqAnsContext<ScannerService_StartPreview_Req,
 			ScannerService_StartPreview_Ans>::Pointer ctx = 
 			new SpReqAnsContext<ScannerService_StartPreview_Req,
@@ -145,6 +143,15 @@ public:
 		pTransactionContext->SendAnswer(erroCode);
 	}
 
+	void ResetLastSetWinPosParam()
+	{
+		mLastSetWinReqParam.type = -1;
+		mLastSetWinReqParam.pointX = -1;
+		mLastSetWinReqParam.pointY = -1;
+		mLastSetWinReqParam.nWidth = -1;
+		mLastSetWinReqParam.reserved4 = -1;
+	}
+
 	void Preview(SpReqAnsContext<ScannerService_StartPreview_Req,
 		ScannerService_StartPreview_Ans>::Pointer ctx)
 	{
@@ -184,19 +191,19 @@ public:
 	void SetWinPos(SpReqAnsContext<ScannerService_SetWindowPos_Req,
 		ScannerService_SetWindowPos_Ans>::Pointer ctx)
 	{
-		static ScannerService_SetWindowPos_Req  lastReq = {-1, -1, -1, -1, -1};
+		if (m_fsm.GetResetFlag()) { ResetLastSetWinPosParam(); }
 
-		if((ctx->Req.type != lastReq.type
-			|| ctx->Req.pointX != lastReq.pointX
-			|| ctx->Req.pointY != lastReq.pointY
-			|| ctx->Req.nWidth != lastReq.nWidth
+		if((ctx->Req.type != mLastSetWinReqParam.type
+			|| ctx->Req.pointX != mLastSetWinReqParam.pointX
+			|| ctx->Req.pointY != mLastSetWinReqParam.pointY
+			|| ctx->Req.nWidth != mLastSetWinReqParam.nWidth
 			/*|| ctx->Req.reserved4 != lastReq.reserved4*/)) {
 
-				lastReq.type = ctx->Req.type;
-				lastReq.pointX = ctx->Req.pointX;
-				lastReq.pointY = ctx->Req.pointY;
-				lastReq.nWidth = ctx->Req.nWidth;
-				lastReq.reserved4 = ctx->Req.reserved4;
+				mLastSetWinReqParam.type = ctx->Req.type;
+				mLastSetWinReqParam.pointX = ctx->Req.pointX;
+				mLastSetWinReqParam.pointY = ctx->Req.pointY;
+				mLastSetWinReqParam.nWidth = ctx->Req.nWidth;
+				mLastSetWinReqParam.reserved4 = ctx->Req.reserved4;
 
 				PendingTask* pTask = new PendingTask(&m_fsm);
 				pTask->SetContext(ctx);
@@ -279,6 +286,8 @@ public:
 
 private:
 	CScannerFSM m_fsm;
+
+	ScannerService_SetWindowPos_Req  mLastSetWinReqParam;
 };
 
 HSPScannerClient::HSPScannerClient(CScannerEntity *pEntity)