|
@@ -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
|