Browse Source

Z991239-6033 #comment feat: 退回首页事件处理

Signed-Off-By: commit-hook
刘文涛80174520 7 months ago
parent
commit
fdd1606e47

+ 42 - 4
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -106,6 +106,7 @@ unsigned int CContactlessCardFSM::s2_on_event(FSMEvent* pEvt)
 		{
 			ReadJSEvent* rje = dynamic_cast<ReadJSEvent*>(pEvt);
 			m_bCancelRead = false;
+			m_bPageExit = false;
 			ReadJSTask* task = new ReadJSTask(this);
 			task->ctx = rje->ctx;
 			GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
@@ -115,6 +116,7 @@ unsigned int CContactlessCardFSM::s2_on_event(FSMEvent* pEvt)
 	case USER_EVT_JS_EJECT:
 		{
 			EjectJSEvent* eje = dynamic_cast<EjectJSEvent*>(pEvt);
+			m_bPageExit = false;
 			EjectJSTask* task = new EjectJSTask(this);
 			task->ctx = eje->ctx;
 			GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
@@ -125,6 +127,7 @@ unsigned int CContactlessCardFSM::s2_on_event(FSMEvent* pEvt)
 		{
 			PostOnlineJSEvent* pje = dynamic_cast<PostOnlineJSEvent*>(pEvt);
 			m_bCancelRead = false;
+			m_bPageExit = false;
 			PostOnlineJSTask* task = new PostOnlineJSTask(this);
 			task->ctx = pje->ctx;
 			GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
@@ -576,6 +579,14 @@ unsigned int CContactlessCardFSM::s10_on_event(FSMEvent* pEvt)
 		{
 			m_bCancelRead = true;
 			pEvt->SetHandled();
+			ret = 0;
+		}
+	break;
+	case USER_EVT_EXIT_MIAN_PAGE:
+		{
+			m_bPageExit = true;
+			pEvt->SetHandled();
+			ret = 0;
 		}
 	break;
 	default:
@@ -604,8 +615,16 @@ unsigned int CContactlessCardFSM::s11_on_event(FSMEvent* pEvt)
 	case USER_EVT_JS_EJECTFINISHED:
 		{
 			pEvt->SetHandled();
-			ret = 0;
+			ret = pEvt->param1;
 		}
+	break;
+	case USER_EVT_EXIT_MIAN_PAGE:
+	{
+		m_bPageExit = true;
+		pEvt->SetHandled();
+		ret = 0;
+	}
+	break;
 	default:
 		break;
 	}
@@ -1717,12 +1736,19 @@ int CContactlessCardFSM::EjectJS(SpReqAnsContext<ContactlessCardService_EjectJS_
 	LogEvent(Severity_Middle, LOG_EVT_CONTACTLESS_CARD_GREEN_ON, "ContactCard(fetch) warning on");
 	while (true)
 	{
+
 		dwEnd = SP::Module::Comm::RVCGetTickCount();
 		if ((dwEnd - dwStart) > 58 * 1000)
 		{
-			ret = 2;//超时
+			ret = 1;//超时
 			break;
 		}
+
+		if (m_bPageExit) {
+			ret = 2;
+			break;//退到首页
+		}
+
 		ErrorCodeEnum eErr = m_hDevHelper->GetDevStatus(devStatus);
 		if (eErr == Error_Succeed)
 		{
@@ -1753,7 +1779,7 @@ int CContactlessCardFSM::EjectJS(SpReqAnsContext<ContactlessCardService_EjectJS_
 		if (ret == 0) {
 			ctx->Answer(Error_Succeed);
 		}
-		else {
+		else if(ret == 1 || ret == 2){
 			ctx->Answer(Error_Exception, ContactlessCard_UserErrorCode_Forget_Fectch_Card);
 		}
 	}
@@ -1779,7 +1805,7 @@ int CContactlessCardFSM::ReadJS(SpReqAnsContext<ContactlessCardService_ReadJS_Re
 		//寻卡超时
 		ctx->Answer(Error_Exception, ContactlessCard_UserErrorCode_Read_TimeOut);
 	}
-	else {
+	else if (ret == 3 || ret == 4){
 		//读卡取消
 		ctx->Answer(Error_Exception, ContactlessCard_UserErrorCode_Read_Cancel);
 	}
@@ -1830,6 +1856,10 @@ int CContactlessCardFSM::InternalAcceptCardJS()
 			err = 3;//取消读卡
 			break;
 		}
+		if (m_bPageExit) {
+			err = 4;//退到首页,取消读卡
+			break;
+		}
 
 		l_beginTime = SP::Module::Comm::RVCGetTickCount();
 		eErr = m_hDevHelper->GetDevStatus(devStatus);
@@ -2163,3 +2193,11 @@ int CContactlessCardFSM::PreOnlineJS(SpReqAnsContext<ContactlessCardService_Read
 	return 0;
 
 }
+
+int CContactlessCardFSM::ExitToMainPage()
+{
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("exit to main page, send event");
+	FSMEvent* evt = new FSMEvent(USER_EVT_EXIT_MIAN_PAGE);
+	PostEventFIFO(evt);
+	return 0;
+}

+ 6 - 2
Module/mod_ContactlessCard/ContactlessFSM.h

@@ -46,6 +46,7 @@ enum EvtType
 	USER_EVT_JS_POSTONLINE,
 	USER_EVT_JS_POSTONLINEFINISHED,
 	USER_EVT_JS_READ_CANCEL,
+	USER_EVT_EXIT_MIAN_PAGE
 };
 
 using namespace ContactlessCard;
@@ -241,7 +242,6 @@ public:
 		FSM_RULE_ENTRY(s1,s9,USER_EVT_INITFINISHED,1)
 		FSM_RULE_ENTRY(s1, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s2,s3,USER_EVT_ACCEPT,0)
-		//		FSM_RULE_ENTRY(s2,s9,USER_EVT_ACCEPT,1)
 		FSM_RULE_ENTRY(s2, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s2, s6, USER_EVT_EJECT, 0)
 		FSM_RULE_ENTRY(s3,s4,USER_EVT_ACCEPTFINISHED,0)
@@ -274,13 +274,14 @@ public:
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_READ_FINISHED, 0)
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_POSTONLINEFINISHED, 0)
 		FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_EJECTFINISHED, 0)
+		FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_EJECTFINISHED, 1)
 		FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_EJECTFINISHED, 2)
 		END_FSM_RULE()
 
 		CContactlessCardFSM() : m_bCancelAccept(false), m_bWaitingAccept(false),
 		m_bWaitAccepteMore(false), m_bExit(false), m_resetTimes(0), m_testResult(Error_Succeed)
 		, m_bCDA(false), m_pDataToARQC(NULL), m_csMachineType(true), m_csDevNo(""), m_devInit(false), m_repeatErrTimes(0),
