Selaa lähdekoodia

Z991239-1100 #comment fix: remove file

翟俊伟80258120 5 vuotta sitten
vanhempi
sitoutus
98df83fd89

+ 39 - 82
Module/mod_FingerPrint/FingerPrintFSM.cpp

@@ -3,10 +3,12 @@
 #include "FingerPrint_UserErrorCode.h"
 #include "GetDevInfoHelper.h"
 
+#include <stdio.h>
 #include <thread>
 #include <chrono>
 #include <fstream>
-#include <cstdio>
+
+using namespace SP::Module::Comm;
 
 #ifdef RVC_OS_LINUX
 #include <sys/stat.h>
@@ -218,19 +220,14 @@ ErrorCodeEnum CFingerPrintFSM::OnInit()
 		m_devInit = false;
 		return Error_Succeed;
 	}
-
-	m_DevAdptLibHelper = new DevAdptLibHelper<FingerPrintClass>();
-	errDev = m_DevAdptLibHelper->LoadUp(strLibFullPath);
+	
+	errDev = m_hDevHelper.LoadUp(strLibFullPath);
 	if (Error_Succeed != errDev)
 	{
 		Dbg("load vendorlib or create DevAdapterObject failed.");
-		delete m_DevAdptLibHelper;    //TODO: 考虑蓝牙多合一 DevClose()
-		m_DevAdptLibHelper = nullptr;
 		return Error_DevLoadFileFailed;
 	}
 
-	m_pFingerPrint = m_DevAdptLibHelper->GetDevPointer();
-
 	errDev = DoDevOpen(spConfig);
 	if (Error_Succeed != errDev)
 		return errDev;
@@ -293,9 +290,6 @@ ErrorCodeEnum CFingerPrintFSM::DoDevOpen(CSmartPointer<IConfigInfo> spConfig)
 			if (Error_Succeed != errDev)
 			{
 				Dbg("this is FWB, device status is not normal now.(%s)", SpStrError(errDev));
-
-				delete m_DevAdptLibHelper;
-				m_DevAdptLibHelper = nullptr;
 				errDev = Error_DevCommFailed;
 				break;
 			}
@@ -304,7 +298,7 @@ ErrorCodeEnum CFingerPrintFSM::DoDevOpen(CSmartPointer<IConfigInfo> spConfig)
 			}
 		}
 
-		errDev = m_pFingerPrint->DevOpen(tmpPort, baudrate);
+		errDev = m_hDevHelper->DevOpen(tmpPort, baudrate);
 		if (errDev != Error_Succeed)
 		{
 			WORD devErrCode = errDev;
@@ -313,10 +307,6 @@ ErrorCodeEnum CFingerPrintFSM::DoDevOpen(CSmartPointer<IConfigInfo> spConfig)
 			LogError(Severity_High, Error_Hardware
 					, LOG_ERR_FINGERPRINT_OPEN_FAILED
 					, "Fingerprint init(DevOpen) failed.");
-
-			delete m_DevAdptLibHelper;
-			m_DevAdptLibHelper = nullptr;
-
 			errDev = Error_DevCommFailed;
 		}
 	} while (0);
@@ -331,33 +321,20 @@ ErrorCodeEnum CFingerPrintFSM::DoGetDevInfo()
 	ZeroMemory(m_devCatInfo.szModel, MAX_DEV_MODEL_LEN);
 	ZeroMemory(m_devCatInfo.szType, MAX_DEV_TYPE_LEN);
 	ZeroMemory(m_devCatInfo.szVendor, MAX_DEV_VENDOR_LEN);
-	errDev = m_pFingerPrint->GetDevCategory(m_devCatInfo);
+	errDev = m_hDevHelper->GetDevCategory(m_devCatInfo);
 	if (errDev == Error_Succeed)
 	{
 		Dbg("szModel = %s", m_devCatInfo.szModel);
 		Dbg("szType = %s", m_devCatInfo.szType);
 		Dbg("szVendor = %s", m_devCatInfo.szVendor);
 
-		if (strlen(m_devCatInfo.szModel) < 256)
-			Dbg("szMode=%s", m_devCatInfo.szModel);
-
-		if (nullptr != m_DevAdptLibHelper && nullptr != m_pFingerPrint)
-		{
-			m_devInit = true;
-			errDev = Error_Succeed;
-		}
-		else
-			errDev = Error_NotInit;
+		m_devInit = true;
+		errDev = Error_Succeed;
 	}
 	else {
-		Dbg("Invoke vendor routine 'GetDevCategory' failed.");
 		LogError(Severity_High, Error_Hardware
 				, LOG_ERR_FINGERPRINT_GETDEVINFO_FAILED
 				, "Get device info(GetDevCategory) failed.");
-
-		delete m_DevAdptLibHelper;
-		m_DevAdptLibHelper = nullptr;
-
 		errDev = Error_DevCommFailed;
 	}
 	return errDev;
