Forráskód Böngészése

Z991239-6171 #comment feat: 增加指纹仪生成模版实现

Signed-Off-By: commit-hook
刘文涛80174520 5 hónapja
szülő
commit
6524bb32cb

+ 74 - 0
Module/mod_FingerPrint/FingerPrintFSM.cpp

@@ -604,6 +604,80 @@ int CFingerPrintFSM::GetFingerPrintJS(SpReqAnsContext<FingerPrintService_GetFing
 
 int CFingerPrintFSM::GenerateTemplateJS(SpReqAnsContext<FingerPrintService_GenerateTemplateJS_Req, FingerPrintService_GenerateTemplateJS_Ans>::Pointer ctx)
 {
+	LOG_FUNCTION();
+	
+	std::vector<CSimpleStringA> imagePaths;
+	CSimpleStringA strPath;
+	m_pEntity->GetFunction()->GetPath("Dep", strPath);
+
+	if (ctx->Req.fingerSNList.GetCount() != 3) {
+		DeleteRegisterFingerBmp(m_fingerPrintFileSet);
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_GETTEMPLATE_PARAM_FAIL))("指纹模版生成失败,输入参数错误");
+		ctx->Answer(Error_Unexpect, FingerPrint_UserErrorCode_GETTEMPLATE_PARAM_FAIL);//RTA242B
+		return 0;
+	}
+
+	for (int i = 0; i < ctx->Req.fingerSNList.GetCount(); ++i)
+	{
+		CSimpleStringA tempStr = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "finger%d.bmp", strPath.GetData(), ctx->Req.fingerSNList[i]);
+
+		UpdateAndWarnFileFindInDepBak(tempStr, CSimpleStringA::Format("finger%d.bmp", ctx->Req.fingerSNList[i]), FingerPrint_UserErrorCode_FindFile_in_DepBak);
+
+		imagePaths.push_back(tempStr);
+
+		if (!ExistsFileA(imagePaths[i]))
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GenerateTemplate>, image <%s> not exist.", imagePaths[i].GetData());
+			DeleteRegisterFingerBmp(m_fingerPrintFileSet);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_GETTEMPLATE_NO_FILE))("指纹模版生成失败,指纹图片不存在");
+			ctx->Answer(Error_Unexpect, FingerPrint_UserErrorCode_GETTEMPLATE_NO_FILE);//RTA242C
+			return 0;
+		}
+		
+	}
+
+	ErrorCodeEnum errCode;
+	LPBYTE lpbTemplate = new BYTE[MAX_FEATURE_LEN];
+	int lpbLength = MAX_FEATURE_LEN;
+
+	ULLINT l_beginTime, l_endTime;
+	l_beginTime = SP::Module::Comm::RVCGetTickCount();
+	errCode = m_hDevHelper->Image2Template(imagePaths[0], imagePaths[1], imagePaths[2], lpbTemplate, lpbLength);
+	l_endTime = SP::Module::Comm::RVCGetTickCount();
+
+	DWORD dwTmpUserErrCode = 0;
+	if (Error_Succeed == errCode)
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::Image2Template").setLogCode(FingerPrint_Generate_Template_ID).setCostTime(l_endTime - l_beginTime)("指纹仪模板生成成功 , template length is %d", lpbLength);
+		if (lpbTemplate != NULL && lpbLength == STANDARD_FEATURE_LEN) {
+			lpbTemplate[lpbLength] = '\0';
+			ctx->Ans.templateFeature = (LPCTSTR)lpbTemplate;
+		}
+		else {
+			CSimpleStringA errMsg = CSimpleStringA::Format("template is NULL or template length is not right(%d)", lpbLength);
+			LogWarn(Severity_Middle, Error_Hardware, FingerPrint_UserErrorCode_TEMPLATELEN_ISNOTRIGHT, errMsg.GetData());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_TEMPLATELEN_ISNOTRIGHT))("指纹仪模板生成失败,%s", errMsg.GetData());
+			dwTmpUserErrCode = FingerPrint_UserErrorCode_TEMPLATELEN_ISNOTRIGHT;//RTA2428
+			errCode = Error_Unexpect;
+		}
+	}
+	else {
+		dwTmpUserErrCode = SetErrorAndLog(errCode, MEC_DEVAPI_FINGERPRINT_Image2Template, "DevAdapter::Image2Template", __FUNCTION__, false, l_endTime - l_beginTime, "", "指纹仪模板生成失败");//RTA2418
+		errCode = Error_Unexpect;
+	}
+
+	DeleteRegisterFingerBmp(m_fingerPrintFileSet);
+
+	if (errCode == Error_Succeed) {
+		ctx->Answer(Error_Succeed);
+	}
+	else {
+		ctx->Answer(errCode, dwTmpUserErrCode);
+	}
+
+	delete[] lpbTemplate;
+	lpbTemplate = NULL;
+
 	return 0;
 }
 

+ 2 - 1
Module/mod_FingerPrint/FingerPrint_UserErrorCode.h

@@ -48,7 +48,8 @@
 #define FingerPrint_UserErrorCode_CANCEL_GETTEMPLATE					0x20400227	//生成取消
 #define FingerPrint_UserErrorCode_TEMPLATELEN_ISNOTRIGHT				0x20400228	//指纹模版生产长度不对
 #define FingerPrint_UserErrorCode_GET_FINGERBLOB_FAIL					0x20400229	//获取指纹图片内容失败
-
+#define FingerPrint_UserErrorCode_GETTEMPLATE_NO_FILE					0x2040022a	//指纹模版需要的指纹文件不存在
+#define FingerPrint_UserErrorCode_GETTEMPLATE_PARAM_FAIL				0x2040022b	//指纹模版输入参数错误
 
 #define FingerPrint_UserErrorCode_FindFile_in_DepBak					0x20400232	//在旧Dep路径下找到文件