Эх сурвалжийг харах

#IQRV #comment [Vendor] nantian/2022.0905.01

gifur 3 жил өмнө
parent
commit
22ba20085b

+ 1 - 1
DevAdapter/CMakeLists.txt

@@ -140,7 +140,7 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 # 通过conan的方式管理厂商库
 if(DEVADAPTER_USING_CONAN)
     set(KEBA_CONAN_LIB_NAME keba/2022.0713.01@LR04.02_VendorLib/testing)
-	set(NANTIAN_CONAN_LIB_NAME nantian/2022.0224.01@LR04.02_VendorLib/testing)
+	set(NANTIAN_CONAN_LIB_NAME nantian/2022.0905.01@LR04.02_VendorLib/testing)
 	set(GRG_CONAN_LIB_NAME grg/2022.0310.01@LR04.02_VendorLib/testing)
 	set(CW_CONAN_LIB_NAME cw/2021.0927.01@LR04.02_VendorLib/testing)
 endif(DEVADAPTER_USING_CONAN)

+ 113 - 67
DevAdapter/nantian/cardissuer.1.1/cardissuer.nantian.1.1.cpp

@@ -41,7 +41,7 @@ CardIssuerClassImpl::CardIssuerClassImpl()
 	//LOG4VTM_FUNCTION();
 
 	LOG4VTM(WARN, "<CardIssuerNantian> - "
-					  << "cardissuer.Nantian.1.1.so - 1.0.0.3");
+					  << "cardissuer.Nantian.1.1.so - 1.0.0.5");
 	FunSum = 0;
 	if (!LoadNTDRVDLL())
 		return;
@@ -99,6 +99,50 @@ bool CardIssuerClassImpl::LoadNTDRVDLL()
 	return true;
 }
 
+int CardIssuerClassImpl::ErrorInfo(int iRet,char * Msg)
+{
+	int ErrIret = Error_Hardware;
+	char ErrorInfo[100]="";
+	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+	switch (iRet)
+	{
+	case E_CARDDISPENSER_CARDJAM:
+		strcpy(ErrorInfo, "hardware error,media jamed");
+		break;
+	case E_CARDDISPENSER_SHUTTERFAIL:
+		strcpy(ErrorInfo, "hardware error,shutter error");
+		break;
+	case E_CARDDISPENSER_NOMEDIA:
+		strcpy(ErrorInfo, "Media error(No media)");
+		ErrIret = Error_DevMedia;
+		break;
+	case E_CARDDISPENSER_CARDTOOLONG:
+		strcpy(ErrorInfo, "Media error(Media to long)");
+		ErrIret = Error_DevMedia;
+		break;
+	case E_CARDDISPENSER_CARDTOOSHORT:
+		strcpy(ErrorInfo, "Media error(Media to short)");
+		ErrIret = Error_DevMedia;
+		break;
+	case E_CARDDISPENSER_INVALIDMEDIA:
+		strcpy(ErrorInfo, "Media error(Data lack,unrecognized and so on)");
+		ErrIret = Error_DevMedia;
+		break;
+	case E_CARDDISPENSER_DATAMISSING:
+		strcpy(ErrorInfo, "Media error(Data lack,unrecognized and so on)");
+		ErrIret = Error_DevMedia;
+		break;
+	case E_CARDDISPENSER_RETIANBINFULL:
+		strcpy(ErrorInfo, "RetianBin Full");
+		break;
+	default:
+		strcpy(ErrorInfo, "hardware error");
+		break;
+	}
+	sprintf(m_errorInfo.szErrMsg, "FunMsg:%s,ErrorInfo:%s",Msg,ErrorInfo);
+	m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+	return ErrIret;
+}
 ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
 	mtx.lock();
@@ -137,7 +181,7 @@ ErrorCodeEnum CardIssuerClassImpl::Reset()
 		//复位设备
 		char *sReset[10] = {NULL};
 		char PowerOnFlag[10] = "1";
-		char PowerOffFlag[10] = "3";
+		char PowerOffFlag[10] = "1";
 		sReset[1] = PowerOnFlag;
 		sReset[2] = PowerOffFlag;
 		iRet = DRVCardDispenser->ResetDev(3, sReset);
@@ -145,10 +189,7 @@ ErrorCodeEnum CardIssuerClassImpl::Reset()
 		{
 			LOG4VTM(ERROR, "<Reset> - "
 							   << "ResetDev-return:" << iRet);
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-			iRet = Error_Hardware;
-			throw(iRet);
+			throw(ErrorInfo(iRet,"ResetDev Error"));
 		}
 		iRet = Error_Succeed;
 	}
