Procházet zdrojové kódy

Z991239-6139 #comment feat: 修复contactless实体异常lost缺陷

Signed-Off-By: commit-hook
刘文涛80174520 před 7 měsíci
rodič
revize
0da6654d42

+ 15 - 4
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -486,8 +486,14 @@ void CContactlessCardFSM::s9_on_entry()
 	LOG_FUNCTION();
 	m_currentFSMState = 9;
 	SetDevState(DEVICE_STATUS_FAULT);
-	FSMEvent *e = new FSMEvent(USER_EVT_RESET);
-	PostEventFIFO(e);
+	if (m_bNeedReset) {
+		FSMEvent* e = new FSMEvent(USER_EVT_RESET);
+		PostEventFIFO(e);
+	}
+	else {
+		m_testResult = Error_InvalidState;
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("device is fault, wait for restart entity");
+	}
 }
 void CContactlessCardFSM::s9_on_exit()
 {
@@ -655,8 +661,7 @@ ErrorCodeEnum CContactlessCardFSM::OnInit()
 	if (errCode != Error_Succeed)
 	{
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Load failed(%d).",errCode);
-		m_bOpening = false;
-		return errCode;
+		SetDevInitFlag(false);//打开失败
 	}
 	devStatus.eMediaPos = CI_MEDIA_NOTPRESENT;
 	m_bOpening = false;
@@ -862,6 +867,12 @@ ErrorCodeEnum CContactlessCardFSM::Load()
 }
 int CContactlessCardFSM::Initial()
 {
+	if (!m_bOpened) {
+		m_bNeedReset = false;
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Initial,ret = 1");
+		return 1;//故障模式
+	}
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Initial,ret = 0");
 	return 0;
 }
 bool CContactlessCardFSM::GetDevStatus(bool bPrint)

+ 2 - 1
Module/mod_ContactlessCard/ContactlessFSM.h

@@ -281,7 +281,7 @@ public:
 		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_bPageExit(false)
+		m_bCancelRead(false),m_bPageExit(false), m_bNeedReset(true)
 		{
 			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x213); 
 			cmdDecodeMag2 = NULL;
@@ -409,6 +409,7 @@ private:
 	//new
 	bool m_bCancelRead;
 	bool m_bPageExit;
+	bool m_bNeedReset;
 };
 struct InitTask : public ITaskSp
 {

+ 1 - 1
Module/mod_cardissuerstore/CardIssuerFSM.cpp

@@ -902,7 +902,7 @@ unsigned int CCardIssuerFSM::s7_on_event(FSMEvent* pEvt)
 			FetchCard evt;
 			evt.status = 1;
 			SpSendBroadcast(m_pEntity->GetFunction(), SP_MSG_OF(FetchCard), SP_MSG_SIG_OF(FetchCard), evt);
-			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_USER)("取卡时设备故障");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("取卡时设备故障");
 			return 1;
 		}
 		else {

+ 26 - 0
Module/mod_cardissuerstore/CardIssuerFSM.h

@@ -1952,6 +1952,32 @@ struct QuickSelfcheckTask : public ITaskSp
 	}
 };
 
+struct GetCardInStoreJSTask : public ITaskSp
+{
+	CCardIssuerFSM* fsm;
+	SpReqAnsContext<CardIssuerStoreService_GetCardInStoreJS_Req, CardIssuerStoreService_GetCardInStoreJS_Ans>::Pointer ctx;
+	GetCardInStoreJSTask(CCardIssuerFSM* f) : fsm(f) { ctx = NULL; }
+	void Process()
+	{
+		if (ctx != NULL) {
+			fsm->GetCardInStoreJS(ctx);
+		}
+	}
+};
+
+struct QueryHasCardJSTask : public ITaskSp
+{
+	CCardIssuerFSM* fsm;
+	SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req, CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx;
+	QueryHasCardJSTask(CCardIssuerFSM* f) : fsm(f) { ctx = NULL; }
+	void Process()
+	{
+		if (ctx != NULL) {
+			fsm->QueryHasCardJS(ctx);
+		}
+	}
+};
+
 
 #pragma endregion JS接口 工作线程
 

+ 9 - 2
Module/mod_cardissuerstore/mod_cardissuer.h

@@ -383,7 +383,13 @@ public:
 	void GetCardInStoreJS(SpReqAnsContext<CardIssuerStoreService_GetCardInStoreJS_Req, CardIssuerStoreService_GetCardInStoreJS_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
-		m_fsm.GetCardInStoreJS(ctx);
+		if (!m_fsm.GetDevInitFlag()) {
+			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetCardInStoreJS but DevOpen failed.");
+		}
+		else {
+			m_fsm.GetCardInStoreJS(ctx);
+		}
 	}
 
 	void AddAndReadCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddAndReadCardFromBoxJS_Req, CardIssuerStoreService_AddAndReadCardFromBoxJS_Ans>::Pointer ctx)
@@ -491,7 +497,8 @@ public:
 	{
 		LOG_FUNCTION();
 		if (!m_fsm.GetDevInitFlag()) {
-			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("QueryHasCardJS but DevOpen failed.");
+			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);		
 		}
 		else {
 			m_fsm.QueryHasCardJS(ctx);