Browse Source

#IQRV #comment [vendor] nantian/2022.1019.02

gifur 3 years ago
parent
commit
d195b79bf0

+ 1 - 1
DevAdapter/CMakeLists.txt

@@ -140,7 +140,7 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 # 通过conan的方式管理厂商库
 if(DEVADAPTER_USING_CONAN)
     set(KEBA_CONAN_LIB_NAME keba/2022.0713.01@LR04.02_VendorLib/testing)
-	set(NANTIAN_CONAN_LIB_NAME nantian/2022.0905.01@LR04.02_VendorLib/testing)
+	set(NANTIAN_CONAN_LIB_NAME nantian/2022.1019.02@LR04.02_VendorLib/testing)
 	set(GRG_CONAN_LIB_NAME grg/2022.1018.01@LR04.02_VendorLib/testing)
 	set(CW_CONAN_LIB_NAME cw/2021.0927.01@LR04.02_VendorLib/testing)
 endif(DEVADAPTER_USING_CONAN)

File diff suppressed because it is too large
+ 966 - 981
DevAdapter/nantian/FingerPrint.1.1/CILIX_AUX_UTILS.h


+ 2 - 2
DevAdapter/nantian/FingerPrint.1.1/Gvar.cpp

@@ -50,7 +50,7 @@ Gvar::Gvar()
 
 	LOG4VTM(WARN, "<Gvar> - "<<"Enter-");
 
-	LOG4VTM(WARN, "<Gvar> - "<<"fingerprint.nantian.1.1.so - 版本:V1.0.0.8");
+	LOG4VTM(WARN, "<Gvar> - "<<"fingerprint.nantian.1.1.so - 版本:V1.0.0.9");
 	LoadDll();
 	LOG4VTM(WARN, "<Gvar> - "<<"Exit-");
 }
@@ -77,7 +77,7 @@ void Gvar::LoadDll()
 	memset(m_image,0,sizeof(m_image));
 	strcpy(m_image,confile);
 	strcat(dll1Path,"/nantian/libusbfpex64.nantian.so");
-	m_trace->WriteTrace(CILIXTRACE_L_INFO,"LoadDll","版本:V1.0.0.7");
+	m_trace->WriteTrace(CILIXTRACE_L_INFO,"LoadDll","版本:V1.0.0.9");
 	m_trace->WriteTrace(CILIXTRACE_L_INFO,"LoadDll","驱动库路径dll1Path=%s",dll1Path);
 	LOG4VTM(WARN, "<LoadDll> - "<<"驱动库路径dll1Path = "<<dll1Path);
 	m_hDll1 = dlopen(dll1Path,RTLD_LAZY);

+ 55 - 2
DevAdapter/nantian/FingerPrint.1.1/fingerprint.nantian.1.1.cpp

@@ -1,5 +1,7 @@
 #include "fingerprint.nantian.1.1.h"
 #include "log4vendor.h"
+char g_function[100]="";
+int g_len = 0;
 FINGERPRINTNANTIAN21_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
 {
 	baseObj = new FingerPrintNantian21();
@@ -64,9 +66,13 @@ ErrorCodeEnum FingerPrintNantian21::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 	int iret = Error_Succeed;
 	LOG4VTM(WARN, "<DevOpen> - "<<"Enter-");
 	CILIXAutoTrace _at(m_gvar->m_trace,"DevOpen",&iret);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","DevOpen");
+	g_len = 0;
 	if (!m_gvar->m_isLoad)
 	{
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","辅助库加载或辅助库方法加载失败");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败");
@@ -84,6 +90,7 @@ ErrorCodeEnum FingerPrintNantian21::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 		LOG4VTM(WARN, "<DevOpen> - "<<"查找设备失败,FPIFindDevice return "<<iret);
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"查找设备失败");
+		g_len = __LINE__;
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		iret = Error_DevNotAvailable;
 		m_ecode = (ErrorCodeEnum)iret;
@@ -106,9 +113,13 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace,"Image2Feature",&iret);
 	LOG4VTM(WARN, "<Image2Feature> - "<<"Entry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Image2Feature");
+	g_len = 0;
 	if (!m_gvar->m_isLoad)
 	{
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature","辅助库加载或辅助库方法加载失败");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败");
@@ -121,6 +132,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 	if ((strlen(imagePath)==0) || (lpbFeature == NULL))
 	{
 		iret = Error_Param;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature","输入参数或者输出参数为空");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"输入参数或者输出参数为空");
@@ -134,6 +146,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 	{
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "设备未连接");
 		iret = Error_DevNotAvailable;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"设备未连接");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -153,6 +166,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "录制指纹特征失败,FPIGetFeature return iret =%d",iret);
 		LOG4VTM(WARN, "<Image2Feature> - "<<"录制指纹特征失败,FPIGetFeature return iret "<<iret);
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"录制指纹特征失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -166,6 +180,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "图片路径不存在,m_gvar->m_image=%s",m_gvar->m_image);
 		LOG4VTM(WARN, "<Image2Feature> - "<<"图片路径不存在,m_gvar->m_image="<<m_gvar->m_image);
 		iret = Error_Param;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"图片路径不存在");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -185,6 +200,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "获取指纹图像数据操作失败,FPIGetImageDat return =%d",iret);
 		LOG4VTM(WARN, "<Image2Feature> - "<<"获取指纹图像数据操作失败,FPIGetImageDat return ="<<iret);
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"获取指纹图像数据操作失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -202,6 +218,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "保存指纹图片操作失败,FPISaveImage return =%d",iret);
 		LOG4VTM(WARN, "<Image2Feature> - "<<"保存指纹图片操作失败,FPISaveImage return ="<<iret);
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"保存指纹图片操作失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -219,6 +236,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Feature(const char* imagePath, LPBYTE
 		strcpy(m_errinfo.szErrMsg,"传入空间长度太小");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		iret = Error_TooSmallBuffer;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<Image2Feature> - "<<"Exit-");
 		return (ErrorCodeEnum)iret;
@@ -244,9 +262,13 @@ ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace,"Image2Template",&iret);
 	LOG4VTM(WARN, "<Image2Template> - "<<"Entry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Image2Template");
+	g_len = 0;
 	if (!m_gvar->m_isLoad)
 	{
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","辅助库加载或辅助库方法加载失败");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败");
@@ -260,6 +282,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const
 	{
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Feature", "设备未连接");
 		iret = Error_DevNotAvailable;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"设备未连接");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -273,6 +296,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const
 	if ((strlen(imagePath1)==0)||(strlen(imagePath2)==0)||(strlen(imagePath3)==0))
 	{
 		iret = Error_Param;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","输入合成模板图片路径为空");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"输入合成模板图片路径为空");
@@ -285,6 +309,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const
 	if ((access(imagePath1,F_OK) != 0)||(access(imagePath2,F_OK) != 0)||(access(imagePath3,F_OK) != 0))
 	{
 		iret = Error_Param;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Image2Template","输入合成模板图片不存在");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"输入合成模板图片不存在");
@@ -309,6 +334,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const
 		strcpy(m_errinfo.szErrMsg,"合成指纹内模板失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		iret = Error_Hardware;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<Image2Template> - "<<"Exit-");
 		return (ErrorCodeEnum)iret;
@@ -322,6 +348,7 @@ ErrorCodeEnum FingerPrintNantian21::Image2Template(const char* imagePath1, const
 		strcpy(m_errinfo.szErrMsg,"传入空间长度太小");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		iret = Error_TooSmallBuffer;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<Image2Template> - "<<"Exit-");
 		return (ErrorCodeEnum)iret;
@@ -346,9 +373,13 @@ ErrorCodeEnum FingerPrintNantian21::Match(LPBYTE lpbTemplate[], int iTemplateLen
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace,"Match",&iret);
 	LOG4VTM(WARN, "<Match> - "<<"Entry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Match");
+	g_len = 0;
 	if (!m_gvar->m_isLoad)
 	{
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match","辅助库加载或辅助库方法加载失败");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败");
@@ -361,6 +392,7 @@ ErrorCodeEnum FingerPrintNantian21::Match(LPBYTE lpbTemplate[], int iTemplateLen
 	if ((lpbTemplate == NULL)|| (lbpFeature == NULL)|| (templateNum==0))
 	{
 		iret = Error_Param;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match","输入参数参数为空或者为0");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"输入参数参数为空");
@@ -374,6 +406,7 @@ ErrorCodeEnum FingerPrintNantian21::Match(LPBYTE lpbTemplate[], int iTemplateLen
 	{
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Match", "设备未连接");
 		iret = Error_DevNotAvailable;
+		g_len = __LINE__;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"设备未连接");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
@@ -432,6 +465,9 @@ ErrorCodeEnum FingerPrintNantian21::Cancel()
 {
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace,"Cancel",&iret);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Cancel");
+	g_len = 0;
 	m_gvar->m_cancel = TRUE;
 	m_ecode = (ErrorCodeEnum)iret;
 	return Error_Succeed;
@@ -444,6 +480,9 @@ ErrorCodeEnum FingerPrintNantian21::GetDevCategory(DevCategoryInfo &devCategory)
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace, "GetDevCategory", &iret);
 	LOG4VTM(WARN, "<GetDevCategory> - "<<"Enry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","GetDevCategory");
+	g_len = 0;
 	strcpy(devCategory.szType, "PVER=TCS#MID=TCS316N");
 	strcpy(devCategory.szVendor, "nantian");
 	strcpy(devCategory.szModel, "FWID=1.00.25");
@@ -461,6 +500,7 @@ ErrorCodeEnum FingerPrintNantian21::GetDevCategory(DevCategoryInfo &devCategory)
 		strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		devCategory.eState = DEVICE_STATUS_NOT_READY;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<GetDevCategory> - "<<"辅助库加载或辅助库方法加载失败");
 		LOG4VTM(WARN, "<GetDevCategory> - "<<"Exit-");
@@ -474,6 +514,7 @@ ErrorCodeEnum FingerPrintNantian21::GetDevCategory(DevCategoryInfo &devCategory)
 		strcpy(m_errinfo.szErrMsg,"设备未连接");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		devCategory.eState = DEVICE_STATUS_NOT_READY;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<GetDevCategory> - "<<"设备未连接");
 		LOG4VTM(WARN, "<GetDevCategory> - "<<"Exit-");
@@ -494,6 +535,7 @@ ErrorCodeEnum FingerPrintNantian21::GetDevCategory(DevCategoryInfo &devCategory)
 	{
 		devCategory.eState = DEVICE_STATUS_FAULT;
 		iret = Error_Hardware;
+		g_len = __LINE__;
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevCategory","获取不到设备信息");
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"获取不到设备信息");
@@ -512,6 +554,9 @@ ErrorCodeEnum FingerPrintNantian21::Reset()
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace,"Reset",&iret);
 	LOG4VTM(WARN, "<Reset> - "<<"Entry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Reset");
+	g_len = 0;
 	if (!m_gvar->m_isLoad)
 	{
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Reset","动态库或动态库方法加载失败");
@@ -519,6 +564,7 @@ ErrorCodeEnum FingerPrintNantian21::Reset()
 		strcpy(m_errinfo.szErrMsg,"动态库或动态库方法加载失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<Reset> - "<<"动态库或动态库方法加载失败");
 		LOG4VTM(WARN, "<Reset> - "<<"Exit-");
@@ -534,6 +580,7 @@ ErrorCodeEnum FingerPrintNantian21::Reset()
 	{
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"Reset","设备复位失败,FPIFindDevice return %d",iret);
 		iret = Error_DevConnFailed;
+		g_len = __LINE__;
 		m_gvar->m_connect = FALSE;
 		memset(m_errinfo.szErrMsg,0,sizeof(m_errinfo.szErrMsg));
 		strcpy(m_errinfo.szErrMsg,"设备复位失败");
@@ -559,6 +606,9 @@ ErrorCodeEnum FingerPrintNantian21::DevClose()
 	int iret = Error_Succeed;
 	CILIXAutoTrace _at(m_gvar->m_trace,"DevClose",&iret);
 	LOG4VTM(WARN, "<DevClose> - "<<"Entry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","DevClose");
+	g_len = 0;
 	if (!m_gvar->m_isLoad)
 	{
 		m_gvar->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevClose","辅助库加载或辅助库方法加载失败");
@@ -566,6 +616,7 @@ ErrorCodeEnum FingerPrintNantian21::DevClose()
 		strcpy(m_errinfo.szErrMsg,"辅助库加载或辅助库方法加载失败");
 		m_errinfo.dwErrMsgLen = strlen(m_errinfo.szErrMsg);
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
 		m_ecode = (ErrorCodeEnum)iret;
 		LOG4VTM(WARN, "<DevClose> - "<<"辅助库加载或辅助库方法加载失败");
 		LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
@@ -589,7 +640,9 @@ 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);
+	sprintf(devErrInfo.szErrMsg,"{ErrCode:%d,Description:'Func:%s,Line:%d,Msg:%s'}",m_ecode,g_function,g_len,m_errinfo.szErrMsg);
+	devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+	m_gvar->m_trace->WriteTrace(CILIXTRACE_L_INFO,"GetLastErr","devErrInfo.szErrMsg=%s",devErrInfo.szErrMsg);
+	LOG4VTM(WARN, "<GetLastErr> - "<<"Exit- "<<devErrInfo.szErrMsg);
 	return Error_Succeed;
 }

+ 166 - 88
DevAdapter/nantian/cardissuer.1.1/cardissuer.nantian.1.1.cpp

@@ -1,6 +1,9 @@
 #include "cardissuer.nantian.1.1.h"
 #include <cstring>
 #include <cstdio>
+
+ErrCode_Msg m_ErrCode_Msg;
+
 CardIssuerClassImpl::CardIssuerClassImpl()
 	: m_mode(0)
 {
@@ -99,11 +102,24 @@ bool CardIssuerClassImpl::LoadNTDRVDLL()
 	return true;
 }
 
-int CardIssuerClassImpl::ErrorInfo(int iRet,char * Msg)
+void m_ErrCode_Msg_Input_Struct(int ErrCode,char *Function,char *szErrMsg)
+{
+    memset(m_ErrCode_Msg.szErrMsg,0,sizeof(m_ErrCode_Msg.szErrMsg));
+	memset(m_ErrCode_Msg.Function,0,sizeof(m_ErrCode_Msg.Function));
+
+	strcpy(m_ErrCode_Msg.szErrMsg,szErrMsg);
+	strcpy(m_ErrCode_Msg.Function,Function);
+
+	m_ErrCode_Msg.ErrMsgLen=strlen(m_ErrCode_Msg.szErrMsg);
+	m_ErrCode_Msg.ErrCode=ErrCode;
+}
+
+int CardIssuerClassImpl::ErrorInfo(int iRet,char * FunctionName)
 {
 	int ErrIret = Error_Hardware;
 	char ErrorInfo[100]="";
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+
 	switch (iRet)
 	{
 	case E_CARDDISPENSER_CARDJAM:
@@ -139,8 +155,12 @@ int CardIssuerClassImpl::ErrorInfo(int iRet,char * Msg)
 		strcpy(ErrorInfo, "hardware error");
 		break;
 	}
-	sprintf(m_errorInfo.szErrMsg, "FunMsg:%s,ErrorInfo:%s",Msg,ErrorInfo);
-	m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+	//sprintf(m_errorInfo.szErrMsg, "FunMsg:%s,ErrorInfo:%s",Msg,ErrorInfo);
+	//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+	 m_ErrCode_Msg_Input_Struct(ErrIret,FunctionName,ErrorInfo);
+
 	return ErrIret;
 }
 ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
@@ -169,14 +189,19 @@ ErrorCodeEnum CardIssuerClassImpl::Reset()
 	int iRet = 0;
 	try
 	{
-		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-		m_errorInfo.dwErrMsgLen = 0;
+		//memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+		//m_errorInfo.dwErrMsgLen = 0;
+		m_ErrCode_Msg_Input_Struct(Error_Succeed,"Reset","Error_Succeed");
 		if (!m_isDevOpened)
 		{
-			strcpy(m_errorInfo.szErrMsg, "device not connect");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			//strcpy(m_errorInfo.szErrMsg, "device not connect");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+			m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"Reset","device not connect");
 			iRet = Error_DevConnFailed;
+
 			throw(iRet);
+
 		}
 		//复位设备
 		char *sReset[10] = {NULL};
@@ -189,7 +214,7 @@ ErrorCodeEnum CardIssuerClassImpl::Reset()
 		{
 			LOG4VTM(ERROR, "<Reset> - "
 							   << "ResetDev-return:" << iRet);
-			throw(ErrorInfo(iRet,"ResetDev Error"));
+			throw(ErrorInfo(iRet,"Reset"));
 		}
 		iRet = Error_Succeed;
 	}
@@ -225,9 +250,22 @@ ErrorCodeEnum CardIssuerClassImpl::DevClose()
 ErrorCodeEnum CardIssuerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
 	static int times = 0;
-	devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
-	strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
-	return Error_Succeed;
+	//devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
+	//strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
+	//return Error_Succeed;
+	int iret = Error_Succeed;
+    CILIXAutoTrace __at(m_trace, "GetLastErr", &iret);
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Enter");
+    memset(devErrInfo.szErrMsg,0,MAX_DEV_ERROR_MSG_LEN);
+
+    sprintf(devErrInfo.szErrMsg,"{Errcode:%d,Decription:'Func:%s,Line:%d,Msg:%s'}",m_ErrCode_Msg.ErrCode,m_ErrCode_Msg.Function,m_ErrCode_Msg.ErrMsgLen,m_ErrCode_Msg.szErrMsg);
+
+    devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Exit");
+    return Error_Succeed;
 }
 
 DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
@@ -275,15 +313,19 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 		memset(szComPort, 0, sizeof(szComPort));
 		sprintf(szComPort, "Com%d", (int)dwPort);
 
-		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-		m_errorInfo.dwErrMsgLen = 0;
+		//memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+                //m_errorInfo.dwErrMsgLen = 0;
+                m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpen","Error_Succeed");
 		iRet = DRVCardDispenser->OpenDev(szComPort, (int)dwBaudRate);
 		if (iRet != 0)
 		{
 			LOG4VTM(ERROR, "<DevOpen> - "
 							   << "OpenDev-return:" << iRet);
-			strcpy(m_errorInfo.szErrMsg, "connect to device failed");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			//strcpy(m_errorInfo.szErrMsg, "connect to device failed");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+			m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"DevOpen","connect to device failed");
+
 			m_isDevOpened = false;
 
 			iRet = Error_DevConnFailed;
@@ -304,7 +346,7 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 		{
 			LOG4VTM(ERROR, "<DevOpen> - "
 							   << "ResetDev-return:" << iRet);
-			throw(ErrorInfo(iRet,"Open ResetDev Error"));
+			throw(ErrorInfo(iRet,"DevOpen ResetDev"));
 		}
 
 		int mSupplyBin = 2, mRetainBin = 1, mHoldBin = 0;
@@ -341,8 +383,9 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 
 	int iRet = Error_Succeed;
 	CardIssuerStatus tempStatus;
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
+	//memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"GetDevStatus","Error_Succeed");
 	char *BoxStatus[200] = {NULL};
 	for (int i = 0; i < 200; i++)
 	{
@@ -353,8 +396,9 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 	{
 		if (!m_isDevOpened)
 		{
-			strcpy(m_errorInfo.szErrMsg, "device not connect");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"GetDevStatus","device not connect");
+			//strcpy(m_errorInfo.szErrMsg, "device not connect");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 			iRet = Error_DevConnFailed;
 			throw(iRet);
 		}
@@ -377,8 +421,12 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 		if ((atoi(sDevice) != CARDDISPENSER_DEVONLINE) && ((atoi(sDevice) != CARDDISPENSER_DEVBUSY)))
 		{
 			m_trace->WriteTrace(CILIXTRACE_L_INFO, "GetDevStatus", "hardware error");
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevStatus","hardware error");
+
+			//strcpy(m_errorInfo.szErrMsg, "hardware error");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			
 			iRet = Error_Hardware;
 			throw(iRet);
 		}
@@ -522,12 +570,15 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 	sStatus[16] = sShutter;
 	try
 	{
-		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-		m_errorInfo.dwErrMsgLen = 0;
+		//memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+                //m_errorInfo.dwErrMsgLen = 0;
+                m_ErrCode_Msg_Input_Struct(Error_Succeed,"MoveCard","Error_Succeed");
 		if (!m_isDevOpened)
 		{
-			strcpy(m_errorInfo.szErrMsg, "device not connect");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			//strcpy(m_errorInfo.szErrMsg, "device not connect");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"MoveCard","device not connect");
+
 			iRet = Error_DevConnFailed;
 			throw(iRet);
 		}
@@ -538,8 +589,9 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 		DRVCardDispenser->GetDevStatus(0, sStatus);
 		if (stoi(sDevice) != CARDDISPENSER_DEVONLINE)
 		{
-			strcpy(m_errorInfo.szErrMsg, "hardware error");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			//strcpy(m_errorInfo.szErrMsg, "hardware error");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"MoveCard","hardware error");
 			iRet = Error_Hardware;
 			throw(iRet);
 		}
@@ -554,8 +606,11 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 			{
 				LOG4VTM(WARN, "<MoveCard> - "
 								  << "CI_MOVECARD_FRONT_GATE-device not card to Gate");
-				strcpy(m_errorInfo.szErrMsg, "device not card to Gate");
-				m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+				//strcpy(m_errorInfo.szErrMsg, "device not card to Gate");
+				//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+				m_ErrCode_Msg_Input_Struct(Error_Param,"MoveCard","device not card to Gate");
+
 				iRet = Error_Param;
 				throw(iRet);
 			}
@@ -572,8 +627,11 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 				{
 					LOG4VTM(ERROR, "<MoveCard> - "
 									   << "ICCPower-return:" << iRet);
-					strcpy(m_errorInfo.szErrMsg, "device ReleaseDactivates Fail!");
-					m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+					//strcpy(m_errorInfo.szErrMsg, "device ReleaseDactivates Fail!");
+					//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+					m_ErrCode_Msg_Input_Struct(Error_Hardware,"MoveCard","device ReleaseDactivates Fail!");
+
 					iRet = Error_Hardware;
 					throw(iRet);
 				}
@@ -583,7 +641,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 			{
 				LOG4VTM(ERROR, "<MoveCard> - "
 								   << "EjectCard-return:" << iRet);
-				throw(ErrorInfo(iRet,"Dev EjectCard Error"));
+				throw(ErrorInfo(iRet,"MoveCard EjectCard"));
 			}
 
 		}
@@ -600,8 +658,11 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 			{
 				LOG4VTM(WARN, "<MoveCard> - "
 								  << "CI_MOVECARD_BACK_NOT_HOLD-device not card to Gate");
-				strcpy(m_errorInfo.szErrMsg, "device not card to BACK_NOT_HOLD");
-				m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+				//strcpy(m_errorInfo.szErrMsg, "device not card to BACK_NOT_HOLD");
+				//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+				m_ErrCode_Msg_Input_Struct(Error_Param,"MoveCard","device not card to BACK_NOT_HOLD");
+
 				iRet = Error_Param;
 				throw(iRet);
 			}
@@ -614,8 +675,9 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 				{
 					LOG4VTM(ERROR, "<MoveCard> - "
 									   << "ICCPower-return:" << iRet);
-					strcpy(m_errorInfo.szErrMsg, "device ReleaseDactivates Fail!");
-					m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+					//strcpy(m_errorInfo.szErrMsg, "device ReleaseDactivates Fail!");
+					//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+					m_ErrCode_Msg_Input_Struct(Error_Hardware,"MoveCard","device ReleaseDactivates Fail!");
 					iRet = Error_Hardware;
 					throw(iRet);
 				}
@@ -634,7 +696,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 					goto STARTRETAIN;
 				}
 				//m_trace->WriteTrace(CILIXTRACE_L_INFO,"MoveCard","CI_MOVECARD_BACK_NOT_HOLD.tryTime:%d",tryTime);
-				throw(ErrorInfo(iRet,"Dev RetainCard Error"));
+				throw(ErrorInfo(iRet,"MoveCard RetainCard"));
 			}
 		}
 		break;
@@ -643,8 +705,10 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 		{
 			if (atoi(sMedia) != CARDDISPENSER_MEDIANOTPRESENT)
 			{
-				strcpy(m_errorInfo.szErrMsg, "device not card not FROM_HOPPER");
-				m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+				//strcpy(m_errorInfo.szErrMsg, "device not card not FROM_HOPPER");
+				//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+				m_ErrCode_Msg_Input_Struct(Error_Param,"MoveCard","device not card not FROM_HOPPER");
 				iRet = Error_Param;
 				throw(iRet);
 			}
@@ -653,7 +717,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 			{
 				LOG4VTM(ERROR, "<MoveCard> - "
 								   << "Dispense-return:" << iRet);
-				throw(ErrorInfo(iRet,"Dev Dispense Error"));
+				throw(ErrorInfo(iRet,"MoveCard Dispense"));
 			}
 		}
 		break;
@@ -709,8 +773,10 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 					  << "WaitSetCardInTypeEnd");
 	LOG4VTM(WARN, "<SetCardInType> - "
 					  << "SetCardInType Enter Count:" << FunSum);
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
+
+	//memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"SetCardInType","Error_Succeed");
 	int iRet = Error_Succeed;
 	try
 	{
@@ -740,7 +806,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 		{
 			LOG4VTM(ERROR, "<SetCardInType> - "
 							   << "InsertCard-return:" << iRet);
-			throw(ErrorInfo(iRet,"Dev InsertCard Error"));
+			throw(ErrorInfo(iRet,"InsertCard"));
 		}
 
 		iRet = Error_Succeed;
@@ -755,6 +821,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
+
 ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 {
 	LOG4VTM_FUNCTION();
@@ -763,9 +830,9 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 	int iRet = Error_Succeed;
 	try
 	{
-		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-		m_errorInfo.dwErrMsgLen = 0;
-
+                //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+                //m_errorInfo.dwErrMsgLen = 0;
+                m_ErrCode_Msg_Input_Struct(Error_Succeed,"MagRead","Error_Succeed");
 		char magTrack1[1024] = "";
 		char magTrack2[1024] = "";
 		char magTrack3[1024] = "";
@@ -852,9 +919,9 @@ ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnu
 	mtx.lock();
 
 	int iRet = Error_Succeed;
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"MagWrite","Error_Succeed");
 	int ierr = 0;
 	BOOL write_success_flag = FALSE;
 
@@ -915,8 +982,9 @@ ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnu
 
 	if (write_success_flag == FALSE)
 	{
-		strcpy(m_errorInfo.szErrMsg, "hardware error");
-		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+		//strcpy(m_errorInfo.szErrMsg, "hardware error");
+		//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+		m_ErrCode_Msg_Input_Struct(Error_Hardware,"MagWrite","hardware error");
 		iRet = Error_Hardware;
 	}
 	mtx.unlock();
@@ -929,9 +997,9 @@ ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 
 	int iRet = Error_Succeed;
 
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"SetRetractCounter","Error_Succeed");
 	int ierr = 0;
 
 	//清空回收箱计数
@@ -941,7 +1009,8 @@ ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 
 		if (ierr < 0)
 		{
-			return (ErrorCodeEnum)ErrorInfo(iRet,"Dev SetRetainCount Error");
+                    mtx.unlock();
+                    return (ErrorCodeEnum)ErrorInfo(iRet,"SetRetractCounter");
 		}
 	}
 	mtx.unlock();
@@ -959,9 +1028,9 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 
 	int iRet = Error_Succeed;
 
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"ActiveICCard","Error_Succeed");
 	unsigned char sATR[1024] = "";
 	int iATR = 0;
 
@@ -971,12 +1040,14 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 	if (iRet < 0)
 	{
 		LOG4VTM(ERROR, "<ActiveICCard> - "
-						   << "ICCPower-return:" << iRet);
-		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
+					   << "ICCPower-return:" << iRet);
+		mtx.unlock();	
+		return (ErrorCodeEnum)ErrorInfo(iRet,"ActiveICCard");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
+
 ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 {
 	LOG4VTM_FUNCTION();
@@ -984,9 +1055,9 @@ ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 
 	int iRet = 0;
 
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"ContactIC","Error_Succeed");
 	unsigned char sATR[1024] = "";
 	int iATR = 0;
 	int ierr = 0;
@@ -997,11 +1068,13 @@ ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 	{
 		LOG4VTM(ERROR, "<ContactIC> - "
 						   << "ICCPower-return:" << iRet);
-		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
+                mtx.unlock();
+		return (ErrorCodeEnum)ErrorInfo(iRet,"ContactIC");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
 }
+
 ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 {
 	LOG4VTM_FUNCTION();
@@ -1009,16 +1082,17 @@ ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 
 	int iRet = 0;
 
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"ReleaseIC","Error_Succeed");
 	iRet = DRVCardDispenser->ICCPower(4, NULL, NULL);
 
 	if (iRet < 0)
 	{
 		LOG4VTM(ERROR, "<ReleaseIC> - "
 						   << "ICCPower-return:" << iRet);
-		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
+                mtx.unlock();
+		return (ErrorCodeEnum)ErrorInfo(iRet,"ReleaseIC");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -1030,9 +1104,9 @@ ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 
 	int iRet = 0;
 
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"WarmReset","Error_Succeed");
 	unsigned char sATR[1024] = "";
 	int iATR = 0;
 	char sErrMsg[100] = "";
@@ -1045,7 +1119,8 @@ ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 	{
 		LOG4VTM(ERROR, "<WarmReset> - "
 						   << "ICCPower-return:" << iRet);
-		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
+                mtx.unlock();
+		return (ErrorCodeEnum)ErrorInfo(iRet,"WarmReset");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -1059,9 +1134,9 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
 
 	try
 	{
-		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-		m_errorInfo.dwErrMsgLen = 0;
-
+                //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+                //m_errorInfo.dwErrMsgLen = 0;
+                m_ErrCode_Msg_Input_Struct(Error_Succeed,"ICCommand","Error_Succeed");
 		unsigned char szSendData[1024] = "";
 		memset(szSendData, 0, sizeof(szSendData));
 		int iSendLength = 0;
@@ -1078,7 +1153,7 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
 		{
 			LOG4VTM(ERROR, "<ICCommand> - "
 							   << "ICCTransmit-return:" << iRet);
-			throw(ErrorInfo(iRet,"Dev ICCTransmit Error"));
+			throw(ErrorInfo(iRet,"ICCommand"));
 		}
 		if (szRecvData[iRecvLength - 2] == 0x61)
 		{
@@ -1115,9 +1190,9 @@ ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 
 	int iRet = Error_Succeed;
 
-	memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-	m_errorInfo.dwErrMsgLen = 0;
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //m_errorInfo.dwErrMsgLen = 0;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"DeactivateICCard","Error_Succeed");
 	char sErrMsg[100] = "";
 
 	iRet = DRVCardDispenser->ICCPower(8, NULL, NULL);
@@ -1126,7 +1201,8 @@ ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 	{
 		LOG4VTM(ERROR, "<DeactivateICCard> - "
 						   << "ICCPower-return:" << iRet);
-		return (ErrorCodeEnum)ErrorInfo(iRet,"Dev ICCPower Error");
+                mtx.unlock();
+		return (ErrorCodeEnum)ErrorInfo(iRet,"DeactivateICCard");
 	}
 	mtx.unlock();
 	return (ErrorCodeEnum)iRet;
@@ -1182,13 +1258,15 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYT
 						  << "OpenDev-szComPort:" << szComPort);
 		LOG4VTM(WARN, "<DevOpenEx> - "
 						  << "OpenDev-dwBaudRate:" << dwBaudRate);
-		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-		m_errorInfo.dwErrMsgLen = 0;
+		//memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+                //m_errorInfo.dwErrMsgLen = 0;
+                m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpenEx","Error_Succeed");
 		iRet = DRVCardDispenser->OpenDev(szComPort, (int)dwBaudRate);
 		if (iRet != 0)
 		{
-			strcpy(m_errorInfo.szErrMsg, "connect to device failed");
-			m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			//strcpy(m_errorInfo.szErrMsg, "connect to device failed");
+			//m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+			m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"DevOpenEx","connect to device failed");
 			m_isDevOpened = false;
 
 			iRet = Error_DevConnFailed;
@@ -1209,7 +1287,7 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYT
 		{
 			LOG4VTM(ERROR, "<DevOpenEx> - "
 							   << "ResetDev-return:" << iRet);
-			throw(ErrorInfo(iRet,"Open ResetDev Error"));
+			throw(ErrorInfo(iRet,"DevOpenEx ResetDev"));
 		}
 		int mSupplyBin = 2, mRetainBin = 1, mHoldBin = 0;
 
@@ -1365,4 +1443,4 @@ ErrorCodeEnum CardIssuerClassImpl::QueryBatteryPower(int &bat)
 {
 	int iRet = 0;
 	return (ErrorCodeEnum)iRet;
-}
+}

+ 9 - 1
DevAdapter/nantian/cardissuer.1.1/cardissuer.nantian.1.1.h

@@ -18,6 +18,14 @@
 typedef DRV_CardDispenser *(*pCreate_DRV_CardDispenser)();
 typedef void (*pDestroy_DRV_CardDispenser)(DRV_CardDispenser *p);
 
+typedef struct _ErrCode_Msg
+{
+    int ErrMsgLen;
+    int ErrCode;
+    char szErrMsg[100];
+    char Function[100];
+}ErrCode_Msg;
+    
 class CardIssuerClassImpl : public CardIssuerClass
 {
 public:
@@ -198,7 +206,7 @@ public:
 	bool  m_isCanceled;
 	
 	bool LoadNTDRVDLL();
-	int ErrorInfo(int iRet,char * Msg);
+	int ErrorInfo(int iRet,char * FunctionName);
 
     std::mutex mtx;
     std::mutex statusMtx;

+ 100 - 47
DevAdapter/nantian/contactlesscard.1.1/contactless.nantian.1.1.cpp

@@ -1,11 +1,15 @@
 #include "contactless.nantian.1.1.h"
 #include <cstring>
 #include <cstdio>
+
+ErrCode_Msg m_ErrCode_Msg;
+
 ContactlessCardImpl::ContactlessCardImpl()
     : m_mode(0)
 {
-    memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
-    m_ErrInfo.dwErrMsgLen = 0;
+    memset(m_ErrCode_Msg.szErrMsg, 0, sizeof(m_ErrCode_Msg.szErrMsg));
+    memset(m_ErrCode_Msg.Function,0,sizeof(m_ErrCode_Msg.Function));
+    m_ErrCode_Msg.ErrMsgLen = 0;
 
     m_tempStatus.eMediaPos = CI_MEDIA_NOTPRESENT;
 
@@ -102,6 +106,18 @@ bool ContactlessCardImpl::LoadDrvDll()
     return true;
 }
 
+void m_ErrCode_Msg_Input_Struct(int ErrCode,char *Function,char *szErrMsg)
+{
+	memset(m_ErrCode_Msg.szErrMsg,0,sizeof(m_ErrCode_Msg.szErrMsg));
+	memset(m_ErrCode_Msg.Function,0,sizeof(m_ErrCode_Msg.Function));
+
+	strcpy(m_ErrCode_Msg.szErrMsg,szErrMsg);
+	strcpy(m_ErrCode_Msg.Function,Function);
+
+	m_ErrCode_Msg.ErrMsgLen=strlen(m_ErrCode_Msg.szErrMsg);
+	m_ErrCode_Msg.ErrCode=ErrCode;
+}
+
 //DeviceBaseClass
 ErrorCodeEnum ContactlessCardImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
@@ -156,9 +172,20 @@ ErrorCodeEnum ContactlessCardImpl::DevClose()
 
 ErrorCodeEnum ContactlessCardImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
-    memset(devErrInfo.szErrMsg, 0, sizeof(devErrInfo.szErrMsg));
-    devErrInfo.dwErrMsgLen = m_ErrInfo.dwErrMsgLen;
-    memcpy(devErrInfo.szErrMsg, m_ErrInfo.szErrMsg, m_ErrInfo.dwErrMsgLen);
+    //memset(devErrInfo.szErrMsg, 0, sizeof(devErrInfo.szErrMsg));
+    //devErrInfo.dwErrMsgLen = m_ErrInfo.dwErrMsgLen;
+    //memcpy(devErrInfo.szErrMsg, m_ErrInfo.szErrMsg, m_ErrInfo.dwErrMsgLen);
+    //return Error_Succeed;
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Enter");
+    memset(devErrInfo.szErrMsg,0,MAX_DEV_ERROR_MSG_LEN);
+
+    sprintf(devErrInfo.szErrMsg,"{Errcode:%d,Decription:'Func:%s,Line:%d,Msg:%s'}",m_ErrCode_Msg.ErrCode,m_ErrCode_Msg.Function,m_ErrCode_Msg.ErrMsgLen,m_ErrCode_Msg.szErrMsg);
+
+    devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Exit");
     return Error_Succeed;
 }
 
@@ -205,12 +232,15 @@ ErrorCodeEnum ContactlessCardImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+
+       // memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpen","Error_Succeed");
         iRet = drv_CardReader->OpenDev(NULL, NULL);
         if (iRet != Error_Succeed)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Connect Device Failed.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Connect Device Failed.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"DevOpen","Connect Device Failed");
             LOG4VTM(WARN, "<Contactless::DevOpen> - "
                               << "执行OpenDev失败返回" << iRet);
             bDevOpen = false;
@@ -244,11 +274,13 @@ ErrorCodeEnum ContactlessCardImpl::GetDevStatus(RFICReaderStatus &devStatus)
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"GetDevStatus","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"GetDevStatus","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::GetDevStatus> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -264,8 +296,9 @@ ErrorCodeEnum ContactlessCardImpl::GetDevStatus(RFICReaderStatus &devStatus)
         iRet = drv_CardReader->GetDevStatus(0, DevStatus);
         if (iRet != Error_Succeed)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevStatus","Hardware Error");
             LOG4VTM(WARN, "<Contactless::GetDevStatus> - "
                               << "执行GetDevStatus失败返回" << iRet);
             iRet = Error_Hardware;
@@ -310,11 +343,13 @@ ErrorCodeEnum ContactlessCardImpl::AbortRead()
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"AbortRead","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"AbortRead","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::AbortRead> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -350,11 +385,13 @@ ErrorCodeEnum ContactlessCardImpl::ActiveContactlessICCard(char fstType, char sc
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"ActiveContactlessICCard","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"ActiveContactlessICCard","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::ActiveContactlessICCard> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -370,8 +407,9 @@ ErrorCodeEnum ContactlessCardImpl::ActiveContactlessICCard(char fstType, char sc
             {
                 if (iRet == -2)
                 {
-                    sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
-                    m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                    //sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
+                    //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                    m_ErrCode_Msg_Input_Struct(Error_DevMedia,"ActiveContactlessICCard","\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
                     LOG4VTM(WARN, "<Contactless::ActiveContactlessICCard> - "
                                       << "执行ICCPower失败返回" << iRet);
                     iRet = Error_DevMedia;
@@ -379,8 +417,9 @@ ErrorCodeEnum ContactlessCardImpl::ActiveContactlessICCard(char fstType, char sc
                 }
                 else
                 {
-                    sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-                    m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                    //sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+                    //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                    m_ErrCode_Msg_Input_Struct(Error_Hardware,"ActiveContactlessICCard","Hardware Error");
                     LOG4VTM(WARN, "<Contactless::ActiveContactlessICCard> - "
                                       << "执行ICCPower失败返回" << iRet);
                     iRet = Error_Hardware;
@@ -415,11 +454,13 @@ ErrorCodeEnum ContactlessCardImpl::DeactContactlessICCard()
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"DeactContactlessICCard","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"DeactContactlessICCard","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::DeactContactlessICCard> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -429,8 +470,9 @@ ErrorCodeEnum ContactlessCardImpl::DeactContactlessICCard()
         iRet = drv_CardReader->ICCPower(0x0C, NULL, NULL);
         if (iRet != Error_Succeed)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_Hardware,"DeactContactlessICCard","Hardware Error");
             LOG4VTM(WARN, "<Contactless::DeactContactlessICCard> - "
                               << "执行ICCPower失败返回" << iRet);
             iRet = Error_Hardware;
@@ -462,11 +504,13 @@ ErrorCodeEnum ContactlessCardImpl::WarmReset()
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"WarmReset","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+           // m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+           m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"WarmReset","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::WarmReset> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -481,8 +525,9 @@ ErrorCodeEnum ContactlessCardImpl::WarmReset()
         {
             if (iRet == -2)
             {
-                sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
-                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                //sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
+                //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                m_ErrCode_Msg_Input_Struct(Error_DevMedia,"WarmReset","\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
                 LOG4VTM(WARN, "<Contactless::WarmReset> - "
                                     << "执行ICCPower失败返回" << iRet);
                 iRet = Error_DevMedia;
@@ -490,8 +535,9 @@ ErrorCodeEnum ContactlessCardImpl::WarmReset()
             }
             else
             {
-                sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                //sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+                //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                m_ErrCode_Msg_Input_Struct(Error_Hardware,"WarmReset","Hardware Error");
                 LOG4VTM(WARN, "<Contactless::WarmReset> - "
                                     << "执行ICCPower失败返回" << iRet);
                 iRet = Error_Hardware;
@@ -554,11 +600,13 @@ ErrorCodeEnum ContactlessCardImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"RFTypeABCommand","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"RFTypeABCommand","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::RFTypeABCommand> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -580,8 +628,9 @@ ErrorCodeEnum ContactlessCardImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
         {
             if (iRet == -2)
             {
-                sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
-                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                //sprintf(m_ErrInfo.szErrMsg, "\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
+                //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                m_ErrCode_Msg_Input_Struct(Error_DevMedia,"RFTypeABCommand","\"No Card\" Or \"Card don't on IC position\" Or \"Card have be moved\"");
                 LOG4VTM(WARN, "<Contactless::RFTypeABCommand> - "
                                     << "执行ICCTransmit失败返回" << iRet);
                 iRet = Error_DevMedia;
@@ -589,8 +638,9 @@ ErrorCodeEnum ContactlessCardImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
             }
             else
             {
-                sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-                m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                //sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+                //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+                m_ErrCode_Msg_Input_Struct(Error_Hardware,"RFTypeABCommand","Hardware Error");
                 LOG4VTM(WARN, "<Contactless::RFTypeABCommand> - "
                                     << "执行ICCTransmit失败返回" << iRet);
                 iRet = Error_Hardware;
@@ -641,11 +691,13 @@ ErrorCodeEnum ContactlessCardImpl::HaltCard()
             iRet = Error_NotInit;
             throw iRet;
         }
-        memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        //memset(m_ErrInfo.szErrMsg, 0, sizeof(m_ErrInfo.szErrMsg));
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"HaltCard","Error_Succeed");
         if (!bDevOpen)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Device Not Connected.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"HaltCard","Device Not Connected");
             LOG4VTM(WARN, "<Contactless::HaltCard> - "
                               << "设备未连接");
             iRet = Error_DevConnFailed;
@@ -655,8 +707,9 @@ ErrorCodeEnum ContactlessCardImpl::HaltCard()
         iRet = drv_CardReader->ICCPower(0x0C, NULL, NULL);
         if (iRet != Error_Succeed)
         {
-            sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
-            m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            //sprintf(m_ErrInfo.szErrMsg, "Hardware Error.");
+            //m_ErrInfo.dwErrMsgLen = strlen(m_ErrInfo.szErrMsg);
+            m_ErrCode_Msg_Input_Struct(Error_Hardware,"HaltCard","Hardware Error");
             LOG4VTM(WARN, "<Contactless::HaltCard> - "
                               << "执行ICCPower失败返回" << iRet);
             iRet = Error_Hardware;

+ 8 - 0
DevAdapter/nantian/contactlesscard.1.1/contactless.nantian.1.1.h

@@ -13,6 +13,14 @@
 typedef DRV_XCardReader *(*pCreate_DRV_XCardReader)();
 typedef void (*pDestroy_DRV_XCardReader)(DRV_XCardReader *p);
 
+typedef struct _ErrCode_Msg
+{
+    int ErrMsgLen;
+    int ErrCode;
+    char szErrMsg[100];
+    char Function[100];
+}ErrCode_Msg;
+
 class ContactlessCardImpl : public RFICClass
 {
 public:

+ 78 - 22
DevAdapter/nantian/gpio.1.1/Gpio.nantian.cpp

@@ -1,5 +1,6 @@
 #include "Gpio.nantian.h"
-
+char g_function[100]="";
+int g_len = 0;
 GPIO_NT_NAC::GPIO_NT_NAC()
 {
 	//初始化
@@ -15,6 +16,7 @@ GPIO_NT_NAC::GPIO_NT_NAC()
 	m_ptStatus = 0;
 	//加载设备库
 	m_loadDllFlag = LoadNTDRVSO();
+	m_code = Error_Succeed;
 }
 
 GPIO_NT_NAC::~GPIO_NT_NAC()
@@ -37,8 +39,10 @@ bool GPIO_NT_NAC::LoadNTDRVSO()
 	CILIX_AUX_X::CILIX_GetModuleCurPath(sCurPath);
 	sprintf(sSOPath, "%snantian/libDRV_NT_NAC.nantian.so", sCurPath);
 	m_trace->WriteTrace("GPIO_NT_NAC::LoadNTDRVDLL", "DLLPath=%s", sSOPath);
+	m_trace->WriteTrace("GPIO_NT_NAC::LoadNTDRVDLL", "DLLVersion:1.0.0.2");
 	LOG4VTM(WARN, "GPIO_NT_NAC::LoadNTDRVDLL"
 					  << "DLLPath=" << sSOPath);
+	LOG4VTM(WARN, "GPIO_NT_NAC::LoadNTDRVDLL"<< "DLLVersion:1.0.0.2");
 	void *pszErr = NULL;
 	dplHandle = dlopen(sSOPath, RTLD_LAZY);
 	if (!dplHandle || pszErr)
@@ -117,10 +121,14 @@ ErrorCodeEnum GPIO_NT_NAC::GetLastErr(DevErrorInfo &devErrInfo)
 	CILIXAutoTrace __at(m_trace, "GetLastErr", &iret);
 	LOG4VTM(WARN, "GetLastErr "
 					  << "Enter");
-	devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
-	strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
+	// devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
+	// strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
+	devErrInfo.dwErrMsgLen = 0;
+	memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
+	sprintf(devErrInfo.szErrMsg,"{ErrCode:%d,Description:'Func:%s,Line:%d,Msg:%s'}",m_code,g_function,g_len,m_errorInfo.szErrMsg);
+	devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
 	LOG4VTM(WARN, "GetLastErr "
-					  << "Exit");
+					  << "Exit"<<devErrInfo.szErrMsg);
 	return Error_Succeed;
 }
 
@@ -130,6 +138,9 @@ ErrorCodeEnum GPIO_NT_NAC::DevOpen(GpioInitParam initParam)
 	CILIXAutoTrace __at(m_trace, "DevOpen", &iret);
 	LOG4VTM(WARN, "DevOpen "
 					  << "Enter");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","DevOpen");
+	g_len = 0;
 	//判断设备库加载是否成功
 	if (this->m_loadDllFlag == false)
 	{
@@ -138,7 +149,9 @@ ErrorCodeEnum GPIO_NT_NAC::DevOpen(GpioInitParam initParam)
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 
 		iret = Error_DevLoadFileFailed;
-		return Error_DevLoadFileFailed;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	//判断是否初始化
@@ -156,7 +169,9 @@ ErrorCodeEnum GPIO_NT_NAC::DevOpen(GpioInitParam initParam)
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 
 		iret = Error_Param;
-		return Error_Param;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	//记录初始化参数信息
@@ -183,9 +198,11 @@ ErrorCodeEnum GPIO_NT_NAC::DevOpen(GpioInitParam initParam)
 		memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
 		strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
 		m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-
+		iret = Error_DevConnFailed;
 		m_connect = false;
-		return Error_DevConnFailed;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	m_connect = true;
@@ -203,6 +220,9 @@ ErrorCodeEnum GPIO_NT_NAC::DevClose()
 	CILIXAutoTrace __at(m_trace, "DevClose", &iret);
 	LOG4VTM(WARN, "DevClose "
 					  << "Enter ");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","DevClose");
+	g_len = __LINE__;
 	//判断是否初始化
 	if (m_connect == true)
 	{
@@ -228,6 +248,9 @@ ErrorCodeEnum GPIO_NT_NAC::GetDevCategory(DevCategoryInfo &devCategory)
 	CILIXAutoTrace __at(m_trace, "GetDevCategory", &iret);
 	LOG4VTM(WARN, "GetDevCategory "
 					  << "Enter ");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","GetDevCategory");
+	g_len = 0;
 	//赋值
 	strcpy(devCategory.szType, "PVER=NT#MID=NT_NAC");
 	strcpy(devCategory.szVendor, "nantian");
@@ -283,6 +306,9 @@ ErrorCodeEnum GPIO_NT_NAC::Reset()
 	CILIXAutoTrace __at(m_trace, "Reset", &iret);
 	LOG4VTM(WARN, "Reset "
 					  << "Enter ");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Reset");
+	g_len = __LINE__;
 	//判断是否连接
 	if (m_connect == false)
 	{
@@ -294,7 +320,9 @@ ErrorCodeEnum GPIO_NT_NAC::Reset()
 		m_busy_flag = false;
 
 		iret = Error_DevNotAvailable;
-		return Error_DevNotAvailable;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	//复位设备
@@ -311,8 +339,10 @@ ErrorCodeEnum GPIO_NT_NAC::Reset()
 
 		//置标记
 		m_busy_flag = false;
-
-		return Error_DevCommFailed;
+		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	m_busy_flag = false;
@@ -330,6 +360,9 @@ ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
 	CILIXAutoTrace __at(m_trace, "WritePort", &iret);
 	LOG4VTM(WARN, "WritePort "
 					  << "Enter ");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","WritePort");
+	g_len = __LINE__;
 	//判断是否连接
 	if (m_connect == false)
 	{
@@ -341,7 +374,9 @@ ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
 		m_busy_flag = false;
 
 		iret = Error_DevNotAvailable;
-		return Error_DevNotAvailable;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 	m_trace->WriteTrace("WritePort", "dwPort=%d, btData=%d", dwPort, btData);
 	LOG4VTM(WARN, "WritePort "
@@ -357,7 +392,9 @@ ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
 		m_busy_flag = false;
 
 		iret = Error_Param;
-		return Error_Param;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 	//判断端口的属性是否合法
 	if (m_initParam.dir[dwPort] != 1)
@@ -370,7 +407,9 @@ ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
 		m_busy_flag = false;
 
 		iret = Error_Param;
-		return Error_Param;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	//设置输出
@@ -384,10 +423,14 @@ ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
 		iret = m_device->SetOutputStatus(3, (btData & 0x04) >> 2); //身份证指示灯
 		//P0.4,设备2,OUT2
 		iret = m_device->SetOutputStatusEx(2, (btData & 0x08) >> 3); //键盘指示灯
-		//P0.5,设备2,OUT0
-		iret = m_device->SetOutputStatusEx(0, (btData & 0x10) >> 4); //面部照明灯
+
 		//P0.6,设备2,OUT1
 		iret = m_device->SetOutputStatusEx(1, (btData & 0x20) >> 5); //故障灯
+		if(((btData & 0x20) >> 5) == 1)
+			btData &= btData ^ 0x10;//故障灯和面部照明灯不能同时亮,确保一定是0
+		//P0.5,设备2,OUT0
+		iret = m_device->SetOutputStatusEx(0, (btData & 0x10) >> 4); //面部照明灯
+
 		//P0.7,设备1,OUT0
 		iret = m_device->SetOutputStatus(0, (btData & 0x40) >> 6); //卡机维护灯
 		//P0.8,设备2,OUT6
@@ -429,7 +472,10 @@ ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
 		//置标记
 		m_busy_flag = false;
 
-		return Error_DevCommFailed;
+		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	m_busy_flag = false;
@@ -444,7 +490,9 @@ ErrorCodeEnum GPIO_NT_NAC::ReadPort(DWORD dwPort, BYTE &btStatus)
 
 	int iret = Error_Succeed;
 	//CILIXAutoTrace __at(m_trace,"ReadPort",&iret);
-
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","ReadPort");
+	g_len = 0;
 	//判断是否连接
 	if (m_connect == false)
 	{
@@ -456,7 +504,9 @@ ErrorCodeEnum GPIO_NT_NAC::ReadPort(DWORD dwPort, BYTE &btStatus)
 		m_read_port_flag = false;
 
 		iret = Error_DevNotAvailable;
-		return Error_DevNotAvailable;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 	//m_trace->WriteTrace("ReadPort","dwPort=%d",dwPort);
 	//判断端口是否合法
@@ -470,7 +520,9 @@ ErrorCodeEnum GPIO_NT_NAC::ReadPort(DWORD dwPort, BYTE &btStatus)
 		m_read_port_flag = false;
 
 		iret = Error_Param;
-		return Error_Param;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 	//判断端口的属性是否合法
 	if (m_initParam.dir[dwPort] != 0)
@@ -483,7 +535,9 @@ ErrorCodeEnum GPIO_NT_NAC::ReadPort(DWORD dwPort, BYTE &btStatus)
 		m_read_port_flag = false;
 
 		iret = Error_Param;
-		return Error_Param;
+		g_len = __LINE__;
+		m_code = (ErrorCodeEnum)iret;
+		return (ErrorCodeEnum)iret;
 	}
 
 	if (dwPort == 2)
@@ -538,7 +592,9 @@ ErrorCodeEnum GPIO_NT_NAC::ReadPort(DWORD dwPort, BYTE &btStatus)
 			m_read_port_flag = false;
 
 			iret = Error_DevCommFailed;
-			return Error_DevCommFailed;
+			g_len = __LINE__;
+			m_code = (ErrorCodeEnum)iret;
+			return (ErrorCodeEnum)iret;
 		}
 	}
 

+ 1 - 1
DevAdapter/nantian/gpio.1.1/Gpio.nantian.h

@@ -32,7 +32,7 @@ private:
 	void *dplHandle;
 	DevErrorInfo m_errorInfo;
 	GpioInitParam m_initParam;
-
+	ErrorCodeEnum m_code;
 	//状态处理
 	bool m_busy_flag;
 	bool m_read_port_flag;

File diff suppressed because it is too large
+ 966 - 981
DevAdapter/nantian/hspscanner.1.1/CILIX_AUX_UTILS.h


+ 2 - 2
DevAdapter/nantian/hspscanner.1.1/Gvar.cpp

@@ -48,7 +48,7 @@ Gvar::Gvar()
 
 	LOG4VTM(WARN, "<Gvar> - "<<"Enter-");
 
-	LOG4VTM(WARN, "<Gvar> - "<<"hspscanner.nantian.1.1.so - 版本:V1.0.0.14");
+	LOG4VTM(WARN, "<Gvar> - "<<"hspscanner.nantian.1.1.so - 版本:V1.0.0.15");
 	LoadDll();
 	LOG4VTM(WARN, "<Gvar> - "<<"Exit-");
 }
@@ -74,7 +74,7 @@ void Gvar::LoadDll()
 	strcpy(dllPath,confile);
 	strcat(dllPath,"nantian/libBHCamBase.nantian.so");
 
-	m_trace->WriteTrace(CILIXTRACE_L_INFO,"LoadDll","版本:V1.0.0.14");
+	m_trace->WriteTrace(CILIXTRACE_L_INFO,"LoadDll","版本:V1.0.0.15");
 	m_trace->WriteTrace(CILIXTRACE_L_INFO,"LoadDll","驱动库路径dll1Path=%s",dllPath);
 	LOG4VTM(WARN, "<LoadDll> - "<<"驱动库路径dllPath = "<<dllPath);
 	m_hDll = dlopen(dllPath,RTLD_LAZY);

+ 144 - 11
DevAdapter/nantian/hspscanner.1.1/hspscanner.nantian.1.1.cpp

@@ -27,6 +27,9 @@ BOOL OldStatus = FALSE;
 #include <fstream>
 using namespace std;
 
+char g_function[100]="";
+int g_len = 0;
+
 int FileSize(const char* fname)
 {
 	struct stat statbuf;
@@ -262,6 +265,7 @@ CHSPScanner::CHSPScanner(void)
 
 	std::string str;
 	cmb::log4vendor::init(config, str);
+	m_code = Error_Succeed;
 }
 CHSPScanner::~CHSPScanner()
 {
@@ -277,6 +281,9 @@ ErrorCodeEnum CHSPScanner::DevOpen()
 	int iretval = 0;
 	LOG4VTM(WARN, "<DevOpen> - "<<"Enter-");
     CILIXAutoTrace _at(g_var->m_trace,"DevOpen",&iretval);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","DevOpen");
+	g_len = 0;
 	if (!g_var->m_isLoad)
 	{
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","高拍仪so或函数加载失败");
@@ -286,6 +293,8 @@ ErrorCodeEnum CHSPScanner::DevOpen()
 		strcpy(m_Error.szErrMsg,"高拍仪so或函数加载失败");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		return iret;
 	}
 	//打开高拍仪
@@ -297,6 +306,8 @@ ErrorCodeEnum CHSPScanner::DevOpen()
 		strcpy(m_Error.szErrMsg,"打开高拍仪失败");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevConnFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<DevOpen> - "<<"打开高拍仪失败,HIGH_StartCamera return "<<iretval);
 		LOG4VTM(WARN, "<DevOpen> - "<<"Exit-");
 		return iret;
@@ -313,6 +324,8 @@ ErrorCodeEnum CHSPScanner::DevOpen()
 		strcpy(m_Error.szErrMsg,"设置高拍仪分辨率操作失败");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevConnFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<DevOpen> - "<<"设置高拍仪分辨率操作失败,HIGH_SetCameraPixel return "<<iretval);
 		LOG4VTM(WARN, "<DevOpen> - "<<"Exit-");
 		return iret;
@@ -335,6 +348,9 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 	LOG4VTM(WARN, "<SetParam> - "<<"Entry-");
 	LOG4VTM(WARN, "<SetParam> - "<<"输入参数type:"<<type);
 	LOG4VTM(WARN, "<SetParam> - "<<"输入参数value:"<<value);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","SetParam");
+	g_len = 0;
 	ErrorCodeEnum iret = Error_Succeed;
 	int iretval = 0;
 	/*if (!g_var->m_connect)
@@ -355,6 +371,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 		strcpy(m_Error.szErrMsg,"设备不在线");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<SetParam> - "<<"设备不在线 istatus= "<<istatus);
 		LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 		return iret;
@@ -392,6 +410,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 			strcpy(m_Error.szErrMsg,"设置色彩:传入value 参数错误_参数超出定义范围");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_Param;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<SetParam> - "<<"设置色彩:传入value 参数错误_参数超出定义范围");
 			LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 			return iret;
@@ -463,6 +483,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 			strcpy(m_Error.szErrMsg,"设置角度:传入value 参数错误_参数超出定义范围");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_Param;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<SetParam> - "<<"设置角度:传入value 参数错误_参数超出定义范围");
 			LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 			return iret;
@@ -527,6 +549,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 			strcpy(m_Error.szErrMsg,"设置尺寸:传入value 参数错误_参数超出定义范围");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_Param;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<SetParam> - "<<"设置尺寸:传入value 参数错误_参数超出定义范围");
 			LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 			return iret;
@@ -561,6 +585,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 				strcpy(m_Error.szErrMsg,"窗口隐藏设置失败");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_DevCommFailed;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetParam> - "<<"窗口隐藏设置失败,HIGH_HideWindow return "<<iretval);
 				LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 				return iret;
@@ -583,7 +609,10 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				LOG4VTM(WARN, "<SetParam> - "<<"窗口未创建,不能直接显示");
 				LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
-				return Error_NotExist;
+				iret = Error_NotExist;
+				g_len = __LINE__;
+				m_code = iret;
+				return iret;
 			}
 			if (g_ishide)
 			{	
@@ -597,6 +626,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 					strcpy(m_Error.szErrMsg,"隐藏窗口显示设置失败");
 					m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 					iret = Error_DevCommFailed;
+					g_len = __LINE__;
+					m_code = iret;
 					LOG4VTM(WARN, "<SetParam> - "<<"隐藏窗口显示设置失败,HIGH_CreateWindow return "<<iretval);
 					LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 					return iret;
@@ -618,6 +649,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 			strcpy(m_Error.szErrMsg,"设置窗口显示:传入value 参数错误_参数超出定义范围");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_Param;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<SetParam> - "<<"设置窗口显示:传入value 参数错误_参数超出定义范围");
 			LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 			return iret;
@@ -630,6 +663,8 @@ ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
 		strcpy(m_Error.szErrMsg,"传入type 参数错误_参数超出定义范围");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_Param;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<SetParam> - "<<"传入type 参数错误_参数超出定义范围");
 		LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
 		return iret;
@@ -652,6 +687,9 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 	LOG4VTM(WARN, "<SetPreview> - "<<"Entry-");
 	LOG4VTM(WARN, "<SetPreview> - "<<"输入参数:"<<nValue);
 	ErrorCodeEnum iret = Error_Succeed;
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","SetPreview");
+	g_len = 0;
 	BOOL bret = FALSE;
 	int iretval = 0;
 	try
@@ -663,6 +701,8 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 			strcpy(m_Error.szErrMsg,"未做DevOpen操作");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_NotInit;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<SetPreview> - "<<"未做DevOpen操作");
 			LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
 			throw iret;
@@ -677,6 +717,8 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 			strcpy(m_Error.szErrMsg,"设备不在线");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_DevCommFailed;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<SetPreview> - "<<"设备不在线 istatus= "<<istatus);
 			LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
 			throw iret;
@@ -692,6 +734,8 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 				strcpy(m_Error.szErrMsg,"未做窗口设置操作,不能明确窗口坐标和大小");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_Param;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetPreview> - "<<"未做窗口设置操作,不能明确窗口坐标和大小");
 				LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
 				throw iret;
@@ -703,6 +747,8 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 				strcpy(m_Error.szErrMsg,"预览成功");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_Succeed;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetPreview> - "<<"已处于预览模式,直接返成功");
 				LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
 				throw iret;
@@ -720,6 +766,8 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 				strcpy(m_Error.szErrMsg,"创建窗口预览操作失败");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_DevCommFailed;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetPreview> - "<<"创建窗口预览操作失败,HIGH_CreateWindow return "<<iretval);
 				LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
 				throw iret;
@@ -767,6 +815,8 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 				strcpy(m_Error.szErrMsg,"窗口销毁操作失败");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_DevCommFailed;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetPreview> - "<<"窗口销毁操作失败,HIGH_CloseWindow return  "<<iretval);
 				LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
 				throw iret;
@@ -784,7 +834,10 @@ ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			LOG4VTM(WARN, "<SetPreview> - "<<"输入参数不符合规范");
 			LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
-			throw Error_Param;
+			iret = Error_Param;
+			g_len = __LINE__;
+			m_code = iret;
+			throw iret;
 		}
 	}
 	catch (ErrorCodeEnum eret)
@@ -807,9 +860,14 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 	LOG4VTM(WARN, "<ScanImage> - "<<"Entry-");
 	LOG4VTM(WARN, "<ScanImage> - "<<"拍照图片存储路径:"<<pszFileName);
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImage","拍照图片存储路径:%s",pszFileName);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","SetPreview");
+	g_len = 0;
 	if (strlen(pszFileName) <= 0)
 	{
 		iret = Error_Param;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","输入保存拍照路径为空,返回:%d",iret);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"输入保存拍照路径为空");
@@ -821,6 +879,8 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 	if (pszFileName[0] != '/')
 	{
 		iret = Error_Param;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","输入保存拍照路径格式异常,返回:%d",iret);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"输入保存拍照路径为空");
@@ -836,6 +896,8 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 		strcpy(m_Error.szErrMsg,"未做DevOpen操作");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_NotInit;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<ScanImage> - "<<"未做DevOpen操作");
 		LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
 		return iret;
@@ -849,6 +911,8 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 		strcpy(m_Error.szErrMsg,"设备不在线");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<ScanImage> - "<<"设备不在线 istatus= "<<istatus);
 		LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
 		return iret;
@@ -856,6 +920,8 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 	if (g_isshow != TRUE)
 	{
 		iret = Error_DevMedia;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","未处于预览状态,返回:%d",iret);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"预览窗口未创建,不能拍照");
@@ -871,6 +937,8 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 	if (iretval != 0)
 	{
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","拍照失败,HIGH_TakePicture返回:%d",iretval);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"拍照失败");
@@ -883,6 +951,8 @@ ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
 	if (access(pszFileName,F_OK) != 0)
 	{
 		iret = Error_NotExist;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","图片未保存成功");
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"图片未保存成功");
@@ -919,6 +989,9 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 	ErrorCodeEnum iret = Error_Succeed;
 	int iretval = 0;
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","输入参数:pszFileName=%s,nBtLen=%d",pszFileName,nBtLen);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","ScanImageEx");
+	g_len = 0;
 	LOG4VTM(WARN, "<ScanImageEx> - "<<"输入参数:pszFileName="<<pszFileName);
 	LOG4VTM(WARN, "<ScanImageEx> - "<<"输入参数:nBtLen="<<nBtLen);
 	int iFlag = 0;
@@ -938,6 +1011,8 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 		strcpy(m_Error.szErrMsg,"未做DevOpen操作");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_NotInit;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<ScanImageEx> - "<<"未做DevOpen操作");
 		LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
 		return iret;
@@ -952,6 +1027,8 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 		strcpy(m_Error.szErrMsg,"设备不在线");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<ScanImageEx> - "<<"设备不在线 istatus= "<<istatus);
 		LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
 		return iret;
@@ -960,6 +1037,8 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 	if (g_isshow != TRUE)
 	{
 		iret = Error_DevMedia;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","未处于预览状态,返回:%d",iret);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"预览窗口未创建,不能拍照");
@@ -977,6 +1056,8 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 	if (iretval != 0)
 	{
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","拍照失败,HIGH_TakePicture返回:%d",iretval);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"拍照失败");
@@ -989,6 +1070,8 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 	if (access(cPicpath,F_OK) != 0)
 	{
 		iret = Error_NotExist;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","图片未保存成功");
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"图片未保存成功");
@@ -1006,6 +1089,8 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 	if (imagelen == -1)
 	{
 		iret = Error_NotExist;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","操作打开图片文件失败");
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"操作打开图片文件失败");
@@ -1020,12 +1105,14 @@ ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char* p
 	if (nBtLen < imagelen)
 	{
 		iret = Error_TooSmallBuffer;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","传入存储指纹数据空间大小不够");
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg,"传入存储指纹空间大小不够");
+		strcpy(m_Error.szErrMsg,"传入存储图像数据空间大小不够");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		nBtLen = 1025*1024+imagelen;
-		LOG4VTM(WARN, "<ScanImageEx> - "<<"传入存储指纹数据空间大小不够");
+		LOG4VTM(WARN, "<ScanImageEx> - "<<"传入存储图像数据空间大小不够");
 		LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
 		return iret;
 	}
@@ -1063,6 +1150,9 @@ ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
 	LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数:nY="<<nY);
 	LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数:nWidth="<<nWidth);
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetViewPos","输入参数:nX=%d,nY=%d,nWidth=%d",nX,nY,nWidth);
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","SetViewPos");
+	g_len = 0;
 	if (!g_var->m_isLoad)
 	{
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetViewPos","高拍仪so或函数加载失败");
@@ -1070,6 +1160,8 @@ ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
 		strcpy(m_Error.szErrMsg,"高拍仪so或函数加载失败");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<SetViewPos> - "<<"高拍仪so或函数加载失败");
 		LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
 		return iret;
@@ -1081,6 +1173,8 @@ ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
 		strcpy(m_Error.szErrMsg,"未做DevOpen操作");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_NotInit;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<SetViewPos> - "<<"未做DevOpen操作");
 		LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
 		return iret;
@@ -1092,6 +1186,8 @@ ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
 		strcpy(m_Error.szErrMsg,"输入参数不符合要求");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_Param;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数不符合要求");
 		LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
 		return iret;
@@ -1130,6 +1226,8 @@ ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
 				strcpy(m_Error.szErrMsg,"设备不在线");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_DevCommFailed;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetViewPos> - "<<"设备不在线 istatus= "<<istatus);
 				LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
 				return iret;
@@ -1146,6 +1244,8 @@ ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
 				strcpy(m_Error.szErrMsg,"传入窗口宽度为0,隐藏窗口失败");
 				m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 				iret = Error_DevCommFailed;
+				g_len = __LINE__;
+				m_code = iret;
 				LOG4VTM(WARN, "<SetViewPos> - "<<"传入窗口宽度为0,隐藏窗口,HIGH_HideWindow return "<<iretval);
 				LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
 				return iret;
@@ -1184,13 +1284,19 @@ ErrorCodeEnum CHSPScanner::SetProperty()
 	LOG4VTM(WARN, "<SetProperty> - "<<"Entry-");
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetProperty","Entry.......................");
 	ErrorCodeEnum iret = Error_Succeed;
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","SetViewPos");
+	g_len = 0;
 	memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 	strcpy(m_Error.szErrMsg,"不支持该功能");
 	m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetProperty","不支持该功能");
 	LOG4VTM(WARN, "<SetProperty> - "<<"不支持该功能");
 	LOG4VTM(WARN, "<SetProperty> - "<<"Exit-");
-	return Error_NotSupport;
+	iret = Error_NotSupport;
+	g_len = __LINE__;
+	m_code = iret;
+	return iret;
 }
 //
 //	Get current status of device.
@@ -1202,6 +1308,9 @@ ErrorCodeEnum CHSPScanner::GetDevStatus(HspsDevStatus& status)
 	int iretval = 0;
     g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"GetDevStatus","开始查询状态");
 	LOG4VTM(WARN, "<GetDevStatus> - "<<"Entry-");
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","GetDevStatus");
+	g_len = 0;
 	if (!g_var->m_isLoad)
 	{
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevStatus","高拍仪so或函数加载失败");
@@ -1209,6 +1318,8 @@ ErrorCodeEnum CHSPScanner::GetDevStatus(HspsDevStatus& status)
 		strcpy(m_Error.szErrMsg,"高拍仪so或函数加载失败");
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		iret = Error_DevLoadFileFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		LOG4VTM(WARN, "<GetDevStatus> - "<<"高拍仪so或函数加载失败");
 		LOG4VTM(WARN, "<GetDevStatus> - "<<"Exit-");
 		return iret;
@@ -1303,6 +1414,9 @@ ErrorCodeEnum CHSPScanner::GetDevStatus(HspsDevStatus& status)
 //
 ErrorCodeEnum CHSPScanner::GetDevCategory(DevCategoryInfo &devCategory)
 {
+		memset(g_function,0,sizeof(g_function));
+		sprintf(g_function,"%s","GetDevCategory");
+		g_len = 0;
         memset(devCategory.szType,0,sizeof(devCategory.szType));
         strcpy(devCategory.szType,"PVER=KGR#MID=KGR-Q800F");
         memset(devCategory.szModel,0,sizeof(devCategory.szModel));
@@ -1327,6 +1441,9 @@ ErrorCodeEnum CHSPScanner::Reset()
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","Entry......................");
 	LOG4VTM(WARN, "<Reset> - "<<"Entry-");
 	ErrorCodeEnum iret = Error_Succeed;
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","Reset");
+	g_len = 0;
 	int iretval = -1;
 	if (m_isOnline)
 	{
@@ -1350,6 +1467,8 @@ ErrorCodeEnum CHSPScanner::Reset()
 			strcpy(m_Error.szErrMsg,"高拍仪复位失败");
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			iret = Error_DevCommFailed;
+			g_len = __LINE__;
+			m_code = iret;
 			LOG4VTM(WARN, "<Reset> - "<<"高拍仪复位失败,HIGH_CloseWindow return "<<iretval);
 			LOG4VTM(WARN, "<Reset> - "<<"Exit-");
 			return iret;
@@ -1367,6 +1486,8 @@ ErrorCodeEnum CHSPScanner::Reset()
 	else
 	{
 		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","设备复位失败,iret = %d",iret);
 		memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
 		strcpy(m_Error.szErrMsg,"设备复位失败");
@@ -1384,7 +1505,11 @@ ErrorCodeEnum CHSPScanner::DevClose()
 	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","Entry....................");
 	LOG4VTM(WARN, "<DevClose> - "<<"Entry-");
 	int iretval = -1;
+	ErrorCodeEnum iret = Error_Succeed;
 	BOOL bret = FALSE;
+	memset(g_function,0,sizeof(g_function));
+	sprintf(g_function,"%s","DevClose");
+	g_len = 0;
 	if (!g_var->m_connect)
 	{			
 		g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","设备未打开,直接返成功");
@@ -1408,7 +1533,10 @@ ErrorCodeEnum CHSPScanner::DevClose()
 			m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 			LOG4VTM(WARN, "<DevClose> - "<<"高拍仪关闭预览窗口失败,HIGH_CloseWindow return iretval = "<<iretval);
 			LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
-			return Error_DevCommFailed;
+			iret = Error_DevCommFailed;
+			g_len = __LINE__;
+			m_code = iret;
+			return iret;
 		}
 	}
 	//关闭高拍仪
@@ -1421,7 +1549,10 @@ ErrorCodeEnum CHSPScanner::DevClose()
 		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		LOG4VTM(WARN, "<DevClose> - "<<"高拍仪关闭失败,iretval = "<<iretval);
 		LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
-		return Error_DevCommFailed;
+		iret = Error_DevCommFailed;
+		g_len = __LINE__;
+		m_code = iret;
+		return iret;
 	}
 	g_isshow = FALSE;
 	g_ishide = TRUE;
@@ -1441,10 +1572,12 @@ ErrorCodeEnum CHSPScanner::DevClose()
 //	code and anything in favour of location problem.
 ErrorCodeEnum CHSPScanner::GetLastErr(DevErrorInfo &devErrInfo)
 {
-        memset(devErrInfo.szErrMsg,0,sizeof(devErrInfo.szErrMsg));
-        devErrInfo.dwErrMsgLen = m_Error.dwErrMsgLen;
-        memcpy(devErrInfo.szErrMsg,m_Error.szErrMsg,m_Error.dwErrMsgLen);
-        return Error_Succeed;
+	memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
+	sprintf(devErrInfo.szErrMsg,"{ErrCode:%d,Description:'Func:%s,Line:%d,Msg:%s'}",m_code,g_function,g_len,m_Error.szErrMsg);
+	devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+	g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"GetLastErr","devErrInfo.szErrMsg=%s",devErrInfo.szErrMsg);
+	LOG4VTM(WARN, "<GetLastErr> - "<<"Exit- "<<devErrInfo.szErrMsg);
+	return Error_Succeed;
 }
 
 

+ 1 - 1
DevAdapter/nantian/hspscanner.1.1/hspscanner.nantian.1.1.h

@@ -123,7 +123,7 @@ public:
 	//	code and anything in favour of location problem.
 	virtual ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
 public:
-	
+	ErrorCodeEnum m_code;
 
 
 };

+ 96 - 12
DevAdapter/nantian/idcer.1.1/idcertificate.nantian.1.1.cpp

@@ -2,6 +2,7 @@
 #include "idcertificate.nantian.1.1.h"
 #include "../../include/log4vendor.h"
 GVar g_pGvar;
+ErrCode_Msg m_ErrCode_Msg;
 //自动日志对象
 #define _AUTOTRACE_(M)  CILIXAutoTrace  __at(g_pGvar.m_pTrace,#M,&iRet);
 
@@ -29,8 +30,9 @@ IDCERTIFICATE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
 IDCardReaderNantian::IDCardReaderNantian()
 {
     int ret = g_pGvar.LoadDRVDLL();
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"NULL","NULL");
     g_pGvar.m_pTrace->WriteTrace("IDCer", "idcer.Nantian.1.1.so - 1.0.0.8");
-char INIPath[100] = "";
+	char INIPath[100] = "";
 	CILIX_AUX_X::CILIX_GetModuleCurPath(INIPath);
 	strcat(INIPath, "idcer.nantian.ini");
 
@@ -56,6 +58,18 @@ IDCardReaderNantian::~IDCardReaderNantian()
 	
 }
 
+void m_ErrCode_Msg_Input_Struct(int ErrCode,char *Function,char *szErrMsg)
+{
+    memset(m_ErrCode_Msg.szErrMsg,0,sizeof(m_ErrCode_Msg.szErrMsg));
+	memset(m_ErrCode_Msg.Function,0,sizeof(m_ErrCode_Msg.Function));
+
+	strcpy(m_ErrCode_Msg.szErrMsg,szErrMsg);
+	strcpy(m_ErrCode_Msg.Function,Function);
+
+	m_ErrCode_Msg.ErrMsgLen=strlen(m_ErrCode_Msg.szErrMsg);
+	m_ErrCode_Msg.ErrCode=ErrCode;
+}
+
 ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 {
     ErrorCodeEnum eRet = Error_Succeed;
@@ -67,6 +81,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 		{
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"DevOpen",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"Load library error");
 			LOG4VTM(FATAL, "<DevOpen> - "<<"Load library error");
@@ -75,7 +90,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 		
 		char sPort[32] = { 0 };
 		int iBaud = 0;
-
+		m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpen","Error_Succeed");
 		g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_INFO, "Open",
 			"Call DRV OpenDev Method, sPort:[%s], iBaud:[%d]",
 			sPort, iBaud);
@@ -89,6 +104,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 			LOG4VTM(ERROR, "<DevOpen> - "<<"OpenDevice error ,return :"<<iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "open device error, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_DevCommFailed,"DevOpen",g_pGvar.m_errMsg);
 			throw Error_DevCommFailed;
 		}
 	}
@@ -97,26 +113,27 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 		eRet = errcode;
 	}
 	return eRet;
-
 }
 
- ErrorCodeEnum IDCardReaderNantian::Reset()
+ErrorCodeEnum IDCardReaderNantian::Reset()
 {
 	ErrorCodeEnum eRet = Error_Succeed;
 	int iRet = 0;
 	_AUTOTRACE_(Reset)
 	try
 	{
+		m_ErrCode_Msg_Input_Struct(Error_Succeed,"Reset","Error_Succeed");
 		if (g_pGvar.m_pDRVObj == NULL)
 		{
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"Reset",g_pGvar.m_errMsg);
+
 			LOG4VTM(FATAL, "<Reset> - "<<"Load library error");
-			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
+			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "Reset",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
 		}
-		
 		iRet =g_pGvar.m_pDRVObj->ResetDev(2,NULL);
 		if (iRet != E_DRVBASE_SUCCESS)
 		{
@@ -125,6 +142,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				"ResetDevice error, return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "reset device error, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Succeed,"Reset",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 		//复位后重新连接设备
@@ -140,7 +158,10 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"OpenDevice,return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
+
 			sprintf(g_pGvar.m_errMsg, "open device error, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_DevCommFailed,"Reset DevOpen",g_pGvar.m_errMsg);
+
 			throw Error_DevCommFailed;
 		}
 		throw Error_Succeed;
@@ -160,10 +181,14 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 	
 	try
 	{
+		m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevClose","Error_Succeed");
 		if (g_pGvar.m_pDRVObj == NULL)
 		{
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"DevClose",g_pGvar.m_errMsg);
+
 			LOG4VTM(FATAL, "<DevClose> - "<<"Load library error");
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"Load library error");
@@ -180,6 +205,9 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				"close dev error, return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "close device error, code:%d", iRet);
+
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"DevClose",g_pGvar.m_errMsg);
+
 			throw Error_Hardware;
 		}
 
@@ -194,11 +222,27 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 
  ErrorCodeEnum IDCardReaderNantian::GetLastErr(DevErrorInfo& devErrInfo)
 {
-	memset(&devErrInfo, 0, sizeof(DevErrorInfo));
+	/*memset(&devErrInfo, 0, sizeof(DevErrorInfo));
 	devErrInfo.dwErrMsgLen = strlen(g_pGvar.m_errMsg);
 	memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
 	memcpy(devErrInfo.szErrMsg, g_pGvar.m_errMsg, devErrInfo.dwErrMsgLen);
-	return Error_Succeed;
+	return Error_Succeed;*/
+
+	int iRet = Error_Succeed;
+	
+   _AUTOTRACE_(GetLastErr)
+
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Enter");
+    memset(devErrInfo.szErrMsg,0,MAX_DEV_ERROR_MSG_LEN);
+
+    sprintf(devErrInfo.szErrMsg,"{Errcode:%d,Decription:'Func:%s,Line:%d,Msg:%s'}",m_ErrCode_Msg.ErrCode,m_ErrCode_Msg.Function,m_ErrCode_Msg.ErrMsgLen,m_ErrCode_Msg.szErrMsg);
+
+    devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Exit");
+    return Error_Succeed;
 }
 
  ErrorCodeEnum IDCardReaderNantian::GetDevCategory(DevCategoryInfo& devCategory)
@@ -207,7 +251,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 	ErrorCodeEnum eRet = Error_Succeed;
 	int iRet = 0;
 	_AUTOTRACE_(GetDevCategory)
-
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"GetDevCategory","Error_Succeed");
 	char *sDevStatus[MIN_LEN];
 	for (int i = 0; i < MIN_LEN; i++)
 		{
@@ -229,7 +273,8 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 		{
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
-			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"GetDevCategory",g_pGvar.m_errMsg);
+			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "GetDevCategory",
 				"Load library error");
 			LOG4VTM(FATAL, "<GetDevCategory> - "<<"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -245,6 +290,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				"GetDeviceStatus error return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevCategory",g_pGvar.m_errMsg);
 			devCategory.eState = DEVICE_STATUS_NOT_READY;
 			throw Error_Hardware;
 		}
@@ -256,18 +302,21 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				//设备掉电
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "device BUSY");
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevCategory",g_pGvar.m_errMsg);
 				devCategory.eState = DEVICE_STATUS_CONNECTING;
 				g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "GetDevCategory","device BUSY");
 			break;			
 			case IDCARDREADER_DEVHWERROR:
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "device HWERROR");
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevCategory",g_pGvar.m_errMsg);
 				devCategory.eState = DEVICE_STATUS_FAULT;
 				g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "GetDevCategory","device HWERROR");
 			break;
 			case IDCARDREADER_DEVOFFLINE:
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "device OFFLINE");
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevCategory",g_pGvar.m_errMsg);
 				devCategory.eState = DEVICE_STATUS_FAULT;
 				g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "GetDevCategory","device OFFLINE");
 			break;
@@ -277,6 +326,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 			case IDCARDREADER_MEDIAJAMMED:
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "device jamed");
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevCategory",g_pGvar.m_errMsg);
 				devCategory.eState = DEVICE_STATUS_FAULT;
 				g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "GetDevCategory","device jamed");
 			break;
