Browse Source

#IQRV #comment [Vendor] nantian/2021.0831.01

gifur 4 năm trước cách đây
mục cha
commit
bc41890665

+ 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/2021.0625.01@LR04.02_VendorLib/testing)
-	set(NANTIAN_CONAN_LIB_NAME nantian/2021.0824.01@LR04.02_VendorLib/testing)
+	set(NANTIAN_CONAN_LIB_NAME nantian/2021.0831.01@LR04.02_VendorLib/testing)
 	set(GRG_CONAN_LIB_NAME grg/2021.0826.01@LR04.02_VendorLib/testing)
 	set(CW_CONAN_LIB_NAME cw/2021.0701.01@LR04.02_VendorLib/testing)
     set(GWI_CONAN_LIB_NAME gwi/2021.0830.01@LR04.02_VendorLib/testing)

+ 46 - 69
DevAdapter/nantian/cardissuer.1.1/cardissuer.nantian.1.1.cpp

@@ -9,9 +9,6 @@ CardIssuerClassImpl::CardIssuerClassImpl()
 	m_isDevOpened = false;
 	m_isCanceled = false;
 
-	m_busy_flag = false;
-	m_signal_get_flag = false;
-
 	m_SetCardInTypeFlag = 0;
 	m_CardInTypeFlag = false;
 
@@ -107,8 +104,7 @@ bool CardIssuerClassImpl::LoadNTDRVDLL()
 
 ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	ErrorCodeEnum err = Error_Succeed;
 	std::strcpy(devCategory.szModel, "FWID=");
@@ -120,15 +116,14 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 	std::strcpy(devCategory.szType, "PVER=ACTT#MID=ACT-F55570");
 	std::strcpy(devCategory.szVendor, "nantian");
 
-	m_busy_flag = false;
+	mtx.unlock();
 	return err;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::Reset()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = 0;
 	try
@@ -164,15 +159,15 @@ ErrorCodeEnum CardIssuerClassImpl::Reset()
 	{
 		iRet = eret;
 	}
-	m_busy_flag = false;
+	
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::DevClose()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = 0;
 	iRet = DRVCardDispenser->CloseDev();
@@ -184,7 +179,8 @@ ErrorCodeEnum CardIssuerClassImpl::DevClose()
 
 		iRet = Error_DevConnFailed;
 	}
-	m_busy_flag = false;
+	
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 
@@ -226,8 +222,7 @@ DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
 ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 	char *CapInfo[10];
@@ -290,27 +285,26 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 		iRet = eret;
 	}
 
