#include "fingerprint.nantian.1.1.h" #include "log4vendor.h" FINGERPRINTNANTIAN21_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj) { baseObj = new FingerPrintNantian21(); if (baseObj == NULL) return Error_Null; else return Error_Succeed; } FINGERPRINTNANTIAN21_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj) { if (pBaseObj == NULL) return Error_Param; FingerPrintNantian21* pTmp = (FingerPrintNantian21*)(pBaseObj); delete pTmp; pTmp = NULL; return Error_Succeed; } // 这是已导出类的构造函数。 // 有关类定义的信息,请参阅 FingerPrint.Nantian.4.1.h FingerPrintNantian21::FingerPrintNantian21() { m_gvar = NULL; m_gvar = new Gvar(); memset(m_errinfo.szErrMsg,0,MAX_DEV_ERROR_MSG_LEN); strcpy(m_errinfo.szErrMsg,"操作成功"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = Error_Succeed; char INIPath[100] = ""; CILIX_AUX_X::CILIX_GetModuleCurPath(INIPath); strcat(INIPath, "fingerprint.nantian.ini"); char log_dir[100] = ""; CILIX_AUX_X::CILIX_X_INIKeyString(INIPath, "LOGConfig", "log_dir", log_dir, "/etc/nantian"); char log_level[100] = ""; CILIX_AUX_X::CILIX_X_INIKeyString(INIPath, "LOGConfig", "log_level", log_level, "3"); cmb::log_init_config config; config.dev_name = "FingerPrintso"; config.log_dir = log_dir; config.log_level = atoi(log_level); std::string str; cmb::log4vendor::init(config, str); return; } FingerPrintNantian21::~FingerPrintNantian21() { if (m_gvar) { delete m_gvar; m_gvar = NULL; } return; } // TODO: 在此添加您的方法。 // // Open Device // if usb device, set dwPort = 0 ErrorCodeEnum FingerPrintNantian21::DevOpen(DWORD dwPort, DWORD dwBaudRate) { int iret = Error_Succeed; LOG4VTM(WARN, " - "<<"Enter-"); CILIXAutoTrace _at(m_gvar->m_trace,"DevOpen",&iret); if (!m_gvar->m_isLoad) { iret = Error_DevLoadFileFailed; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","辅助库加载或辅助库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"辅助库加载或辅助库方法加载失败 "); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } char cDevName[300]=""; iret = m_gvar->FPIFindDevice(m_gvar->m_port,cDevName); if (iret < 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","查找设备失败,FPIFindDevice return =%d",iret); LOG4VTM(WARN, " - "<<"查找设备失败,FPIFindDevice return "< - "<<"Exit-"); return (ErrorCodeEnum)iret; } m_gvar->m_connect = TRUE; iret = Error_Succeed; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"指纹仪打开成功"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } //扫描指纹并保存指纹图片到默认路径下(dep目录下) //计算特征值,iLength:输入代表buf最大长度,输出为特征实际长度 //Compute features ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE lpbFeature, int &iLength) { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace,"Image2Feature",&iret); LOG4VTM(WARN, " - "<<"Entry-"); if (!m_gvar->m_isLoad) { iret = Error_DevLoadFileFailed; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature","辅助库加载或辅助库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"辅助库加载或辅助库方法加载失败"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } if ((strlen(imagePath)==0) || (lpbFeature == NULL)) { iret = Error_Param; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature","输入参数或者输出参数为空"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"输入参数或者输出参数为空"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"输入参数或者输出参数为空"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } if (!m_gvar->m_connect) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "设备未连接"); iret = Error_DevNotAvailable; memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"设备未连接"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备未连接"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Image2Feature", "传入图片路径:imagePath= %s",imagePath); //录制指纹特征 char szBuf[1024] = ""; int iszlen = 0; iret = m_gvar->FPIGetFeature(m_gvar->m_port,szBuf); m_gvar->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Image2Feature", "FPIGetFeature return %d",iret); if (iret < 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "录制指纹特征失败,FPIGetFeature return iret =%d",iret); LOG4VTM(WARN, " - "<<"录制指纹特征失败,FPIGetFeature return iret "< - "<<"Exit-"); return (ErrorCodeEnum)iret; } //生成一张bmp图片 if (access(m_gvar->m_image,F_OK) != 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "图片路径不存在,m_gvar->m_image=%s",m_gvar->m_image); LOG4VTM(WARN, " - "<<"图片路径不存在,m_gvar->m_image="<m_image); iret = Error_Param; memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"图片路径不存在"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } //存储指纹图片 char cImageData[512*512]=""; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Image2Feature", "FPIGetImageDat ......................"); LOG4VTM(WARN, " - "<<"FPIGetImageDat ......................"); iret = m_gvar->FPIGetImageDat(m_gvar->m_port, cImageData); LOG4VTM(WARN, " - "<<"FPIGetImageDat return "<m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Image2Feature", "FPIGetImageDat return %d",iret); if (iret < 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "获取指纹图像数据操作失败,FPIGetImageDat return =%d",iret); LOG4VTM(WARN, " - "<<"获取指纹图像数据操作失败,FPIGetImageDat return ="< - "<<"Exit-"); return (ErrorCodeEnum)iret; } char cPath[1024] = ""; strcpy(cPath,m_gvar->m_image); strcat(cPath,imagePath); //生成指纹图片 iret = m_gvar->FPISaveImage(cPath,cImageData); if (iret < 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "保存指纹图片操作失败,FPISaveImage return =%d",iret); LOG4VTM(WARN, " - "<<"保存指纹图片操作失败,FPISaveImage return ="< - "<<"Exit-"); return (ErrorCodeEnum)iret; } iszlen = 684; if ((iLength < iszlen)|| (iLength == 0)) { iLength = iszlen; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature","输出指纹特征数据长度=%d",iszlen); LOG4VTM(WARN, " - "<<"输出指纹特征数据长度="< - "<<"Exit-"); return (ErrorCodeEnum)iret; } iLength = strlen(szBuf); //新增 memcpy(lpbFeature,szBuf,iLength); lpbFeature[iLength] = '\0'; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Image2Feature", "指纹特征数据:%s,长度:%d",szBuf,iLength); LOG4VTM(WARN, " - "<<"指纹特征数据长度:"<m_trace->WriteTrace(CILIXTRACE_L_INFO,"Image2Feature", "提取指纹特征成功"); LOG4VTM(WARN, " - "<<"提取指纹特征成功"); LOG4VTM(WARN, " - "<<"Exit-"); m_ecode = (ErrorCodeEnum)iret; return (ErrorCodeEnum)iret; } //生成特征模板(注册时使用) //Convert image to template ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const char* imagePath2, const char* imagePath3, LPBYTE lpbTemplate, int &iLength) { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace,"Image2Template",&iret); LOG4VTM(WARN, " - "<<"Entry-"); if (!m_gvar->m_isLoad) { iret = Error_DevLoadFileFailed; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","辅助库加载或辅助库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"辅助库加载或辅助库方法加载失败"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } if (!m_gvar->m_connect) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "设备未连接"); iret = Error_DevNotAvailable; memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"设备未连接"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备未连接"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } m_gvar->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Image2Template","输入合成模板图片路径1:%s,路径2:%s,路径3:%s", imagePath1,imagePath2,imagePath3); if ((strlen(imagePath1)==0)||(strlen(imagePath2)==0)||(strlen(imagePath3)==0)) { iret = Error_Param; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","输入合成模板图片路径为空"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"输入合成模板图片路径为空"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"输入合成模板图片路径为空"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } if ((access(imagePath1,F_OK) != 0)||(access(imagePath2,F_OK) != 0)||(access(imagePath3,F_OK) != 0)) { iret = Error_Param; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","输入合成模板图片不存在"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"输入合成模板图片不存在"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"输入合成模板图片不存在"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } char cMBBuf[1024] = ""; int iLen = 0; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Image2Template","entry FPITplFrmImgBmp ..................."); LOG4VTM(WARN, " - "<<"entry FPITplFrmImgBmp ..................."); iret = m_gvar->FPITplFrmImgBmp((char*)imagePath1,(char*)imagePath2,(char*)imagePath3,cMBBuf,&iLen); LOG4VTM(WARN, " - "<<"Exit FPITplFrmImgBmp ..................."); m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Image2Template","Exit FPITplFrmImgBmp ..................."); if (iret < 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","合成指纹内模板失败,FPITplFrmImgBmp return %d",iret); LOG4VTM(WARN, " - "<<"合成指纹内模板失败,FPITplFrmImgBmp return "< - "<<"Exit-"); return (ErrorCodeEnum)iret; } if ((iLength < iLen)|| (iLength == 0)) { iLength = iLen; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","输出指纹特征数据长度=%d",iLen); LOG4VTM(WARN, " - "<<"输出指纹特征数据长度="< - "<<"Exit-"); return (ErrorCodeEnum)iret; } m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Image2Template","合成指纹内模板成功,iLen = %d",iLen); LOG4VTM(WARN, " - "<<"合成指纹内模板成功,iLen="<m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Image2Template", "转base6数据:%s,长度:%d",cMBBuf,iLength); LOG4VTM(WARN, " - "<<"转base6数据长度:"< - "<<"Exit-"); return (ErrorCodeEnum)iret; } //比对校验 //Match the feature ErrorCodeEnum FingerPrintNantian21::Match(LPBYTE lpbTemplate[], int iTemplateLen[] ,int templateNum, LPBYTE lbpFeature, int &iFeatureLen ,int level) { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace,"Match",&iret); LOG4VTM(WARN, " - "<<"Entry-"); if (!m_gvar->m_isLoad) { iret = Error_DevLoadFileFailed; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match","辅助库加载或辅助库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"辅助库加载或辅助库方法加载失败"); LOG4VTM(WARN, " - "<<"Entry-"); return (ErrorCodeEnum)iret; } if ((lpbTemplate == NULL)|| (lbpFeature == NULL)|| (templateNum==0)) { iret = Error_Param; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match","输入参数参数为空或者为0"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"输入参数参数为空"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"输入参数参数为空或者为0"); LOG4VTM(WARN, " - "<<"Entry-"); return (ErrorCodeEnum)iret; } if (!m_gvar->m_connect) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match", "设备未连接"); iret = Error_DevNotAvailable; memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"设备未连接"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备未连接"); LOG4VTM(WARN, " - "<<"Entry-"); return (ErrorCodeEnum)iret; } m_gvar->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Match", "指纹特征数据=%s,长度=%d",lbpFeature,iFeatureLen); LOG4VTM(WARN, " - "<<"指纹特征数据长度="<m_trace->WriteTrace(CILIXTRACE_L_INFO,"Match", "指纹比对:level=%d",level); LOG4VTM(WARN, " - "<<"指纹比对:level="<m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"Match", "%d指纹模板数据=%s,长度=%d",i+1,lpbTemplate[i],iTemplateLen[i]); LOG4VTM(WARN, " - "<<"长度="<FPIFpMatch(MbData, TzData, level); if (iret >= 0)//比对成功 { iTemplateLen[i] = 1; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Match", "指纹比对成功"); LOG4VTM(WARN, " - "<<"指纹比对成功"); } else { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match", "指纹比对失败,iret=%d",iret); LOG4VTM(WARN, " - "<<"指纹比对失败,iret="< - "<<"Exit-"); return Error_Succeed; } //取消采集指纹图片 ErrorCodeEnum FingerPrintNantian21::Cancel() { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace,"Cancel",&iret); m_gvar->m_cancel = TRUE; m_ecode = (ErrorCodeEnum)iret; return Error_Succeed; } // // Get category infomation about device. // ErrorCodeEnum FingerPrintNantian21::GetDevCategory(DevCategoryInfo &devCategory) { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace, "GetDevCategory", &iret); LOG4VTM(WARN, " - "<<"Enry-"); strcpy(devCategory.szType, "PVER=TCS#MID=TCS316N"); strcpy(devCategory.szVendor, "nantian"); strcpy(devCategory.szModel, "FWID=1.00.25"); devCategory.version.wMajor = 1; devCategory.version.wMinor = 0; devCategory.version.wRevision = 0; devCategory.version.wBuild = 8; devCategory.eState = DEVICE_STATUS_NOT_READY; if (!m_gvar->m_isLoad) { iret = Error_DevLoadFileFailed; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevCategory","辅助库加载或辅助库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); devCategory.eState = DEVICE_STATUS_NOT_READY; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"辅助库加载或辅助库方法加载失败"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum) iret; } if (!m_gvar->m_connect) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevCategory", "设备未连接"); iret = Error_DevNotAvailable; memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"设备未连接"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); devCategory.eState = DEVICE_STATUS_NOT_READY; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备未连接"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum) iret; } //查询设备状态 char cDevSN[1024]=""; iret = m_gvar->FPIGetDevSN(m_gvar->m_port,cDevSN); if (iret >= 0) { iret=Error_Succeed; devCategory.eState = DEVICE_STATUS_NORMAL; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } else { devCategory.eState = DEVICE_STATUS_FAULT; iret = Error_Hardware; m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevCategory","获取不到设备信息"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"获取不到设备信息"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"获取不到设备信息"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } } // Reset device. // Do the cleaning work and initialize device again in order to return to // the normal condition. ErrorCodeEnum FingerPrintNantian21::Reset() { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace,"Reset",&iret); LOG4VTM(WARN, " - "<<"Entry-"); if (!m_gvar->m_isLoad) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Reset","动态库或动态库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"动态库或动态库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); iret = Error_DevLoadFileFailed; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"动态库或动态库方法加载失败"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } iret = m_gvar->FPICloseDevice(m_gvar->m_port); CILIX_AUX_X::Sleep(100); m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","FPICloseDevice return %d",iret); LOG4VTM(WARN, " - "<<"FPICloseDevice return "<FPIFindDevice(m_gvar->m_port,cDevName); if (iret < 0) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Reset","设备复位失败,FPIFindDevice return %d",iret); iret = Error_DevConnFailed; m_gvar->m_connect = FALSE; memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"设备复位失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备复位失败,FPIFindDevice return "< - "<<"Exit-"); return (ErrorCodeEnum)iret; } m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"PTR_Reset","设备复位成功"); m_gvar->m_connect = TRUE; iret = Error_Succeed; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备复位成功"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } // // Close device and do the cleaning work. // ex. close connection,close port,release memery and so on ErrorCodeEnum FingerPrintNantian21::DevClose() { int iret = Error_Succeed; CILIXAutoTrace _at(m_gvar->m_trace,"DevClose",&iret); LOG4VTM(WARN, " - "<<"Entry-"); if (!m_gvar->m_isLoad) { m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevClose","辅助库加载或辅助库方法加载失败"); memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg)); strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败"); m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); iret = Error_DevLoadFileFailed; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"辅助库加载或辅助库方法加载失败"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } if (m_gvar->m_connect) { m_gvar->FPICloseDevice(m_gvar->m_port); m_gvar->m_connect = FALSE; } iret = Error_Succeed; m_ecode = (ErrorCodeEnum)iret; LOG4VTM(WARN, " - "<<"设备关闭成功"); LOG4VTM(WARN, " - "<<"Exit-"); return (ErrorCodeEnum)iret; } // Get last error the device issued. // Error message must include explanatory memorandum ,the original error // code and anything in favour of location problem. ErrorCodeEnum FingerPrintNantian21::GetLastErr(DevErrorInfo &devErrInfo) { devErrInfo.dwErrMsgLen = 0; memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN); devErrInfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg); memcpy(devErrInfo.szErrMsg, m_errinfo.szErrMsg, devErrInfo.dwErrMsgLen); return Error_Succeed; }