-		m_bCancelRead(false)
+		m_bCancelRead(false),m_bPageExit(false)
 		{
 			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x213); 
 			cmdDecodeMag2 = NULL;
@@ -374,6 +375,8 @@ public:
 
 	int PreOnlineJS(SpReqAnsContext<ContactlessCardService_ReadJS_Req, ContactlessCardService_ReadJS_Ans>::Pointer ctx);
 
+	int ExitToMainPage();
+
 protected:
 	int m_iInsertTries;
 	int m_resetTries;
@@ -406,6 +409,7 @@ private:
 	int m_currentFSMState;
 	//new
 	bool m_bCancelRead;
+	bool m_bPageExit;
 };
 struct InitTask : public ITaskSp
 {

+ 12 - 0
Module/mod_ContactlessCard/mod_ContactlessCard.cpp

@@ -111,6 +111,18 @@ void ContactlessCardServerSession::Handle_QueryHasCardJS(SpReqAnsContext<Contact
 	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke QueryHasCardJS");
 	m_pEntity->QueryHasCardJS(ctx);
 }
+
+void CContactlessCardEntity::OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName)
+{
+	if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))
+	{
+		m_fsm.OnUIState4SetWhatPage(pszValue);
+		if (_strnicmp(pszValue, "M", strlen("M")) == 0) {
+			m_fsm.ExitToMainPage();
+		}
+	}
+}
+
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CContactlessCardEntity)
 SP_END_ENTITY_MAP()

+ 1 - 0
Module/mod_ContactlessCard/mod_ContactlessCard.h

@@ -259,6 +259,7 @@ public:
 	{
 		return new ContactlessCardServerSession(this);
 	}
+	virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName);
 	virtual bool IsService()const{return true;}
 	virtual bool IsMultiThread()const{return true;}
 protected: