Browse Source

Z991239-5241 #comment 指纹仪模拟适配器开发

Signed-Off-By: commit-hook
刘文涛80174520 1 year ago
parent
commit
edee1f0688

+ 20 - 0
DevAdapter/self/fingerprint/CMakeLists.txt

@@ -0,0 +1,20 @@
+# 声明模块名称的前缀和名称
+rvc_dev_define_module("FingerPrint")
+
+# rvc_dev_config_library 内需要使用这三个参数,用于拼接输出的适配器文件名称
+set(${MODULE_PREFIX}_VENDOR ${CURRENT_VENDOR})
+set(${MODULE_PREFIX}_VERSION "1")
+set(${MODULE_PREFIX}_BATCH "1")
+
+# 包含要编译的实现文件,rvc_dev_config_library 内使用
+set(${MODULE_PREFIX}_SRCS SHARED
+        VirtualDeviceClass.cpp
+        VirtualDeviceClass.h
+        )
+
+# 适配器工程需要通过此宏替代 add_library
+rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
+
+
+#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
+rvc_dev_target_install(${MODULE_FULL_NAME})

+ 142 - 0
DevAdapter/self/fingerprint/VirtualDeviceClass.cpp

@@ -0,0 +1,142 @@
+#include "VirtualDeviceClass.h"
+#include "libFingerPrintLoader.h"
+
+static VirtualDeviceClassImpl* object = NULL;
+
+VirtualDeviceClassImpl::VirtualDeviceClassImpl()
+{
+
+}
+
+VirtualDeviceClassImpl::~VirtualDeviceClassImpl()
+{
+
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
+{
+	ErrorCodeEnum result;
+	DevCategoryInfo inner;
+	result = Bridge_GetDevCategory(&inner);
+	if (result == Error_Succeed) {
+		strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType);
+		strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel);
+		strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor);
+		devCategory.eState = inner.eState;
+		devCategory.version.wMajor = inner.version.wMajor;
+		devCategory.version.wMinor = inner.version.wMinor;
+		devCategory.version.wRevision = inner.version.wRevision;
+		devCategory.version.wBuild = inner.version.wBuild;
+	}
+	return result;
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::Reset()
+{
+	return Bridge_Reset();
+}
+
+
+ErrorCodeEnum VirtualDeviceClassImpl::DevClose()
+{
+	ErrorCodeEnum result = Error_Succeed;
+	return (result = Bridge_DevClose());
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
+{
+	ErrorCodeEnum result = Error_Succeed;
+	DevErrorInfo inner;
+	result = Bridge_GetLastErr(&inner);
+	if (result == Error_Succeed) {
+		devErrInfo.dwErrMsgLen = inner.dwErrMsgLen;
+		strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg);
+	}
+	return (result);
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
+{
+	ErrorCodeEnum result = Error_Succeed;
+	result = Bridge_DevOpen(dwPort, dwBaudRate);
+	return result;
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::Image2Feature(const char* imageName, LPBYTE lpbFeature, int& iLength)
+{
+	ErrorCodeEnum result = Error_Unexpect;
+	int inner_iLength = iLength;
+	result = Bridge_Image2Feature(imageName,(BYTE*)lpbFeature, &inner_iLength);
+	if (result == Error_Succeed) {
+		iLength = inner_iLength;
+	}
+	return result;
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::Image2Template(const char* imagePath1, const char* imagePath2, const char* imagePath3, LPBYTE lpbTemplate, int& iLength)
+{
+	ErrorCodeEnum result = Error_Unexpect;
+	int inner_iLength = iLength;
+	result = Bridge_Image2Template(imagePath1, imagePath2, imagePath3,(BYTE*)lpbTemplate, &inner_iLength);
+	if (result == Error_Succeed) {
+		iLength = inner_iLength;
+	}
+	return result;
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::Match(LPBYTE lpbTemplate[], int iTemplateLen[], int templateNum, LPBYTE lbpFeature, int& iFeatureLen, int level /*= 3*/)
+{
+	ErrorCodeEnum result = Error_Unexpect;
+	int inner_iFeatureLen = iFeatureLen;
+	result = Bridge_Match(lpbTemplate, iTemplateLen, templateNum, (BYTE*)lbpFeature, &inner_iFeatureLen, level);
+	if (result == Error_Succeed) {
+		iFeatureLen = inner_iFeatureLen;
+	}
+	return result;
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::Cancel()
+{
+	ErrorCodeEnum result = Error_Unexpect;
+	result = Bridge_Cancel();
+	return result;
+}
+
+DEVICEBASE_API ErrorCodeEnum  CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
+{
+	ErrorCodeEnum result(Error_Unexpect);
+	if (object == NULL) {
+		char* buf;
+		DWORD size;
+		const char* var = "INVOKE_VENDOR_ADAPTER_NAME";
+		size = GetEnvironmentVariableA(var, NULL, 0);
+		//ERROR_ENVVAR_NOT_FOUND
+		if (size <= 0) {
+			return Error_InvalidState;
+		}
+		buf = new char[size + 3];
+		if (buf == NULL) {
+			return Error_Resource;
+		}
+		memset(buf, 0, sizeof(char) * (size + 3));
+		size = GetEnvironmentVariableA(var, buf, size);
+		result = Bridge_LoadDevObject(buf);
+		if (result == Error_Succeed) {
+			object = new VirtualDeviceClassImpl();
+		}
+		delete[] buf;
+	}
+	pOutDevAptObj = object;
+	return result;
+}
+
+DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
+{
+	ErrorCodeEnum result = Bridge_ReleaseDevObject();
+	if (result == Error_Succeed && pInDevAptObj != NULL) {
+		delete pInDevAptObj;
+		pInDevAptObj = NULL;
+	}
+	return result;
+}
+

+ 41 - 0
DevAdapter/self/fingerprint/VirtualDeviceClass.h

@@ -0,0 +1,41 @@
+#ifndef VIRTUAL_DEVICE_CLASS_HEADER_
+#define VIRTUAL_DEVICE_CLASS_HEADER_
+
+
+#include "FingerPrintClass.h"
+
+class VirtualDeviceClassImpl : public FingerPrintClass
+{
+public:
+	VirtualDeviceClassImpl();
+	~VirtualDeviceClassImpl();
+
+	//DeviceBaseClass
+	ErrorCodeEnum GetDevCategory(DevCategoryInfo& devCategory);
+	ErrorCodeEnum Reset();
+	ErrorCodeEnum DevClose();
+	ErrorCodeEnum GetLastErr(DevErrorInfo& devErrInfo);
+
+	//SubDeviceClass
+	// Open Device
+	ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
+
+	//采集指纹图片及对应特征值,imagePath保存图片名,lpbFeature保存对应特征,iLength:输入代表特征lpbFeature最大可用长度,输出为特征lpbFeature实际长度
+	//imagePath为传入的图片名,采集到的指纹图像请按此名称保存在dep目录下,lpbFeature为对应指纹图像特征
+	//Compute features
+	ErrorCodeEnum Image2Feature(const char* imageName, LPBYTE lpbFeature, int& iLength);
+
+	//生成特征模板(注册时使用)
+	//imagePath1、imagePath2、imagePath3表示生成特征需要输入的三张图片名称,由应用传入,lpbTemplate表示输出特征模板,iLength表示模板长度
+	ErrorCodeEnum Image2Template(const char* imagePath1, const char* imagePath2, const char* imagePath3, LPBYTE lpbTemplate, int& iLength);
+
+	//比对校验
+	//lpbTemplate和iTemplateLen分别表示输入的一组特征模板及其对应的长度,templateNum为数组长度(即模板个数)
+	//lbpFeature表示待校验的指纹特征,iFeatureLen表示其长度,level表示校验等级,默认取3
+	ErrorCodeEnum Match(LPBYTE lpbTemplate[], int iTemplateLen[], int templateNum, LPBYTE lbpFeature, int& iFeatureLen, int level = 3);
+
+	//取消采集指纹
+	ErrorCodeEnum Cancel();
+};
+
+#endif //VIRTUAL_DEVICE_CLASS_HEADER_