@@ -372,7 +349,10 @@ void CFingerPrintFSM::GetVendorLibName(CSmartPointer<IConfigInfo> spConfig
 	CSimpleStringA strVersion(true);
 	CSimpleStringA strBatch(true);
 
-	GetMachineInfo(machineVersion, machineType);
+	TerminalMachineInfo terminalInfo = GetTerminalMachineInfo(GetEntityBase());
+	machineType = Type2Str(terminalInfo.type);
+	machineVersion = CSimpleStringA::Format("%d.%d", terminalInfo.gen.major, terminalInfo.gen.minor);
+
 	spConfig->ReadConfigValue("Device.PinPad", "Vendor", strVendor);
 	spConfig->ReadConfigValue("Device.PinPad", "Version", strVersion);
 	spConfig->ReadConfigValue("Device.PinPad", "Batch", strBatch);
@@ -445,40 +425,24 @@ void CFingerPrintFSM::GetVendorLibName(CSmartPointer<IConfigInfo> spConfig
 	}
 }
 
-void CFingerPrintFSM::GetMachineInfo(CSimpleString& machineVersion
-	, CSimpleString& machineType)
-{
-	CSystemStaticInfo sysInfo;
-	GetEntityBase()->GetFunction()->GetSystemStaticInfo(sysInfo);
-	machineType = sysInfo.strMachineType;
-	WORD majorVersion = sysInfo.MachineVersion.GetMajor();
-	WORD minorVersion = sysInfo.MachineVersion.GetMinor();;
-	machineVersion = CSimpleStringA::Format("%d.%d", majorVersion, minorVersion);
-
-	Dbg("MachineType:%s, terminalNo: %s"
-		, machineType.GetData()
-		, sysInfo.strTerminalID.GetData());
-}
-
 #pragma endregion
 
 #pragma region entity exit
 
 ErrorCodeEnum CFingerPrintFSM::OnExit()
 {
-	if (nullptr != m_DevAdptLibHelper)
+	if (m_hDevHelper)
 	{
-		delete m_DevAdptLibHelper;
-		m_DevAdptLibHelper = nullptr;
+		ErrorCodeEnum errCode = Error_Succeed;
+		m_hDevHelper.TearDown();//TODO:考虑蓝牙多合一DevClose???
+		return errCode;
 	}
-
 	return Error_Succeed;
 }
 
 #pragma endregion
 