@@ -302,6 +352,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 	int iCardType = 0;
 	char *sIDXData[MID_LEN];
 	char *sDevStatus[MIN_LEN];
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"IDCerAuthenticate","Error_Succeed");
 	for (int i = 0; i < MIN_LEN; i++)
 	{
 		sDevStatus[i] = new char[MID_LEN];
@@ -318,6 +369,9 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 		{
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"IDCerAuthenticate",g_pGvar.m_errMsg);
+			
 			LOG4VTM(FATAL, "<IDCerAuthenticate> - "<<"Load library error");
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "IDCerAuthenticate",
 				"Load library error");
@@ -341,6 +395,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				"GetDeviceStatus error return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerAuthenticate",g_pGvar.m_errMsg);
 			//budevCategory.eState = DEVICE_STATUS_NOT_READY;
 			throw Error_Hardware;
 		}
@@ -363,6 +418,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 							"ReadAllIDInfo error,return:%d", iRet);
 						memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 						sprintf(g_pGvar.m_errMsg, "read card error, code:%d", iRet);
+						m_ErrCode_Msg_Input_Struct(Error_DevMedia,"IDCerAuthenticate",g_pGvar.m_errMsg);
 						throw Error_DevMedia;
 					}
 					throw Error_Succeed;	
@@ -400,6 +456,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 	int iCardType = 0;
 	char *sIDXData[MID_LEN];
 	char *sDevStatus[MIN_LEN];
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"IDCerGetDataEx","Error_Succeed");
 	for (size_t i = 0; i < MID_LEN; i++)
 		{
 			sIDXData[i] = new char[MAX_LEN];
@@ -417,6 +474,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 			LOG4VTM(FATAL, "<IDCerGetDataEx> - "<<"Load library error");
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"IDCerGetDataEx",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -432,6 +490,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				"GetDeviceStatus error return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerGetDataEx",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 		else
@@ -443,6 +502,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 					"no card in device");
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "no card in device");
+				m_ErrCode_Msg_Input_Struct(Error_DevMedia,"IDCerGetDataEx",g_pGvar.m_errMsg);
 				throw Error_DevMedia;
 			}
 		}