@@ -255,7 +296,7 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 		//复位设备
 		char *sReset[10] = {NULL};
 		char PowerOnFlag[10] = "1";
-		char PowerOffFlag[10] = "3";
+		char PowerOffFlag[10] = "1";
 		sReset[1] = PowerOnFlag;
 		sReset[2] = PowerOffFlag;
 		iRet = DRVCardDispenser->ResetDev(3, sReset);
@@ -263,10 +304,7 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 		{
 			LOG4VTM(ERROR, "<DevOpen> - "
 							   << "ResetDev-return:" << iRet);
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-			iRet = Error_Hardware;
-			throw(iRet);
+			throw(ErrorInfo(iRet,"Open ResetDev Error"));
 		}
 
 		int mSupplyBin = 2, mRetainBin = 1, mHoldBin = 0;
@@ -469,6 +507,19 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 	mtx.lock();
 
 	int iRet = Error_Succeed;
+
+	//***设备状态查询
+	char sDevice[10] = "";
+	char sMedia[10] = "";
+	char sChipPower[10] = "";
+	char sRetainCount[10] = "";
+	char sShutter[10] = "";
+	char *sStatus[100] = {NULL};
+	sStatus[1] = sDevice;
+	sStatus[2] = sMedia;
+	sStatus[4] = sChipPower;
+	sStatus[8] = sRetainCount;
+	sStatus[16] = sShutter;
 	try
 	{
 		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
@@ -483,18 +534,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 		LOG4VTM(WARN, "<MoveCard> - "
 						  << "MoveCard-eCardPos:" << eCardPos);
 
-		//***设备状态查询
-		char sDevice[10] = "";
-		char sMedia[10] = "";
-		char sChipPower[10] = "";
-		char sRetainCount[10] = "";
-		char sShutter[10] = "";
-		char *sStatus[100] = {NULL};
-		sStatus[1] = sDevice;
-		sStatus[2] = sMedia;
-		sStatus[4] = sChipPower;
-		sStatus[8] = sRetainCount;
-		sStatus[16] = sShutter;
+		//查询状态
 		DRVCardDispenser->GetDevStatus(0, sStatus);
 		if (stoi(sDevice) != CARDDISPENSER_DEVONLINE)
 		{
@@ -519,6 +559,10 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 				iRet = Error_Param;
 				throw(iRet);
 			}
+			if ((atoi(sMedia) == CARDDISPENSER_MEDIAENTERING))
+			{
+				throw(Error_Succeed);
+			}
 			if ((atoi(sMedia) == CARDDISPENSER_MEDIALATCHED) ||
 				(atoi(sChipPower) == CARDDISPENSER_CHIPONLINE) ||
 				(atoi(sChipPower) == CARDDISPENSER_CHIPBUSY))
@@ -539,11 +583,9 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 			{
 				LOG4VTM(ERROR, "<MoveCard> - "
 								   << "EjectCard-return:" << iRet);
-				strcpy(m_errorInfo.szErrMsg, "device EjectCard Fail!");
-				m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-				iRet = Error_Hardware;
-				throw(iRet);
+				throw(ErrorInfo(iRet,"Dev EjectCard Error"));
 			}
+
 		}
 		break;
 			//吞卡
@@ -592,10 +634,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 					goto STARTRETAIN;
 				}
 				//m_trace->WriteTrace(CILIXTRACE_L_INFO,"MoveCard","CI_MOVECARD_BACK_NOT_HOLD.tryTime:%d",tryTime);
-				strcpy(m_errorInfo.szErrMsg, "device RetainCard Fail!");
-				m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-				iRet = Error_Hardware;
-				throw(iRet);
+				throw(ErrorInfo(iRet,"Dev RetainCard Error"));
 			}
 		}
 		break;
@@ -614,10 +653,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 			{
 				LOG4VTM(ERROR, "<MoveCard> - "
 								   << "Dispense-return:" << iRet);
-				strcpy(m_errorInfo.szErrMsg, "device dispenser card error");
-				m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-				iRet = Error_Hardware;
-				throw(iRet);
+				throw(ErrorInfo(iRet,"Dev Dispense Error"));
 			}
 		}
 		break;
@@ -627,6 +663,37 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 	{
 		iRet = eret;
 	}