-	m_busy_flag = false;
 	for (int i = 0; i < 10; i++)
 	{
 		delete[] CapInfo[i];
 	}
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 {
 	LOG4VTM_FUNCTION();
-	if (m_busy_flag == true || m_signal_get_flag == true)
+	if(mtx.try_lock() == false)
 	{
-		if (m_StatusErrorCode == Error_Succeed)
-			devStatus = tempStatus;
-		m_signal_get_flag = false;
+		statusMtx.lock();
+		devStatus = statusCache;
+		statusMtx.unlock();
 		return m_StatusErrorCode;
 	}
 
-	m_signal_get_flag = true;
-
 	int iRet = Error_Succeed;
+	CardIssuerStatus tempStatus;
 	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
 	m_errorInfo.dwErrMsgLen = 0;
 	char *BoxStatus[200] = {NULL};
@@ -448,13 +442,18 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 	{
 		iRet = eret;
 	}
-	devStatus = tempStatus;
-	m_signal_get_flag = false;
+	statusMtx.lock();
+	statusCache = tempStatus;
+	devStatus = statusCache;
+	statusMtx.unlock();
+	
+	// m_signal_get_flag = false;
 	m_StatusErrorCode = (ErrorCodeEnum)iRet;
 	for (int i = 0; i < 200; i++)
 	{
 		delete[] BoxStatus[i];
 	}
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
@@ -467,8 +466,7 @@ ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
 ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 	try
@@ -633,18 +631,17 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 	{
 		iRet = eret;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 {
 	LOG4VTM_FUNCTION();
+	mtx.lock();
 	LOG4VTM(WARN, "<SetCardInType> - "
 					  << "eCardIn-" << eCardIn);
-	m_busy_flag = true;
 	LOG4VTM(WARN, "<SetCardInType> - "
 					  << "WaitGetStatus");
-	WAITING_LOOP();
 	LOG4VTM(WARN, "<SetCardInType> - "
 					  << "WaitSetCardInTypeEnd");
 	if ((m_SetCardInTypeFlag != 0) && (!m_CardInTypeFlag))
@@ -708,18 +705,17 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 	{
 		iRet = eret;
 	}
-	m_busy_flag = false;
 	LOG4VTM(WARN, "<SetCardInType> - "
 					  << "SetCardInType Exit Count:" << FunSum);
 	FunSum++;
 	m_SetCardInTypeFlag = 2;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 	try
@@ -804,14 +800,13 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 	{
 		iRet = eret;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
@@ -881,14 +876,13 @@ ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnu
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 		iRet = Error_Hardware;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 
@@ -909,7 +903,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 			iRet = Error_Hardware;
 		}
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount, int hopperNo)
@@ -920,8 +914,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount, int hopperNo)
 ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 
@@ -942,14 +935,13 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 		iRet = Error_Hardware;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = 0;
 
@@ -970,14 +962,13 @@ ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 		iRet = Error_Hardware;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = 0;
 
@@ -994,14 +985,13 @@ ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 		iRet = Error_Hardware;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = 0;
 
@@ -1024,14 +1014,13 @@ ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 		iRet = Error_Hardware;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = 0;
 
@@ -1086,14 +1075,13 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
 	{
 		iRet = eret;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 
@@ -1112,7 +1100,7 @@ ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 		iRet = Error_Hardware;
 	}
-	m_busy_flag = false;
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 
@@ -1143,8 +1131,7 @@ ErrorCodeEnum CardIssuerClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
 ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char *pDevSN, BYTE &btType)
 {
 	LOG4VTM_FUNCTION();
-	m_busy_flag = true;
-	WAITING_LOOP();
+	mtx.lock();
 
 	int iRet = Error_Succeed;
 	char *CapInfo[10];
@@ -1212,11 +1199,11 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYT
 		iRet = eret;
 	}
 	btType = DEV_OPEN_TYPE_COM;
-	m_busy_flag = false;
 	for (int i = 0; i < 10; i++)
 	{
 		delete[] CapInfo[i];
 	}
+	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
 ErrorCodeEnum CardIssuerClassImpl::TransferEnInit(int &iStatus, BYTE *&Cr1, int &lenR1, BYTE *&Cr3, int &lenR3, BYTE *&dKey, int &lenKey)
@@ -1353,14 +1340,4 @@ ErrorCodeEnum CardIssuerClassImpl::QueryBatteryPower(int &bat)
 {
 	int iRet = 0;
 	return (ErrorCodeEnum)iRet;
-}
-
-void CardIssuerClassImpl::WAITING_LOOP()
-{
-	while (1)
-	{
-		usleep(5 * 1000);
-		if (m_signal_get_flag == false)
-			break;
-	}
 }

+ 5 - 4
DevAdapter/nantian/cardissuer.1.1/cardissuer.nantian.1.1.h

@@ -13,6 +13,8 @@
 #include "dlfcn.h"
 #include "stddef.h"
 
+#include <mutex>
+
 typedef DRV_CardDispenser *(*pCreate_DRV_CardDispenser)();
 typedef void (*pDestroy_DRV_CardDispenser)(DRV_CardDispenser *p);
 
@@ -199,14 +201,13 @@ public:
 	
 	bool LoadNTDRVDLL();
 	
-	void WAITING_LOOP();
 
-	bool m_busy_flag;
-	bool m_signal_get_flag;
+    std::mutex mtx;
+    std::mutex statusMtx;
 	bool m_CardInTypeFlag;
 
 	ErrorCodeEnum m_StatusErrorCode;
-	CardIssuerStatus tempStatus;
+	CardIssuerStatus statusCache;
 
     int RetainBox;
 	

+ 2 - 0
DevAdapter/nantian/idcer.1.1/idcertificate.nantian.1.1.cpp

@@ -1115,7 +1115,9 @@ void* thread( void *arg )
 				{
 					if (g_pGvar.TheardEnd == false)
 						break;
+					usleep(100000);
 				}
+			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_INFO, "IDCerRFControl","while is end");
 				//查询设备状态
 			for(int i = 1; i <4; i++)
 			{