@@ -456,6 +516,7 @@ ErrorCodeEnum IDCardReaderNantian::DevOpen(DWORD dwPort)
 				"ReadAllIDInfo error,return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "read card error, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerGetDataEx",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 		char szExpireStart[16] = { 0 };
@@ -713,6 +774,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 	char *sIDXData[MID_LEN];
 	int idxFlag = 0;
 	char *sDevStatus[MIN_LEN];
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"IDCerGetData","Error_Succeed");
 	try
 	{
 		if (g_pGvar.m_pDRVObj == NULL)
@@ -720,6 +782,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 			LOG4VTM(FATAL, "<IDCerGetData> - "<<"Load library error");
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"IDCerGetData",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -737,6 +800,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 				"GetDeviceStatus error return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerGetData",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 		else
@@ -747,6 +811,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 					"no card in device");
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "no card in device");
+				m_ErrCode_Msg_Input_Struct(Error_DevMedia,"IDCerGetData",g_pGvar.m_errMsg);
 				throw Error_DevMedia;
 			}
 		}
@@ -762,6 +827,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 				"ReadAllIDInfo error,return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "read card error, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerGetData",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 
@@ -870,6 +936,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 	
 	int idxFlag = 0;
 	char *sDevStatus[MIN_LEN];
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"ForceIDEject","Error_Succeed");
 	for (int i = 0; i < MIN_LEN; i++)
 		{
 			sDevStatus[i] = new char[MID_LEN];
@@ -883,6 +950,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 			LOG4VTM(FATAL, "<ForceIDEject> - "<<"Load library error");
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"ForceIDEject",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -898,6 +966,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 				"GetDeviceStatus error return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"ForceIDEject",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 		else
@@ -910,6 +979,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 					"dev is busy error return:%d", Error_DevMedia);
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "device is busy");
+				m_ErrCode_Msg_Input_Struct(Error_DevMedia,"ForceIDEject",g_pGvar.m_errMsg);
 				throw Error_DevMedia;
 			}
 			//三个传感器均未检测到卡