+	//方法返回前查询一次状态
+	//查询介质状态
+	memset(sMedia,0,sizeof(sMedia));
+	DRVCardDispenser->GetDevStatus(2, sStatus);
+	switch ((atoi(sMedia)))
+	{
+	case CARDDISPENSER_MEDIALATCHED:
+	case CARDDISPENSER_MEDIAPRESENT:
+	{
+		this->statusCache.eMedia = CI_MEDIA_PRESENT;
+	}
+	break;
+	case CARDDISPENSER_MEDIANOTPRESENT:
+	{
+		this->statusCache.eMedia = CI_MEDIA_NOTPRESENT;
+	}
+	break;
+	case CARDDISPENSER_MEDIAJAMMED:
+		this->statusCache.eMedia = CI_MEDIA_JAMMED;
+		break;
+	case CARDDISPENSER_MEDIAENTERING:
+	{
+		this->statusCache.eMedia = CI_MEDIA_ENTERING;
+	}
+	break;
+	default:
+	{
+		this->statusCache.eMedia = CI_MEDIA_NOTPRESENT;
+	}
+	break;
+	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
@@ -673,10 +740,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 		{
 			LOG4VTM(ERROR, "<SetCardInType> - "
 							   << "InsertCard-return:" << iRet);
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-			iRet = Error_Hardware;
-			throw(iRet);
+			throw(ErrorInfo(iRet,"Dev InsertCard Error"));
 		}
 
 		iRet = Error_Succeed;
@@ -877,9 +941,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 
 		if (ierr < 0)
 		{
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-			iRet = Error_Hardware;
+			return (ErrorCodeEnum)ErrorInfo(iRet,"Dev SetRetainCount Error");
 		}
 	}
 	mtx.unlock();
@@ -904,15 +966,13 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 	int iATR = 0;
 
 	int ierr = 0;