-void CFingerPrintFSM::SelfTest(EntityTestEnum eTestType
-							 , CSmartPointer<ITransactionContext> pTransactionContext)
+void CFingerPrintFSM::SelfTest(EntityTestEnum eTestType , CSmartPointer<ITransactionContext> pTransactionContext)
 {
 	//LOG_FUNCTION();
 	pTransactionContext->SendAnswer(m_testResult);
@@ -565,7 +529,7 @@ void CFingerPrintFSM::ScanProcess(ScanParam* pScanParam, SpReqAnsContext<FingerP
 		std::this_thread::sleep_for(std::chrono::milliseconds(FINGERPRINT_SCAN_INTERNAL));
 
 		pScanParam->m_FeatureLen = MAX_FEATURE_LEN;
-		ErrorCodeEnum errCode = m_pFingerPrint->Image2Feature(pScanParam->m_BmpFileName
+		ErrorCodeEnum errCode = m_hDevHelper->Image2Feature(pScanParam->m_BmpFileName
 			, pScanParam->m_Feature
 			, pScanParam->m_FeatureLen);
 		if (errCode == Error_Succeed)
@@ -586,7 +550,7 @@ void CFingerPrintFSM::ScanProcess(ScanParam* pScanParam, SpReqAnsContext<FingerP
 					Dbg("m_strPath2 = %s", m_BmpFileFullPath2.GetData());
 					Dbg("m_strPath3 = %s", m_BmpFileFullPath3.GetData());
 
-					errCode = m_pFingerPrint->Image2Template(m_BmpFileFullPath1, m_BmpFileFullPath2
+					errCode = m_hDevHelper->Image2Template(m_BmpFileFullPath1, m_BmpFileFullPath2
 						, m_BmpFileFullPath3, pScanParam->m_Template
 						, pScanParam->m_FeatureLen);
 
@@ -607,7 +571,7 @@ void CFingerPrintFSM::ScanProcess(ScanParam* pScanParam, SpReqAnsContext<FingerP
 					}else {
 						pScanParam->m_GetTemplateSuc = false;
 						DevErrorInfo devErrorInfo;
-						m_pFingerPrint->GetLastErr(devErrorInfo);
+						m_hDevHelper->GetLastErr(devErrorInfo);
 						Dbg("Invoke routine 'Image2Template' failed which returned %s(%s)"
 							, SpStrError(errCode), devErrorInfo.szErrMsg);
 						break;
@@ -629,7 +593,7 @@ void CFingerPrintFSM::ScanProcess(ScanParam* pScanParam, SpReqAnsContext<FingerP
 		}
 		else {
 			DevErrorInfo devErrInfo;
-			m_pFingerPrint->GetLastErr(devErrInfo);
+			m_hDevHelper->GetLastErr(devErrInfo);
 			Dbg("Invoke routine 'Image2Feature' failed which returned %s(%s) while register."
 				, SpStrError(errCode), devErrInfo.szErrMsg);
 		}
@@ -748,7 +712,7 @@ void CFingerPrintFSM::ScanBeforeMatch(ScanParam* initParam)
 		std::this_thread::sleep_for(std::chrono::milliseconds(FINGERPRINT_SCAN_INTERNAL));
 		//Sleep(FINGERPRINT_SCAN_INTERNAL);
 		initParam->m_FeatureLen = MAX_FEATURE_LEN;
-		errCode = m_pFingerPrint->Image2Feature(initParam->m_BmpFileName
+		errCode = m_hDevHelper->Image2Feature(initParam->m_BmpFileName
 			, initParam->m_Feature
 			, initParam->m_FeatureLen);
 		if (errCode == Error_Succeed)
@@ -779,7 +743,7 @@ void CFingerPrintFSM::ScanBeforeMatch(ScanParam* initParam)
 		}
 		else {
 			DevErrorInfo devErrInfo;
-			m_pFingerPrint->GetLastErr(devErrInfo);
+			m_hDevHelper->GetLastErr(devErrInfo);
 			Dbg("Invoke routine 'Image2Feature' failed which returned %s(%s)"
 				, SpStrError(errCode), devErrInfo.szErrMsg);
 		}
@@ -814,7 +778,7 @@ ErrorCodeEnum CFingerPrintFSM::MatchProcess(ScanParam* initParam, SpReqAnsContex
 		}
 
 		clock_t startMatch = clock();
-		errCode = m_pFingerPrint->Match(lpbTemplates, lpbTemplateLen, templateNum,
+		errCode = m_hDevHelper->Match(lpbTemplates, lpbTemplateLen, templateNum,
 			initParam->m_Feature, initParam->m_FeatureLen);
 		clock_t endMatch = clock();
 		int duration = (endMatch - startMatch) * 1000 / CLOCKS_PER_SEC;
@@ -830,7 +794,7 @@ ErrorCodeEnum CFingerPrintFSM::MatchProcess(ScanParam* initParam, SpReqAnsContex
 		}
 		else {
 			DevErrorInfo devErrInfo;
-			m_pFingerPrint->GetLastErr(devErrInfo);
+			m_hDevHelper->GetLastErr(devErrInfo);
 			LogError(Severity_High, Error_Hardware
 				, LOG_ERR_FINGERPRINT_INVOKE_MATCH_FAILED
 				, "Invoke routine 'Match' failed.");//no this situation
@@ -992,12 +956,9 @@ ErrorCodeEnum CFingerPrintFSM::GetDevCatInfo(DevCategoryInfo& devInfo)
 		, strlen(m_devCatInfo.szVendor));
 
 #ifdef RVC_OS_WIN
-	strncpy_s(devInfo.szModel, MAX_DEV_MODEL_LEN
-		, m_devCatInfo.szModel, strlen(m_devCatInfo.szModel));
-	strncpy_s(devInfo.szType, MAX_DEV_TYPE_LEN
-		, m_devCatInfo.szType, strlen(m_devCatInfo.szType));
-	strncpy_s(devInfo.szVendor, MAX_DEV_VENDOR_LEN
-		, m_devCatInfo.szVendor, strlen(m_devCatInfo.szVendor));
+	strncpy_s(devInfo.szModel, MAX_DEV_MODEL_LEN, m_devCatInfo.szModel, strlen(m_devCatInfo.szModel));
+	strncpy_s(devInfo.szType, MAX_DEV_TYPE_LEN, m_devCatInfo.szType, strlen(m_devCatInfo.szType));
+	strncpy_s(devInfo.szVendor, MAX_DEV_VENDOR_LEN, m_devCatInfo.szVendor, strlen(m_devCatInfo.szVendor));
 #else
 	strncpy(devInfo.szModel, m_devCatInfo.szModel, (MAX_DEV_MODEL_LEN > strlen(m_devCatInfo.szModel)) ? strlen(m_devCatInfo.szModel) : MAX_DEV_MODEL_LEN);
 	strncpy(devInfo.szType, m_devCatInfo.szType, (MAX_DEV_TYPE_LEN > strlen(m_devCatInfo.szType)) ? strlen(m_devCatInfo.szType) : MAX_DEV_TYPE_LEN);
@@ -1009,8 +970,7 @@ ErrorCodeEnum CFingerPrintFSM::GetDevCatInfo(DevCategoryInfo& devInfo)
 
 CSimpleString CFingerPrintFSM::GenerateAlarmJson(CSimpleString entityName, int cost)
 {
-	return CSimpleString::Format("[{\"name\":\"%s\",\"cost\":%d}]"
-		, entityName.GetData(), cost);
+	return CSimpleString::Format("[{\"name\":\"%s\",\"cost\":%d}]", entityName.GetData(), cost);
 }
 
 bool CFingerPrintFSM::IsFileExist(CSimpleString fileName)
@@ -1031,7 +991,7 @@ ErrorCodeEnum CFingerPrintFSM::GetDevState(int& state)
 	CSimpleStringA fileName = "testFinger.bmp";
 	LPBYTE lpbFeature = new BYTE[MAX_FEATURE_LEN];
 	int lpbLength = MAX_FEATURE_LEN;
-	errCode = m_pFingerPrint->Image2Feature(fileName, lpbFeature, lpbLength);
+	errCode = m_hDevHelper->Image2Feature(fileName, lpbFeature, lpbLength);
 	if (errCode == Error_Succeed)
 	{
 		state = 1;
@@ -1119,7 +1079,7 @@ void CFingerPrintFSM::DeleteBmp(int type)
 	{
 		DeleteFileIfExisted("testFinger.bmp");
 	}
-}
+}  
 
 ErrorCodeEnum CFingerPrintFSM::DeleteFileIfExisted(const char* fileName)
 {
@@ -1131,27 +1091,24 @@ ErrorCodeEnum CFingerPrintFSM::DeleteFileIfExisted(const char* fileName)
 	CSimpleStringA strPath, strObjPath;
 	ErrorCodeEnum errCode = m_pEntity->GetFunction()->GetPath("Dep", strPath);
 	strObjPath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s"
-			, (const char*)strPath, (const char*)fileName);
-	std::ifstream beDeletedFile((const char*)strObjPath, std::ifstream::binary);
+		, strPath.GetData(), fileName);
 
-	if (beDeletedFile)
+	if (ExistsFileA(strObjPath))
 	{
-		if (remove((const char*)strObjPath) == 0)
+		if (RemoveFileA(strObjPath))
 		{
-			Dbg("DeleteFile(%s) success.", (const char*)strObjPath);
+			Dbg("DeleteFile(%s) success.", strObjPath.GetData());
 			return Error_Succeed;
 		}
 		else {
-			Dbg("DeleteFile(%s) failed LastError(%s).", (const char*)strObjPath, GetLastError());
+			Dbg("DeleteFile(%s) failed LastError(%s).", strObjPath.GetData(), GetLastError());
 			return Error_Unexpect;
 		}
 	}
-	if (GetLastError() == ERROR_FILE_NOT_FOUND)
-	{
+	else {
+		Dbg("file %s not exist.", fileName);
 		return Error_Succeed;
 	}
-	Dbg("DeleteFle(%s) Unexpect GetLastError(%s).", strObjPath.GetData(), GetLastError());
-	return Error_Unexpect;
 }
 
 #pragma endregion

+ 4 - 8
Module/mod_FingerPrint/FingerPrintFSM.h

@@ -1,9 +1,11 @@
 #ifndef FINGERPRINT_FSM_H
 #define FINGERPRINT_FSM_H
 
+#include "CommEntityUtil.hpp"
 #include "DevFSMCommBase.hpp"
 #include "FingerPrintClass.h"
 #include "CardSwiper_client_g.h"
+#include "fileutil.h"
 #include <ctime>
 
 using namespace CardSwiper;
@@ -66,9 +68,6 @@ enum BmpType
 #include "FingerPrintClass.h"
 using namespace FingerPrint;
 
-typedef ErrorCodeEnum (*lpCreateDevCom)(DeviceBaseClass *&baseObj);
-typedef ErrorCodeEnum (*lpReleaseDevCom)(DeviceBaseClass *&pBaseObj);
-
 class ScanEvent : public FSMEvent
 {
 public:
@@ -125,7 +124,7 @@ public:
 	virtual ~CancelMatchEvent(){}
 	virtual void OnUnhandled()
 	{
-		LOG_TRACE("Cancel match not handled");
+		Dbg("Cancel match not handled");
 	}
 };
 
@@ -168,7 +167,7 @@ public:
 	END_FSM_RULE()
 
 	CFingerPrintFSM():m_devInit(false), m_bCancelRegister(false), m_bCancelMatch(false),
-					  m_bExit(false), m_testResult(Error_Succeed), m_DevAdptLibHelper(NULL){};
+					  m_bExit(false), m_testResult(Error_Succeed){};
 
 	virtual ErrorCodeEnum OnInit();
 	virtual ErrorCodeEnum OnExit();
@@ -199,7 +198,6 @@ public:
 	ErrorCodeEnum CheckCardSwiperStatus();
 	CSimpleString GenerateAlarmJson(CSimpleString entityName, int cost);
 	void GetVendorLibName(CSmartPointer<IConfigInfo> spConfig, CSimpleString& dllName);
-	void GetMachineInfo(CSimpleString& machineVersion, CSimpleString& machineType);
 	ErrorCodeEnum DoDevOpen(CSmartPointer<IConfigInfo> spConfig);
 	ErrorCodeEnum DoGetDevInfo();
 	ErrorCodeEnum QueryRootConfigObj(CSmartPointer<IConfigInfo> &spConfig);
@@ -216,7 +214,6 @@ public:
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
 
 private:
-	DevAdptLibHelper<FingerPrintClass> *m_DevAdptLibHelper;
 	ErrorCodeEnum m_testResult;
 	DevCategoryInfo m_devCatInfo;
 	DevStateEnum m_devState;
@@ -227,7 +224,6 @@ private:
 	bool m_bCancelMatch;
 	bool m_devInit;
 	bool m_bExit;
-	FingerPrintClass* m_pFingerPrint;
 };
 
 struct ScanTask : public ITaskSp   

+ 22 - 11
Module/mod_FingerPrint/test/testFingerPrintEntity.cpp

@@ -12,27 +12,38 @@ TEST_CASE_ENTITY_CLASS(CFingerPrintEntity, "GetEntityInfo")
 	return Error_Succeed;
 }
 
-TEST_CASE_ENTITY_CLASS(CFingerPrintEntity, "GetCurrEntityConfigPath")
+TEST_CASE_FSM_CLASS(CFingerPrintFSM, "OpenRootConfigForFSM")
 {
 	LOG_FUNCTION();
+	Dbg("Test for open root config");
 
-	CSimpleStringA machineType = SP::Module::Comm::GetCurrMachineType(this);
-	if (!machineType.IsStartWith("RVC."))
-		return Error_Failed;
+	CSmartPointer<IConfigInfo> spConfig;
+	ErrorCodeEnum errCode = QueryRootConfigObj(spConfig);
 
-	Dbg("machineType = %s", machineType.GetData());
-	return Error_Succeed;
+	return errCode;
 }
 
-TEST_CASE_FSM_CLASS(CFingerPrintFSM, "OpenRootConfigForFSM")
+TEST_CASE_FSM_CLASS(CFingerPrintFSM, "DeleteFileIfExisted")
 {
 	LOG_FUNCTION();
-	Dbg("Test for open root config");
 
-	CSmartPointer<IConfigInfo> spConfig;
-	ErrorCodeEnum errCode = QueryRootConfigObj(spConfig);
-	
+	const char* fileName = "finger.bmp";
+
+	Dbg("fileName = %s", fileName);
+	ErrorCodeEnum errCode = DeleteFileIfExisted(fileName);
+
 	return errCode;
 }
 
+TEST_CASE_FSM_CLASS(CFingerPrintFSM, "DeleteBmpFile")
+{
+	DeleteBmp(BmpImage);
+
+	return Error_Succeed;
+}
 
+//TEST_CASE_FSM_CLASS(CFingerPrintFSM, "InitParam")
+//{
+//	ScanParam* pScanParam = new ScanParam();
+//	ErrorCodeEnum errCode = InitCommParam(pScanParam, RegisterType, 1);
+//}