@@ -920,6 +990,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 					"dev no media return:%d", Error_DevMedia);
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				strcpy(g_pGvar.m_errMsg, "no card in device");
+				m_ErrCode_Msg_Input_Struct(Error_DevMedia,"ForceIDEject",g_pGvar.m_errMsg);
 				throw Error_DevMedia;
 			}
 		}
@@ -933,6 +1004,7 @@ g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_DEBUG, "GAT","11");
 					"resetsoft and eject error,return:%d", iRet);
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				sprintf(g_pGvar.m_errMsg, "force eject card error, code:%d", iRet);
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"ForceIDEject",g_pGvar.m_errMsg);
 				throw Error_Hardware;
 			
 		}
@@ -954,6 +1026,7 @@ void* thread( void *arg )
 	char sInserted[MIN_LEN] = {0};
 	int iTryTime = 0;
 	char *sDevStatus[MIN_LEN];
+	
 	for (int i = 0; i < MIN_LEN; i++)
 	{
 		sDevStatus[i] = new char[MID_LEN];
@@ -1034,6 +1107,7 @@ void* thread( void *arg )
 	int arg = 0;
 	int *thread_ret = NULL;
 	char *sDevStatus[MIN_LEN] = {0};	
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"IDCerRFControl","Error_Succeed");
 	for (int i = 0; i < MIN_LEN; i++)
 			{
 				sDevStatus[i] = new char[MID_LEN];
@@ -1057,6 +1131,7 @@ void* thread( void *arg )
 			LOG4VTM(FATAL, "<IDCerRFControl> - "<<"Load library error");
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"IDCerRFControl",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "DevOpen",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -1101,6 +1176,7 @@ void* thread( void *arg )
 				printf( "Create thread error!\n");
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				sprintf(g_pGvar.m_errMsg, "Create thread error, code:%d", iRet);
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerRFControl",g_pGvar.m_errMsg);
 				throw Error_Hardware;
 			}
 		}
@@ -1115,9 +1191,7 @@ void* thread( void *arg )
 				{
 					if (g_pGvar.TheardEnd == false)
 						break;
-					usleep(100000);
 				}
-			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_INFO, "IDCerRFControl","while is end");
 				//查询设备状态
 			for(int i = 1; i <4; i++)
 			{
@@ -1138,6 +1212,7 @@ void* thread( void *arg )
 						"no card in device");
 					memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 					strcpy(g_pGvar.m_errMsg, "no card in device");
+					m_ErrCode_Msg_Input_Struct(Error_DevMedia,"IDCerRFControl",g_pGvar.m_errMsg);
 					throw Error_DevMedia;
 				}
 			//}
@@ -1151,6 +1226,7 @@ void* thread( void *arg )
 						"resetsoft and eject error,return:%d", iRet);
 					memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 					sprintf(g_pGvar.m_errMsg, "force eject card error, code:%d", iRet);
+					m_ErrCode_Msg_Input_Struct(Error_Hardware,"IDCerRFControl",g_pGvar.m_errMsg);
 					throw Error_Hardware;
 			}
 	