-	iRet = DRVCardDispenser->ICCPower(2, (char *)sATR, &iATR);
+	iRet = DRVCardDispenser->ICCPower(3, (char *)sATR, &iATR);
 
 	if (iRet < 0)
 	{
 		LOG4VTM(ERROR, "<ActiveICCard> - "
 						   << "ICCPower-return:" << iRet);
-		strcpy(m_errorInfo.szErrMsg, "hardware error");
-		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-		iRet = Error_Hardware;
+		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -937,9 +997,7 @@ ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 	{
 		LOG4VTM(ERROR, "<ContactIC> - "
 						   << "ICCPower-return:" << iRet);
-		strcpy(m_errorInfo.szErrMsg, "hardware error");
-		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-		iRet = Error_Hardware;
+		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -960,9 +1018,7 @@ ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 	{
 		LOG4VTM(ERROR, "<ReleaseIC> - "
 						   << "ICCPower-return:" << iRet);
-		strcpy(m_errorInfo.szErrMsg, "hardware error");
-		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-		iRet = Error_Hardware;
+		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -989,9 +1045,7 @@ ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 	{
 		LOG4VTM(ERROR, "<WarmReset> - "
 						   << "ICCPower-return:" << iRet);
-		strcpy(m_errorInfo.szErrMsg, "hardware error");
-		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-		iRet = Error_Hardware;
+		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -1024,10 +1078,7 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
 		{
 			LOG4VTM(ERROR, "<ICCommand> - "
 							   << "ICCTransmit-return:" << iRet);
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-			iRet = Error_Hardware;
-			throw(iRet);
+			throw(ErrorInfo(iRet,"Dev ICCTransmit Error"));
 		}
 		if (szRecvData[iRecvLength - 2] == 0x61)
 		{
@@ -1075,9 +1126,7 @@ ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 	{
 		LOG4VTM(ERROR, "<DeactivateICCard> - "
 						   << "ICCPower-return:" << iRet);
-		strcpy(m_errorInfo.szErrMsg, "hardware error");
-		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-		iRet = Error_Hardware;
+		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -1152,7 +1201,7 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYT
 		//复位设备
 		char *sReset[10] = {NULL};
 		char PowerOnFlag[10] = "1";
-		char PowerOffFlag[10] = "3";
+		char PowerOffFlag[10] = "1";
 		sReset[1] = PowerOnFlag;
 		sReset[2] = PowerOffFlag;
 		iRet = DRVCardDispenser->ResetDev(3, sReset);
@@ -1160,10 +1209,7 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYT
 		{
 			LOG4VTM(ERROR, "<DevOpenEx> - "
 							   << "ResetDev-return:" << iRet);
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-			iRet = Error_Hardware;
-			throw(iRet);
+			throw(ErrorInfo(iRet,"Open ResetDev Error"));
 		}
 		int mSupplyBin = 2, mRetainBin = 1, mHoldBin = 0;
 

+ 1 - 1
DevAdapter/nantian/cardissuer.1.1/cardissuer.nantian.1.1.h

@@ -198,7 +198,7 @@ public:
 	bool  m_isCanceled;
 	
 	bool LoadNTDRVDLL();
-	
+	int ErrorInfo(int iRet,char * Msg);
 
     std::mutex mtx;
     std::mutex statusMtx;

+ 55 - 19
DevAdapter/nantian/contactlesscard.1.1/contactless.nantian.1.1.cpp

@@ -27,7 +27,7 @@ ContactlessCardImpl::ContactlessCardImpl()
     std::string str;
     cmb::log4vendor::init(config, str);
     LOG4VTM(WARN, "<Contactless::ContactlessCardImpl> - "
-                      << "libContactless.nantian.1.1.so v1.0.0.0");
+                      << "libContactless.nantian.1.1.so v1.0.0.1");
 
     bCancelFlag = false;
     bDevOpen = false;
@@ -368,12 +368,24 @@ ErrorCodeEnum ContactlessCardImpl::ActiveContactlessICCard(char fstType, char sc
             iRet = drv_CardReader->ICCPower(3, sAtr, &iAtr);
             if (iRet != Error_Succeed)
             {
-                sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
-                LOG4VTM(WARN, "<Contactless::ActiveContactlessICCard> - "
-                                  << "执行ICCPower失败返回" << iRet);
-                iRet = Error_Hardware;
-                throw iRet;
+                if (iRet == -2)
+                {
+                    sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
+                    m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                    LOG4VTM(WARN, "<Contactless::ActiveContactlessICCard> - "
+                                      << "执行ICCPower失败返回" << iRet);
+                    iRet = Error_DevMedia;
+                    throw iRet;
+                }
+                else
+                {
+                    sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+                    m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                    LOG4VTM(WARN, "<Contactless::ActiveContactlessICCard> - "
+                                      << "执行ICCPower失败返回" << iRet);
+                    iRet = Error_Hardware;
+                    throw iRet;
+                }
             }
             outType = 'A';
         }
@@ -467,12 +479,24 @@ ErrorCodeEnum ContactlessCardImpl::WarmReset()
         iRet = drv_CardReader->ICCPower(3, sAtr, &iAtr);
         if (iRet != Error_Succeed)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
-            LOG4VTM(WARN, "<Contactless::WarmReset> - "
-                              << "执行ICCPower失败返回" << iRet);
-            iRet = Error_Hardware;
-            throw iRet;
+            if (iRet == -2)
+            {
+                sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
+                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                LOG4VTM(WARN, "<Contactless::WarmReset> - "
+                                    << "执行ICCPower失败返回" << iRet);
+                iRet = Error_DevMedia;
+                throw iRet;
+            }
+            else
+            {
+                sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                LOG4VTM(WARN, "<Contactless::WarmReset> - "
+                                    << "执行ICCPower失败返回" << iRet);
+                iRet = Error_Hardware;
+                throw iRet;
+            }
         }
     }
     catch (int ierror)
@@ -554,12 +578,24 @@ ErrorCodeEnum ContactlessCardImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
         iRet = drv_CardReader->ICCTransmit(0, (char *)szSendData, iSendLength, (char *)szRecvData, &iRecvLength);
         if (iRet != Error_Succeed)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
-            LOG4VTM(WARN, "<Contactless::RFTypeABCommand> - "
-                              << "执行ICCTransmit失败返回" << iRet);
-            iRet = Error_Hardware;
-            throw iRet;
+            if (iRet == -2)
+            {
+                sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
+                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                LOG4VTM(WARN, "<Contactless::RFTypeABCommand> - "
+                                    << "执行ICCTransmit失败返回" << iRet);
+                iRet = Error_DevMedia;
+                throw iRet;
+            }
+            else
+            {
+                sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                LOG4VTM(WARN, "<Contactless::RFTypeABCommand> - "
+                                    << "执行ICCTransmit失败返回" << iRet);
+                iRet = Error_Hardware;
+                throw iRet;
+            }
         }
         if (szRecvData[iRecvLength - 2] == 0x61)
         {