Browse Source

Z991239-5847 #comment feat: 消除循环报错

Signed-Off-By: commit-hook
刘文涛80174520 10 months ago
parent
commit
2b85a19e77

+ 1 - 1
DevAdapter/include/CardAssist.cpp

@@ -450,7 +450,7 @@ bool CCardProcess::DetectIfICCard(CardReadType eType, DeviceBaseClass *pCardX, i
 
 		if (eErr != Error_Succeed)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("DetectIfICCard::ActiveContactlessICCard err=%s", SpStrError(eErr));
+			//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("DetectIfICCard::ActiveContactlessICCard err=%s", SpStrError(eErr));
 			//QueryLastErr(eType, errMsg);
 			//setCardAssistLastErr(eErr,errMsg, "DevAdapter::ActiveContactlessICCard");
 			errMsg = CSimpleStringA::Format("DetectIfICCard::ActiveContactlessICCard failed(%s):%s", SpStrError(eErr), errMsg.GetData());

+ 10 - 0
Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp

@@ -1006,6 +1006,8 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 	DWORD elapsed = 0;
 	DWORD dwStart = GetTickCountRVC();
 	DWORD dwEnd = GetTickCountRVC();
+	int insertloopNum = 0;
+	int preloopNum = 0;
 	while(elapsed + ReadCard_Min_Time < ReadCard_TIMEOUT)
 	{
 		if (IsTheEntity(ctx->Req.module, Module_ContactlessCard) && IsContactlessCardSessionOK())
@@ -1020,6 +1022,9 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 			DWORD dwTimeout = ReadCard_TIMEOUT - (dwEnd-dwStart);
 			m_busCtx.eCardFromWhich = Card_In_No_Where;
 			m_busCtx.eCardProcStage = Card_ProcStage_WaitForCard;
+			if (insertloopNum % 5 == 0) {
+				req.reserved1 = "P";
+			}
 			eErr = (*m_pContactless)(EntityResource::getLink().upgradeLink())->Insert(req, ans, dwTimeout, dwUserCode);
 			if (eErr == Error_Succeed)
 			{
@@ -1061,6 +1066,7 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 				dwEnd = GetTickCountRVC();
 				elapsed = dwEnd - dwStart;
 				Sleep(200);
+				insertloopNum++;
 				continue;
 			}
 			else if(eErr == Error_DevNotAvailable || eErr == Error_InvalidState)//设备不可用或实体异常
@@ -1090,6 +1096,9 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 				ContactlessCardService_PreOnline_Ans ans;
 				req.businessData = ctx->Req.businessData;
 				BroadcastReadICing(0);
+				if (preloopNum % 5 == 0) {
+					req.reserved1 = "P";
+				}
 				eErr = (*m_pContactless)(EntityResource::getLink().upgradeLink())->PreOnline(req, ans, 50000);
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("ContacelssCard PreOnline result:%d", eErr));
 				if (eErr == Error_Succeed)
@@ -1100,6 +1109,7 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ContacelssCard return Error_Interact, need loop.");
 					dwEnd = GetTickCountRVC();
 					elapsed = dwEnd - dwStart;
+					preloopNum++;
 					Sleep(200);
 					continue;
 				}

+ 21 - 10
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -927,16 +927,22 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
 				// -1和-2是上电或APDU交互失败,功能集循环调用
 				if (retDetectAndRead == -1){
 					
-					SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_ActiveContactlessICCard, "DevAdapter::ActiveContactlessICCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+						SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_ActiveContactlessICCard, "DevAdapter::ActiveContactlessICCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					}
 					ctx->Answer(Error_Interact, GetAlarmDEC());
 				}
 				else if (retDetectAndRead == -2){
 					
-					SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+						SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					}
 					ctx->Answer(Error_Interact, GetAlarmDEC());
 				}else if (retDetectAndRead == -3){
 					
-					SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+						SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					}
 					ctx->Answer(Error_Interact, GetAlarmDEC());
 				}
 				return 2;
@@ -953,7 +959,9 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
 				eErr = m_hDevHelper->HaltCard();
 				l_endTime = SP::Module::Comm::RVCGetTickCount();
 				if(Error_Succeed != eErr){
-					SetErrorAndLog(eErr, MEC_DEVAPI_RF_HaltCard, "DevAdapter::HaltCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+						SetErrorAndLog(eErr, MEC_DEVAPI_RF_HaltCard, "DevAdapter::HaltCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+					}
 				}
 				ctx->Answer(Error_Interact);//can't find track2,retry 20150128
 			}
@@ -1096,17 +1104,20 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
 	{
 		// -1和-2是上电或APDU交互失败,功能集循环调用
 		if (retDetectAndRead == -1){
-			
-			SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_ActiveContactlessICCard, "DevAdapter::ActiveContactlessICCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+			if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+				SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_ActiveContactlessICCard, "DevAdapter::ActiveContactlessICCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+			}
 			ctx->Answer(Error_Interact, AlarmDEC());
 		}
 		else if (retDetectAndRead == -2){
-			
-			SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+			if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+				SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+			}
 			ctx->Answer(Error_Interact, AlarmDEC());
 		}else if (retDetectAndRead == -3){
-			
-			SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+			if (!ctx->Req.reserved1.IsNullOrEmpty() && ctx->Req.reserved1.Compare("P") == 0) {
+				SetErrorAndLog(Error_Unexpect, MEC_DEVAPI_RF_RFTypeABCommand, "DevAdapter::RFTypeABCommand", __FUNCTION__, false, l_endTime - l_beginTime, "", "");
+			}
 			ctx->Answer(Error_Interact, AlarmDEC());
 		}
 		return 0;