@@ -1175,6 +1251,7 @@ void* thread( void *arg )
 	char currentPath[MAX_LEN] = {0};
 	char *sDevStatus[MIN_LEN] = {0};
 	char *picpath[MIN_LEN] = {0};
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"ScanIDAndSaveImage","Error_Succeed");
 	for (int i = 0; i < MIN_LEN; i++)
 		{
 			picpath[i] = new char[MID_LEN];
@@ -1192,6 +1269,7 @@ void* thread( void *arg )
 			LOG4VTM(FATAL, "<ScanIDAndSaveImage> - "<<"Load library error");
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"ScanIDAndSaveImage",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "ScanIDAndSaveImage",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -1207,6 +1285,7 @@ void* thread( void *arg )
 					"GetDeviceStatus error return:%d", iRet);
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"ScanIDAndSaveImage",g_pGvar.m_errMsg);
 				throw Error_Hardware;
 			}
 			else
@@ -1216,6 +1295,7 @@ void* thread( void *arg )
 					g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "ScanIDAndSaveImage",
 						"nocard in device");	
 					sprintf(g_pGvar.m_errMsg, "ScanIDXPic error nocard in device");		
+					m_ErrCode_Msg_Input_Struct(Error_Hardware,"ScanIDAndSaveImage",g_pGvar.m_errMsg);
 					throw Error_Hardware;					
 				}
 			}
@@ -1232,6 +1312,7 @@ void* thread( void *arg )
 					"ScanIDXPic error return:%d", iRet);
 				memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 				sprintf(g_pGvar.m_errMsg, "ScanIDXPic error return:%d", iRet);
+				m_ErrCode_Msg_Input_Struct(Error_Hardware,"ScanIDAndSaveImage",g_pGvar.m_errMsg);
 				throw Error_Hardware;
 			}
 		
@@ -1255,6 +1336,7 @@ ErrorCodeEnum IDCardReaderNantian::QueryCardPos(int& pos)
 	
 	int idxFlag = 0;
 	char *sDevStatus[MIN_LEN];
+	m_ErrCode_Msg_Input_Struct(Error_Succeed,"QueryCardPos","Error_Succeed");
 	for (int i = 0; i < MIN_LEN; i++)
 		{
 			sDevStatus[i] = new char[MID_LEN];
@@ -1267,6 +1349,7 @@ ErrorCodeEnum IDCardReaderNantian::QueryCardPos(int& pos)
 			LOG4VTM(FATAL, "<QueryCardPos> - "<<"Load library error");
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			strcpy(g_pGvar.m_errMsg, "Load library error");
+			m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"QueryCardPos",g_pGvar.m_errMsg);
 			g_pGvar.m_pTrace->WriteTrace(CILIXTRACE_L_ERROR, "QueryCardPos",
 				"Load library error");
 			throw Error_DevLoadFileFailed;
@@ -1287,6 +1370,7 @@ ErrorCodeEnum IDCardReaderNantian::QueryCardPos(int& pos)
 				"GetDeviceStatus error return:%d", iRet);
 			memset(g_pGvar.m_errMsg, 0, MAX_LEN);
 			sprintf(g_pGvar.m_errMsg, "device is offline, code:%d", iRet);
+			m_ErrCode_Msg_Input_Struct(Error_Hardware,"QueryCardPos",g_pGvar.m_errMsg);
 			throw Error_Hardware;
 		}
 		else

+ 9 - 0
DevAdapter/nantian/idcer.1.1/idcertificate.nantian.1.1.h

@@ -11,6 +11,14 @@
 
 #define IDCERTIFICATE_API  __attribute__((visibility("default")))
 
+typedef struct _ErrCode_Msg
+{
+    int ErrMsgLen;
+    int ErrCode;
+    char szErrMsg[100];
+    char Function[100];
+}ErrCode_Msg;
+   
 class IDCardReaderNantian : public IDCerClass
 {
 public:
@@ -30,6 +38,7 @@ public:
 	virtual ErrorCodeEnum DevClose();
 	virtual ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
 };
+extern void m_ErrCode_Msg_Input_Struct(int ErrCode,char *Function,char *szErrMsg);
 /*
 #ifdef __cplusplus
 extern "C" {

File diff suppressed because it is too large
+ 966 - 981
DevAdapter/nantian/pinpad.1.1/CILIX_AUX_UTILS.h


File diff suppressed because it is too large
+ 390 - 199
DevAdapter/nantian/pinpad.1.1/pinpad.nantian.1.1.cpp


+ 16 - 8
DevAdapter/nantian/pinpad.1.1/pinpad.nantian.1.1.h

@@ -3,6 +3,14 @@
 #include "../include/log4vendor.h"
 #include "CILIX_AUX_UTILS.h"
 
+typedef struct _ErrCode_Msg
+{
+    int ErrMsgLen;
+    int ErrCode;
+    char szErrMsg[100];
+    char Function[100];
+}ErrCode_Msg;
+
 class PinPadNantian : public PinPadClass
 {
 public:
@@ -32,14 +40,14 @@ public:
     ErrorCodeEnum MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo);
     int GetEncryptFunc();
     
-    BOOL m_Open;            //标志设备是否打开
-    DevErrorInfo m_Error;   //标记错误码
-    int g_flag;             //标记按键输入模式
-    int m_PinNum;           //记录密码输入个数
-    int g_Auto;             //标记是否自动结束
-    AccountInfo g_CardNo;   //存储CustomData的数据
-    DWORD g_dwMkSN;         //标记主密钥号
-    DWORD g_dwWkSN;         //标记工作秘钥号 
+    BOOL m_Open;            	  //标志设备是否打开
+    ErrCode_Msg m_ErrCode_Msg;   //标记错误码
+    int g_flag;                  //标记按键输入模式
+    int m_PinNum;                //记录密码输入个数
+    int g_Auto;                  //标记是否自动结束
+    AccountInfo g_CardNo;        //存储CustomData的数据
+    DWORD g_dwMkSN;              //标记主密钥号
+    DWORD g_dwWkSN;              //标记工作秘钥号 
     
     int (*SUNSON_OpenCom)(const char *sztty, long nBaudrate);
     int (*SUNSON_GetVersionNo)(unsigned char *VersionNo);

+ 115 - 67
DevAdapter/nantian/ups.1.1/ups.nantian.1.1.cpp

@@ -2,7 +2,7 @@
 //
 
 #include "ups.nantian.1.1.h"
-
+ErrCode_Msg m_ErrCode_Msg;
 void WAITING_LOOP();
 // 这是已导出类的构造函数。
 // 有关类定义的信息,请参阅 Ups.h
@@ -81,6 +81,21 @@ int split_str(string strSrc, STRVECTOR &vecDest, char cSep)
 	//返回分割后子串个数
 	return vecDest.size();
 }
+/*************************
+ * 
+ * 
+ * **********************/
+void m_ErrCode_Msg_Input_Struct(int ErrCode,char *Function,char *szErrMsg)
+{
+	memset(m_ErrCode_Msg.szErrMsg,0,sizeof(m_ErrCode_Msg.szErrMsg));
+	memset(m_ErrCode_Msg.Function,0,sizeof(m_ErrCode_Msg.Function));
+
+	strcpy(m_ErrCode_Msg.szErrMsg,szErrMsg);
+	strcpy(m_ErrCode_Msg.Function,Function);
+
+	m_ErrCode_Msg.ErrMsgLen=strlen(m_ErrCode_Msg.szErrMsg);
+	m_ErrCode_Msg.ErrCode=ErrCode;
+}
 
 //***********************************************************************//
 /************************************************************************
@@ -127,14 +142,16 @@ ErrorCodeEnum CUps::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 	m_trace->WriteTrace("DevOpen", "传入参数dwPort=%d,dwBaudRate=%d", dwPort, dwBaudRate);
 	LOG4VTM(WARN, "<UpsNantian> - "
 					  << "DevOpen Enter-传入参数dwPor=" << dwPort << "dwBaudRate=" << dwBaudRate);
+
 	if (dwPort <= 0 || dwBaudRate == 0)
 	{
 		m_trace->WriteTrace("DevOpen", "输入参数不合法");
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "DevOpen -输入参数不合法");
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "输入参数不合法");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "输入参数不合法");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		m_ErrCode_Msg_Input_Struct(Error_Param,"DevOpen","输入参数不合法");
 		return Error_Param;
 	}
 	ErrorCodeEnum iret = Error_Succeed;
@@ -148,6 +165,7 @@ ErrorCodeEnum CUps::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 	m_trace->WriteTrace("DevOpen", "设备端口=%s", port_buff);
 	printf("port=%s\n", port_buff);
 	printf("baud=%d\n", dwBaudRate);
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpen","Error_Succeed");
 	for (size_t i = 0; i < 10; i++)
 	{
 		iretval = m_device->Open(port_buff, dwBaudRate);
@@ -160,22 +178,25 @@ ErrorCodeEnum CUps::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 	{
 		m_trace->WriteTrace("DevOpen", "设备打开成功,返回值=%d", iretval);
 		m_bConnect = TRUE;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "设备打开成功");
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "设备打开成功");
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "DevOpen -设备打开成功");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpen","设备打开成功");//可不要
 		return Error_Succeed;
 	}
 	else
 	{
 		m_trace->WriteTrace("DevOpen", "串口或系统出错,设备打开失败,返回值=%d", iretval);
 		m_bConnect = FALSE;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "串口或系统出错,设备打开失败");
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "串口或系统出错,设备打开失败");
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "DevOpen -串口或系统出错,设备打开失败");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+
+		m_ErrCode_Msg_Input_Struct(Error_Hardware,"DevOpen","串口或系统出错,设备打开失败");
 		return Error_Hardware;
 	}
 }
@@ -196,12 +217,13 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "DevOpen -设备没有打开,不能进行查状态操作");
 		eStatus = UPS_STATUS_ERROR_TO_GET_STATUS;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "设备没有打开,不能进行查状态操作");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "设备没有打开,不能进行查状态操作");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		g_flag = false;
 		// return Error_NotInit;
-		return Error_Succeed;
+		m_ErrCode_Msg_Input_Struct(Error_DevNotAvailable,"GetDevStatus","设备未连接");
+		return Error_DevNotAvailable;
 	}
 	// Sleep(300);
 	usleep(300 * 1000);
@@ -210,17 +232,19 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 	memset(buff, 0, 1024);
 	int iTimeOut[10] = {200, 100, 20000, 1};
 	iretval = m_device->Write("\x51\x31\x0D", 3, iTimeOut[0]);
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"GetDevStatus","Error_Succeed");
 	if (iretval != 3)
 	{
 		// m_trace->WriteTrace("GetDevStatus","向串口下发数据失败,iretval=%d",iretval);
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus -向串口下发数据失败,iretval=" << iretval);
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "向串口下发数据失败");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "向串口下发数据失败");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		g_flag = false;
-		// return Error_Hardware;
-		return Error_Succeed;
+		m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevStatus","数据下发失败");
+		return Error_Hardware;
+		//return Error_Succeed;
 	}
 	// Sleep(200);
 	printf("GetDevStatus 向串口下发数据 return iretval=%d\n", iretval);
@@ -236,12 +260,14 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus -读串口错误,iretval=" << iretval);
 		eStatus = UPS_STATUS_ERROR_TO_GET_STATUS;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "读串口错误");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "读串口错误");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 		g_flag = false;
+		m_ErrCode_Msg_Input_Struct(Error_Hardware,"GetDevStatus","读串口错误");
+		return Error_Hardware;
 		// return Error_Param;
-		return Error_Succeed;
+		//return Error_Succeed;
 	}
 	m_trace->WriteTrace("GetDevStatus", "%02x %02x %02x %02x %02x %02x %02x %02x", buff[38], buff[39], buff[40],
 						buff[41], buff[42], buff[43], buff[44], buff[45]);
@@ -253,9 +279,10 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 						  << "UPS设备通信正常ELECTOR");
 		m_trace->WriteTrace("GetDevStatus", "UPS设备通信正常ELECTOR");
 		istatus = 0;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "UPS设备通信正常");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "UPS设备通信正常");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+
 	}
 	if (buff[38] == 0x31 && buff[39] == 0x30 && buff[40] == 0x30 && buff[41] == 0x30 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x30 && buff[45] == 0x30)
@@ -264,9 +291,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  UPS设备通信正常NOELECTOR");
 		istatus = 1;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "UPS设备通信正常");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "UPS设备通信正常");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (buff[38] == 0x30 && buff[39] == 0x30 && buff[40] == 0x30 && buff[41] == 0x30 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x30 && buff[45] == 0x31)
@@ -275,9 +302,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  UPS设备通信正常");
 		istatus = 0;
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "UPS设备通信正常");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "UPS设备通信正常");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (buff[38] == 0x31 && buff[39] == 0x30 && buff[40] == 0x30 && buff[41] == 0x30 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x30 && buff[45] == 0x31)
@@ -286,9 +313,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  交流输入异常:没有市电供给");
 		istatus = 1; //没有电供给
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "交流输入异常:没有市电供给");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "交流输入异常:没有市电供给");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (buff[38] == 0x30 && buff[39] == 0x31 && buff[40] == 0x30 && buff[41] == 0x30 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x30 && buff[45] == 0x31)
@@ -297,9 +324,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  电池电压低");
 		istatus = 2; //电池电压低
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "电池电压低");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "电池电压低");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (buff[38] == 0x30 && buff[39] == 0x30 && buff[40] == 0x31 && buff[41] == 0x30 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x30 && buff[45] == 0x31)
@@ -308,9 +335,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  Bypass或Buck Active");
 		istatus = 3; //Bypass或Buck Active
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "Bypass或Buck Active");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "Bypass或Buck Active");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (buff[38] == 0x30 && buff[39] == 0x30 && buff[40] == 0x30 && buff[41] == 0x31 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x30 && buff[45] == 0x31)
@@ -319,9 +346,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  UPS故障");
 		istatus = 4; //UPS故障
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "UPS故障");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "UPS故障");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (buff[38] == 0x30 && buff[39] == 0x30 && buff[40] == 0x30 && buff[41] == 0x30 && buff[42] == 0x31 &&
 		buff[43] == 0x30 && buff[44] == 0x31 && buff[45] == 0x31)
@@ -330,9 +357,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "GetDevStatus  关机有效");
 		istatus = 5; //关机有效
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "关机有效");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "关机有效");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	}
 	if (istatus == 0)
 	{
@@ -349,9 +376,9 @@ ErrorCodeEnum CUps::GetDevStatus(UpsStatusEnum &eStatus)
 		eStatus = UPS_STATUS_ERROR_TO_GET_STATUS;
 		m_status = FALSE;
 	}
-	memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-	strcpy(m_Error.szErrMsg, "获取状态成功");
-	m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+	//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+	//strcpy(m_Error.szErrMsg, "获取状态成功");
+	//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	g_flag = false;
 	return Error_Succeed;
 }
@@ -363,20 +390,23 @@ ErrorCodeEnum CUps::Shutdown(DWORD dwShutTime, DWORD dwRestartTime)
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "Shutdown  设备没有打开,不能做开关机操作");
 		m_trace->WriteTrace("Shutdown", "设备没有打开,不能做开关机操作");
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "设备没有打开,不能做开关机操作");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
-		return Error_NotInit;
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "设备没有打开,不能做开关机操作");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		m_ErrCode_Msg_Input_Struct(Error_DevNotAvailable,"Shutdown","设备未连接");
+		return Error_DevNotAvailable;
 	}
 	int iret = Error_Succeed;
+        m_ErrCode_Msg_Input_Struct(Error_Succeed,"Shutdown","Error_Succeed");
 	if ((dwShutTime <= 0 || dwShutTime > 10) || (dwRestartTime <= 0 || dwRestartTime > 9999))
 	{
 		m_trace->WriteTrace("Shutdown", "输入参数不合法");
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "Shutdown  输入参数不合法");
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "输入参数不合法");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "输入参数不合法");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		m_ErrCode_Msg_Input_Struct(Error_Param,"Shutdown","输入参数不合法");
 		return Error_Param;
 	}
 	// 	if (m_status == FALSE)
@@ -431,16 +461,17 @@ ErrorCodeEnum CUps::Shutdown(DWORD dwShutTime, DWORD dwRestartTime)
 		m_trace->WriteTrace("Shutdown", "串口或系统错误,iretval=%d", iretval);
 		LOG4VTM(WARN, "<UpsNantian> - "
 						  << "Shutdown  串口或系统错误");
-		memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-		strcpy(m_Error.szErrMsg, "串口或系统错误");
-		m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+		//strcpy(m_Error.szErrMsg, "串口或系统错误");
+		//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+		m_ErrCode_Msg_Input_Struct(Error_Hardware,"Shutdown","串口或系统错误");
 		return Error_Hardware;
 	}
 	else
 		m_trace->WriteTrace("Shutdown", "UPS关、重启命令下发成功");
-	memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
-	strcpy(m_Error.szErrMsg, "UPS关、重启命令下发成功");
-	m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
+	//memset(m_Error.szErrMsg, 0, sizeof(m_Error.szErrMsg));
+	//strcpy(m_Error.szErrMsg, "UPS关、重启命令下发成功");
+	//m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
 	return Error_Succeed;
 }
 //********************************************************************//
@@ -476,8 +507,25 @@ ErrorCodeEnum CUps::DevClose()
 
 ErrorCodeEnum CUps::GetLastErr(DevErrorInfo &devErrInfo)
 {
-	memset(devErrInfo.szErrMsg, 0, sizeof(devErrInfo.szErrMsg));
-	devErrInfo.dwErrMsgLen = m_Error.dwErrMsgLen;
-	memcpy(devErrInfo.szErrMsg, m_Error.szErrMsg, m_Error.dwErrMsgLen);
-	return Error_Succeed;
+	//memset(devErrInfo.szErrMsg, 0, sizeof(devErrInfo.szErrMsg));
+	//devErrInfo.dwErrMsgLen = m_Error.dwErrMsgLen;
+	//memcpy(devErrInfo.szErrMsg, m_Error.szErrMsg, m_Error.dwErrMsgLen);
+	//return Error_Succeed;
+	int iret = Error_Succeed;
+    CILIXAutoTrace __at(m_trace, "GetLastErr", &iret);
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Enter");
+    //devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
+    //strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
+
+    memset(devErrInfo.szErrMsg,0,MAX_DEV_ERROR_MSG_LEN);
+    
+    sprintf(devErrInfo.szErrMsg,"{Errcode:%d,Decription:'Func:%s,Line:%d,Msg:%s'}",m_ErrCode_Msg.ErrCode,m_ErrCode_Msg.Function,m_ErrCode_Msg.ErrMsgLen,m_ErrCode_Msg.szErrMsg);
+
+    devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+
+    LOG4VTM(WARN, "GetLastErr "
+					  << "Exit");
+    return Error_Succeed;
+	
 }

+ 23 - 15
DevAdapter/nantian/ups.1.1/ups.nantian.1.1.h

@@ -1,9 +1,9 @@
-// 下列 ifdef 块是创建使从 DLL 导出更简单的
-// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 UPS_EXPORTS
-// 符号编译的。在使用此 DLL 的
-// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
-// UPS_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
-// 符号视为是被导出的。
+// 锟斤拷锟斤拷 ifdef 锟斤拷锟角达拷锟斤拷使锟斤拷 DLL 锟斤拷锟斤拷锟斤拷锟津单碉拷
+// 锟斤拷谋锟阶硷拷锟斤拷锟斤拷锟斤拷锟� DLL 锟叫碉拷锟斤拷锟斤拷锟侥硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟较讹拷锟斤拷锟� UPS_EXPORTS
+// 锟斤拷锟脚憋拷锟斤拷摹锟斤拷锟绞癸拷么锟� DLL 锟斤拷
+// 锟轿猴拷锟斤拷锟斤拷锟斤拷目锟较诧拷应锟斤拷锟斤拷朔锟斤拷拧锟斤拷锟斤拷锟斤拷锟皆达拷募锟斤拷邪锟斤拷锟斤拷锟斤拷募锟斤拷锟斤拷魏锟斤拷锟斤拷锟斤拷锟侥匡拷锟斤拷峤�
+// UPS_API 锟斤拷锟斤拷锟斤拷为锟角达拷 DLL 锟斤拷锟斤拷模锟斤拷锟斤拷锟� DLL 锟斤拷锟矫此宏定锟斤拷锟�
+// 锟斤拷锟斤拷锟斤拷为锟角憋拷锟斤拷锟斤拷锟侥★拷
 #ifndef _UPS_H_
 
 #define _UPS_H_
@@ -11,16 +11,24 @@
 
 // #define UPS_API extern "C" __declspec(dllexport)
 
-#include "UpsClass.h"
-#include "CILIX_AUX_UTILS.h"
-#include "../include/log4vendor.h"
-// 此类是从 Ups.dll 导出的
+#include "../../include/UpsClass.h"
+#include "../include/CILIX_AUX_UTILS.h"
+#include "../../include/log4vendor.h"
+typedef struct _ErrCode_Msg
+{
+	int ErrMsgLen;
+	int ErrCode;
+	char szErrMsg[100];
+	char Function[100];
+}ErrCode_Msg;
+
+// 锟斤拷锟斤拷锟角达拷 Ups.dll 锟斤拷锟斤拷锟斤拷
 class CUps : public UpsClass
 {
 public:
 	CUps(void);
 	~CUps(void);
-	// TODO: 在此添加您的方法。
+	// TODO: 锟节达拷锟斤拷锟斤拷锟斤拷锟侥凤拷锟斤拷锟斤拷
 public:
 	//
 	//	Device open.
@@ -34,7 +42,7 @@ public:
 	//
 	virtual ErrorCodeEnum GetDevStatus(UpsStatusEnum &eStatus);
 	//
-	//	Shutdown ups and restart it in minutes.  //在几分钟内关闭和重新启动UPS
+	//	Shutdown ups and restart it in minutes.  //锟节硷拷锟斤拷锟斤拷锟节关闭猴拷锟斤拷锟斤拷锟斤拷锟斤拷UPS
 	//	Arguments:
 	//	- dwShutTime:time to shutdown (in minutes)
 	// 	- dwRestartTime:time to restart (in minutes)
@@ -58,9 +66,9 @@ public:
 	virtual ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
 	//*****************************************************************
 public:
-	BOOL m_bConnect;//接口打开标记,TRUE为打开,FALSE为关闭
-	BOOL m_status;//标记UPS状态是否正常
-	DevErrorInfo m_Error;   //标记错误码
+	BOOL m_bConnect;//锟接口打开憋拷牵锟絋RUE为锟斤拷,FALSE为锟截憋拷
+	BOOL m_status;//锟斤拷锟経PS状态锟角凤拷锟斤拷锟斤拷
+	DevErrorInfo m_Error;   //锟斤拷谴锟斤拷锟斤拷锟�
 public:
 	CILIXTrace *m_trace;
 //	CComDevice m_device;

+ 50 - 19
DevAdapter/nantian/watchdog.1.1/watchdog.nantian.cpp

@@ -1,5 +1,7 @@
 #include "watchdog.nantian.h"
 
+ErrCode_Msg m_ErrCode_Msg;
+
 watchdog_nantian::watchdog_nantian()
 {
     //初始化
@@ -101,6 +103,18 @@ WDT_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
         return Error_Param;
 }
 
+void m_ErrCode_Msg_Input_Struct(int ErrCode,char *Function,char *szErrMsg)
+{
+	memset(m_ErrCode_Msg.szErrMsg,0,sizeof(m_ErrCode_Msg.szErrMsg));
+	memset(m_ErrCode_Msg.Function,0,sizeof(m_ErrCode_Msg.Function));
+
+	strcpy(m_ErrCode_Msg.szErrMsg,szErrMsg);
+	strcpy(m_ErrCode_Msg.Function,Function);
+
+	m_ErrCode_Msg.ErrMsgLen=strlen(m_ErrCode_Msg.szErrMsg);
+	m_ErrCode_Msg.ErrCode=ErrCode;
+}
+
 /////////////////////////////////////////////////////////////////////////////////////////////////////
 ErrorCodeEnum watchdog_nantian::GetLastErr(DevErrorInfo &devErrInfo)
 {
@@ -108,8 +122,15 @@ ErrorCodeEnum watchdog_nantian::GetLastErr(DevErrorInfo &devErrInfo)
     CILIXAutoTrace __at(m_trace, "GetLastErr", &iret);
     LOG4VTM(WARN, "GetLastErr "
 					  << "Enter");
-    devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
-    strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
+    //devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
+    //strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
+
+    memset(devErrInfo.szErrMsg,0,MAX_DEV_ERROR_MSG_LEN);
+
+    sprintf(devErrInfo.szErrMsg,"{Errcode:%d,Decription:'Func:%s,Line:%d,Msg:%s'}",m_ErrCode_Msg.ErrCode,m_ErrCode_Msg.Function,m_ErrCode_Msg.ErrMsgLen,m_ErrCode_Msg.szErrMsg);
+
+    devErrInfo.dwErrMsgLen = strlen(devErrInfo.szErrMsg);
+
     LOG4VTM(WARN, "GetLastErr "
 					  << "Exit");
     return Error_Succeed;
@@ -119,14 +140,17 @@ ErrorCodeEnum watchdog_nantian::DevOpen()
 {
     int iret = Error_Succeed;
     CILIXAutoTrace __at(m_trace, "DevOpen", &iret);
+    m_ErrCode_Msg_Input_Struct(Error_Succeed,"DevOpen","Error_Succeed");
     //判断设备库加载是否成功
     if (this->m_loadDllFlag == false)
     {
-        memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-        strcpy(m_errorInfo.szErrMsg, "load vendor so failed!");
-        m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //strcpy(m_errorInfo.szErrMsg, "load vendor so failed!");
+        //m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
 
+        m_ErrCode_Msg_Input_Struct(Error_DevLoadFileFailed,"DevOpen","加载动态so库失败");
         iret = Error_DevLoadFileFailed;
+
         return Error_DevLoadFileFailed;
     }
     iret = m_device->OpenDevice();
@@ -134,9 +158,11 @@ ErrorCodeEnum watchdog_nantian::DevOpen()
 					  << "Invoke OpenDevice" << "return: " << iret );
     if (iret != 0)
     {
-        memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-        strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
-        m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
+        //m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+        m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"DevOpen","设备连接失败");
 
         iret = Error_DevConnFailed;
         return Error_DevConnFailed;
@@ -195,6 +221,7 @@ ErrorCodeEnum watchdog_nantian::StartWatch(DWORD dwDelay, DWORD dwTimeout)
     CILIXAutoTrace __at(m_trace, "StartWatch", &iret);
     LOG4VTM(WARN, "StartWatch "
 					  << "Enter ");
+    m_ErrCode_Msg_Input_Struct(Error_Succeed,"StartWatch","Error_Succeed");
     m_trace->WriteTrace("StartWatch", "dwDelay=%ld, dwTimeout=%ld", dwDelay, dwTimeout);
     int iret1 = m_device->wdtStart(dwDelay, dwTimeout);
     LOG4VTM(WARN, "StartWatch "
@@ -202,9 +229,11 @@ ErrorCodeEnum watchdog_nantian::StartWatch(DWORD dwDelay, DWORD dwTimeout)
     m_trace->WriteTrace("StartWatch", "Invoke so wdtStart, return %d", iret1);
     if (iret1 != 0)
     {
-        memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-        strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
-        m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
+        //m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+
+        m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"StartWatch","设备连接失败");
 
         iret = Error_DevConnFailed;
         return Error_DevConnFailed;
@@ -219,16 +248,17 @@ ErrorCodeEnum watchdog_nantian::StopWatch()
     CILIXAutoTrace __at(m_trace, "StopWatch", &iret);
     LOG4VTM(WARN, "StopWatch "
 					  << "Enter ");
+    m_ErrCode_Msg_Input_Struct(Error_Succeed,"StopWatch","Error_Succeed");
     int iret1 = m_device->wdtStop();
     LOG4VTM(WARN, "wdtStop "
 					  << "Invoke wdtStop" << "return: " << iret1 );
     m_trace->WriteTrace("StartWatch", "Invoke so wdtStop, return %d", iret1);
     if (iret1 != 0)
     {
-        memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-        strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
-        m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
+        //m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+        m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"StopWatch","设备连接失败");
         iret = Error_DevConnFailed;
         return Error_DevConnFailed;
     }
@@ -245,13 +275,14 @@ ErrorCodeEnum watchdog_nantian::RefreshDog()
     int iret1 = m_device->wdtRefresh();
     LOG4VTM(WARN, "RefreshDog "
 					  << "Invoke wdtRefresh" << "return: " << iret1 );
+    m_ErrCode_Msg_Input_Struct(Error_Succeed,"RefreshDog","Error_Succeed");
     m_trace->WriteTrace("RefreshDog", "Invoke so wdtRefresh, return %d", iret1);
     if (iret1 != 0)
     {
-        memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
-        strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
-        m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
-
+        //memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
+        //strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
+        //m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
+        m_ErrCode_Msg_Input_Struct(Error_DevConnFailed,"RefreshDog","设备连接失败");
         iret = Error_DevConnFailed;
         return Error_DevConnFailed;
     }

+ 12 - 5
DevAdapter/nantian/watchdog.1.1/watchdog.nantian.h

@@ -1,11 +1,11 @@
 //基类
-#include "WatchDogClass.h"
+#include "../../include/WatchDogClass.h"
 //辅助类
-#include "CILIX_AUX_UTILS.h"
+#include "../include/CILIX_AUX_UTILS.h"
 //日志类
-#include "log4vendor.h"
+#include "../../include/log4vendor.h"
 
-#include "WATCHDOG.h"
+#include "../include/WATCHDOG.h"
 
 #ifdef __cplusplus
 extern "C"
@@ -16,7 +16,14 @@ extern "C"
 
     typedef WATCHDOG *(*pCreat_WATCHDOG)();
     typedef void *(*pDestory_WATCHDOG)(WATCHDOG *p);
-
+    typedef struct _ErrCode_Msg
+    {
+        int ErrMsgLen;
+        int ErrCode;
+        char szErrMsg[100];
+        char Function[100];
+    }ErrCode_Msg;
+    
     class watchdog_nantian : public WatchDogClass
     {
     public:

Some files were not shown because too many files changed in this diff