Browse Source

Z991239-1436 #comment other:科堡代码 122901

翟俊伟80258120 5 years ago
parent
commit
0fdcda468e
31 changed files with 2873 additions and 1348 deletions
  1. 1 1
      DevAdapter/CMakeLists.txt
  2. 5 1
      DevAdapter/keba/CMakeLists.txt
  3. 8 5
      DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevCtrl.cpp
  4. 20 14
      DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_ComIO.cpp
  5. 5 3
      DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_DevCtrlImpl.cpp
  6. 125 144
      DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.cpp
  7. 1 1
      DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.h
  8. 66 0
      DevAdapter/keba/CardIssuer.keba.1.1/CkLog.cpp
  9. 334 0
      DevAdapter/keba/CardIssuer.keba.1.1/CkLog.h
  10. 9 21
      DevAdapter/keba/CardIssuer.keba.1.1/dllmain.cpp
  11. 3 1
      DevAdapter/keba/CardIssuer.keba.1.1/stdafx.h
  12. 66 0
      DevAdapter/keba/FingerPrint.keba.1.1/CkLog.cpp
  13. 334 0
      DevAdapter/keba/FingerPrint.keba.1.1/CkLog.h
  14. 3 2
      DevAdapter/keba/FingerPrint.keba.1.1/JZT998APBDevCtrl.h
  15. 37 0
      DevAdapter/keba/FingerPrint.keba.1.1/dllmain.cpp
  16. 74 206
      DevAdapter/keba/FingerPrint.keba.1.1/fingerprint.cpp
  17. 4 4
      DevAdapter/keba/FingerPrint.keba.1.1/fingerprint.h
  18. 66 0
      DevAdapter/keba/IDCertificate.keba.1.1/CkLog.cpp
  19. 334 0
      DevAdapter/keba/IDCertificate.keba.1.1/CkLog.h
  20. 31 0
      DevAdapter/keba/IDCertificate.keba.1.1/dllmain.cpp
  21. 93 324
      DevAdapter/keba/IDCertificate.keba.1.1/idcertificate.cpp
  22. 1 0
      DevAdapter/keba/IDCertificate.keba.1.1/stdafx.h
  23. 66 0
      DevAdapter/keba/PinPad.keba.1.1/CkLog.cpp
  24. 334 0
      DevAdapter/keba/PinPad.keba.1.1/CkLog.h
  25. 402 212
      DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.cpp
  26. 2 2
      DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.h
  27. 387 392
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevCtrl.cpp
  28. 1 1
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevCtrl.h
  29. 20 11
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevImpl.cpp
  30. 38 0
      DevAdapter/keba/PinPad.keba.1.1/dllmain.cpp
  31. 3 3
      DevAdapter/keba/PinPad.keba.1.1/stdafx.h

+ 1 - 1
DevAdapter/CMakeLists.txt

@@ -134,7 +134,7 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 
 # ͨ¹ýconanµÄ·½Ê½¹ÜÀí³§ÉÌ¿â
 if(RVC_INTEGRATE_BUILD)
-    set(KEBA_CONAN_LIB_NAME keba/2020.1217.01@LR04.02_VendorLib/testing)
+    set(KEBA_CONAN_LIB_NAME keba/2020.1229.01@LR04.02_VendorLib/testing)
 	set(NANTIAN_CONAN_LIB_NAME nantian/2020.1222.01@LR04.02_VendorLib/testing)
 	set(GRG_CONAN_LIB_NAME grg/2020.1222.01@LR04.02_VendorLib/testing)
 	set(CW_CONAN_LIB_NAME cw/2020.1222.01@LR04.02_VendorLib/testing)

+ 5 - 1
DevAdapter/keba/CMakeLists.txt

@@ -15,4 +15,8 @@ rvc_define_dependen_dirs()
 rvc_traverse_sub_cmake_dirs()
 
 #  =-=-=-=-=-=-=-=-=-= {VendorName}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_aggereate_runtime_file()
+rvc_aggereate_runtime_file()
+
+
+
+

+ 8 - 5
DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevCtrl.cpp

@@ -1,6 +1,9 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "ACT-Sankyo_DevCtrl.h"
-extern CTraceManager g_Trace;
+#include "CkLog.h"
+
+LOG_EXTERN()
+
 /*
 typedef struct	tag_COMInfo
 {
@@ -43,18 +46,18 @@ CACT_Sankyo_DevCtrl::~CACT_Sankyo_DevCtrl(void)
 
 WORD CACT_Sankyo_DevCtrl::Open(DWORD dwPort, DWORD dwBaudRate)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CACT_Sankyo_DevCtrl:: entry->CACT_Sankyo_DevCtrl::Open(DWORD dwPort=%d, DWORD dwBaudRate=%d",dwPort,dwBaudRate);
+    LogM("CACT_Sankyo_DevCtrl:: entry->CACT_Sankyo_DevCtrl::Open(DWORD dwPort=%ld, DWORD dwBaudRate=%ld",dwPort,dwBaudRate);
 	char szPort[16] = {0x00};
 	WORD wResult = CRT_SUCCESS;
     char* lpPort = GetCOMPortString(dwPort);
     if(nullptr == lpPort) return CRT_OFFLINE;
 
     BOOL bRet = m_pDevCtrlImpl->OpenDevice(lpPort, dwBaudRate);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CACT_Sankyo_DevCtrl::m_pDevCtrlImpl->OpenDevice(lpPort=%s, dwBaudRate=%d",lpPort,dwBaudRate);
+    LogM("CACT_Sankyo_DevCtrl::m_pDevCtrlImpl->OpenDevice(lpPort=%s, dwBaudRate=%ld",lpPort,dwBaudRate);
    // BOOL bRet = m_pDevCtrlImpl->OpenDevice("/dev/ttyUSB0", 38400);
 	if (bRet == FALSE)
 	{
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CACT_Sankyo_DevCtrl::entry->CACT_Sankyo_DevCtrl::Open->m_pDevCtrlImpl->OpenDevice failed");
+        LogM("CACT_Sankyo_DevCtrl::entry->CACT_Sankyo_DevCtrl::Open->m_pDevCtrlImpl->OpenDevice failed");
 		wResult = CRT_OFFLINE;
 	}
 	return wResult;

+ 20 - 14
DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_ComIO.cpp

@@ -1,8 +1,10 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "ACT_SDK_ComIO.h"
-//#include "log4vendor.h"
 #include <assert.h>
-extern CTraceManager g_Trace;
+#include "CkLog.h"
+//extern CTraceManager g_Trace;
+LOG_EXTERN()
+
 CACT_SDK_ComIO::CACT_SDK_ComIO(void)
 {
 	m_hDevice = NULL;
@@ -25,17 +27,17 @@ BOOL CACT_SDK_ComIO::Open(const string strCOMName, const DWORD dwBaudRate)
 
 	if (LoadSDKDll() == FALSE)
 	{
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"LoadSDKDll() == FALSE");
+        LogM("LoadSDKDll() == FALSE");
 		return FALSE;
 	}
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"m_fnConnect(strCOMName=%s, (int)dwBaudRate=%d, NOPARITY, F5TCMODE_MST, &m_hDevice",strCOMName.c_str(),dwBaudRate);
+    LogM("m_fnConnect(strCOMName=%s, (int)dwBaudRate=%d, NOPARITY, F5TCMODE_MST, &m_hDevice",strCOMName.c_str(),dwBaudRate);
     lRet = m_fnConnect(strCOMName.c_str(), (int)dwBaudRate, NOPARITY, F5TCMODE_MST, &m_hDevice);
 	if (lRet != F5_S_SUCCESS)
 	{
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"lRet = m_fnConnect=%d",lRet);
+        LogM("lRet = m_fnConnect=%d",lRet);
 		return FALSE;
 	}
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"lRet = m_fnConnect=%d sucessfull",lRet);
+    LogM("lRet = m_fnConnect=%d sucessfull",lRet);
 	return TRUE;
 }
 
@@ -68,7 +70,7 @@ long CACT_SDK_ComIO::SendAndRecv(const COMMAND cmdData, LPREPLY lpReply, DWORD d
 	}
 	ulCmdLen = 2 + cmdData.Data.dwSize;
 
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Com Write :, bySendData=%s, ulCmdLen=%d",bySendData,ulCmdLen);
+    LogXM(bySendData, (UINT)ulCmdLen, "SendAndRecv->SendData");
 
     lRet = m_fnExecute(m_hDevice, bySendData, (int)ulCmdLen, (int)dwTimeOut, &m_cmdResult);
 	if (lRet == F5_S_SUCCESS)
@@ -77,12 +79,14 @@ long CACT_SDK_ComIO::SendAndRecv(const COMMAND cmdData, LPREPLY lpReply, DWORD d
 		lpReply->message.positiveReply.StatusCode.bSt0 = m_cmdResult.P.st0;
 		lpReply->message.positiveReply.StatusCode.bSt1 = m_cmdResult.P.st1;
 		lpReply->message.positiveReply.StatusCode.bSt2 = m_cmdResult.P.st2;
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Com Read : [st0=%c][st1=%c][st2=%c]", m_cmdResult.P.st0, m_cmdResult.P.st1, m_cmdResult.P.st2);
-		if (m_cmdResult.RDTBuff != NULL && m_cmdResult.RDTLength > 0)
+        LogM("Com Read : [st0=%c][st1=%c][st2=%c]", m_cmdResult.P.st0, m_cmdResult.P.st1, m_cmdResult.P.st2);
+
+        if (m_cmdResult.RDTBuff != NULL && m_cmdResult.RDTLength > 0)
 		{
 			memcpy(&lpReply->message.positiveReply.Data.bBody, m_cmdResult.RDTBuff, m_cmdResult.RDTLength);
 			lpReply->message.positiveReply.Data.dwSize = m_cmdResult.RDTLength;
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Com Read RDT m_cmdResult.RDTBuff=%s,m_cmdResult.RDTLength=%d", m_cmdResult.RDTBuff, m_cmdResult.RDTLength);
+
+            LogXM(m_cmdResult.RDTBuff, m_cmdResult.RDTLength, "Com Read RDTBuff");
 		}
 	}
 	else
@@ -92,12 +96,14 @@ long CACT_SDK_ComIO::SendAndRecv(const COMMAND cmdData, LPREPLY lpReply, DWORD d
             lpReply->replyType = NegativeReply;
             lpReply->message.negativeReply.ErrorCode.bE0 = m_cmdResult.N.e0;
             lpReply->message.negativeReply.ErrorCode.bE1 = m_cmdResult.N.e1;
-            //ckLog::Print(CMB_LOG_INFO, "Com Read : [bE0=%c][bE1=%c]", m_cmdResult.N.e0, m_cmdResult.N.e1);
+            LogM("Com Read : [bE0=%c][bE1=%c]", m_cmdResult.N.e0, m_cmdResult.N.e1);
+
             if (m_cmdResult.RDTBuff != NULL && m_cmdResult.RDTLength > 0)
             {
                 memcpy(&lpReply->message.negativeReply.Data.bBody, m_cmdResult.RDTBuff, m_cmdResult.RDTLength);
                 lpReply->message.negativeReply.Data.dwSize = m_cmdResult.RDTLength;
-                //ckLog::BinaryData("Com Read RDT :", m_cmdResult.RDTBuff, m_cmdResult.RDTLength);
+
+                LogXM(m_cmdResult.RDTBuff, m_cmdResult.RDTLength, "lRet = F5_E_COMMAND_FAILED,Com Read RDT");
             }
         }
         else
@@ -125,7 +131,7 @@ BOOL CACT_SDK_ComIO::LoadSDKDll()
 
     //m_hF5CMDDll = dlopen("libF5Sanapi.so", RTLD_NOW);
     m_hF5CMDDll = dlopen(str_FilePath, RTLD_NOW);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"m_hF5CMDDll = dlopen(str_FilePath, RTLD_NOW)=%x",m_hF5CMDDll);
+    LogM("m_hF5CMDDll = dlopen(str_FilePath, RTLD_NOW)=%x",m_hF5CMDDll);
 
 	if (m_hF5CMDDll == NULL)
 	{

+ 5 - 3
DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_DevCtrlImpl.cpp

@@ -1,7 +1,9 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "ACT_SDK_DevCtrlImpl.h"
 #include <unistd.h>
-extern CTraceManager g_Trace;
+#include "CkLog.h"
+//extern CTraceManager g_Trace;
+LOG_EXTERN()
 
 CACT_SDK_DevCtrlImpl::CACT_SDK_DevCtrlImpl(void)
 {
@@ -19,7 +21,7 @@ CACT_SDK_DevCtrlImpl::~CACT_SDK_DevCtrlImpl(void)
 
 BOOL CACT_SDK_DevCtrlImpl::OpenDevice(LPCSTR lpComNum, const DWORD dwBaudRate)
 {
-    //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CACT_SDK_DevCtrlImpl::OpenDevice(LPCSTR  %slpComNum, const DWORD %d dwBaudRate)",lpComNum,dwBaudRate);
+    LogM("CACT_SDK_DevCtrlImpl::OpenDevice( pComNum=[%s], dwBaudRate=[%ld] )",lpComNum,dwBaudRate);
 
 	return m_pSDKComIO->Open(lpComNum, dwBaudRate);
 }

+ 125 - 144
DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.cpp

@@ -5,8 +5,10 @@
 #include "SetupMutex.h"
 #include "CardIssuerClassImpl_ACT-Sankyo.h"
 #include <unistd.h>
+#include "CkLog.h"
 
-extern CTraceManager g_Trace;
+//extern CTraceManager g_Trace;
+LOG_EXTERN()
 
 CardIssuerClassImpl::CardIssuerClassImpl():
     m_bDevOpen(false)
@@ -14,16 +16,17 @@ CardIssuerClassImpl::CardIssuerClassImpl():
     ,m_strIniPath("")
     ,m_wDevErrCode(0)
 {
-    LOG4VTM(INFO,("CardIssuerClassImpl:: entry->creat object !"));
+    LOG_FUNCTION();
 
     int nRet = Error_Succeed;
     m_pACT_Sankyo_DevCtrl = new CACT_Sankyo_DevCtrl();
     memset(m_szErrMsg, 0x00, sizeof(m_szErrMsg));
-    LOG4VTM(INFO,("CardIssuerClassImpl ::creat object sucessfull!"));
 }
 
 CardIssuerClassImpl::~CardIssuerClassImpl()
 {
+    LOG_FUNCTION();
+
     if (m_pACT_Sankyo_DevCtrl != NULL)
     {
         if (m_bDevOpen == true)
@@ -38,75 +41,72 @@ CardIssuerClassImpl::~CardIssuerClassImpl()
 ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->CardIssuer->GetDevCategory()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->CardIssuer->GetDevCategory()");
     memset(devCategory.szType, 0, MAX_DEV_TYPE_LEN);
     memset(devCategory.szModel, 0, MAX_DEV_MODEL_LEN);
     memset(devCategory.szVendor, 0, MAX_DEV_VENDOR_LEN);
-
     memcpy(devCategory.szType, "PVER=ACT#MID=ACT-F5-5540-0SH", strlen("PVER=ACT#MID=ACT-F5-5540-0SH"));
     memcpy(devCategory.szModel, "CM=V2.0", strlen("CM=V2.0"));
     memcpy(devCategory.szVendor, "keba", strlen("keba"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl->GetDevCategory():devCategory.szType=%s,devCategory.szModel=%s,devCategory.szVendor=%s",devCategory.szType,devCategory.szModel,devCategory.szVendor);
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->CardIssuer->GetDevCategory() sucessfull!");
+    LogM("CardIssuerClassImpl->GetDevCategory():devCategory.szType=%s,devCategory.szModel=%s,devCategory.szVendor=%s",devCategory.szType,devCategory.szModel,devCategory.szVendor);
+    LogM("CardIssuerClassImpl::leave->CardIssuer->GetDevCategory() sucessfull!");
     return Error_Succeed;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::Reset()
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->Reset()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->Reset()");
     int nRet=m_pACT_Sankyo_DevCtrl->Reset(CARD_READER_DEV_ACT_HOLD);
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->Reset() sucessfull!");
+    LogM("CardIssuerClassImpl::leave->Reset() ret=[%d]!", nRet);
     return ErrorCodeToCMB(nRet);
 }
 
 ErrorCodeEnum CardIssuerClassImpl::DevClose()
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->DevClose()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->DevClose()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->DevClose()");
     m_pACT_Sankyo_DevCtrl->Close();
     m_bDevOpen = false;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->DevClose() sucessfull!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->DevClose() sucessfull!");
+    LogM("CardIssuerClassImpl::leave->DevClose() sucessfull!");
     return Error_Succeed;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->GetLastErr()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->GetLastErr()");
+    LOG_FUNCTION();
+
+    LogM("CardIssuerClassImpl::entry->GetLastErr()");
     devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
     memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
     devErrInfo.dwErrMsgLen = (m_wDevErrCode << 16);
     memcpy(devErrInfo.szErrMsg, m_szErrMsg, MIN(devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
     devErrInfo.dwErrMsgLen += (strlen(devErrInfo.szErrMsg) & 0x0000FFFF);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"GetLastErr->szErrMsg=%s",devErrInfo.szErrMsg);
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->GetLastErr() sucessfull!");
+    LogM("GetLastErr->szErrMsg=%s",devErrInfo.szErrMsg);
     return Error_Succeed;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort,DWORD dwBaudRate)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"DevOpen(dwPort=%d,DWORD dwBaudRate=%d)",dwPort,dwBaudRate);
-    LOG4VTM(INFO,"CardIssuerClassImpl:: entry->CardIssuer->DevOpen()");
+    LOG_FUNCTION();
+    LogM("DevOpen(dwPort=%d,DWORD dwBaudRate=%d)",dwPort,dwBaudRate);
     WORD wRet = m_pACT_Sankyo_DevCtrl->Open(dwPort, dwBaudRate);
     if (wRet == CRT_SUCCESS)
     {
-        LOG4VTM(INFO,"entry->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset()");
         m_bDevOpen = true;
         wRet = m_pACT_Sankyo_DevCtrl->Reset(CARD_READER_DEV_ACT_HOLD);
-        LOG4VTM(INFO,"leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset() sucessfull");
+        LogM("leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset() wRet=[%d]", wRet);
         if (wRet == CRT_SUCCESS)
         {
-            LOG4VTM(INFO,"entry->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset()->ReturnOffRetractCounter() ");
             wRet = m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter();
-            LOG4VTM(INFO,"leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset()->ReturnOffRetractCounter() sucessfull");
+            LogM("leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset()->ReturnOffRetractCounter() wRet=[%d]", wRet);
         }
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->CardIssuer->DevOpen() sucessful");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->CardIssuer->DevOpen() sucessful");
+        LogM("CardIssuerClassImpl::leave->CardIssuer->DevOpen() sucessful");
         return Error_Succeed;
     }
-
+    LogM("CardIssuerClassImpl::DevOpen() fail, wRet=[%d]", wRet);
     return ErrorCodeToCMB(wRet);
 }
 //
@@ -115,12 +115,11 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort,DWORD dwBaudRate)
 ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->CardIssuer->GetDevStatus()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->CardIssuer->GetDevStatus()");
+    LOG_FUNCTION();
     DevStatus getStatus = {0};
     WORD wRet = CRT_SUCCESS;
-
     wRet = m_pACT_Sankyo_DevCtrl->GetDevStatus(&getStatus);
+    LogM("CardIssuerClassImpl::m_pACT_Sankyo_DevCtrl->GetDevStatus() wRet=[%d]", wRet);
     if (wRet == CRT_SUCCESS)
     {
         // eMedia
@@ -267,8 +266,7 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
             }
         }
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->CardIssuer->GetDevStatus() sucessful !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->CardIssuer->GetDevStatus() sucessful !!");
+
     ErrorCodeToCMB(wRet);
     return Error_Succeed;
  }
@@ -278,11 +276,10 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
 ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->GetDeviceSN(pDevSN=%d)",pDevSN);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->GetDeviceSN()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->GetDeviceSN(pDevSN=%d)",pDevSN);
     memcpy(pDevSN, "100000000001", strlen("100000000001"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->GetDeviceSN(pDevSN=%d) sucessful !!",pDevSN);
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->GetDeviceSN() sucessful !!");
+    LogM("CardIssuerClassImpl::leave->GetDeviceSN(pDevSN=%d) sucessful !!",pDevSN);
     return Error_Succeed;
 }
 //
@@ -292,69 +289,45 @@ ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
 ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->GMoveCard( eCardPos=%d,  hopperNo=%d)",eCardPos,hopperNo);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()");
-
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::MoveCard( eCardPos=%d,  hopperNo=%d)",eCardPos,hopperNo);
     DevStatus getStatus = {0};
     WORD wRet = CRT_SUCCESS;
-
     if (eCardPos == CI_MOVECARD_BACK_NOT_HOLD)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()");
-        LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()");
         wRet = m_pACT_Sankyo_DevCtrl->CheckReleaseIC();
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() sucessfull!!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() sucessfull!!");
+        LogM("CardIssuerClassImpl::MoveCard()->CheckReleaseIC() wRet=[%d]", wRet);
         if (wRet == CRT_SUCCESS)
         {
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()->RetainCard()");
-            LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()->RetainCard()");
             wRet = m_pACT_Sankyo_DevCtrl->RetainCard();
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC()->RetainCard() sucessfull !!");
-            LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC()->RetainCard() sucessfull !!");
+            LogM("CardIssuerClassImpl::MoveCard()->CheckReleaseIC()->RetainCard() wRet=[%d]", wRet);
         }
     }
     else if (eCardPos == CI_MOVECARD_FROM_HOPPER)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->DispenseCard()");
-        LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->DispenseCard()");
         wRet = m_pACT_Sankyo_DevCtrl->DispenseCard(hopperNo);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->DispenseCard() sucessfull !!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->DispenseCard() sucessfull !!");
+        LogM("CardIssuerClassImpl::leave->MoveCard()->DispenseCard() wRet=[%d]", wRet);
     }
     else if (eCardPos == CI_MOVECARD_FRONT_GATE)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()");
-        LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()");
         wRet = m_pACT_Sankyo_DevCtrl->CheckReleaseIC();
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() sucessfull !!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() sucessfull !!");
+        LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() wRet=[%d]", wRet);
         if (wRet == CRT_SUCCESS)
         {
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()->EjectCard()");
-            LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()->EjectCard()");
             wRet = m_pACT_Sankyo_DevCtrl->EjectCard();
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() ->EjectCard()sucessfull !!");
-            LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() ->EjectCard()sucessfull !!");
+            LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC()->EjectCard() wRet=[%d]", wRet);
         }
     }
     else if (eCardPos == CI_MOVECARD_RETRIEVE)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->ReIntakeCard()");
-        LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->ReIntakeCard()");
         wRet = m_pACT_Sankyo_DevCtrl->ReIntakeCard();
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->ReIntakeCard() sucessfull !!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->ReIntakeCard() sucessfull !!");
+        LogM("CardIssuerClassImpl::leave->MoveCard()->ReIntakeCard() wRet=[%d]", wRet);
     }
     else if (eCardPos == CI_MOVECARD_MAG_POSITION)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()");
-        LOG4VTM(INFO,"CardIssuerClassImpl::entry->MoveCard()->CheckReleaseIC()");
         wRet = m_pACT_Sankyo_DevCtrl->CheckReleaseIC();
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() sucessfull !!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() sucessfull !!");
+        LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() wRet=[%d]", wRet);
     }
-
     return ErrorCodeToCMB(wRet);
 }
 //
@@ -363,10 +336,9 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->SetCardInType(eCardIn=%d)",eCardIn);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SetCardInType()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->SetCardInType(eCardIn=%d)",eCardIn);
     WORD wRet = CRT_SUCCESS;
-
     if (eCardIn == CI_CARD_IN_TYPE_ALL)
     {
         wRet = m_pACT_Sankyo_DevCtrl->PermitInsertion(CARD_READER_CARD_TYPE_ANY);
@@ -379,8 +351,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
     {
         wRet = m_pACT_Sankyo_DevCtrl->DenyInsertion();
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->SetCardInType() sucessfull !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->SetCardInType() sucessfull !!");
+    LogM("CardIssuerClassImpl::leave->SetCardInType() wRet=[%d]", wRet);
     return ErrorCodeToCMB(wRet);
 }
 //
@@ -389,8 +360,8 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MagRead(magTracks.eRange=%d)",magTracks.eRange);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->MagRead()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->MagRead(magTracks.eRange=%d)",magTracks.eRange);
     MediaData trackDataLst[3] = {0};
     int nTrackCnt = 0;
     int i = 0,j=0;
@@ -414,13 +385,10 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
     {
         trackDataLst[nTrackCnt++].wMediaID = CARD_READER_MEDIA_TRACK3;
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MagRead()->ReadTrackData()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->MagRead()->ReadTrackData()");
     WORD wRet = m_pACT_Sankyo_DevCtrl->ReadTrackData(trackDataLst, nTrackCnt);
+    LogM("CardIssuerClassImpl::leave->MagRead()->ReadTrackData() wRet=[%d]", wRet);
     if (wRet == CRT_SUCCESS)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MagRead()->ReadTrackData() sucessfull!!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->MagRead()->ReadTrackData() sucessfull!!");
         for (i = 0; i < MAX_MAG_TRACK_NUM; i++)
         {
             if (trackDataLst[i].wMediaID == CARD_READER_MEDIA_TRACK1)
@@ -472,9 +440,9 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
                 }
             }
         }
+        LogM("CardIssuerClassImpl::leave->MagRead(magTracks.eRange=%d) ok!!", magTracks.eRange);
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MagRead(magTracks.eRange=%d)sucessfull!!",magTracks.eRange);
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->MagRead() sucessfull!!");
+
     return ErrorCodeToCMB(wRet);
 }
 //
@@ -483,8 +451,10 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks,MagWriteModeEnum eWriteMode)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->MagWrite(magTracks.track=%d, eWriteMode=%d)",magTracks.track,eWriteMode);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->MagWrite()");
+    LOG_FUNCTION();
+
+    LogM("CardIssuerClassImpl::entry->MagWrite(magTracks.track=%d, eWriteMode=%d)",magTracks.track,eWriteMode);
+
     MediaData trackDataLst[3] = {0};
     int nTrackCnt = 0;
     int i = 0;
@@ -527,8 +497,7 @@ ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks,MagWriteModeEnum
     default:
         return Error_NotImpl;
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->MagWrite() sucessfull !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->MagWrite() sucessfull !!");
+    LogM("CardIssuerClassImpl::leave->MagWrite() !!");
     return ErrorCodeToCMB(m_pACT_Sankyo_DevCtrl->WriteTrackData(trackDataLst, nTrackCnt, wWriteMode));
 }
 //
@@ -536,8 +505,8 @@ ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks,MagWriteModeEnum
 //
 ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->SetRetractCounter()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SetRetractCounter()");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //
@@ -546,8 +515,8 @@ ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
 //
 ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount,int hopperNo)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->SetIssuerCounter()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SetIssuerCounter()");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //
@@ -556,11 +525,11 @@ ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount,int hopperNo)
 ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE)");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE)");
+    LOG_FUNCTION();
+
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE) sucessfull !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE) sucessfull !!");
+    LogM("CardIssuerClassImpl::leave->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE) nRet=[%d] !!", nRet);
+
     return ErrorCodeToCMB(nRet);
 }
 //
@@ -569,11 +538,10 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT)");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT)");
+    LOG_FUNCTION();
+
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT) sucessfull !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT) sucessfull !!");
+    LogM("CardIssuerClassImpl::leave->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT) nRet=[%d] !!", nRet);
     return ErrorCodeToCMB(nRet);
 }
 //
@@ -582,11 +550,10 @@ ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE)");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE)");
+    LOG_FUNCTION();
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE) sucessfull !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE) sucessfull !!");
+    LogM("CardIssuerClassImpl::leave->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE) nRet=[%d] !!", nRet);
+
     return ErrorCodeToCMB(nRet);
 }
 //
@@ -595,19 +562,16 @@ ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM)");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM)");
+    LOG_FUNCTION();
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM) sucessfull !!");
-    LOG4VTM(INFO,"CardIssuerClassImpl::leave->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM) sucessfull !!");
+    LogM("CardIssuerClassImpl::leave->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM) nRet=[%d] !!", nRet);
     return ErrorCodeToCMB(nRet);
 }
 
 ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
 {
     CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->ICCommand()");
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->ICCommand()");
+    LOG_FUNCTION();
     WORD wRet = CRT_SUCCESS;
     ChipIOData chipData = {0x00};
 
@@ -622,12 +586,11 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
     }
 
     wRet = m_pACT_Sankyo_DevCtrl->ChipIO(&chipData);
+    LogM("CardIssuerClassImpl::ICCommand->ChipIO wRet=[%d] !!", wRet);
     if (wRet == CRT_SUCCESS)
     {
         recvBuf.dwSize = chipData.recvData.dwDataLen;
         memcpy(recvBuf.data, chipData.recvData.byDataBuf, recvBuf.dwSize);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->ICCommand() sucessfull !!");
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->ICCommand() sucessfull !!");
     }
     return ErrorCodeToCMB(wRet);
 }
@@ -635,7 +598,8 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
 
 ErrorCodeEnum CardIssuerClassImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char &outType)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //
@@ -643,7 +607,8 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveContactlessICCard(char fstType, char sc
 //
 ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //
@@ -651,19 +616,22 @@ ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
 //
 ErrorCodeEnum CardIssuerClassImpl::DeactContactlessICCard()
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo &recvBuf)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 /////////////////////////////////////////////////////////////////////////
@@ -677,32 +645,26 @@ ErrorCodeEnum CardIssuerClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
 
 ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType,const char *pDevSN, BYTE &btType)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->CardIssuer->DevOpenEx(dwPort=%d,dwBaudRate=%d, btOpenType,pDevSN=%s, btType)",dwPort,dwBaudRate,pDevSN);
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->CardIssuer->DevOpenEx()");
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->CardIssuer->DevOpenEx(dwPort=%d,dwBaudRate=%d, btOpenType,pDevSN=%s, btType)",dwPort,dwBaudRate,pDevSN);
     btType=2;
     WORD wRet = m_pACT_Sankyo_DevCtrl->Open(dwPort, dwBaudRate);
     if (wRet == CRT_SUCCESS)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Open()");
-
-        LOG4VTM(INFO,"CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Open()");
         m_bDevOpen = true;
         wRet = m_pACT_Sankyo_DevCtrl->Reset(CARD_READER_DEV_ACT_HOLD);
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Open() sucessfull");
+        LogM("CardIssuerClassImpl::leave->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset() wRet=[%d]", wRet);
         if (wRet == CRT_SUCCESS)
         {
-            LOG4VTM(INFO,"CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset()->m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter() ");
             btType = DEV_OPEN_TYPE_COM;
             wRet = m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter();
-            LOG4VTM(INFO,"CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset()->m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter()sucessfull !!");
+            LogM("CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset()->m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter()wRet=[%d]", wRet);
         }
-        LOG4VTM(INFO,"CardIssuerClassImpl::leave->DevOpenEx() sucessfull");
+        LogM("CardIssuerClassImpl::leave->DevOpenEx() sucessfull");
         return Error_Succeed;
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CardIssuerClassImpl::leave->DevOpenEx() failed");
+    LogM("CardIssuerClassImpl::leave->DevOpenEx() failed");
     return ErrorCodeToCMB(wRet);
-
-     //DevOpen(dwPort,dwBaudRate);
 }
 //	返回值Error_Succeed表示成功,其他值表示失败
 //	iStatus   0:成功   -1:银行公钥不存在   -2:产生设备密钥故障  -x:其他厂商自定义故障
@@ -710,13 +672,15 @@ ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYT
 //	r1,r3第16字节为数据完整性校验字节,例如r1为B1B2...B15B16,则B16=B1^B2^...^B15
 ErrorCodeEnum CardIssuerClassImpl::TransferEnInit(int &iStatus, BYTE *&Cr1, int &lenR1, BYTE *&Cr3, int &lenR3, BYTE *&dKey, int &lenKey)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->TransferEnInit");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::SetR2(int &iStatus, BYTE *pCr2, int lenR2)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SetR2");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //
@@ -724,39 +688,47 @@ ErrorCodeEnum CardIssuerClassImpl::SetR2(int &iStatus, BYTE *pCr2, int lenR2)
 //	pWorkingKey:???????????16?????????????????0x123456FFAB  --> "123456FFAB"
 ErrorCodeEnum CardIssuerClassImpl::SendWorkingKey(const char *pWorkingKey)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SendWorkingKey");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //??????????? begin
 ErrorCodeEnum CardIssuerClassImpl::SLLoadKey(const SCIKeyInfo key)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SLLoadKey");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::SLSetParam(SCIParamType eType, int value)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SLSetParam");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 ErrorCodeEnum CardIssuerClassImpl::SLLock()
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SLLock");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 ErrorCodeEnum CardIssuerClassImpl::SLUnLock(const SCICheckCode checkCode, bool bTemp)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SLUnLock");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 ErrorCodeEnum CardIssuerClassImpl::SLGetTempData(SCITempData &ksnData, SCITempData &ramData)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SLGetTempData");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
+
     return Error_NotImpl;
 }
 ErrorCodeEnum CardIssuerClassImpl::SLOpenDoor(const SCITempData data)
 {
-    LOG4VTM(INFO,"CardIssuerClassImpl::entry->SLOpenDoor");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //安全锁接口部分 end
@@ -765,37 +737,43 @@ ErrorCodeEnum CardIssuerClassImpl::SLOpenDoor(const SCITempData data)
 //蓝牙指令控制,命令参看SCIBluetoothCMD说明
 ErrorCodeEnum CardIssuerClassImpl::BluetoothControl(SCIBluetoothCMD eCmd)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //修改配对密码
 ErrorCodeEnum CardIssuerClassImpl::BluetoothModifyKey(unsigned char *key)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //修改蓝牙设备名称
 ErrorCodeEnum CardIssuerClassImpl::BluetoothModifyName(unsigned char *name)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //修改蓝牙设备名称
 ErrorCodeEnum CardIssuerClassImpl::BluetoothGetVersion(char *&version)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //获取连接设备名称
 ErrorCodeEnum CardIssuerClassImpl::BluetoothGetConnectName(unsigned char *&name)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //获取连接设备信号强度
 ErrorCodeEnum CardIssuerClassImpl::BluetoothGetSignalStrength(unsigned char *&signal)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //蓝牙控制部分 end
@@ -805,13 +783,15 @@ ErrorCodeEnum CardIssuerClassImpl::BluetoothGetSignalStrength(unsigned char *&si
 //bOnOff:true 亮灯;fasle 灭灯
 ErrorCodeEnum CardIssuerClassImpl::LightControl(SCILightType eLight, bool bOnOff)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //以百分比数值返回剩余电量(1-100),例如剩余51%,则bat赋值为51
 ErrorCodeEnum CardIssuerClassImpl::QueryBatteryPower(int &bat)
 {
-    LOG4VTM(INFO,"CardIssuer");
+    LOG_FUNCTION();
+    LogM("Error_NotImpl");
     return Error_NotImpl;
 }
 //Private
@@ -831,9 +811,10 @@ int CardIssuerClassImpl::string_format(std::string &str, const std::string fmt,
 ErrorCodeEnum CardIssuerClassImpl::ErrorCodeToCMB(WORD wRes)
 {
     ErrorCodeEnum eRet = Error_Succeed;
+    LOG_FUNCTION_INT32(eRet);
     DevErrDetail getErrDetail = {0x00};
     WORD wResult = DEV_UNKNOWN;
-//	ckLog::Print(CMB_LOG_TRACE, "ErrorCodeToCMB return[%x] !", wRes);
+    LogM("ErrorCodeToCMB return[%x] !", wRes);
 
     if (wRes == CRT_SUCCESS)
     {

+ 1 - 1
DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.h

@@ -1,7 +1,7 @@
 #ifndef __CARDISSUERCLASS_IMPL_CRT591HDR1_H
 #define __CARDISSUERCLASS_IMPL_CRT591HDR1_H
 
-#include "log4vendor.h"
+//#include "log4vendor.h"
 #include "CardIssuerClass.h"
 #include "ACT-Sankyo_DevCtrl.h"
 

+ 66 - 0
DevAdapter/keba/CardIssuer.keba.1.1/CkLog.cpp

@@ -0,0 +1,66 @@
+// CkLog.cpp: implementation of the CkLog class.
+#include "CkLog.h"
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath)
+{
+    if(nullptr == pstrFullPath) return nullptr;
+
+    char* pLastSlash = strrchr(pstrFullPath, '/'); //find last slash
+    if(nullptr == pLastSlash)
+
+        return pstrFullPath;
+    else
+        return pLastSlash + 1;
+}
+
+void* GetPtr(void* pVoid)
+{
+    void* ptrTmp = pVoid;
+    return ptrTmp;
+}
+
+#if defined(CKLOG)
+extern CTraceManager *pLOG;
+#endif
+
+bool CkLog_FuncTracer::m_bCkLogExtendInf = false;
+
+//==> Enter {GetEncryptFunc}, file: {PinPadClassImpl_ZT598M.cpp}, line: {1001}.
+//根据整型变量占空间的大小判断类型
+CkLog_FuncTracer::CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize)
+{
+    m_pszFunc = pszFunc;
+    m_pszFile = pszFile;
+    m_nLine = nLine;
+
+    m_psfRet = nullptr; //INT16
+    m_pifRet = nullptr; //INT32
+    m_plfRet = nullptr; //INT64
+    if(sizeof(short) == iSize)
+        m_psfRet =(short*)pfRet;
+    else if(sizeof(int) == iSize)
+        m_pifRet =(int*)pfRet;
+    else if(sizeof(long) == iSize)
+        m_plfRet =(long*)pfRet;
+
+#if defined(CKLOG)
+    pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "==> Enter {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+
+//<== Leave {DevOpen}, file: {PinPadClassImpl_ZT598M.cpp}, line: {171}.
+CkLog_FuncTracer::~CkLog_FuncTracer()
+{
+#if defined(CKLOG)
+    if(nullptr != m_psfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , short RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_psfRet);
+    else if(nullptr != m_pifRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , int RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_pifRet);
+    else if(nullptr != m_plfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , long RetCode=[%ld].", m_pszFunc, m_pszFile, m_nLine, *m_plfRet);
+    else
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+

+ 334 - 0
DevAdapter/keba/CardIssuer.keba.1.1/CkLog.h

@@ -0,0 +1,334 @@
+// CkLog.h: interface for the CkLog class.
+#ifndef CKLOG_H
+#define CKLOG_H
+
+#define CMBLOG4            //是否使用招行日志库开关
+#define CKLOG              //是否使用公司日志库开关
+
+#include <stdio.h>
+#include <fstream>
+#include <string>
+#include <iostream>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+//#include <thread>
+#include <stdarg.h>
+#include <ctime>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include <sys/prctl.h>
+#include <sys/syscall.h>
+#include "wintypes.h"
+
+
+#if defined(CMBLOG4)
+#include "log4vendor.h"
+#endif
+
+#if defined(CKLOG)
+#include "CommDef.h"
+#include "TraceManager.h"
+#endif
+
+using namespace std;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 字节对齐设置为1 */
+//#pragma pack(push,1)
+#define TRACE_LEN			(MAXWORD / 2)
+
+
+#ifndef __linux__
+#include "windows.h"
+#define GetProcessId()  GetCurrentProcessId()
+#define GetThreadId()  GetCurrentThreadId()
+#else
+#define set_thread_name(name)   prctl(PR_SET_NAME, (char*)name)  //名字的长度最大为15字节,且应该以'\0'结尾  prctl(PR_SET_NAME, (char*)arg);
+#define get_thread_name(name)   prctl(PR_GET_NAME, (unsigned long)name)   //prctl(PR_GET_NAME, (unsigned long)name);
+#define GetProcessId()  getpid()               //或者使用  PID= syscall(__NR_getpid)
+#define GetThreadId()   syscall(__NR_gettid)   //或者使用  TID= syscall(SYS_gettid)
+#endif
+
+
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath);
+void* GetPtr(void* pVoid=nullptr); //获取指针
+
+class CkLog_FuncTracer
+{
+public:
+    static bool m_bCkLogExtendInf;
+
+    CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize);
+    ~CkLog_FuncTracer();
+private:
+        const char* m_pszFunc;
+        const char* m_pszFile;
+        int m_nLine;
+        short* m_psfRet; //INT16
+        int* m_pifRet;   //INT32
+        long* m_plfRet;  //INT64
+};
+
+//declare
+#if defined(CMBLOG4)
+#define CMBLOG4_DECLARE()
+#else
+#define CMBLOG4_DECLARE()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_DECLARE()   \
+        CTraceManager *pLOG;
+#else
+#define CKLOG_DECLARE()
+#endif
+
+//initialize
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT(modName, logPath, fileName) \
+    do {   \
+    std::string err_msg=""; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config config_mod; \
+    config_mod.dev_name = modName; \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    config_mod.log_dir = logPath; \
+    cmb::log4vendor::init(config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT(modName, logPath, fileName)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT_P(modName, logPath, fileName) \
+    do {   \
+    char err_msg[VENDOR_BUFF_SIZE] = { '\0' }; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config_c config_mod; \
+    strcpy(config_mod.dev_name, modName); \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    strcpy(config_mod.log_dir, logPath);    \
+    cmb::log4vendor::initp(&config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT_P(modName, logPath, fileName)
+#endif
+
+
+#if defined(CKLOG)
+#define CKLOG_INIT(modName, logPath, fileName)   \
+        pLOG = new CTraceManager(); \
+        pLOG->Register(fileName);
+#else
+#define CKLOG_INIT(modName, logPath, fileName)
+#endif
+
+//EXTERN
+#if defined(CKLOG)
+#define CKLOG_EXTERN()   \
+        extern CTraceManager *pLOG;
+#else
+#define CKLOG_EXTERN()
+#endif
+
+//记录进出函数 FUNCTION //LOG4VTM_FUNCTION();
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT32(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (int*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT32(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT64(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (long*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT64(RetVar)
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION()  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, nullptr, 0);
+#else
+#define CKLOG_FUNCTION()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION_INT(RetVar)  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, GetPtr(&RetVar), sizeof(RetVar));
+#else
+#define CKLOG_FUNCTION_INT(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define LOG_CMBLOG4(logLevel, ...)  \
+    do {   \
+            int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+            char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+             memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+            int iCkLog_HeadLen = 0;                          \
+            if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+            iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+            snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+            LOG4VTM(logLevel, CkLog_Buf);      \
+    } while (0);
+#else
+#define LOG_CMBLOG4(logLevel, ...)
+#endif
+
+//bool TraceInFormat( int nType, int nLevel, char* lpszTraceData, ... );
+#if defined(CKLOG)
+#define LOG_CKLOG(logLevel, ...)  \
+    do {   \
+        int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+        char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+        memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+        int iCkLog_HeadLen = 0;                          \
+        if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+        iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+        snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+        pLOG->TraceInFormat(TRM_INT, logLevel, "%s", CkLog_Buf);  \
+        } while (0);
+#else
+#define LOG_CKLOG(logLevel, ...)
+#endif
+
+//bool TraceInBuffer( int nType, int nLevel, unsigned char* lpbyTraceData, unsigned int uDataLen, char* lpszMsg = NULL,
+//unsigned int* lpuMaskOffsetArray = NULL, unsigned int* lpuMaskLenArray = NULL, unsigned int uMaskCnt = 0 );
+#if defined(CKLOG)
+#define LOGX_CKLOG(logLevel, pData, Len, ...)  \
+    do {   \
+    int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+    char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+    memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+    int iCkLog_HeadLen = 0;                          \
+    if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+    iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+    snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+    pLOG->TraceInBuffer(TRM_INT, logLevel, (unsigned char*)pData, (unsigned int)Len, CkLog_Buf);  \
+    } while (0);
+#else
+#define LOGX_CKLOG(logLevel, pData, Len, ...)
+#endif
+
+/*
+#define CMB_LOG_TRACE   1
+#define CMB_LOG_DEBUG   2
+#define CMB_LOG_INFO    3
+#define CMB_LOG_WARN    4
+#define CMB_LOG_ERROR   5
+#define CMB_LOG_FATAL   6
+*/
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+
+/*记录日志入口函数 Start*/
+//declare
+#define LOG_DECLARE()   \
+        CMBLOG4_DECLARE() \
+        CKLOG_DECLARE()
+
+//initialize
+#define LOG_INIT(modName, logPath, fileName) \
+    CMBLOG4_INIT(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_INIT_P(modName, logPath, fileName) \
+    CMBLOG4_INIT_P(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_EXTERN() \
+    CKLOG_EXTERN()
+
+//记录进出函数信息
+#define LOG_FUNCTION()  \
+    LOG4VTM_FUNCTION();  \
+    CKLOG_FUNCTION()
+
+//记录进出函数信息 带short返回值
+#define LOG_FUNCTION_INT16(RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带int返回值
+#define LOG_FUNCTION_INT32(RetVar)  \
+    CMBLOG4_FUNCTION_INT32(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带long返回值
+#define LOG_FUNCTION_INT64(RetVar)  \
+    CMBLOG4_FUNCTION_INT64(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+
+#define LogE(...) \
+    do {   \
+    LOG_CMBLOG4(ERROR, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_ERROR, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogW(...) \
+    do {   \
+    LOG_CMBLOG4(WARN, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_WARNG, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogM(...) \
+    do {   \
+    LOG_CMBLOG4(INFO, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_COMMN, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogD(...) \
+    do {   \
+    LOG_CMBLOG4(DEBUG, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_DEBUG, ## __VA_ARGS__);   \
+    } while (0);
+
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+//记录内存数据 HEX 表示
+#define LogXE(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_ERROR, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXW(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_WARNG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXM(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_COMMN, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXD(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_DEBUG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+/*记录日志入口函数 End*/
+
+/*   恢复字节对齐方式   */
+//#pragma pack(pop)
+
+#ifdef __cplusplus
+}       /*extern "C"*/
+#endif
+
+#endif

+ 9 - 21
DevAdapter/keba/CardIssuer.keba.1.1/dllmain.cpp

@@ -1,38 +1,26 @@
 // dllmain.cpp : 定义 DLL 应用程序的入口点。
 #include "stdafx.h"
-#include "log4vendor.h"
+//#include "log4vendor.h"
+#include "CkLog.h"
 
 #define DEVICEBASE_EXPORTS
 
 #include "CardIssuerClassImpl_ACT-Sankyo.h"
-CTraceManager g_Trace;
+//CTraceManager g_Trace;
+ LOG_DECLARE()
+
 DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
 {
-    g_Trace.Register("/data/home/keba/opt/rvc/dbg/CardIssuer/keba-CardIssuer.log");
-    std::string err_msg="";
-    cmb::log4vendor::instance();
-    cmb::log_init_config config_CardIssuer;
-    config_CardIssuer.dev_name =("CardIssuer");
-    config_CardIssuer.log_type = CMB_LOG_TYPE_FILE;
-
-#if defined(_MSC_VER)
-        config_CardIssuer.log_dir = ("C:\\rvc\\dbg\\");
-#else
-        config_CardIssuer.log_dir = ("/data/home/keba/opt/rvc/dbg");
-#endif //_MSC_VER
-
-   cmb::log4vendor::init(config_CardIssuer, err_msg);
-   LOG4VTM(INFO,("config_CardIssuer This message would  be record with illegal dev name!"));
-
-
+    LOG_INIT("CardIssuer", "/home/keba/", "/home/keba/keba-CardIssuer.log");
 	pBaseObj = new CardIssuerClassImpl();
 
 	if (pBaseObj == NULL)
     {
-       g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CreateDevComponent CardIssuerClassImpl failed!");
+       LogM("CreateDevComponent CardIssuerClassImpl failed!");
 		return Error_Resource;
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CreateDevComponent CardIssuerClassImpl scessufull!");
+
+    LogM("CreateDevComponent CardIssuerClassImpl scessufull!");
 	return Error_Succeed;
 }
 DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)

+ 3 - 1
DevAdapter/keba/CardIssuer.keba.1.1/stdafx.h

@@ -14,5 +14,7 @@
 #include <list>
 #include <vector>
 #include <deque>
-#include "TraceManager.h"
+//#include "TraceManager.h"
+#include "CkLog.h"
+
 #include "CommDef.h"

+ 66 - 0
DevAdapter/keba/FingerPrint.keba.1.1/CkLog.cpp

@@ -0,0 +1,66 @@
+// CkLog.cpp: implementation of the CkLog class.
+#include "CkLog.h"
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath)
+{
+    if(nullptr == pstrFullPath) return nullptr;
+
+    char* pLastSlash = strrchr(pstrFullPath, '/'); //find last slash
+    if(nullptr == pLastSlash)
+
+        return pstrFullPath;
+    else
+        return pLastSlash + 1;
+}
+
+void* GetPtr(void* pVoid)
+{
+    void* ptrTmp = pVoid;
+    return ptrTmp;
+}
+
+#if defined(CKLOG)
+extern CTraceManager *pLOG;
+#endif
+
+bool CkLog_FuncTracer::m_bCkLogExtendInf = false;
+
+//==> Enter {GetEncryptFunc}, file: {PinPadClassImpl_ZT598M.cpp}, line: {1001}.
+//根据整型变量占空间的大小判断类型
+CkLog_FuncTracer::CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize)
+{
+    m_pszFunc = pszFunc;
+    m_pszFile = pszFile;
+    m_nLine = nLine;
+
+    m_psfRet = nullptr; //INT16
+    m_pifRet = nullptr; //INT32
+    m_plfRet = nullptr; //INT64
+    if(sizeof(short) == iSize)
+        m_psfRet =(short*)pfRet;
+    else if(sizeof(int) == iSize)
+        m_pifRet =(int*)pfRet;
+    else if(sizeof(long) == iSize)
+        m_plfRet =(long*)pfRet;
+
+#if defined(CKLOG)
+    pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "==> Enter {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+
+//<== Leave {DevOpen}, file: {PinPadClassImpl_ZT598M.cpp}, line: {171}.
+CkLog_FuncTracer::~CkLog_FuncTracer()
+{
+#if defined(CKLOG)
+    if(nullptr != m_psfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , short RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_psfRet);
+    else if(nullptr != m_pifRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , int RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_pifRet);
+    else if(nullptr != m_plfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , long RetCode=[%ld].", m_pszFunc, m_pszFile, m_nLine, *m_plfRet);
+    else
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+

+ 334 - 0
DevAdapter/keba/FingerPrint.keba.1.1/CkLog.h

@@ -0,0 +1,334 @@
+// CkLog.h: interface for the CkLog class.
+#ifndef CKLOG_H
+#define CKLOG_H
+
+#define CMBLOG4            //是否使用招行日志库开关
+#define CKLOG              //是否使用公司日志库开关
+
+#include <stdio.h>
+#include <fstream>
+#include <string>
+#include <iostream>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+//#include <thread>
+#include <stdarg.h>
+#include <ctime>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include <sys/prctl.h>
+#include <sys/syscall.h>
+#include "wintypes.h"
+
+
+#if defined(CMBLOG4)
+#include "log4vendor.h"
+#endif
+
+#if defined(CKLOG)
+#include "CommDef.h"
+#include "TraceManager.h"
+#endif
+
+using namespace std;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 字节对齐设置为1 */
+//#pragma pack(push,1)
+#define TRACE_LEN			(MAXWORD / 2)
+
+
+#ifndef __linux__
+#include "windows.h"
+#define GetProcessId()  GetCurrentProcessId()
+#define GetThreadId()  GetCurrentThreadId()
+#else
+#define set_thread_name(name)   prctl(PR_SET_NAME, (char*)name)  //名字的长度最大为15字节,且应该以'\0'结尾  prctl(PR_SET_NAME, (char*)arg);
+#define get_thread_name(name)   prctl(PR_GET_NAME, (unsigned long)name)   //prctl(PR_GET_NAME, (unsigned long)name);
+#define GetProcessId()  getpid()               //或者使用  PID= syscall(__NR_getpid)
+#define GetThreadId()   syscall(__NR_gettid)   //或者使用  TID= syscall(SYS_gettid)
+#endif
+
+
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath);
+void* GetPtr(void* pVoid=nullptr); //获取指针
+
+class CkLog_FuncTracer
+{
+public:
+    static bool m_bCkLogExtendInf;
+
+    CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize);
+    ~CkLog_FuncTracer();
+private:
+        const char* m_pszFunc;
+        const char* m_pszFile;
+        int m_nLine;
+        short* m_psfRet; //INT16
+        int* m_pifRet;   //INT32
+        long* m_plfRet;  //INT64
+};
+
+//declare
+#if defined(CMBLOG4)
+#define CMBLOG4_DECLARE()
+#else
+#define CMBLOG4_DECLARE()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_DECLARE()   \
+        CTraceManager *pLOG;
+#else
+#define CKLOG_DECLARE()
+#endif
+
+//initialize
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT(modName, logPath, fileName) \
+    do {   \
+    std::string err_msg=""; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config config_mod; \
+    config_mod.dev_name = modName; \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    config_mod.log_dir = logPath; \
+    cmb::log4vendor::init(config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT(modName, logPath, fileName)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT_P(modName, logPath, fileName) \
+    do {   \
+    char err_msg[VENDOR_BUFF_SIZE] = { '\0' }; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config_c config_mod; \
+    strcpy(config_mod.dev_name, modName); \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    strcpy(config_mod.log_dir, logPath);    \
+    cmb::log4vendor::initp(&config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT_P(modName, logPath, fileName)
+#endif
+
+
+#if defined(CKLOG)
+#define CKLOG_INIT(modName, logPath, fileName)   \
+        pLOG = new CTraceManager(); \
+        pLOG->Register(fileName);
+#else
+#define CKLOG_INIT(modName, logPath, fileName)
+#endif
+
+//EXTERN
+#if defined(CKLOG)
+#define CKLOG_EXTERN()   \
+        extern CTraceManager *pLOG;
+#else
+#define CKLOG_EXTERN()
+#endif
+
+//记录进出函数 FUNCTION //LOG4VTM_FUNCTION();
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT32(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (int*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT32(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT64(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (long*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT64(RetVar)
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION()  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, nullptr, 0);
+#else
+#define CKLOG_FUNCTION()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION_INT(RetVar)  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, GetPtr(&RetVar), sizeof(RetVar));
+#else
+#define CKLOG_FUNCTION_INT(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define LOG_CMBLOG4(logLevel, ...)  \
+    do {   \
+            int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+            char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+             memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+            int iCkLog_HeadLen = 0;                          \
+            if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+            iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+            snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+            LOG4VTM(logLevel, CkLog_Buf);      \
+    } while (0);
+#else
+#define LOG_CMBLOG4(logLevel, ...)
+#endif
+
+//bool TraceInFormat( int nType, int nLevel, char* lpszTraceData, ... );
+#if defined(CKLOG)
+#define LOG_CKLOG(logLevel, ...)  \
+    do {   \
+        int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+        char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+        memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+        int iCkLog_HeadLen = 0;                          \
+        if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+        iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+        snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+        pLOG->TraceInFormat(TRM_INT, logLevel, "%s", CkLog_Buf);  \
+        } while (0);
+#else
+#define LOG_CKLOG(logLevel, ...)
+#endif
+
+//bool TraceInBuffer( int nType, int nLevel, unsigned char* lpbyTraceData, unsigned int uDataLen, char* lpszMsg = NULL,
+//unsigned int* lpuMaskOffsetArray = NULL, unsigned int* lpuMaskLenArray = NULL, unsigned int uMaskCnt = 0 );
+#if defined(CKLOG)
+#define LOGX_CKLOG(logLevel, pData, Len, ...)  \
+    do {   \
+    int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+    char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+    memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+    int iCkLog_HeadLen = 0;                          \
+    if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+    iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+    snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+    pLOG->TraceInBuffer(TRM_INT, logLevel, (unsigned char*)pData, (unsigned int)Len, CkLog_Buf);  \
+    } while (0);
+#else
+#define LOGX_CKLOG(logLevel, pData, Len, ...)
+#endif
+
+/*
+#define CMB_LOG_TRACE   1
+#define CMB_LOG_DEBUG   2
+#define CMB_LOG_INFO    3
+#define CMB_LOG_WARN    4
+#define CMB_LOG_ERROR   5
+#define CMB_LOG_FATAL   6
+*/
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+
+/*记录日志入口函数 Start*/
+//declare
+#define LOG_DECLARE()   \
+        CMBLOG4_DECLARE() \
+        CKLOG_DECLARE()
+
+//initialize
+#define LOG_INIT(modName, logPath, fileName) \
+    CMBLOG4_INIT(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_INIT_P(modName, logPath, fileName) \
+    CMBLOG4_INIT_P(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_EXTERN() \
+    CKLOG_EXTERN()
+
+//记录进出函数信息
+#define LOG_FUNCTION()  \
+    LOG4VTM_FUNCTION();  \
+    CKLOG_FUNCTION()
+
+//记录进出函数信息 带short返回值
+#define LOG_FUNCTION_INT16(RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带int返回值
+#define LOG_FUNCTION_INT32(RetVar)  \
+    CMBLOG4_FUNCTION_INT32(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带long返回值
+#define LOG_FUNCTION_INT64(RetVar)  \
+    CMBLOG4_FUNCTION_INT64(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+
+#define LogE(...) \
+    do {   \
+    LOG_CMBLOG4(ERROR, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_ERROR, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogW(...) \
+    do {   \
+    LOG_CMBLOG4(WARN, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_WARNG, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogM(...) \
+    do {   \
+    LOG_CMBLOG4(INFO, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_COMMN, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogD(...) \
+    do {   \
+    LOG_CMBLOG4(DEBUG, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_DEBUG, ## __VA_ARGS__);   \
+    } while (0);
+
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+//记录内存数据 HEX 表示
+#define LogXE(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_ERROR, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXW(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_WARNG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXM(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_COMMN, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXD(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_DEBUG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+/*记录日志入口函数 End*/
+
+/*   恢复字节对齐方式   */
+//#pragma pack(pop)
+
+#ifdef __cplusplus
+}       /*extern "C"*/
+#endif
+
+#endif

+ 3 - 2
DevAdapter/keba/FingerPrint.keba.1.1/JZT998APBDevCtrl.h

@@ -61,10 +61,11 @@ class CDevDllLoad
 public:
     CDevDllLoad(char * dllpath);
     virtual ~CDevDllLoad();
-private:
-
+public:
     int InitDLL();
     int FreeDLL();
+
+private:
     char m_dllpath[MAX_PATH];
     void *dp_dev=nullptr;
 

+ 37 - 0
DevAdapter/keba/FingerPrint.keba.1.1/dllmain.cpp

@@ -0,0 +1,37 @@
+// dllmain.cpp : 定义 DLL 应用程序的入口点。
+#include "stdafx.h"
+#include "CkLog.h"
+#include "fingerprint.h"
+
+LOG_DECLARE()
+ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
+{
+    LOG_INIT("FingerPrint", "/home/keba/", "/home/keba/keba-FingerPrint.log");
+    pBaseObj = new FingerPrintClassImpl();
+
+    if (pBaseObj == nullptr)
+    {
+        LogM("CreateDevComponent FingerPrintImpl failed!");
+        return Error_Resource;
+    }
+    LogM("CreateDevComponent FingerPrintImpl scessufull!");
+    return Error_Succeed;
+}
+
+ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
+{
+    LogM("Entry->FingerPrint ReleaseDevComponent!");
+    if (pBaseObj == nullptr)
+        return Error_Param;
+    //FingerPrintClassImpl* pTmp = new  FingerPrintClassImpl();
+    FingerPrintClassImpl* pTmp=nullptr;
+    pTmp = static_cast<FingerPrintClassImpl*>(pBaseObj);
+    delete  pTmp;
+    pTmp = nullptr;
+    pBaseObj = nullptr;
+    LogM("Entry->FingerPrint ReleaseDevComponent!");
+    return Error_Succeed;
+}
+
+
+

+ 74 - 206
DevAdapter/keba/FingerPrint.keba.1.1/fingerprint.cpp

@@ -1,11 +1,12 @@
 #include "fingerprint.h"
+#include "CkLog.h"
 
-
-CTraceManager g_Trace;
-
+//CTraceManager g_Trace;
+LOG_EXTERN()
 //获取当前模块所在路径
 void GetModulePath(char* lpStrPath)
 {
+   LOG_FUNCTION();
    char szBuff[MAX_PATH];
    Dl_info path_info;
    std::string strLog = "";
@@ -15,8 +16,6 @@ void GetModulePath(char* lpStrPath)
    int iRet = dladdr((const void*)GetModulePath, &path_info);
    if(!iRet)
    {
-//       strLog = "GetModulePath(), Failed!";
-//       LOG4VTM(INFO, strLog);
        return;
    }
    else
@@ -28,63 +27,11 @@ void GetModulePath(char* lpStrPath)
 
        strcat(szBuff, "/"); //
 
-       if(nullptr != lpStrPath) strcpy(lpStrPath, szBuff);
-
-//       std::string strTmp = szBuff;
-//       strLog = "GetModulePath(),path=[" + strTmp + "]";
-//       LOG4VTM(INFO, strLog);
+       if(nullptr != lpStrPath)
+           strcpy(lpStrPath, szBuff);
    }
 }
 
-ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    g_Trace.Register("/data/home/keba/opt/rvc/dbg/Fngerprint/keba-fingerprint.log");
-    std::string err_msg="";
-    cmb::log4vendor::instance();
-    cmb::log_init_config config_FingerPrint;
-    config_FingerPrint.dev_name =("FingerPrint");
-    config_FingerPrint.log_type = CMB_LOG_TYPE_FILE;
-
-#if defined(_MSC_VER)
-        config_FingerPrint.log_dir = ("C:\\rvc\\dbg\\");
-#else
-        config_FingerPrint.log_dir = ("/data/home/keba/opt/rvc/dbg");
-#endif //_MSC_VER
-
-    cmb::log4vendor::init(config_FingerPrint, err_msg);
-    LOG4VTM(INFO,("Entry->FingerPrint CreateDevComponent!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Entry->FingerPrint CreateDevComponent!");
-    pBaseObj = new FingerPrintClassImpl();
-
-    if (pBaseObj == nullptr)
-    {
-       LOG4VTM(INFO,("FingerPrint CreateDevComponent failed!"));
-       g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CreateDevComponent FingerPrintImpl failed!");
-       return Error_Resource;
-    }
-     g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CreateDevComponent FingerPrintImpl scessufull!");
-    LOG4VTM(INFO,("FingerPrint CreateDevComponent sucessfull!"));
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    LOG4VTM(INFO,("Entry->FingerPrint ReleaseDevComponent!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Entry->FingerPrint ReleaseDevComponent!");
-    if (pBaseObj == nullptr)
-        return Error_Param;
-    //FingerPrintClassImpl* pTmp = new  FingerPrintClassImpl();
-    FingerPrintClassImpl* pTmp=nullptr;
-    pTmp = static_cast<FingerPrintClassImpl*>(pBaseObj);
-    delete  pTmp;
-    pTmp = nullptr;
-    pBaseObj = nullptr;
-    LOG4VTM(INFO,("FingerPrint ReleaseDevComponent sucessfull!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrint ReleaseDevComponent sucessfull!");
-    return Error_Succeed;
-}
-
-
 FingerPrintClassImpl::FingerPrintClassImpl():
      m_pDll(nullptr)
    ,m_bDevOpen(false)
@@ -93,25 +40,19 @@ FingerPrintClassImpl::FingerPrintClassImpl():
    ,m_strDllPath("")
 
 {
-
+    LOG_FUNCTION();
     memset(m_strModulePath, 0x00, sizeof(m_strModulePath));
     GetModulePath(m_strModulePath); //获取so所在路径
 
     m_strIniPath = m_strModulePath;
     m_strIniPath += "CK-VTM-E1000.INI";
-
-    //--------------------------------------------------------------------
-    //直接写死了,上边没用了
-    //m_strIniPath = "C:\\VTM-E1000\\CK-VTM-E1000.INI";
-
     m_strDllPath = m_strModulePath;
-    //记日志
 }
 
+
 FingerPrintClassImpl::~FingerPrintClassImpl()
 {
-
-    //g_pLog->TraceMessage(__FILE__, __LINE__, __FUNCTION__);
+    LOG_FUNCTION();
     DevClose();
     if(m_pDll != nullptr)
     {
@@ -122,8 +63,8 @@ FingerPrintClassImpl::~FingerPrintClassImpl()
 
 ErrorCodeEnum FingerPrintClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
-    LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint GetDevCategory()!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint GetDevCategory()!");
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint GetDevCategory()!");
     int iRet = 0;
     char szDevInfo[128] = {0};
     char sID[1024] = {0};
@@ -144,10 +85,9 @@ ErrorCodeEnum FingerPrintClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
         SaveErrorInfo(iRet);
     }
     memcpy(devCategory.szVendor, "keba", strlen("keba"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"devCategory.szType = %s",devCategory.szType);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"devCategory.szVendor = %s",devCategory.szVendor);
-    LOG4VTM(INFO,("FingerPrintClassImpl::Leave->FingerPrint GetDevCategory() sucessfull!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint GetDevCategory() sucessfull!");
+    LogM("devCategory.szType = %s",devCategory.szType);
+    LogM("devCategory.szVendor = %s",devCategory.szVendor);
+    LogM("FingerPrintClassImpl::Leave->FingerPrint GetDevCategory() sucessfull!");
     return Error_Succeed;
 }
 
@@ -156,12 +96,10 @@ ErrorCodeEnum FingerPrintClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 //	the normal condition.
 ErrorCodeEnum FingerPrintClassImpl::Reset()
 {
-    //记日志
-    LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint Reset()!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint Reset()!");
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint Reset()!");
     DevClose();
-    LOG4VTM(INFO,("FingerPrintClassImpl::Leave->FingerPrint Reset() sucessfull!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint Reset() sucessfull!");
+    LogM("FingerPrintClassImpl::Leave->FingerPrint Reset() sucessfull!");
     return DevOpen(0, 0);
 }
 
@@ -171,18 +109,17 @@ ErrorCodeEnum FingerPrintClassImpl::Reset()
 ErrorCodeEnum FingerPrintClassImpl::DevClose()
 {
     //记日志
-    LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint DevClose()!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint DevClose()!");
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint DevClose()!");
     if(!m_bDevOpen)
     {
         return Error_Succeed;
     }
     //CLOSEDEV();
-    //m_pDll->FreeDLL();
+    m_pDll->FPIDeviceClose();
+    m_pDll->FreeDLL();
     m_bDevOpen = false;
-    //记日志
-    LOG4VTM(INFO,("FingerPrintClassImpl::Leave->FingerPrint DevClose() sucessfull!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint DevClose() sucessfull!");
+    LogM("FingerPrintClassImpl::Leave->FingerPrint DevClose() sucessfull!");
     return Error_Succeed;
 }
 //	Get last error the device issued.
@@ -190,25 +127,20 @@ ErrorCodeEnum FingerPrintClassImpl::DevClose()
 //	code and anything in favour of location problem.
 ErrorCodeEnum FingerPrintClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
-    //记日志
-    LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint GetLastErr()!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint GetLastErr()!");
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint GetLastErr()!");
     devErrInfo.dwErrMsgLen = DWORD(strlen(m_szErrMsg));
     memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
-    memcpy(devErrInfo.szErrMsg, m_szErrMsg, min(devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"devErrInfo.szErrMsg = %s",devErrInfo.szErrMsg);
-    LOG4VTM(INFO,("FingerPrintClassImpl::Leave->FingerPrint GetLastErr() sucessfull!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint GetLastErr() sucessfull!");
+    memcpy(devErrInfo.szErrMsg, m_szErrMsg, std::min((int)devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
+    LogM("devErrInfo.szErrMsg = %s",devErrInfo.szErrMsg);
+    LogM("FingerPrintClassImpl::Leave->FingerPrint GetLastErr() sucessfull!");
     return Error_Succeed;
 }
 
 ErrorCodeEnum FingerPrintClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 {
-//    Q_UNUSED(dwPort);
-//    Q_UNUSED(dwBaudRate);
-    //记日志
-    LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint DevOpen()!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint DevOpen()!");
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint DevOpen()!");
     int  iRet;
     CHAR strDllPath[256] = {0};
     char sDevInfo[64+1] = {0};
@@ -218,9 +150,7 @@ ErrorCodeEnum FingerPrintClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
     m_pDll = new CDevDllLoad(strDllPath);
     if (nullptr == m_pDll)
     {
-        //记日志
-        LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint DevOpen() new object CDevDllLoad failed!"));
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint DevOpen() new object CDevDllLoad failed!");
+        LogM("FingerPrintClassImpl::Entry->FingerPrint DevOpen() new object CDevDllLoad failed!");
         SaveErrorInfo("对象创建失败", DEC_DEV_OBJECT_CREATE_FAILED);
         return Error_DevNotAvailable;
     }
@@ -228,43 +158,42 @@ ErrorCodeEnum FingerPrintClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
     //记日志
     if(iRet != 1)
     {
-        LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint DevOpen()->m_pDll->FPIDeviceInit() failed!"));
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint DevOpen()->m_pDll->FPIDeviceInit() failed! <=> iRet = %d",iRet);
+        LogM("FingerPrintClassImpl::Entry->FingerPrint DevOpen()->m_pDll->FPIDeviceInit() failed! <=> iRet = %d",iRet);
         m_bDevOpen = false;
         return Error_DevNotAvailable;
-        //记日志
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint DevOpen()->m_pDll->FPIDeviceInit() success! <=> iRet = %d",iRet);
+    LogM("FingerPrintClassImpl::Entry->FingerPrint DevOpen()->m_pDll->FPIDeviceInit() success! <=> iRet = %d",iRet);
     m_bDevOpen = true;
     memset(sDevInfo, 0, sizeof(sDevInfo));
     memset(sID, 0, sizeof(sID));
     iRet = m_pDll->FPIGetVersion(sDevInfo,sID);
     if (iRet == 1)
     {
-        //记日志
-        LOG4VTM(INFO,("FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->FPIGetVersion sucessfull!"));
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->FPIGetVersion sucessfull!");
+        LogM("FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->FPIGetVersion sucessfull!");
     }
     return Error_Succeed;
 }
 void FingerPrintClassImpl::SaveErrorInfo(CHAR* errMsg, int errCode)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint SaveErrorInfo(CHAR* errMsg, int errCode)! <=> errMsg = %s errCode = %d",errMsg,errCode);
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint SaveErrorInfo(CHAR* errMsg, int errCode)! <=> errMsg = %s errCode = %d",errMsg,errCode);
     memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
     snprintf(m_szErrMsg, sizeof (m_szErrMsg),"%s[%d]", errMsg, errCode);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->SaveErrorInfo(CHAR* errMsg, int errCode) sucessfull!");
+    LogM("FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->SaveErrorInfo(CHAR* errMsg, int errCode) sucessfull!");
 }
 
 void FingerPrintClassImpl::SaveErrorInfo(DevErrorInfo devErrorInfo)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint SaveErrorInfo(DevErrorInfo devErrorInfo)! <=> devErrorInfo.szErrMsg = %s",devErrorInfo.szErrMsg);
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint SaveErrorInfo(DevErrorInfo devErrorInfo)! <=> devErrorInfo.szErrMsg = %s",devErrorInfo.szErrMsg);
     memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
     snprintf(m_szErrMsg,sizeof(m_szErrMsg), "%s",devErrorInfo.szErrMsg);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->SaveErrorInfo(DevErrorInfo devErrorInfo) sucessfull!");
+    LogM("FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->SaveErrorInfo(DevErrorInfo devErrorInfo) sucessfull!");
 }
 void FingerPrintClassImpl::SaveErrorInfo(int nErrorCode)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint SaveErrorInfo(int nErrorCode)! <=> nErrorCode = %d",nErrorCode);
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint SaveErrorInfo(int nErrorCode)! <=> nErrorCode = %d",nErrorCode);
     switch (nErrorCode)
     {
     case FP_ERROR_SUCCESS:
@@ -384,15 +313,14 @@ void FingerPrintClassImpl::SaveErrorInfo(int nErrorCode)
         snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",nErrorCode, "其它未定义的错误");
         break;
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->SaveErrorInfo(int nErrorCode) sucessfull!");
+    LogM("FingerPrintClassImpl::Leave->FingerPrint DevOpen()->m_pDll->SaveErrorInfo(int nErrorCode) sucessfull!");
 }
 
 
 ErrorCodeEnum FingerPrintClassImpl::ScanFingerAndSaveImage(const char* imageName)
 {
-    //记日志
-    LOG4VTM(INFO,("FingerPrintClassImpl::Entry->FingerPrint ScanFingerAndSaveImage()!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::Entry->FingerPrint ScanFingerAndSaveImage(const char* imageName)! <=>imageName = %s",imageName);
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::Entry->FingerPrint ScanFingerAndSaveImage(const char* imageName)! <=>imageName = %s",imageName);
     int iRet =0;
     if( !m_bDevOpen )
     {
@@ -404,12 +332,10 @@ ErrorCodeEnum FingerPrintClassImpl::ScanFingerAndSaveImage(const char* imageName
     if(iRet != FP_ERROR_SUCCESS)
     {
         SaveErrorInfo(iRet);
-        LOG4VTM(INFO,("FingerPrintClassImpl::entry->FingerPrint ScanFingerAndSaveImage()->m_pDll->FPIImg2Bmp failed!"));
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::entry->FingerPrint ScanFingerAndSaveImage()->m_pDll->FPIImg2Bmp failed!");
+        LogM("FingerPrintClassImpl::entry->FingerPrint ScanFingerAndSaveImage()->m_pDll->FPIImg2Bmp failed!");
         return Error_DevMedia;
     }
-    LOG4VTM(INFO,("FingerPrintClassImpl::leave->FingerPrint ScanFingerAndSaveImage() sucessfull!"));
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::leave->FingerPrint ScanFingerAndSaveImage() sucessfull!");
+    LogM("FingerPrintClassImpl::leave->FingerPrint ScanFingerAndSaveImage() sucessfull!");
     return Error_Succeed;
 }
 
@@ -418,39 +344,33 @@ ErrorCodeEnum FingerPrintClassImpl::ScanFingerAndSaveImage(const char* imageName
 //Compute features
 ErrorCodeEnum FingerPrintClassImpl::Image2Feature(const char* imagePath, LPBYTE lpbFeature, int &iLength)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"招行传递的图片PATH=%s",imagePath);
-    //记日志
-    LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Image2Feature()");
-
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::entry FingerPrint->Image2Feature()");
     int iRet =0;
     CHAR strImgPath[256] = {0};
     snprintf(strImgPath, sizeof(strImgPath), "%s%s", m_strModulePath, imagePath); //拼装图片路径
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"自己改造好的PATH=%s",strImgPath);
-
+    LogM("自己改造好的PATH=%s",strImgPath);
     if( !m_bDevOpen )
     {
         SaveErrorInfo("Image2Feature()->Dev is not open",Error_DevNotAvailable );
-        //记日志
-        LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Image2Feature()->Dev is not open");
+        LogM("FingerPrintClassImpl::entry FingerPrint->Image2Feature()->Dev is not open");
         return Error_DevNotAvailable;
     }
     if(Error_Succeed != ScanFingerAndSaveImage(strImgPath))
     {
-        LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Image2Feature()->ScanFingerAndSaveImage() failed");
+        LogM("FingerPrintClassImpl::entry FingerPrint->Image2Feature()->ScanFingerAndSaveImage() failed");
         return Error_DevMedia;
     }
     iRet = m_pDll->FPIBmp2Feature(const_cast<char*>(strImgPath), (char*)lpbFeature, &iLength);
     if(iRet != FP_ERROR_SUCCESS)
     {
         LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Image2Feature()->m_pDll->FPIBmp2Feature failed");
+        LogM("FingerPrintClassImpl::entry FingerPrint->Image2Feature()->m_pDll->FPIBmp2Feature failed");
         SaveErrorInfo(iRet);
         return Error_DevMedia;
     }
-    //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"特征值=%s  ",lpbFeature);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"特征值长度=%d ",iLength);
-    //int iFileExist = access(strImgPath, 0 );
-    //记日志
-    LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Image2Feature() scessfull");
+    LogM("特征值长度=%d ",iLength);
+    LogM("FingerPrintClassImpl::leave FingerPrint->Image2Feature() scessfull");
     return Error_Succeed;
 }
 
@@ -458,24 +378,15 @@ ErrorCodeEnum FingerPrintClassImpl::Image2Feature(const char* imagePath, LPBYTE
 //Convert image to template
 ErrorCodeEnum FingerPrintClassImpl::Image2Template(const char* imagePath1, const char* imagePath2, const char* imagePath3, LPBYTE lpbTemplate, int &iLength)
 {
-    //记日志
-    LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Image2Template()");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::entry FingerPrint->Image2Template()");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"招行传递的图片PATH1=%s ",imagePath1);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"招行传递的图片PATH2=%s ",imagePath2);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"招行传递的图片PATH3=%s ",imagePath3);
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::entry FingerPrint->Image2Template()");
+    LogM("招行传递的图片PATH1=%s ",imagePath1);
+    LogM("招行传递的图片PATH2=%s ",imagePath2);
+    LogM("招行传递的图片PATH3=%s ",imagePath3);
     int iRet =0;
     CHAR strImgPath1[256] = {0};
     CHAR strImgPath2[256] = {0};
     CHAR strImgPath3[256] = {0};
-//    GetDllPathLocal(m_strDllPath);
-//    strncat(strImgPath1, m_strDllPath.c_str(),strlen(m_strDllPath.c_str()));
-//    strncat(strImgPath1, imagePath1,strlen(imagePath1));
-//    strncat(strImgPath2, m_strDllPath.c_str(),strlen(m_strDllPath.c_str()));
-//    strncat(strImgPath2, imagePath2,strlen(imagePath2));
-//    strncat(strImgPath3, m_strDllPath.c_str(),strlen(m_strDllPath.c_str()));
-//    strncat(strImgPath3, imagePath3,strlen(imagePath3));
-
     memcpy(strImgPath1,imagePath1,strlen(imagePath1));
     memcpy(strImgPath2,imagePath2,strlen(imagePath2));
     memcpy(strImgPath3,imagePath3,strlen(imagePath3));
@@ -492,32 +403,29 @@ ErrorCodeEnum FingerPrintClassImpl::Image2Template(const char* imagePath1, const
         LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Image2Template() failed ");
         return Error_DevMedia;
     }
-    LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Image2Template() scessfull!");
-    //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"模板值=%s  ",lpbTemplate);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"模板值长度=%d ",iLength);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::leave FingerPrint->Image2Template() scessfull!");
+    LogM("FingerPrintClassImpl::leave FingerPrint->Image2Template() scessfull!");
+    LogM("模板值长度=%d ",iLength);
+    LogM("FingerPrintClassImpl::leave FingerPrint->Image2Template() scessfull!");
     return Error_Succeed;
 }
 
 ErrorCodeEnum FingerPrintClassImpl::Match(LPBYTE lpbTemplate[], int iTemplateLen[] ,int templateNum, LPBYTE lbpFeature, int &iFeatureLen ,int level)
 {
-    //Q_UNUSED(iFeatureLen);
-   LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Match()");
-   g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::entry FingerPrint->Match()");
-   g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"模板数组的个数=%d ",templateNum);
-   g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"特征值长度=%d ",iFeatureLen);
+   LOG_FUNCTION();
+   LogM("FingerPrintClassImpl::entry FingerPrint->Match()");
+   LogM("模板数组的个数=%d ",templateNum);
+   LogM("特征值长度=%d ",iFeatureLen);
    int iRet =0;
    if( !m_bDevOpen )
    {
        SaveErrorInfo("Match()->Dev is not open",Error_DevNotAvailable );
-       LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Match() failed");
-       g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::leave FingerPrint->Match() failed");
+       LogM("FingerPrintClassImpl::leave FingerPrint->Match() failed");
        return Error_DevNotAvailable;
    }
 
    for(int i=0; i<templateNum;i=i+1)
    {
-       g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"当前模板[%d]的长度=%d ",i,iTemplateLen[i]);
+       LogM("当前模板[%d]的长度=%d ",i,iTemplateLen[i]);
        iRet = m_pDll->FPIMatch((char*)(lpbTemplate[i]), (char*)(lbpFeature), level);
        if (iRet == FP_ERROR_SUCCESS)
        {
@@ -526,18 +434,18 @@ ErrorCodeEnum FingerPrintClassImpl::Match(LPBYTE lpbTemplate[], int iTemplateLen
        else
        {
            iTemplateLen[i]=0;
-       }
-       g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"与每个模板匹配的结果iTemplateLen[%d] = %d",i,iTemplateLen[i]);
+       }      
+       LogM("与每个模板匹配的结果iTemplateLen[%d] = %d",i,iTemplateLen[i]);
    }
-   LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Match() scessfull");
+   LogM("FingerPrintClassImpl::leave FingerPrint->Match() scessfull");
    return Error_Succeed;
 }
 
 //取消采集指纹图片
 ErrorCodeEnum FingerPrintClassImpl::Cancel()
 {
-    LOG4VTM(INFO,"FingerPrintClassImpl::entry FingerPrint->Cancel()!");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::entry FingerPrint->Cancel()!");
+    LOG_FUNCTION();
+    LogM("FingerPrintClassImpl::entry FingerPrint->Cancel()!");
     int iRet =0;
     if( !m_bDevOpen )
     {
@@ -552,46 +460,6 @@ ErrorCodeEnum FingerPrintClassImpl::Cancel()
         LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Cancel() failed");
         return Error_DevMedia;
     }
-    LOG4VTM(INFO,"FingerPrintClassImpl::leave FingerPrint->Cancel() scessfull");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"FingerPrintClassImpl::leave FingerPrint->Cancel() scessfull");
+    LogM("FingerPrintClassImpl::leave FingerPrint->Cancel() scessfull");
     return Error_Succeed;
 }
-/*
-int FingerPrintClassImpl::string_format(std::string &str, const std::string fmt, ...)
-{
-    char *buf;
-    va_list ap;
-
-    va_start(ap, fmt);
-    int len = _vsprintf_p (fmt.c_str(), ap) + 1;
-    buf = static_cast<char*>( malloc (len * sizeof (char)));
-    if (!buf)
-    {
-        return -1;
-    }
-    memset(buf, 0, len);
-    int nRet = _vsprintf_p (buf, len, fmt.c_str(), ap);
-    va_end(ap);
-
-    str = std::string(buf);
-    free(buf);
-
-    return nRet;
-}
-*/
-
-//int FingerPrintClassImpl::GetDllPathLocal(std::string &dllPath)
-//{
-//   char szBuff[MAX_PATH];
-//   char * pathRtn = getcwd(szBuff,sizeof (szBuff));
-//   if(pathRtn == nullptr)
-//   {
-//       dllPath = "";
-//       return Error_Null;
-//   }
-//   dllPath = szBuff;
-//   dllPath+="/";
-//   return Error_Succeed;
-
-
-//}

+ 4 - 4
DevAdapter/keba/FingerPrint.keba.1.1/fingerprint.h

@@ -6,14 +6,14 @@
 #include "FingerPrintClass.h"
 #include "JZT998APBDevCtrl.h"
 #include "log4vendor.h"
-
+#include <algorithm>
 
 #define FINGERPRINT_ADAPTER_MUTEX
 #pragma commen"FingerPrintAdapterMutex"
 
-#ifndef min
-#define min(a,b)            (((a) < (b)) ? (a) : (b))
-#endif
+//#ifndef min
+//#define min(a,b)            (((a) < (b)) ? (a) : (b))
+//#endif
 
 enum COMMFUNC_RLT : int
 {

+ 66 - 0
DevAdapter/keba/IDCertificate.keba.1.1/CkLog.cpp

@@ -0,0 +1,66 @@
+// CkLog.cpp: implementation of the CkLog class.
+#include "CkLog.h"
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath)
+{
+    if(nullptr == pstrFullPath) return nullptr;
+
+    char* pLastSlash = strrchr(pstrFullPath, '/'); //find last slash
+    if(nullptr == pLastSlash)
+
+        return pstrFullPath;
+    else
+        return pLastSlash + 1;
+}
+
+void* GetPtr(void* pVoid)
+{
+    void* ptrTmp = pVoid;
+    return ptrTmp;
+}
+
+#if defined(CKLOG)
+extern CTraceManager *pLOG;
+#endif
+
+bool CkLog_FuncTracer::m_bCkLogExtendInf = false;
+
+//==> Enter {GetEncryptFunc}, file: {PinPadClassImpl_ZT598M.cpp}, line: {1001}.
+//根据整型变量占空间的大小判断类型
+CkLog_FuncTracer::CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize)
+{
+    m_pszFunc = pszFunc;
+    m_pszFile = pszFile;
+    m_nLine = nLine;
+
+    m_psfRet = nullptr; //INT16
+    m_pifRet = nullptr; //INT32
+    m_plfRet = nullptr; //INT64
+    if(sizeof(short) == iSize)
+        m_psfRet =(short*)pfRet;
+    else if(sizeof(int) == iSize)
+        m_pifRet =(int*)pfRet;
+    else if(sizeof(long) == iSize)
+        m_plfRet =(long*)pfRet;
+
+#if defined(CKLOG)
+    pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "==> Enter {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+
+//<== Leave {DevOpen}, file: {PinPadClassImpl_ZT598M.cpp}, line: {171}.
+CkLog_FuncTracer::~CkLog_FuncTracer()
+{
+#if defined(CKLOG)
+    if(nullptr != m_psfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , short RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_psfRet);
+    else if(nullptr != m_pifRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , int RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_pifRet);
+    else if(nullptr != m_plfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , long RetCode=[%ld].", m_pszFunc, m_pszFile, m_nLine, *m_plfRet);
+    else
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+

+ 334 - 0
DevAdapter/keba/IDCertificate.keba.1.1/CkLog.h

@@ -0,0 +1,334 @@
+// CkLog.h: interface for the CkLog class.
+#ifndef CKLOG_H
+#define CKLOG_H
+
+#define CMBLOG4            //是否使用招行日志库开关
+#define CKLOG              //是否使用公司日志库开关
+
+#include <stdio.h>
+#include <fstream>
+#include <string>
+#include <iostream>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+//#include <thread>
+#include <stdarg.h>
+#include <ctime>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include <sys/prctl.h>
+#include <sys/syscall.h>
+#include "wintypes.h"
+
+
+#if defined(CMBLOG4)
+#include "log4vendor.h"
+#endif
+
+#if defined(CKLOG)
+#include "CommDef.h"
+#include "TraceManager.h"
+#endif
+
+using namespace std;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 字节对齐设置为1 */
+//#pragma pack(push,1)
+#define TRACE_LEN			(MAXWORD / 2)
+
+
+#ifndef __linux__
+#include "windows.h"
+#define GetProcessId()  GetCurrentProcessId()
+#define GetThreadId()  GetCurrentThreadId()
+#else
+#define set_thread_name(name)   prctl(PR_SET_NAME, (char*)name)  //名字的长度最大为15字节,且应该以'\0'结尾  prctl(PR_SET_NAME, (char*)arg);
+#define get_thread_name(name)   prctl(PR_GET_NAME, (unsigned long)name)   //prctl(PR_GET_NAME, (unsigned long)name);
+#define GetProcessId()  getpid()               //或者使用  PID= syscall(__NR_getpid)
+#define GetThreadId()   syscall(__NR_gettid)   //或者使用  TID= syscall(SYS_gettid)
+#endif
+
+
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath);
+void* GetPtr(void* pVoid=nullptr); //获取指针
+
+class CkLog_FuncTracer
+{
+public:
+    static bool m_bCkLogExtendInf;
+
+    CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize);
+    ~CkLog_FuncTracer();
+private:
+        const char* m_pszFunc;
+        const char* m_pszFile;
+        int m_nLine;
+        short* m_psfRet; //INT16
+        int* m_pifRet;   //INT32
+        long* m_plfRet;  //INT64
+};
+
+//declare
+#if defined(CMBLOG4)
+#define CMBLOG4_DECLARE()
+#else
+#define CMBLOG4_DECLARE()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_DECLARE()   \
+        CTraceManager *pLOG;
+#else
+#define CKLOG_DECLARE()
+#endif
+
+//initialize
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT(modName, logPath, fileName) \
+    do {   \
+    std::string err_msg=""; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config config_mod; \
+    config_mod.dev_name = modName; \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    config_mod.log_dir = logPath; \
+    cmb::log4vendor::init(config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT(modName, logPath, fileName)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT_P(modName, logPath, fileName) \
+    do {   \
+    char err_msg[VENDOR_BUFF_SIZE] = { '\0' }; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config_c config_mod; \
+    strcpy(config_mod.dev_name, modName); \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    strcpy(config_mod.log_dir, logPath);    \
+    cmb::log4vendor::initp(&config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT_P(modName, logPath, fileName)
+#endif
+
+
+#if defined(CKLOG)
+#define CKLOG_INIT(modName, logPath, fileName)   \
+        pLOG = new CTraceManager(); \
+        pLOG->Register(fileName);
+#else
+#define CKLOG_INIT(modName, logPath, fileName)
+#endif
+
+//EXTERN
+#if defined(CKLOG)
+#define CKLOG_EXTERN()   \
+        extern CTraceManager *pLOG;
+#else
+#define CKLOG_EXTERN()
+#endif
+
+//记录进出函数 FUNCTION //LOG4VTM_FUNCTION();
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT32(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (int*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT32(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT64(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (long*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT64(RetVar)
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION()  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, nullptr, 0);
+#else
+#define CKLOG_FUNCTION()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION_INT(RetVar)  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, GetPtr(&RetVar), sizeof(RetVar));
+#else
+#define CKLOG_FUNCTION_INT(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define LOG_CMBLOG4(logLevel, ...)  \
+    do {   \
+            int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+            char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+             memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+            int iCkLog_HeadLen = 0;                          \
+            if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+            iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+            snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+            LOG4VTM(logLevel, CkLog_Buf);      \
+    } while (0);
+#else
+#define LOG_CMBLOG4(logLevel, ...)
+#endif
+
+//bool TraceInFormat( int nType, int nLevel, char* lpszTraceData, ... );
+#if defined(CKLOG)
+#define LOG_CKLOG(logLevel, ...)  \
+    do {   \
+        int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+        char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+        memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+        int iCkLog_HeadLen = 0;                          \
+        if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+        iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+        snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+        pLOG->TraceInFormat(TRM_INT, logLevel, "%s", CkLog_Buf);  \
+        } while (0);
+#else
+#define LOG_CKLOG(logLevel, ...)
+#endif
+
+//bool TraceInBuffer( int nType, int nLevel, unsigned char* lpbyTraceData, unsigned int uDataLen, char* lpszMsg = NULL,
+//unsigned int* lpuMaskOffsetArray = NULL, unsigned int* lpuMaskLenArray = NULL, unsigned int uMaskCnt = 0 );
+#if defined(CKLOG)
+#define LOGX_CKLOG(logLevel, pData, Len, ...)  \
+    do {   \
+    int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+    char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+    memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+    int iCkLog_HeadLen = 0;                          \
+    if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+    iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+    snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+    pLOG->TraceInBuffer(TRM_INT, logLevel, (unsigned char*)pData, (unsigned int)Len, CkLog_Buf);  \
+    } while (0);
+#else
+#define LOGX_CKLOG(logLevel, pData, Len, ...)
+#endif
+
+/*
+#define CMB_LOG_TRACE   1
+#define CMB_LOG_DEBUG   2
+#define CMB_LOG_INFO    3
+#define CMB_LOG_WARN    4
+#define CMB_LOG_ERROR   5
+#define CMB_LOG_FATAL   6
+*/
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+
+/*记录日志入口函数 Start*/
+//declare
+#define LOG_DECLARE()   \
+        CMBLOG4_DECLARE() \
+        CKLOG_DECLARE()
+
+//initialize
+#define LOG_INIT(modName, logPath, fileName) \
+    CMBLOG4_INIT(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_INIT_P(modName, logPath, fileName) \
+    CMBLOG4_INIT_P(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_EXTERN() \
+    CKLOG_EXTERN()
+
+//记录进出函数信息
+#define LOG_FUNCTION()  \
+    LOG4VTM_FUNCTION();  \
+    CKLOG_FUNCTION()
+
+//记录进出函数信息 带short返回值
+#define LOG_FUNCTION_INT16(RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带int返回值
+#define LOG_FUNCTION_INT32(RetVar)  \
+    CMBLOG4_FUNCTION_INT32(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带long返回值
+#define LOG_FUNCTION_INT64(RetVar)  \
+    CMBLOG4_FUNCTION_INT64(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+
+#define LogE(...) \
+    do {   \
+    LOG_CMBLOG4(ERROR, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_ERROR, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogW(...) \
+    do {   \
+    LOG_CMBLOG4(WARN, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_WARNG, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogM(...) \
+    do {   \
+    LOG_CMBLOG4(INFO, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_COMMN, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogD(...) \
+    do {   \
+    LOG_CMBLOG4(DEBUG, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_DEBUG, ## __VA_ARGS__);   \
+    } while (0);
+
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+//记录内存数据 HEX 表示
+#define LogXE(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_ERROR, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXW(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_WARNG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXM(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_COMMN, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXD(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_DEBUG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+/*记录日志入口函数 End*/
+
+/*   恢复字节对齐方式   */
+//#pragma pack(pop)
+
+#ifdef __cplusplus
+}       /*extern "C"*/
+#endif
+
+#endif

+ 31 - 0
DevAdapter/keba/IDCertificate.keba.1.1/dllmain.cpp

@@ -0,0 +1,31 @@
+// dllmain.cpp : 定义 DLL 应用程序的入口点。
+#include "stdafx.h"
+#include "idcertificate.h"
+
+LOG_DECLARE()
+
+// IDCertificate.keba.7.2.cpp : 定义 DLL 应用程序的导出函数。
+ErrorCodeEnum  CreateDevComponent(DeviceBaseClass *&pBaseObj)
+{
+    LOG_INIT("IDCertificate", "/home/keba/", "/home/keba/keba-IDCertificate.log");
+    pBaseObj = new IDCerClassImpl();
+    if (pBaseObj == NULL)
+    {
+        LogM("CreateDevComponent IDCerClassImpl failed!");
+        return Error_Resource;
+    }
+    LogM("CreateDevComponent IDCerClassImpl scessufull!");
+    printf("pBaseObj is successfull");
+    return Error_Succeed;
+}
+
+ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
+{
+    if (pBaseObj == NULL)
+        return Error_Param;
+    IDCerClassImpl* pTmp = (IDCerClassImpl*)(pBaseObj);
+    delete pTmp;
+    pTmp = NULL;
+    pBaseObj = NULL;
+    return Error_Succeed;
+}

+ 93 - 324
DevAdapter/keba/IDCertificate.keba.1.1/idcertificate.cpp

@@ -3,56 +3,8 @@
 #include "log4vendor.h"
 #include "stdafx.h"
 
-CTraceManager g_Trace;
-
-// IDCertificate.keba.7.2.cpp : 定义 DLL 应用程序的导出函数。
-ErrorCodeEnum  CreateDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    g_Trace.Register("/data/home/keba/opt/rvc/dbg/IDCertificate/keba-IDCert.log");
-    char err_msg[VENDOR_BUFF_SIZE] = { '\0' };
-    cmb::log4vendor::instance();
-    cmb::log_init_config_c config_IDCer;
-    strcpy(config_IDCer.dev_name, "IDCertificate");
-    config_IDCer.log_type = CMB_LOG_TYPE_FILE;
-#if defined(_MSC_VER)
-    //config1.log_dir = ("C:\\rvc\\dbg\\");
-    strcpy(config_IDCer.log_dir, "C:\\rvc\\dbg\\");
-#else
-    strcpy(config_IDCer.log_dir, "/data/home/keba/opt/rvc/dbg");
-#endif //_MSC_VER
-
-   cmb::log4vendor::initp(&config_IDCer, err_msg);
-   LOG4VTM(INFO,("IDCertificate This message would not be record with illegal dev name!"));
-
-    pBaseObj = new IDCerClassImpl();
-    if (pBaseObj == NULL)
-    {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "CreateDevComponent IDCerClassImpl failed!");
-        return Error_Resource;
-    }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "CreateDevComponent IDCerClassImpl scessufull!");
-    printf("pBaseObj is successfull");
-    return Error_Succeed;
-}
-
-ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    if (pBaseObj == NULL)
-        return Error_Param;
-    IDCerClassImpl* pTmp = (IDCerClassImpl*)(pBaseObj);
-    delete pTmp;
-    pTmp = NULL;
-    pBaseObj = NULL;
-    return Error_Succeed;
-}
-
-
-
-
+LOG_EXTERN()
 #define		MAX_PICTURE_SIZE	3*1024*1024
-//------2019-09-06 V1.0.0.9---------改为与厂家DEMO相似,采用NEW方式申请数组空间;
-//char		cFrontImgBuf[MAX_PICTURE_SIZE];
-//char		cRearImgBuf[MAX_PICTURE_SIZE];
 #define     MAX_FILE_PATH           260
 CHAR		CurrendPath[MAX_FILE_PATH] = {0};
 CHAR		PhotoPath[MAX_FILE_PATH] = {0};
@@ -90,13 +42,10 @@ char* strcat_s(char* dest, size_t size, const char* src)
 unsigned long GetTickCount()
 {
     struct timespec ts;
-
     clock_gettime(CLOCK_MONOTONIC, &ts);
-
     return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
 }
 
-//2019-06-03 增加一个获取当前DLL(IDCertificate.keba.1.1.dll)路径的函数,路径结尾有'\'。
 int GetDllPathLocal(std::string& dllPath)
 {
     Dl_info path_info;
@@ -106,7 +55,6 @@ int GetDllPathLocal(std::string& dllPath)
     printf("first_str_FilePath=%s\n",str_FilePath);
     char *pLastSlath=strrchr(str_FilePath,'/');
     *(pLastSlath + 1)=0;
-
     std::string a(str_FilePath);
     dllPath = a;
     return 0;
@@ -114,25 +62,18 @@ int GetDllPathLocal(std::string& dllPath)
 
 IDCerClassImpl::IDCerClassImpl():
 m_bDevOpen(false)
-    //,m_pLog(NULL)
-    //,m_pIniFile(NULL)
-    //,m_pLevelLog(NULL)
-    //,m_lpCVR100U(NULL)
     ,m_bAuthed(false)
     ,m_iCardType(-1)
-//	,m_bFirst(false)
 {
+    LOG_FUNCTION();
     SecDeviceNum = 0;
 }
 IDCerClassImpl::~IDCerClassImpl()
 {
+    LOG_FUNCTION();
     m_bDevOpen = false;
-
-    //m_handDev有效,则关闭Dev
     DevClose();
     SecDeviceNum = 0;
-
-    //2019-06-03 增加删除拷贝到dep目录的zp.bmp
     std::string tmpPath = "";
     if( GetDllPathLocal(tmpPath) == Error_Succeed )
     {
@@ -144,60 +85,52 @@ IDCerClassImpl::~IDCerClassImpl()
     std::string strFile = tmpPath + "zp.bmp";
     if(access(strFile.c_str(), 0) != -1)
     {
-        printf("file del:%s\n", strFile.c_str());
-        //QFile::remove(strFile.c_str());
+        LogM("file del:%s\n", strFile.c_str());
         remove(strFile.c_str());
     }
     else
     {
-        printf("file not found:%s\n", strFile.c_str());
+        LogM("file not found:%s\n", strFile.c_str());
     }
-    //--------------------------------
-    // --------2019-07-0ScannerInfo6------- 增加删除扫描的正反面图像
     strFile = tmpPath + "idback.bmp";
     if(access(strFile.c_str(), 0) != -1)
     {
-        printf("file del:%s\n", strFile.c_str());
-        //QFile::remove(strFile.c_str());
+        LogM("file del:%s\n", strFile.c_str());
         remove(strFile.c_str());
     }
     else
     {
-        printf("file not found:%s\n", strFile.c_str());
+        LogM("file not found:%s\n", strFile.c_str());
     }
     strFile = tmpPath + "idfront.bmp";
     if(access(strFile.c_str(), 0) != -1)
     {
-        printf("file del:%s\n", strFile.c_str());
-        //QFile::remove(strFile.c_str());
+        LogM("file del:%s\n", strFile.c_str());
         remove(strFile.c_str());
     }
     else
     {
-        printf("file not found:%s\n", strFile.c_str());
+        LogM("file not found:%s\n", strFile.c_str());
     }
     strFile = tmpPath + "ck.bmp";
     if(access(strFile.c_str(), 0) != -1)
     {
-        printf("file del:%s\n", strFile.c_str());
-        //QFile::remove(strFile.c_str());
+        LogM("file del:%s\n", strFile.c_str());
         remove(strFile.c_str());
     }
     else
     {
-        printf("file not found:%s\n", strFile.c_str());
+        LogM("file not found:%s\n", strFile.c_str());
     }
 
 }
 ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
-    //g_pLog->Print("GetDevCategory() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "GetDevCategory() Entry.");
+    LOG_FUNCTION();
+    LogM("GetDevCategory() Entry.");
     memset(devCategory.szType, 0, MAX_DEV_TYPE_LEN);
     memset(devCategory.szModel, 0, MAX_DEV_MODEL_LEN);
     memset(devCategory.szVendor, 0, MAX_DEV_VENDOR_LEN);
-
-    //-----------2019-09-24-----------版本V1.0.0.10-----空白卡退卡----
     memcpy(devCategory.szType, "Keba.IDCertificate.ID8101-V1.02.10", strlen("Keba.IDCertificate.ID8101-V1.02.10"));
     memcpy(devCategory.szVendor, "keba", strlen("keba"));
     devCategory.eState = DEVICE_STATUS_NORMAL;
@@ -205,15 +138,9 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
     devCategory.version.wMinor = 0;
     devCategory.version.wRevision = 8;
     devCategory.version.wBuild = 1;
-    //2019-02-28 《可视化柜台设备厂商适配器开发说明文档V1.3.doc》 P8关于szModel字段改造说明
-    //STYLE=‘CL’ 或 ‘IG’;CL为非接触式,IG为吞入式;
-    //FUNCTION=‘I’,‘T’,‘F’的组合;身份证(I),港澳台通行证(T),外国人永久居留证(F);
-    //以‘#’分隔多段参数;例如:支持身份证、港澳台通行证、外国人永久居留证的吞入式身份证阅读器,szModel值为"STYLE=IG#FUNCTION=ITF"
-    //---------2019-07-16---广电库,增加支持港澳台;---------
+
     memcpy(devCategory.szModel, "STYLE=IG#FUNCTION=ITF", strlen("STYLE=IG#FUNCTION=ITF"));
-    //g_pLog->Print("GetDevCategory(), szType=%s", devCategory.szType);
-    //g_pLog->Print("GetDevCategory(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "GetDevCategory() return:\n\
+    LogM("GetDevCategory() return:\n\
                       devCategory.szType = %s, \n\
                       devCategory.szVendor = %s, \n\
                       devCategory.eState = %d, \n\
@@ -237,13 +164,12 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 //	the normal condition.
 ErrorCodeEnum IDCerClassImpl::Reset()
 {
-    //g_pLog->Print("Reset() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "Reset() Entry.");
+    LOG_FUNCTION();
+    LogM("Reset() Entry.");
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
-        //g_pLog->Print("Reset(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "Reset(), 设备未打开, nRet=%d", Error_DevNotAvailable);
+        LogM("Reset(), 设备未打开, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
 
@@ -251,16 +177,12 @@ ErrorCodeEnum IDCerClassImpl::Reset()
     if (IDDIGITALCOPIER_NO_ERROR != nRet)
     {
         SaveErrorInfo("设备通信异常", Error_DevConnFailed);
-        //g_pLog->Print("Reset(), 设备通信异常, nRet=%d", Error_DevConnFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "Reset() 复位模式, 0-- 退卡 动作失败");
+        LogM("Reset() 复位模式, 0-- 退卡 动作失败");
         return Error_DevConnFailed;
     }
-
     m_bAuthed = false;
     m_iCardType = -1;
-    //g_pLog->Print("Reset(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "Reset() 复位模式, 0-- 退卡 动作成功");
-
+    LogM("Reset() 复位模式, 0-- 退卡 动作成功");
     return Error_Succeed;
 }
 //
@@ -268,22 +190,20 @@ ErrorCodeEnum IDCerClassImpl::Reset()
 //	ex. close connection,close port,release memery and so on
 ErrorCodeEnum IDCerClassImpl::DevClose()
 {
-    //g_pLog->Print("DevClose() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "DevClose() Entry.");
+    LOG_FUNCTION();
+    LogM("DevClose() Entry.");
     int nRet = m_cBS_ID81IDCImpl.CloseDev(SecDeviceNum);
     if (IDDIGITALCOPIER_NO_ERROR != nRet)
     {
         SaveErrorInfo("设备通信异常", Error_DevConnFailed);
-        //g_pLog->Print("DevClose(), 设备通信异常, nRet=%d", Error_DevConnFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "DevClose(), 设备通信异常, nRet=%d", nRet);
+        LogM("DevClose(), 设备通信异常, nRet=%d", nRet);
         return Error_DevConnFailed;
     }
 
     m_bDevOpen = false;
     m_bAuthed = false;
     m_iCardType = -1;
-    //g_pLog->Print("DevClose(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "DevClose(), nRet=%d", nRet);
+    LogM("DevClose(), nRet=%d", nRet);
     return Error_Succeed;
 }
 //	Get last error the device issued.
@@ -291,15 +211,11 @@ ErrorCodeEnum IDCerClassImpl::DevClose()
 //	code and anything in favour of location problem.
 ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
-    //g_pLog->Print("GetLastErr() Entry.");
-    //return Error_NotImpl;
+    LOG_FUNCTION();
     devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
     memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
     memcpy(devErrInfo.szErrMsg, m_szErrMsg, MIN(devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
-    //g_pLog->Print("GetLastErr(), szErrMsg=%s", devErrInfo.szErrMsg);
-    //g_pLog->Print("GetLastErr(), nRet=%d", Error_Succeed);
-
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "GetLastErr() return:\n\
+    LogM("GetLastErr() return:\n\
                         devErrInfo.szErrMsg = %s, \n\
                         devErrInfo.dwErrMsgLen = %d", devErrInfo.szErrMsg, devErrInfo.dwErrMsgLen);
 
@@ -311,12 +227,10 @@ ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 //
 ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "DevOpen(dwPort = %d) Entry.", dwPort);
-    //g_pLog->Print("DevOpen() Entry.");
-    LOG4VTM(INFO,"IDCerClassImpl::DevOpen(DWORD dwPort)");
-    unsigned   int     DevNumber = 8;	//统计当前设备数量
+    LOG_FUNCTION();
+    LogM("DevOpen(dwPort = %d) Entry.", dwPort);
+    unsigned int DevNumber = 8;	//统计当前设备数量
     ScannerInfoRec  ScannerInfo[8] = {0};                  //设备信息
-
     m_bAuthed = false;
     m_iCardType = -1;
 
@@ -328,7 +242,6 @@ ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
         SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
         SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
         SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
-        //g_pLog->Print("DevOpen(), 未找到设备, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
 
@@ -343,8 +256,7 @@ ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
             SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
             SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
             SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
-            //g_pLog->Print("DevOpen(), nRet=%d", Error_Succeed);
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "DevOpen(), nRet=%d.", nRet);
+            LogM("DevOpen(), nRet=%d.", nRet);
             return Error_Succeed;
         }
     }
@@ -353,8 +265,7 @@ ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
     SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
     SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
     SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
-    //g_pLog->Print("DevOpen(), 设备通信异常, nRet=%d", Error_DevConnFailed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "DevOpen, 设备通信异常, nRet = %d. ", nRet);
+    LogE("DevOpen, 设备通信异常, nRet = %d. ", nRet);
     return Error_DevConnFailed;
 }
 //
@@ -365,14 +276,12 @@ ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
 //
 ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
 {
-    //g_pLog->Print("IDCerRFControl() Entry.");
-    //g_pLog->Print("IDCerRFControl(), bControl=%d", bControl);
-    //return Error_NotImpl;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerRFControl(), bControl = %d", bControl);
+    LOG_FUNCTION();
+    LogM("IDCerRFControl(), bControl = %d", bControl);
     if(!m_bDevOpen)
     {
         //g_pLog->Print("IDCerRFControl(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerRFControl(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
+        LogE("IDCerRFControl(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
     if (bControl)
@@ -461,8 +370,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
     {
         ForceIDEject();
     }
-    //g_pLog->Print("IDCerRFControl(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerRFControl(), nRet = %d", Error_Succeed);
+    LogM("IDCerRFControl(), nRet = %d", Error_Succeed);
     return Error_Succeed;
 }
 //
@@ -471,13 +379,12 @@ ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
 //
 ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
 {
-    //g_pLog->Print("IDCerAuthenticate() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerAuthenticate() Entry.");
+    LOG_FUNCTION();
+    LogM("IDCerAuthenticate() Entry.");
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
-        //g_pLog->Print("IDCerAuthenticate(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
+        LogE("IDCerAuthenticate(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
     DWORD	dwStart = GetTickCount();
@@ -496,12 +403,8 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
             char err[MAX_DEV_ERROR_MSG_LEN] = {0};
             sprintf(err, "通讯异常%d", nRet);
             SaveErrorInfo(err, Error_DevCommFailed);
-            //m_cBS_ID81IDCImpl.ResetDev(SecDeviceNum);
-            //g_pLog->Print("IDCerAuthenticate(), 通讯异常%d, nRet=%d", nRet, Error_DevCommFailed);
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(), 通讯异常%d, nRet=%d", nRet, Error_DevCommFailed);
+            LogE("IDCerAuthenticate(), 通讯异常%d, nRet=%d", nRet, Error_DevCommFailed);
             return Error_DevCommFailed;
-            //SaveErrorInfo("通讯异常", Error_DevCommFailed);
-            //return Error_DevCommFailed;
         }
         if ((m_DeviceStatus.iStatusInputSensorHaveCard == 1) &&
             (m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
@@ -532,8 +435,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
     if (!bCard)
     {
         SaveErrorInfo("未检测到卡", Error_Unexpect);
-        //g_pLog->Print("IDCerAuthenticate(), 未检测到卡, nRet=%d", Error_Unexpect);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(),未检测到卡, nRet=%d", Error_Unexpect);
+        LogE("IDCerAuthenticate(),未检测到卡, nRet=%d", Error_Unexpect);
         return Error_Unexpect;
     }
 
@@ -541,16 +443,8 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
     if ((IDDIGITALCOPIER_TIMEOUT_ERROR == nRet) ||
         (IDDIGITALCOPIER_NO_CARD == nRet))
     {
-        //2019-02-28 《可视化柜台设备厂商适配器开发说明文档V1.3.doc》 P12关于身份证读卡器改造说明
-        //1.	检测到有卡片插入/放置,但不是身份证时,IDCerAuthenticate返回Error_DevMedia;
-        //2.	未检测到卡片插入/放置,IDCerAuthenticate返回Error_Unexpect;
-        //3.	检测到身份证且认证成功(注意:部分厂商不做卡认证直接返回成功,需要根据实际情况按照步骤1和2返回对应值),IDCerAuthenticate返回Error_Succeed。
-        //SaveErrorInfo("未检测到卡", Error_DevMedia);
-        //printf(" SecDeviceNum=%d",SecDeviceNum);
-        //return Error_DevMedia;
         SaveErrorInfo("未检测到卡", Error_Unexpect);
-        //g_pLog->Print("IDCerAuthenticate(), 未检测到卡, nRet=%d", Error_Unexpect);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(),未检测到卡, nRet=%d", Error_Unexpect);
+        LogE("IDCerAuthenticate(),未检测到卡, nRet=%d", Error_Unexpect);
         return Error_Unexpect;
     }
     else if (IDDIGITALCOPIER_NO_ERROR != nRet)
@@ -558,30 +452,22 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
         char err[MAX_DEV_ERROR_MSG_LEN] = {0};
         sprintf(err, "通讯失败%d", nRet);
         SaveErrorInfo(err, Error_DevConnFailed);
-        //m_cBS_ID81IDCImpl.ResetDev(SecDeviceNum);
-        //g_pLog->Print("IDCerAuthenticate(), 通讯失败%d, nRet=%d", nRet, Error_DevConnFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(),通讯失败,nRet=%d", nRet, Error_DevConnFailed);
+        LogE("IDCerAuthenticate(),通讯失败,nRet=%d", nRet, Error_DevConnFailed);
         return Error_DevConnFailed;
     }
-
-    //2019-03-01 有卡情况下,增加判断是否为有效卡(身份证、外国人居留证、港澳台居住在);
     int iCardType = -1;
     memset(&m_IDInfoEx, 0x00, sizeof(IDInfoEx));
     memset(&m_IDForeignInfo, 0x00, sizeof(IDInfoForeign));
     memset(&m_IDInfoGAT, 0x00, sizeof(IDInfoGAT));
-
     memset(PhotoPath, 0, MAX_FILE_PATH);
     std::string dllPath;
     int bRet = GetDllPathLocal(dllPath);
     memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
-
     dllPath += "ck.bmp";
     char FileName0[256]={0};
     memcpy(FileName0, dllPath.c_str(), dllPath.length());
     std::string strLog = "IDCerAuthenticate(),PhotoPath=[" + dllPath + "]";
-    LOG4VTM(INFO, strLog);
-
-    //--------2019-07-19 19:39--------先读身份证和外国人(大部分是身份证,先读只需一次;如果是港澳台,要先GetCardType,再GetIDInfoGAT
+    LogM("%s",strLog.c_str());
     nRet = m_cBS_ID81IDCImpl.GetMyIDCardType(SecDeviceNum, &iCardType);
     if(nRet == IDDIGITALCOPIER_NO_ERROR)
     {
@@ -589,21 +475,15 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
     }
     else if (nRet == IDDIGITALCOPIER_IDDATA_PROCESS_ERROR)
     {
-        //无效卡(这里包括港澳台居住证,因为未接到招行提出改造此接口要求;)
         SaveErrorInfo("无效卡", Error_DevMedia);
-        //g_pLog->Print("IDCerAuthenticate(), 无效卡, nRet=%d", Error_DevMedia);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(),无效卡, nRet=%d", Error_DevMedia);
-        //-----------2019-09-24-----------版本V1.0.0.10-----空白卡退卡----
+        LogE("IDCerAuthenticate(),无效卡, nRet=%d", Error_DevMedia);
         m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-
         return Error_DevMedia;
     }
     else
     {
         SaveErrorInfo("通讯异常", Error_DevCommFailed);
-        //nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-        //g_pLog->Print("IDCerAuthenticate(), 通讯异常, nRet=%d", Error_DevCommFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(),通讯异常%d,nRet=%d", nRet, Error_DevCommFailed);
+        LogE("IDCerAuthenticate(),通讯异常%d,nRet=%d", nRet, Error_DevCommFailed);
         return Error_DevCommFailed;
     }
 
@@ -637,36 +517,27 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
 
     if(nRet == IDDIGITALCOPIER_NO_ERROR)
     {
-        //g_pLog->Print("IDCerAuthenticate(), 认证成功");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerAuthenticate(),认证成功");
+        LogM("IDCerAuthenticate(),认证成功");
     }
     else if ((nRet == IDDIGITALCOPIER_NO_ERROR) ||
         (nRet == IDDIGITALCOPIER_IDDATA_PROCESS_ERROR))    //身份证电子信息处理错误
     {
-        //无效卡(这里包括港澳台居住证,因为未接到招行提出改造此接口要求;)
         SaveErrorInfo("无效卡", Error_DevMedia);
-        //g_pLog->Print("IDCerAuthenticate(), 无效卡, nRet=%d", Error_DevMedia);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate(),无效卡, nRet=%d", Error_DevMedia);
-        //-----------2019-09-24-----------版本V1.0.0.10-----空白卡退卡----
+        LogE("IDCerAuthenticate(),无效卡, nRet=%d", Error_DevMedia);
         m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-
         return Error_DevMedia;
     }
     else
     {
         char err[MAX_DEV_ERROR_MSG_LEN] = {0};
         sprintf(err, "通讯失败%d", nRet);
-        //SaveErrorInfo("通讯失败", Error_DevConnFailed);
         SaveErrorInfo(err, Error_DevConnFailed);
-        //g_pLog->Print("IDCerAuthenticate(), 通讯失败%d, nRet=%d", nRet , Error_DevCommFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerAuthenticate()通讯失败, nRet=%d", Error_DevCommFailed);
+        LogE("IDCerAuthenticate()通讯失败, nRet=%d", Error_DevCommFailed);
         return Error_DevConnFailed;
     }
-
     m_bAuthed = true;     // true:认证成功;
     m_iCardType = iCardType;    // 认证成功后,卡的类型;
-    //g_pLog->Print("IDCerAuthenticate(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerAuthenticate(), nRet=%d", Error_Succeed);
+    LogM("IDCerAuthenticate(), nRet=%d", Error_Succeed);
     return Error_Succeed;
 }
 //  获取证件信息,包括二代身份证、外国人永久居留证
@@ -674,51 +545,34 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
 //
 ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
 {
-    //g_pLog->Print("IDCerGetData() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetData() Entry.");
-    //return Error_NotImpl;
+    LOG_FUNCTION();
+    LogM("IDCerGetData() Entry.");
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
-        //g_pLog->Print("IDCerGetData(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerGetData(),设备未打开, nRet=%d", Error_DevNotAvailable);
+        LogE("IDCerGetData(),设备未打开, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
-
-    //int pos = -1;
-    //ErrorCodeEnum Ret = QueryCardPos(pos);
-    //if ((Ret == Error_Succeed) && pos == 0)
-    //{
-    //	SaveErrorInfo("未检测到卡", Error_DevMedia);
-    //	return Error_DevMedia;
-    //}
-
     if (!m_bAuthed)
     {
         SaveErrorInfo("未认证成功。", Error_DevMedia);
-        //g_pLog->Print("IDCerGetData(), 未认证成功, nRet=%d", Error_DevMedia);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerGetData(),未认证成功, nRet=%d", Error_DevMedia);
+        LogE("IDCerGetData(),未认证成功, nRet=%d", Error_DevMedia);
         return Error_DevMedia;
     }
     m_bAuthed = false;  //认证成功只能读一次,下次必须重新认证;
-
     std::string dllPath;
     int bRet = GetDllPathLocal(dllPath);
-
     std::string ckStr = dllPath + "ck.bmp";
     std::string zpStr = dllPath + "zp.bmp";
-    //QFile::copy(ckStr.c_str(), zpStr.c_str());   //表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖)
     std::string commond="cp"+std::string(" ")+ckStr+std::string(" ")+zpStr;
     system(commond.c_str());
-
     std::string strLog = "IDCerGetData(),ckStr=[" + ckStr + "],zpStr=[" + zpStr + "]";
-    LOG4VTM(INFO, strLog);
-
+    LogM("%s",strLog.c_str());
     memset(PhotoPath, 0, MAX_FILE_PATH);
     memcpy(PhotoPath, zpStr.c_str(), zpStr.length());
 
     memset(&idCerInfo, 0, sizeof(IDCerInfo));
-    //----2019-07-19-----在IDCerAuthenticate里,对有效卡读出数据,在IDCerGetData和IDCerGetDataEx不再去读数据,否则应用会崩溃(未知原因,参考E1000的处理);
+    //--------在IDCerAuthenticate里,对有效卡读出数据,在IDCerGetData和IDCerGetDataEx不再去读数据,否则应用会崩溃(未知原因,参考E1000的处理);
     if (m_iCardType == 0)     //0-身份证
     {
         //身份证
@@ -793,7 +647,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
                 {
                     endtime[i] = m_IDInfoEx.timeLimit[i + 9];
                 }
-
             }
             endtime[8] = '\0';
             dataStr = endtime;
@@ -818,8 +671,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
         dataStr = PhotoPath;
         strcpy_s(idCerInfo.photoPath.data, PhotoPath);
         idCerInfo.photoPath.dwSize = dataStr.size();
-        //g_pLog->Print("IDCerGetData(), 身份证");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetData(), 身份证");
+        LogM("IDCerGetData(), 身份证");
     }
     else if (m_iCardType == 1)      //1-外国人居住证
     {
@@ -900,8 +752,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
         dataStr = PhotoPath;
         strcpy_s(idCerInfo.photoPath.data, PhotoPath);
         idCerInfo.photoPath.dwSize = dataStr.size();
-        //g_pLog->Print("IDCerGetData(), 外国人");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetData(), 外国人");
+        LogM("IDCerGetData(), 外国人");
     }
     else if (m_iCardType == 2)      //2-港澳台
     {
@@ -919,9 +770,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
         idCerInfo.sex.dwSize = dataStr.size();
 
         //3民族
-        //dataStr = m_IDInfoGAT.nation;
-        //strcpy_s(idCerInfo.nation.data, m_IDInfoGAT.nation);
-        //idCerInfo.nation.dwSize = dataStr.size();
         memset(idCerInfo.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
         idCerInfo.nation.dwSize = 0;
 
@@ -1002,22 +850,17 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
         dataStr = PhotoPath;
         strcpy_s(idCerInfo.photoPath.data, PhotoPath);
         idCerInfo.photoPath.dwSize = dataStr.size();
-        //g_pLog->Print("IDCerGetData(), 港澳台");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetData(), 港澳台");
+        LogM("IDCerGetData(), 港澳台");
     }
     else
     {
         //无效卡(这里包括港澳台居住证,因为未接到招行提出改造此接口要求;)
         SaveErrorInfo("无效卡", Error_DevMedia);
-        //g_pLog->Print("IDCerGetData(), 无效卡, nRet=%d", Error_DevMedia);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerGetData(), 无效卡, nRet=%d", Error_DevMedia);
+        LogE("IDCerGetData(), 无效卡, nRet=%d", Error_DevMedia);
         return Error_DevMedia;
     }
-
-    //nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-    //g_pLog->Print("IDCerGetData(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetData(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetData() return:\
+    LogM("IDCerGetData(), nRet=%d", Error_Succeed);
+    LogM("IDCerGetData() return:\
               \nName:%s\n Sex:%s\nNation: %s\nBirth: %s\nAddress:%s\nIDCode:%s\
             \nDepart: %s\nStartDate: %s\nEndDate: %s\nNewAddress:%s\nPhotoPath:%s\n",
             idCerInfo.name.data, idCerInfo.sex.data, idCerInfo.nation.data,
@@ -1032,29 +875,17 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
 //
 ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
 {
-    //g_pLog->Print("IDCerGetDataEx() Entry.");
-    //return Error_NotImpl;
+    LOG_FUNCTION();
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
-        //g_pLog->Print("IDCerGetDataEx(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerGetDataEx(),设备未打开, nRet=%d", Error_DevNotAvailable);
+        LogE("IDCerGetDataEx(),设备未打开, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
-
-    //int pos = -1;
-    //ErrorCodeEnum Ret = QueryCardPos(pos);
-    //if ((Ret == Error_Succeed) && pos == 0)
-    //{
-    //	SaveErrorInfo("未检测到卡", Error_DevMedia);
-    //	return Error_DevMedia;
-    //}
-
     if (!m_bAuthed)
     {
         SaveErrorInfo("未认证成功。", Error_DevMedia);
-        //g_pLog->Print("IDCerGetDataEx(), 未认证成功, nRet=%d", Error_DevMedia);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "IDCerGetDataEx(),未认证成功, nRet=%d", Error_DevMedia);
+        LogE("IDCerGetDataEx(),未认证成功, nRet=%d", Error_DevMedia);
         return Error_DevMedia;
     }
     m_bAuthed = false;  //认证成功只能读一次,下次必须重新认证;
@@ -1064,19 +895,16 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
 
     std::string ckStr = dllPath + "ck.bmp";
     std::string zpStr = dllPath + "zp.bmp";
-    //QFile::copy(ckStr.c_str(), zpStr.c_str());   //表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖)
-
     std::string commond="cp"+std::string(" ")+ckStr+std::string(" ")+zpStr;
     system(commond.c_str());
 
     std::string strLog = "IDCerGetData(),ckStr=[" + ckStr + "],zpStr=[" + zpStr + "]";
-    LOG4VTM(INFO, strLog);
-
+    LogM("%s",strLog.c_str());
     memset(PhotoPath, 0, MAX_FILE_PATH);
     memcpy(PhotoPath, zpStr.c_str(), zpStr.length());
 
     memset(&idCerInfoEx, 0, sizeof(IDCerInfoEx));
-    //----2019-07-19-----在IDCerAuthenticate里,对有效卡读出数据,在IDCerGetData和IDCerGetDataEx不再去读数据,否则应用会崩溃(未知原因,参考E1000的处理);
+
     if (m_iCardType == 0)    //0-身份证
     {
         //身份证
@@ -1234,8 +1062,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
         //22备用5
         memset(idCerInfoEx.reserved5.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
         idCerInfoEx.reserved5.dwSize = 0;
-        //g_pLog->Print("IDCerGetDataEx(), 身份证");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetDataEx(), 身份证");
+        LogM("IDCerGetDataEx(), 身份证");
     }
     else if	(m_iCardType == 1)      //1-外国人居住证
     {
@@ -1256,12 +1083,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
 
         //2019-06-11
         //3国籍  ID81开发包没有中文国籍,先用英文代码;
-        //2019-08-23 改为去掉
-        //dataStr = m_IDForeignInfo.Nation;
-        //dataStr = trim(dataStr);
-        //memset(idCerInfoEx.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
-        //strcpy_s(idCerInfoEx.nation.data, m_IDForeignInfo.Nation);
-        //idCerInfoEx.nation.dwSize = dataStr.size();
         memset(idCerInfoEx.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
         idCerInfoEx.nation.dwSize = 0;
 
@@ -1277,9 +1098,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
         idCerInfoEx.birthday.dwSize = dataStr.size();
 
         //5地址
-        //dataStr = m_IDForeignInfo.address;
-        //strcpy(idCerInfoEx.address.data,m_IDForeignInfo.address);
-        //idCerInfoEx.address.dwSize = dataStr.size();
         memset(idCerInfoEx.address.data, 0, MAX_IDCER_INFO_SIZE);
         idCerInfoEx.address.dwSize = 0;
 
@@ -1386,8 +1204,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
         //22备用5
         memset(idCerInfoEx.reserved5.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
         idCerInfoEx.reserved5.dwSize = 0;
-        //g_pLog->Print("IDCerGetDataEx(), 外国人");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetDataEx(), 外国人");
+        LogM("IDCerGetDataEx(), 外国人");
     }
     else if (m_iCardType == 2)      //2-港澳台
     {
@@ -1407,10 +1224,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
         idCerInfoEx.sex.dwSize = dataStr.size();
 
         //3民族
-        //dataStr = m_IDInfoGAT.nation;
-        //dataStr = trim(dataStr);
-        //strcpy_s(idCerInfoEx.nation.data, m_IDInfoGAT.nation);
-        //idCerInfoEx.nation.dwSize = dataStr.size();
         memset(idCerInfoEx.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
         idCerInfoEx.nation.dwSize = 0;
 
@@ -1554,7 +1367,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
         memset(idCerInfoEx.reserved5.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
         idCerInfoEx.reserved5.dwSize = 0;
         //g_pLog->Print("IDCerGetDataEx(), 港澳台");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetDataEx(), 港澳台");
+        LogM("IDCerGetDataEx(), 港澳台");
     }
     else
     {
@@ -1563,11 +1376,8 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
         //g_pLog->Print("IDCerGetDataEx(), 无效卡, nRet=%d", Error_DevMedia);
         return Error_DevMedia;
     }
-
-    //nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-    //g_pLog->Print("IDCerGetDataEx(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetDataEx(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "IDCerGetDataEx() return:\
+    LogM("IDCerGetDataEx(), nRet=%d", Error_Succeed);
+    LogM("IDCerGetDataEx() return:\
                           \nName:%s\n Sex:%s\nNation: %s\nBirth: %s\nAddress:%s\nIDCode:%s\nDepart: %s\nStartDate: %s\nEndDate: %s\
                                               \nNewAddress: %s\nphotoPath: %s\nEnglishName: %s\nNationality: %s\nIdVersin: %s\nIdType: %s\nreserved: %s\nissuedSN: %s\
                                               \nzCotxde: %s\nreserved2: %s\nreserved3: %s\nreserved4: %s\nreserved5: %s",
@@ -1583,14 +1393,13 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
 
 ErrorCodeEnum IDCerClassImpl::ForceIDEject()
 {
-    //g_pLog->Print("ForceIDEject() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ForceIDEject() Entry.");
-    //return Error_NotImpl;
+    LOG_FUNCTION();
+    LogM("ForceIDEject() Entry.");
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
         //g_pLog->Print("ForceIDEject(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ForceIDEject(), 设备未打开, nRet=%d", Error_DevNotAvailable);
+        LogM("ForceIDEject(), 设备未打开, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
     int pos = -1;
@@ -1598,65 +1407,49 @@ ErrorCodeEnum IDCerClassImpl::ForceIDEject()
     if ((nRet == Error_Succeed) && pos == 0)
     {
         SaveErrorInfo("未检测到卡", Error_DevMedia);
-        //g_pLog->Print("ForceIDEject(), 未检测到卡, nRet=%d", Error_DevMedia);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ForceIDEject(), 未检测到卡, nRet=%d", Error_DevMedia);
+        LogM("ForceIDEject(), 未检测到卡, nRet=%d", Error_DevMedia);
         return Error_DevMedia;
     }
     int bRet = m_cBS_ID81IDCImpl.EjectIdCard(SecDeviceNum);
     if (bRet != IDDIGITALCOPIER_NO_ERROR)
     {
         SaveErrorInfo("通讯异常", Error_DevCommFailed);
-        //g_pLog->Print("ForceIDEject(), 通讯异常, nRet=%d", Error_DevCommFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ForceIDEject(), 通讯异常, nRet=%d", Error_DevCommFailed);
+        LogM("ForceIDEject(), 通讯异常, nRet=%d", Error_DevCommFailed);
         return Error_DevCommFailed;
     }
-    //g_pLog->Print("ForceIDEject(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ForceIDEject(), nRet=%d", Error_Succeed);
+    LogM("ForceIDEject(), nRet=%d", Error_Succeed);
     return Error_Succeed;
 }
 
 ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
 {
-    //g_pLog->Print("ScanIDAndSaveImage() Entry.");
-    //return Error_NotImpl;
+    LOG_FUNCTION();
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
-        //g_pLog->Print("ScanIDAndSaveImage(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ScanIDAndSaveImage(), 设备未打开, nRet=%d", Error_DevNotAvailable);
+        LogM("ScanIDAndSaveImage(), 设备未打开, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
-
     memset(PhotoPath, 0, MAX_FILE_PATH);
     std::string dllPath;
     GetDllPathLocal(dllPath);
     memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
-
     char FileNamefront[256] = {0};
     char FileNameback[256] = {0};
-
     strcpy_s(FileNamefront, PhotoPath);
     strcat_s(FileNamefront, "idfront.bmp");
     strcpy_s(FileNameback, PhotoPath);
     strcat_s(FileNameback, "idback.bmp");
-
-
     int nRet = m_cBS_ID81IDCImpl.StartScan(SecDeviceNum);
     if (nRet != IDDIGITALCOPIER_NO_ERROR)
     {
-        ////////log
-        /*fprintf(fp,"StartScan nRet = %d\n",nRet);
-        fclose(fp);*/
-        //////////////
         SaveErrorInfo("通讯异常", Error_DevCommFailed);
-        //g_pLog->Print("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
+        LogM("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
         return Error_DevCommFailed;
     }
-
     int iFrontLen;
     int iRearLen;
-    //------2019-09-06 V1.0.0.9---------改为与厂家DEMO相似,采用NEW方式申请数组空间;
+    //--------------改为与厂家DEMO相似,采用NEW方式申请数组空间;
     char* cFrontImgBuf = new char[MAX_PICTURE_SIZE];
     char* cRearImgBuf = new char[MAX_PICTURE_SIZE];
     nRet=m_cBS_ID81IDCImpl.ReadCard(SecDeviceNum, cFrontImgBuf, cRearImgBuf, &iFrontLen, &iRearLen);
@@ -1665,15 +1458,9 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
         nRet = m_cBS_ID81IDCImpl.SaveToFile(SecDeviceNum, cFrontImgBuf, iFrontLen, FileNamefront, 1);
         if (nRet != IDDIGITALCOPIER_NO_ERROR)
         {
-            ////////log
-            /*fprintf(fp,"ReadCard nRet = %d\n",nRet);
-            fclose(fp);*/
-            //////////////
             SaveErrorInfo("通讯异常", Error_DevCommFailed);
             nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-            //g_pLog->Print("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
-            //------2019-09-06 V1.0.0.9---------改为与厂家DEMO相似,采用NEW方式申请数组空间;
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
+            LogM("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
             delete []cFrontImgBuf;
             delete []cRearImgBuf;
             return Error_DevCommFailed;
@@ -1684,24 +1471,16 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
         nRet = m_cBS_ID81IDCImpl.SaveToFile(SecDeviceNum,cRearImgBuf,iRearLen,FileNameback,1);
         if (nRet != IDDIGITALCOPIER_NO_ERROR)
         {
-            ////////log
-            /*fprintf(fp,"SaveToFile nRet = %d\n",nRet);
-            fclose(fp);*/
-            //////////////
             SaveErrorInfo("通讯异常", Error_DevCommFailed);
             nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-            //g_pLog->Print("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
-            //------2019-09-06 V1.0.0.9---------改为与厂家DEMO相似,采用NEW方式申请数组空间;
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
+            LogM("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
             delete []cFrontImgBuf;
             delete []cRearImgBuf;
             return Error_DevCommFailed;
         }
     }
     nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
-    //g_pLog->Print("ScanIDAndSaveImage(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "ScanIDAndSaveImage(), nRet=%d", Error_Succeed);
-    //------2019-09-06 V1.0.0.9---------改为与厂家DEMO相似,采用NEW方式申请数组空间;
+    LogM("ScanIDAndSaveImage(), nRet=%d", Error_Succeed);
     delete []cFrontImgBuf;
     delete []cRearImgBuf;
     return Error_Succeed;
@@ -1709,14 +1488,12 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
 
 ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
 {
-    //g_pLog->Print("QueryCardPos() Entry.");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos() Entry.");
-    //return Error_NotImpl;
+    LOG_FUNCTION();
+    LogM("QueryCardPos() Entry.");
     if(!m_bDevOpen)
     {
         SaveErrorInfo("设备未打开", Error_DevNotAvailable);
-        //g_pLog->Print("QueryCardPos(), 设备未打开, nRet=%d", Error_DevNotAvailable);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos(), 设备未打开, nRet=%d", Error_DevNotAvailable);
+        LogM("QueryCardPos(), 设备未打开, nRet=%d", Error_DevNotAvailable);
         return Error_DevNotAvailable;
     }
 
@@ -1727,8 +1504,7 @@ ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
     if (nRet != IDDIGITALCOPIER_NO_ERROR)
     {
         SaveErrorInfo("通讯异常", Error_DevCommFailed);
-        //g_pLog->Print("QueryCardPos(), 通讯异常, nRet=%d", Error_DevCommFailed);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos(), 通讯异常, nRet=%d", Error_DevCommFailed);
+        LogM("QueryCardPos(), 通讯异常, nRet=%d", Error_DevCommFailed);
         return Error_DevCommFailed;
     }
 
@@ -1737,26 +1513,22 @@ ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
         (m_DeviceStatus.iStatusScanSensorHaveCard ==0))
     {
         pos = 2;
-        //g_pLog->Print("QueryCardPos(), pos=2, 证件在进卡口");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos(), pos=2, 证件在进卡口");
+        LogM("QueryCardPos(), pos=2, 证件在进卡口");
     }
     if ((m_DeviceStatus.iStatusMiddleSensorHaveCard == 1) ||
         (m_DeviceStatus.iStatusScanSensorHaveCard ==1))
     {
         pos = 1;
-        //g_pLog->Print("QueryCardPos(), pos=1, 证件在读卡器内部");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos(), pos=1, 证件在读卡器内部");
+        LogM("QueryCardPos(), pos=1, 证件在读卡器内部");
     }
     if ((m_DeviceStatus.iStatusInputSensorHaveCard == 0) &&
         (m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
         (m_DeviceStatus.iStatusScanSensorHaveCard ==0))
     {
         pos = 0;
-        //g_pLog->Print("QueryCardPos(), pos=0, 未检测到任何证件");
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos(), pos=0, 未检测到任何证件");
+        LogM("QueryCardPos(), pos=0, 未检测到任何证件");
     }
-    //g_pLog->Print("QueryCardPos(), nRet=%d", Error_Succeed);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "QueryCardPos(), nRet=%d", Error_Succeed);
+    LogM("QueryCardPos(), nRet=%d", Error_Succeed);
     return Error_Succeed;
 }
 
@@ -1764,6 +1536,7 @@ ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
 //Private
 void IDCerClassImpl::SaveErrorInfo(CHAR* errMsg, int errCode)
 {
+    LOG_FUNCTION();
     memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
     sprintf(m_szErrMsg, "%s[%d]", errMsg, errCode);
 }
@@ -1799,10 +1572,6 @@ bool IDCerClassImpl::SH_DeleteFileOrDirectory(char *strFileName)
     strcpy_s(strSrc, nLength+1, strFileName);
     strSrc[nLength+1] = '\0';
 
-   //QString trash_path = "/root/.local/share/Trash/files/%1"; //回收站路径
-   //QFile file(strSrc);
-   //bool ret = file.copy(trash_path.arg(strSrc)); // 复制文件到回收站
-
    std::string trash_path="/root/.local/share/Trash/";
    trash_path=trash_path+std::string(strSrc);
    std::string commond="cp"+std::string(" ")+std::string(strSrc)+std::string(" ")+trash_path;

+ 1 - 0
DevAdapter/keba/IDCertificate.keba.1.1/stdafx.h

@@ -19,4 +19,5 @@
 #include "BS_ID81IDCLibImpl.h"
 #include "TraceManager.h"
 #include "CommDef.h"
+#include "CkLog.h"
 

+ 66 - 0
DevAdapter/keba/PinPad.keba.1.1/CkLog.cpp

@@ -0,0 +1,66 @@
+// CkLog.cpp: implementation of the CkLog class.
+#include "CkLog.h"
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath)
+{
+    if(nullptr == pstrFullPath) return nullptr;
+
+    char* pLastSlash = strrchr(pstrFullPath, '/'); //find last slash
+    if(nullptr == pLastSlash)
+
+        return pstrFullPath;
+    else
+        return pLastSlash + 1;
+}
+
+void* GetPtr(void* pVoid)
+{
+    void* ptrTmp = pVoid;
+    return ptrTmp;
+}
+
+#if defined(CKLOG)
+extern CTraceManager *pLOG;
+#endif
+
+bool CkLog_FuncTracer::m_bCkLogExtendInf = false;
+
+//==> Enter {GetEncryptFunc}, file: {PinPadClassImpl_ZT598M.cpp}, line: {1001}.
+//根据整型变量占空间的大小判断类型
+CkLog_FuncTracer::CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize)
+{
+    m_pszFunc = pszFunc;
+    m_pszFile = pszFile;
+    m_nLine = nLine;
+
+    m_psfRet = nullptr; //INT16
+    m_pifRet = nullptr; //INT32
+    m_plfRet = nullptr; //INT64
+    if(sizeof(short) == iSize)
+        m_psfRet =(short*)pfRet;
+    else if(sizeof(int) == iSize)
+        m_pifRet =(int*)pfRet;
+    else if(sizeof(long) == iSize)
+        m_plfRet =(long*)pfRet;
+
+#if defined(CKLOG)
+    pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "==> Enter {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+
+//<== Leave {DevOpen}, file: {PinPadClassImpl_ZT598M.cpp}, line: {171}.
+CkLog_FuncTracer::~CkLog_FuncTracer()
+{
+#if defined(CKLOG)
+    if(nullptr != m_psfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , short RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_psfRet);
+    else if(nullptr != m_pifRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , int RetCode=[%d].", m_pszFunc, m_pszFile, m_nLine, *m_pifRet);
+    else if(nullptr != m_plfRet)
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d} , long RetCode=[%ld].", m_pszFunc, m_pszFile, m_nLine, *m_plfRet);
+    else
+        pLOG->TraceInFormat(TRM_INT, TRM_LV_COMMN, "<== Leave {%s}, file: {%s}, line: {%d}.", m_pszFunc, m_pszFile, m_nLine);
+#endif
+}
+

+ 334 - 0
DevAdapter/keba/PinPad.keba.1.1/CkLog.h

@@ -0,0 +1,334 @@
+// CkLog.h: interface for the CkLog class.
+#ifndef CKLOG_H
+#define CKLOG_H
+
+#define CMBLOG4            //是否使用招行日志库开关
+#define CKLOG              //是否使用公司日志库开关
+
+#include <stdio.h>
+#include <fstream>
+#include <string>
+#include <iostream>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+//#include <thread>
+#include <stdarg.h>
+#include <ctime>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include <sys/prctl.h>
+#include <sys/syscall.h>
+#include "wintypes.h"
+
+
+#if defined(CMBLOG4)
+#include "log4vendor.h"
+#endif
+
+#if defined(CKLOG)
+#include "CommDef.h"
+#include "TraceManager.h"
+#endif
+
+using namespace std;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 字节对齐设置为1 */
+//#pragma pack(push,1)
+#define TRACE_LEN			(MAXWORD / 2)
+
+
+#ifndef __linux__
+#include "windows.h"
+#define GetProcessId()  GetCurrentProcessId()
+#define GetThreadId()  GetCurrentThreadId()
+#else
+#define set_thread_name(name)   prctl(PR_SET_NAME, (char*)name)  //名字的长度最大为15字节,且应该以'\0'结尾  prctl(PR_SET_NAME, (char*)arg);
+#define get_thread_name(name)   prctl(PR_GET_NAME, (unsigned long)name)   //prctl(PR_GET_NAME, (unsigned long)name);
+#define GetProcessId()  getpid()               //或者使用  PID= syscall(__NR_getpid)
+#define GetThreadId()   syscall(__NR_gettid)   //或者使用  TID= syscall(SYS_gettid)
+#endif
+
+
+
+//获取完整路径中的文件名称
+char* GetFileName(char* pstrFullPath);
+void* GetPtr(void* pVoid=nullptr); //获取指针
+
+class CkLog_FuncTracer
+{
+public:
+    static bool m_bCkLogExtendInf;
+
+    CkLog_FuncTracer(const char* pszFunc, const char* pszFile, int nLine, void* pfRet, int iSize);
+    ~CkLog_FuncTracer();
+private:
+        const char* m_pszFunc;
+        const char* m_pszFile;
+        int m_nLine;
+        short* m_psfRet; //INT16
+        int* m_pifRet;   //INT32
+        long* m_plfRet;  //INT64
+};
+
+//declare
+#if defined(CMBLOG4)
+#define CMBLOG4_DECLARE()
+#else
+#define CMBLOG4_DECLARE()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_DECLARE()   \
+        CTraceManager *pLOG;
+#else
+#define CKLOG_DECLARE()
+#endif
+
+//initialize
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT(modName, logPath, fileName) \
+    do {   \
+    std::string err_msg=""; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config config_mod; \
+    config_mod.dev_name = modName; \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    config_mod.log_dir = logPath; \
+    cmb::log4vendor::init(config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT(modName, logPath, fileName)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_INIT_P(modName, logPath, fileName) \
+    do {   \
+    char err_msg[VENDOR_BUFF_SIZE] = { '\0' }; \
+    cmb::log4vendor::instance(); \
+    cmb::log_init_config_c config_mod; \
+    strcpy(config_mod.dev_name, modName); \
+    config_mod.log_type = CMB_LOG_TYPE_FILE; \
+    strcpy(config_mod.log_dir, logPath);    \
+    cmb::log4vendor::initp(&config_mod, err_msg); \
+    } while (0);
+#else
+#define CMBLOG4_INIT_P(modName, logPath, fileName)
+#endif
+
+
+#if defined(CKLOG)
+#define CKLOG_INIT(modName, logPath, fileName)   \
+        pLOG = new CTraceManager(); \
+        pLOG->Register(fileName);
+#else
+#define CKLOG_INIT(modName, logPath, fileName)
+#endif
+
+//EXTERN
+#if defined(CKLOG)
+#define CKLOG_EXTERN()   \
+        extern CTraceManager *pLOG;
+#else
+#define CKLOG_EXTERN()
+#endif
+
+//记录进出函数 FUNCTION //LOG4VTM_FUNCTION();
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT32(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (int*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT32(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define CMBLOG4_FUNCTION_INT64(RetVar)   \
+        cmb::log4vendor_tracer _FunctionLoggerCMB(__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (long*)GetPtr(RetVar));
+#else
+#define CMBLOG4_FUNCTION_INT64(RetVar)
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION()  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, nullptr, 0);
+#else
+#define CKLOG_FUNCTION()
+#endif
+
+#if defined(CKLOG)
+#define CKLOG_FUNCTION_INT(RetVar)  \
+            CkLog_FuncTracer _FunctionLoggerCK(__FUNCTION__, GetFileName(__FILE__), __LINE__, GetPtr(&RetVar), sizeof(RetVar));
+#else
+#define CKLOG_FUNCTION_INT(RetVar)
+#endif
+
+#if defined(CMBLOG4)
+#define LOG_CMBLOG4(logLevel, ...)  \
+    do {   \
+            int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+            char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+             memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+            int iCkLog_HeadLen = 0;                          \
+            if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+            iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+            snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+            LOG4VTM(logLevel, CkLog_Buf);      \
+    } while (0);
+#else
+#define LOG_CMBLOG4(logLevel, ...)
+#endif
+
+//bool TraceInFormat( int nType, int nLevel, char* lpszTraceData, ... );
+#if defined(CKLOG)
+#define LOG_CKLOG(logLevel, ...)  \
+    do {   \
+        int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+        char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+        memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+        int iCkLog_HeadLen = 0;                          \
+        if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+        iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+        snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+        pLOG->TraceInFormat(TRM_INT, logLevel, "%s", CkLog_Buf);  \
+        } while (0);
+#else
+#define LOG_CKLOG(logLevel, ...)
+#endif
+
+//bool TraceInBuffer( int nType, int nLevel, unsigned char* lpbyTraceData, unsigned int uDataLen, char* lpszMsg = NULL,
+//unsigned int* lpuMaskOffsetArray = NULL, unsigned int* lpuMaskLenArray = NULL, unsigned int uMaskCnt = 0 );
+#if defined(CKLOG)
+#define LOGX_CKLOG(logLevel, pData, Len, ...)  \
+    do {   \
+    int iCkLog_BufLen = snprintf(NULL, 0, ## __VA_ARGS__);  \
+    char CkLog_Buf[256 + iCkLog_BufLen + 1];         \
+    memset(CkLog_Buf, 0x00, sizeof(CkLog_Buf));      \
+    int iCkLog_HeadLen = 0;                          \
+    if(CkLog_FuncTracer::m_bCkLogExtendInf)         \
+    iCkLog_HeadLen = snprintf(CkLog_Buf, sizeof(CkLog_Buf), " Pid[%d],Tid[%d],{%s}[%d]<%s>: ", GetProcessId(), GetThreadId(), GetFileName(__FILE__), __LINE__, __FUNCTION__);  \
+    snprintf(CkLog_Buf + iCkLog_HeadLen, iCkLog_BufLen+1, ## __VA_ARGS__);  \
+    pLOG->TraceInBuffer(TRM_INT, logLevel, (unsigned char*)pData, (unsigned int)Len, CkLog_Buf);  \
+    } while (0);
+#else
+#define LOGX_CKLOG(logLevel, pData, Len, ...)
+#endif
+
+/*
+#define CMB_LOG_TRACE   1
+#define CMB_LOG_DEBUG   2
+#define CMB_LOG_INFO    3
+#define CMB_LOG_WARN    4
+#define CMB_LOG_ERROR   5
+#define CMB_LOG_FATAL   6
+*/
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+
+/*记录日志入口函数 Start*/
+//declare
+#define LOG_DECLARE()   \
+        CMBLOG4_DECLARE() \
+        CKLOG_DECLARE()
+
+//initialize
+#define LOG_INIT(modName, logPath, fileName) \
+    CMBLOG4_INIT(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_INIT_P(modName, logPath, fileName) \
+    CMBLOG4_INIT_P(modName, logPath, fileName) \
+    CKLOG_INIT(modName, logPath, fileName)
+
+#define LOG_EXTERN() \
+    CKLOG_EXTERN()
+
+//记录进出函数信息
+#define LOG_FUNCTION()  \
+    LOG4VTM_FUNCTION();  \
+    CKLOG_FUNCTION()
+
+//记录进出函数信息 带short返回值
+#define LOG_FUNCTION_INT16(RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带int返回值
+#define LOG_FUNCTION_INT32(RetVar)  \
+    CMBLOG4_FUNCTION_INT32(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+//记录进出函数信息 带long返回值
+#define LOG_FUNCTION_INT64(RetVar)  \
+    CMBLOG4_FUNCTION_INT64(&RetVar)  \
+    CKLOG_FUNCTION_INT(RetVar)
+
+
+#define LogE(...) \
+    do {   \
+    LOG_CMBLOG4(ERROR, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_ERROR, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogW(...) \
+    do {   \
+    LOG_CMBLOG4(WARN, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_WARNG, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogM(...) \
+    do {   \
+    LOG_CMBLOG4(INFO, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_COMMN, ## __VA_ARGS__);   \
+    } while (0);
+
+#define LogD(...) \
+    do {   \
+    LOG_CMBLOG4(DEBUG, ## __VA_ARGS__);     \
+    LOG_CKLOG(TRM_LV_DEBUG, ## __VA_ARGS__);   \
+    } while (0);
+
+/*
+#define TRM_LV_COMMN            (0x0001)
+#define TRM_LV_WARNG            (0x0002)
+#define TRM_LV_ERROR            (0x0004)
+#define TRM_LV_DEBUG            (0x0008)
+*/
+//记录内存数据 HEX 表示
+#define LogXE(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_ERROR, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXW(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_WARNG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXM(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_COMMN, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+#define LogXD(pData, Len, ...) \
+    do {   \
+    LOGX_CKLOG(TRM_LV_DEBUG, pData, Len, ## __VA_ARGS__); \
+    } while (0);
+
+/*记录日志入口函数 End*/
+
+/*   恢复字节对齐方式   */
+//#pragma pack(pop)
+
+#ifdef __cplusplus
+}       /*extern "C"*/
+#endif
+
+#endif

+ 402 - 212
DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.cpp

@@ -1,10 +1,6 @@
 #include "PinPadClassImpl_ZT598M.h"
 #include <cstdio>
 
-
-#pragma pack(push,1)
-
-
 #define DES_KEY_NAME_PREFIX "DESKey"
 #define SM_KEY_NAME_PREFIX "SMKey"
 #define MASTER_KEY_NAEM_LABEL "MASTER"
@@ -26,7 +22,6 @@
 #define LOG_LEVEL_NONE                (0x7FFFFFFF)
 
 
-#pragma pack(push, 1)
 
 typedef struct _key_ael
 {
@@ -55,14 +50,12 @@ typedef struct _file_ael_head
     BYTE ucReserve;
 }AELFILE, *LPAELFILE; //写入EPP的用户数据区时,会多写这个文件头再写Enlargekey.dat的数拿
 
-#pragma pack(pop)
-
 
 extern EPPExchangeDataField m_stExchangeSendData;
 extern EPPExchangeDataField m_stExchangeReceiveData;
 
 CINIAccess g_iniAccess;
-CTraceManager g_Trace;
+LOG_EXTERN()
 
 PinPadClassImpl::PinPadClassImpl() :
     m_bDevOpen(FALSE),
@@ -72,28 +65,35 @@ PinPadClassImpl::PinPadClassImpl() :
     m_wCryptMacAlgorithm(PIN_CRYPTTRIDESMAC),
     m_byPattern(PIN_CRYPT_TDES)
 {
-    //g_Trace.Register("zt598m1fd.log");
-    //g_Trace.Register("zt598m1fd.log");
-    g_Trace.Register("/home/keba/opt/rvc/dbg/PinPad/keba-PinPadDevCtrl.log");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_ERROR, "PinPad adapter is running......");
-
+    LOG_FUNCTION();
     m_LPPinpadStatus=new PinpadStatus;
     memset(m_LPPinpadStatus,0x00,sizeof (PinpadStatus));
     memset(&m_cfgSP, 0x00, sizeof(m_cfgSP));
     memset(&m_pinpadReadData, 0x00, sizeof(m_pinpadReadData));
-    LOG4VTM(INFO,("PinPad PinPadClassImpl creat function()!"));
+    LogM("PinPad PinPadClassImpl creat function()!");
+    ZT598M1FD_DevCtrl = NULL;
     ZT598M1FD_DevCtrl=new CZT598M1FD_DevCtrl();
+    if(ZT598M1FD_DevCtrl == NULL)
+    {
+        LogM("ZT598M1FD_DevCtrl = NULL");
+    }
 }
 
 PinPadClassImpl::~PinPadClassImpl()
 {
-    //LOG4VTM_FUNCTION();
+    LOG_FUNCTION();
+    if (ZT598M1FD_DevCtrl != NULL)
+    {
+        delete ZT598M1FD_DevCtrl;
+        ZT598M1FD_DevCtrl = NULL;
+    }
     return;
-
 }
 
 ErrorCodeEnum PinPadClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
+    LOG_FUNCTION();
+    LogM("<==Enter PinPadClassImpl::GetDevCategory()");
     CHAR szHardwareSN[16] = {0};
     CHAR szTemp[128] = {0};
     memset(devCategory.szType, 0, MAX_DEV_TYPE_LEN);
@@ -127,16 +127,19 @@ ErrorCodeEnum PinPadClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
         devCategory.eState = DEVICE_STATUS_NOT_READY;
         break;
     }
-    g_Trace.TraceInFormat(TRM_OUTPUT, TRM_LV_COMMN, "devCategory.szType=%s",devCategory.szType);
-    g_Trace.TraceInFormat(TRM_OUTPUT, TRM_LV_COMMN, "devCategory.szModel=%s", devCategory.szModel);
-    g_Trace.TraceInFormat(TRM_OUTPUT, TRM_LV_COMMN, "devCategory.szVendor=%s",devCategory.szVendor);
-    g_Trace.TraceInFormat(TRM_OUTPUT, TRM_LV_COMMN, "devCategory.eState=%d",devCategory.eState);
-    g_Trace.TraceInFormat(TRM_OUTPUT, TRM_LV_COMMN, "devCategory.version=%d.%d.%d.%d", devCategory.version.wMajor, devCategory.version.wMinor, devCategory.version.wRevision, devCategory.version.wBuild);
+    LogM( "devCategory.szType=%s",devCategory.szType);
+    LogM( "devCategory.szModel=%s", devCategory.szModel);
+    LogM( "devCategory.szVendor=%s",devCategory.szVendor);
+    LogM( "devCategory.eState=%d",devCategory.eState);
+    LogM( "devCategory.version=%d.%d.%d.%d", devCategory.version.wMajor, devCategory.version.wMinor, devCategory.version.wRevision, devCategory.version.wBuild);
+    LogM("==>Leave PinPadClassImpl::GetDevCategory()");
     return Error_Succeed;
 }
 
 ErrorCodeEnum PinPadClassImpl::Reset()
 {
+    LOG_FUNCTION();
+    LogM("<==Enter PinPadClassImpl::Reset()");
     ErrorCodeEnum eRet = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
     m_bDevOpen = FALSE;
@@ -145,31 +148,37 @@ ErrorCodeEnum PinPadClassImpl::Reset()
     {
         SaveErrorInfo(lRet);
     }
+    LogM("==>Leave PinPadClassImpl::Reset() = %d", lRet);
     return DevOpen(0, 0);
 }
 
 ErrorCodeEnum PinPadClassImpl::DevClose()
 {
+    LOG_FUNCTION();
+    LogM("<==Enter PinPadClassImpl::DevClose()");
     ZT598M1FD_DevCtrl->CloseDevice();
+    LogM("==>Leave PinPadClassImpl::DevClose()");
     return Error_Succeed;
 }
 
 ErrorCodeEnum PinPadClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
+    LogM("<==Enter PinPadClassImpl::GetLastErr()");
     devErrInfo.dwErrMsgLen = 0;
     memset(devErrInfo.szErrMsg, 0, sizeof(devErrInfo.szErrMsg));
 
     devErrInfo.dwErrMsgLen = (m_shErrCode << 16);
     sprintf(devErrInfo.szErrMsg, m_szErrMsg);
     devErrInfo.dwErrMsgLen += (strlen(devErrInfo.szErrMsg) & 0x0000FFFF);
-
+    LogM("==>Leave PinPadClassImpl::GetLastErr()");
     return Error_Succeed;
 }
 
 ErrorCodeEnum PinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 {
-    LOG4VTM_FUNCTION();
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::DevOpen(dwPort=%d, dwBaudRate=%d)", dwPort, dwBaudRate);
+    LOG_FUNCTION();
+
+    LogM("<==Enter PinPadClassImpl::DevOpen(dwPort=%d, dwBaudRate=%d)", dwPort, dwBaudRate);
     BYTE byBuffer[256] = {0};
     SYSTEMTIME systemTime;
     LONG lRet = STATUS_SUCCESS;
@@ -180,14 +189,15 @@ ErrorCodeEnum PinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
 
     if (ReadPinpadConfig(&ZT598M1FD_DevCtrl->m_stPinpadDevConfig, &m_cfgSP) == FALSE)
     {
-        //SaveErrorInfo(); //todo:
+        LogE("ReadPinpadConfig() failed");
+        LogM("==>Leave PinPadClassImpl::DevOpen() return Error_Param");
         return Error_Param;
     }
 
     lRet = ZT598M1FD_DevCtrl->InitDevice(m_sDevModel, sizeof(m_sDevModel), m_sSMVer, sizeof(m_sSMVer), m_szMainChipSN, sizeof(m_szMainChipSN));
     if(lRet != STATUS_SUCCESS)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::DevOpen()");
+        LogM("==>Leave PinPadClassImpl::DevOpen(): InitDevice()=%d", lRet);
         return SaveErrorInfo(lRet);
     }
     //根据能力调整硬件配置
@@ -195,7 +205,7 @@ ErrorCodeEnum PinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
     lRet = ZT598M1FD_DevCtrl->SetDeviceConfigure(m_cfgDev, m_LPPinpadStatus);
     if(lRet != STATUS_SUCCESS)
     {
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::DevOpen()");
+        LogM("==>Leave PinPadClassImpl::DevOpen(): SetDeviceConfigure=%d", lRet);
         return SaveErrorInfo(lRet);
     }
     if(PIN_INSTALL== m_cfgSP.byRemoveInstall||PIN_REMOVE==m_cfgSP.byRemoveInstall)
@@ -203,12 +213,12 @@ ErrorCodeEnum PinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
         lRet=ZT598M1FD_DevCtrl->RemoveInstallAuthen(m_cfgSP.byRemoveInstall,&systemTime,m_LPPinpadStatus);
         if(ERR_PIN_PHYSICALLY_UNINSTALLED==lRet||ERR_PIN_LOGICALLY_UNINSTALLED==lRet)
         {
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::DevOpen()");
+            LogM("==>Leave PinPadClassImpl::DevOpen():RemoveInstallAuthen=%d", lRet);
             return SaveErrorInfo(lRet);
         }
         if (STATUS_SUCCESS==lRet && PIN_REMOVE == m_cfgSP.byRemoveInstall)
         {
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::DevOpen()");
+            LogM("==>Leave PinPadClassImpl::DevOpen():AuthRemove OK");
             return Error_Succeed;
         }
         //软复位?
@@ -222,16 +232,16 @@ ErrorCodeEnum PinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
     }
     //ZT598M1FD_DevCtrl->DevReset(PIN_HARD_RESET_ALL, m_LPPinpadStatus);
     m_bDevOpen = TRUE;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::DevOpen()");
+    LogM("==>Leave PinPadClassImpl::DevOpen() return Error_Succeed");
     return Error_Succeed;
 }
 
 ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
 {
     LONG lRet = STATUS_SUCCESS;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::KeyRead()");
+    LogM("<==Enter PinPadClassImpl::KeyRead()");
     ErrorCodeEnum ret = Error_Succeed;
-    g_Trace.TraceIn(TRM_INPUT, TRM_LV_COMMN, "KeyRead():");
+    LogM("KeyRead():");
     BYTE byData[9] = {0};
     DWORD dwDataLen = sizeof(byData);
     BYTE byCurrentChar = 0;
@@ -247,13 +257,13 @@ ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
     {
         if (dwDataLen > 0)
         {
-           g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad input:%s; len:%d", byData, dwDataLen);
+           LogM("PinPad input:%s; len:%d", byData, dwDataLen);
         }
         dwCoveredDataSize = m_pinpadReadData.dwSize % MAX_PIN_READ_SIZE;
         if (dwCoveredDataSize + dwDataLen > MAX_PIN_READ_SIZE)//缓冲区将要溢兿
         {
             memcpy(m_pinpadReadData.data + dwCoveredDataSize, byData, MAX_PIN_READ_SIZE - dwCoveredDataSize);//填满缓冲区尾避
-           g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"m_pinpadReadData.data buffer full!");
+           LogM("m_pinpadReadData.data buffer full!");
             memcpy(m_pinpadReadData.data, byData + MAX_PIN_READ_SIZE - dwCoveredDataSize, dwDataLen - (MAX_PIN_READ_SIZE - dwCoveredDataSize));	//剩余数据复写到缓冲区墿
         }
         else
@@ -263,12 +273,12 @@ ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
         m_pinpadReadData.dwSize += dwDataLen;
         if (m_pinpadReadData.dwSize - m_pinpadReadData.dwCurrentRead > MAX_PIN_READ_SIZE)
         {
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Error! Data is covered!");
+            LogM("Error! Data is covered!");
         }
 
         if (m_nCurrentEntryMode == PIN_ENTRY)
         {
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::KeyRead()");
+            LogM("==>Leave PinPadClassImpl::KeyRead()");
             return PinRead(ch);
         }
 
@@ -286,14 +296,14 @@ ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
             {
                 ch = byCurrentChar;
                 //sensitive info
-                g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"KeyRead: return char:%c(0x%02X)", ch, ch);
-                g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"pinpadReadData.data:%s pinpadReadData.dwSize:%d pinpadReadData.dwCurrentRead:%d", m_pinpadReadData.data, m_pinpadReadData.dwSize, m_pinpadReadData.dwCurrentRead);
+                LogM("KeyRead: return char:%c(0x%02X)", ch, ch);
+                LogM("pinpadReadData.data:%s pinpadReadData.dwSize:%d pinpadReadData.dwCurrentRead:%d", m_pinpadReadData.data, m_pinpadReadData.dwSize, m_pinpadReadData.dwCurrentRead);
                 return Error_Succeed;
             }
             else
             {
                 //special char
-                g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"KeyRead: return special char:%c(0x%02X) ", byCurrentChar, byCurrentChar);
+                LogM("KeyRead: return special char:%c(0x%02X) ", byCurrentChar, byCurrentChar);
                 switch (byCurrentChar)
                 {
                 case 0x80:
@@ -311,8 +321,8 @@ ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
         else
         {
             ret = Error_DevCommFailed;
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"No Key Input!!!!");
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::KeyRead()");
+            LogM("No Key Input!!!!");
+            LogM("==>Leave PinPadClassImpl::KeyRead()");
             return Error_DevCommFailed;
         }
     }
@@ -324,13 +334,13 @@ ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
     }
     */
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::KeyRead()");
+    LogM("<==Leave PinPadClassImpl::KeyRead()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::PinRead(BYTE &ch)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::PinRead()");
+    LogM("==>Enter PinPadClassImpl::PinRead()");
 
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
@@ -374,7 +384,7 @@ ErrorCodeEnum PinPadClassImpl::PinRead(BYTE &ch)
 			{
                 lRet = ZT598M1FD_DevCtrl->DelEntryPinKey(DELETE_LAST_ENTERED, m_LPPinpadStatus);
 				m_nCurrentPinLen = m_nMaxPinLen;
-                g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"Exceed the maximum length.");
+                LogM("Exceed the maximum length.");
                 ret = SaveErrorInfo(STATUS_INVALID_PIN_LENGTH);
                 goto END_LABEL;
 			}
@@ -414,7 +424,7 @@ ErrorCodeEnum PinPadClassImpl::PinRead(BYTE &ch)
 		else
 		{
 			//special char
-            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"KeyRead: return special char:%c(0x%02X) ", byCurrentChar, byCurrentChar);
+            LogM("KeyRead: return special char:%c(0x%02X) ", byCurrentChar, byCurrentChar);
 			switch (byCurrentChar)
 			{
 			case 0x80:
@@ -439,8 +449,8 @@ ErrorCodeEnum PinPadClassImpl::PinRead(BYTE &ch)
             goto END_LABEL;
 		}
 		//sensitive info
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"PinRead: return char:%c(0x%02X)", ch, ch);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"pinpadReadData.dwSize:%d pinpadReadData.dwCurrentRead:%d", m_pinpadReadData.dwSize, m_pinpadReadData.dwCurrentRead);
+        LogM("PinRead: return char:%c(0x%02X)", ch, ch);
+        LogM("pinpadReadData.dwSize:%d pinpadReadData.dwCurrentRead:%d", m_pinpadReadData.dwSize, m_pinpadReadData.dwCurrentRead);
         goto END_LABEL;
 	}
 	else
@@ -450,15 +460,16 @@ ErrorCodeEnum PinPadClassImpl::PinRead(BYTE &ch)
         goto END_LABEL;
 	}
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::PinRead()");
+    LogM("<==Leave PinPadClassImpl::PinRead() return %d", ret);
     return ret;
 }
 
 LONG PinPadClassImpl::StartPinInputCommon(BYTE byLen)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::StartPinInputCommon()");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "byLen=%d", byLen);
+    LogM("==>Enter PinPadClassImpl::StartPinInputCommon()");
+    LogM("byLen=%d", byLen);
 
+    ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
     BYTE byData[9] = {0};
     DWORD dwDataLen = 0;
@@ -470,11 +481,11 @@ LONG PinPadClassImpl::StartPinInputCommon(BYTE byLen)
     if(!m_bDevOpen)
     {
         lRet = ERR_PIN_DEVNOTOPEN;
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
 
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "StartInput Mode: %s", m_nCurrentEntryMode == PIN_ENTRY ? "ENTRY_MODE_PIN" : m_nCurrentEntryMode == TEXT_ENTRY? "ENTRY_MODE_TEXT" : "ENTRY_MODE_ELSE");
+    LogM("StartInput Mode: %s", m_nCurrentEntryMode == PIN_ENTRY ? "ENTRY_MODE_PIN" : m_nCurrentEntryMode == TEXT_ENTRY? "ENTRY_MODE_TEXT" : "ENTRY_MODE_ELSE");
     if (m_nCurrentEntryMode != TEXT_ENTRY && byLen == 0)
     {
         lRet = ERR_PARAM_ERROR;
@@ -495,13 +506,14 @@ LONG PinPadClassImpl::StartPinInputCommon(BYTE byLen)
     //lRet = ZT598M1FD_DevCtrl->ReadEntryText(byTextBufer, sizeof(byTextBufer));
     //lRet = ZT598M1FD_DevCtrl->ReadEntryText(byTextBufer, sizeof(byTextBufer));
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::StartPinInputCommon()");
-    return lRet;
+    ret = SaveErrorInfo(lRet);
+    LogM("<==Leave PinPadClassImpl::StartPinInputCommon()return %d", ret);
+    return ret;
 }
 ErrorCodeEnum PinPadClassImpl::StartPinInput(BYTE byLen)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::StartPinInput()");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "byLen=%d", byLen);
+    LogM("==>Enter PinPadClassImpl::StartPinInput()");
+    LogM("byLen=%d", byLen);
 
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
@@ -514,14 +526,14 @@ ErrorCodeEnum PinPadClassImpl::StartPinInput(BYTE byLen)
         goto END_LABEL;
     }
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::StartPinInput()");
+    LogM("<==Leave PinPadClassImpl::StartPinInput()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::StartPinInputConfirm(BYTE byLen)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::StartPinInputConfirm()");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "byLen=%d", byLen);
+    LogM("==>Enter PinPadClassImpl::StartPinInputConfirm()");
+    LogM("byLen=%d", byLen);
 
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
@@ -534,19 +546,19 @@ ErrorCodeEnum PinPadClassImpl::StartPinInputConfirm(BYTE byLen)
         goto END_LABEL;
     }
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::StartPinInputConfirm()");
+    LogM("<==Leave PinPadClassImpl::StartPinInputConfirm()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::StartPlainInput()
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::StartPlainInput()");
+    LogM("==>Enter PinPadClassImpl::StartPlainInput()");
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
     if(!m_bDevOpen)
     {
         ret = SaveErrorInfo(ERR_PIN_DEVNOTOPEN);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
     m_nCurrentEntryMode = TEXT_ENTRY;
@@ -557,20 +569,20 @@ ErrorCodeEnum PinPadClassImpl::StartPlainInput()
         goto END_LABEL;
     }
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::StartPlainInput()");
+    LogM("<==Leave PinPadClassImpl::StartPlainInput() return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::StopInput()
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::StopInput()");
+    LogM("==>Enter PinPadClassImpl::StopInput()");
 
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
     if(!m_bDevOpen)
     {
         ret = SaveErrorInfo(ERR_PIN_DEVNOTOPEN);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
     m_bConfirm = false;
@@ -584,15 +596,15 @@ ErrorCodeEnum PinPadClassImpl::StopInput()
         goto END_LABEL;
     }
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::StopInput()");
+    LogM("<==Leave PinPadClassImpl::StopInput()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::LoadMasterKey(MasterKeyParam masterKey)
 {
     ErrorCodeEnum ret = Error_Succeed;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::LoadMasterKey()");
-    g_Trace.TraceInFormat(TRM_INPUT, TRM_LV_COMMN, "masterKey.smFlag=%d masterKey.dwSN=%d masterkey.keylength=%d", masterKey.smFlag, masterKey.dwSN, strlen((CHAR*)masterKey.key));
+    LogM("==>Enter PinPadClassImpl::LoadMasterKey()");
+    LogM( "masterKey.smFlag=%d masterKey.dwSN=%d masterkey.keylength=%d", masterKey.smFlag, masterKey.dwSN, strlen((CHAR*)masterKey.key));
 
     LONG lRet = STATUS_SUCCESS;
     CHAR szKeyName[32] = {0};
@@ -616,13 +628,13 @@ ErrorCodeEnum PinPadClassImpl::LoadMasterKey(MasterKeyParam masterKey)
     if(!m_bDevOpen)
     {
         ret = SaveErrorInfo(ERR_PIN_DEVNOTOPEN);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
     if (masterKey.smFlag > 1 || masterKey.smFlag < 0)
     {
         ret = SaveErrorInfo(ERR_PARAM_ERROR);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:masterkey.smFlag is invalid param");
+        LogM("PinPad:masterkey.smFlag is invalid param");
         return Error_Param;
     }
 
@@ -641,15 +653,15 @@ ErrorCodeEnum PinPadClassImpl::LoadMasterKey(MasterKeyParam masterKey)
     }
 
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::LoadMasterKey()");
+    LogM("<==Leave PinPadClassImpl::LoadMasterKey()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::LoadWorkingKey(WorkKeyParam wkKey)
 {
     ErrorCodeEnum ret = Error_Succeed;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::c()");
-    g_Trace.TraceInFormat(TRM_INPUT, TRM_LV_COMMN, "wkKey.smFlag=%d wkKey.dwWorkingSN=%d wkKey.dwMasterSN=%d swkKey.keylength=%d", wkKey.smFlag, wkKey.dwWorkingSN, wkKey.dwMasterSN, strlen((CHAR*)wkKey.key));
+    LogM("==>Enter PinPadClassImpl::LoadWorkingKey()");
+    LogM( "wkKey.smFlag=%d wkKey.dwWorkingSN=%d wkKey.dwMasterSN=%d swkKey.keylength=%d", wkKey.smFlag, wkKey.dwWorkingSN, wkKey.dwMasterSN, strlen((CHAR*)wkKey.key));
 
     LONG lRet = STATUS_SUCCESS;
     CHAR szKeyName[32] = {0};
@@ -673,14 +685,14 @@ ErrorCodeEnum PinPadClassImpl::LoadWorkingKey(WorkKeyParam wkKey)
     if(!m_bDevOpen)
     {
         ret = SaveErrorInfo(ERR_PIN_DEVNOTOPEN);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
 
     if (wkKey.smFlag > 1 || wkKey.smFlag < 0)
     {
         ret = SaveErrorInfo(ERR_PARAM_ERROR);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:wkKey.smFlag is invalid param");
+        LogM("PinPad:wkKey.smFlag is invalid param");
         return Error_Param;
     }
 
@@ -701,24 +713,24 @@ ErrorCodeEnum PinPadClassImpl::LoadWorkingKey(WorkKeyParam wkKey)
     }
 
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::LoadWorkingKey()");
+    LogM("<==Leave PinPadClassImpl::LoadWorkingKey()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::ActiveWorkingKey(DWORD dwMkSN, DWORD dwWkSN)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::ActiveWorkingKey()");
-    g_Trace.TraceInFormat(TRM_INPUT, TRM_LV_COMMN, "Active: dwMkSN=%d dwWkSN=%d", dwMkSN, dwWkSN);
+    LogM("<==Enter PinPadClassImpl::ActiveWorkingKey()");
+    LogM( "Active: dwMkSN=%d dwWkSN=%d", dwMkSN, dwWkSN);
     m_dwMasterKeySN = dwMkSN;
     m_dwWorkingKeySN = dwWkSN;
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::ActiveWorkingKey()");
+    LogM("<==Leave PinPadClassImpl::ActiveWorkingKey()return Error_Succeed");
     return Error_Succeed;
 }
 
 ErrorCodeEnum PinPadClassImpl::SetParam(SetParamTypeEnum eType, SetParamValueEnum eValue)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::SetParam()");
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "eType=%d, eValue=%d", eType, eValue);
+    LogM("<==Enter PinPadClassImpl::SetParam()");
+    LogM("eType=%d, eValue=%d", eType, eValue);
     switch (eType)
     {
     case EPP_PT_SET_ENCRYPT_METHOD:
@@ -804,15 +816,15 @@ ErrorCodeEnum PinPadClassImpl::SetParam(SetParamTypeEnum eType, SetParamValueEnu
         switch (m_enumPinAlgrithm)
         {
         case EPP_PIN_ALGO_ISO9564_1_ANSI:
-            //m_bSM = FALSE;
+            m_bSM = FALSE;
             m_wPinFormat = PIN_FORMANSI;
             break;
         case EPP_PIN_ALGO_IBM3624:
-            //m_bSM = FALSE;
+            m_bSM = FALSE;
             m_wPinFormat = PIN_FORM3624;
             break;
         case EPP_PIN_ALGO_SM4:
-            //m_bSM = TRUE;
+            m_bSM = TRUE;
             m_wPinFormat = PIN_FORMISO0;  //TODO:WFS_PIN_FORMANSI or WFS_PIN_FORMISO0?
             break;
         default:
@@ -864,30 +876,29 @@ ErrorCodeEnum PinPadClassImpl::SetParam(SetParamTypeEnum eType, SetParamValueEnu
         m_byPattern = PIN_CRYPT_TDES;
         break;
     }
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::SetParam()");
+    LogM("==>Leave PinPadClassImpl::SetParam()return Error_Succeed");
     return Error_Succeed;
 }
 
 ErrorCodeEnum PinPadClassImpl::EncryptData(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo)
 { 
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::EncryptData()");
-    ErrorCodeEnum lRet = EncryptCommon(srcInfo, destInfo);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::EncryptData()");
-    return lRet;
+    LogM("<==Enter PinPadClassImpl::EncryptData()");
+    ErrorCodeEnum ret = EncryptCommon(srcInfo, destInfo);
+    LogM("==>Leave PinPadClassImpl::EncryptData()return %d", ret);
+    return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::MacEncrypt()");
-    ErrorCodeEnum lRet = EncryptCommon(srcInfo, destInfo, TRUE);
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::MacEncrypt()");
-    return lRet;
+    LogM("<==Enter PinPadClassImpl::MacEncrypt()");
+    ErrorCodeEnum ret = EncryptCommon(srcInfo, destInfo, TRUE);
+    LogM("==>Leave PinPadClassImpl::MacEncrypt()return %d", ret);
+    return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::GetPinBlock(PinBlock &block)
 {
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Enter PinPadClassImpl::GetPinBlock()");
-
+    LogM("==>Enter PinPadClassImpl::GetPinBlock()");
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
 
@@ -907,9 +918,10 @@ ErrorCodeEnum PinPadClassImpl::GetPinBlock(PinBlock &block)
     if(!m_bDevOpen)
     {
         ret = SaveErrorInfo(ERR_PIN_DEVNOTOPEN);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
+    lRet = ZT598M1FD_DevCtrl->SetEntryMode(CLOSE_ENTRY, 0xFFFF, 0xFFFF);
     if (sizeof(block.data) == 0 || block.data == NULL)
     {
         ret = SaveErrorInfo(ERR_PIN_INVALIDDATA);
@@ -927,12 +939,13 @@ ErrorCodeEnum PinPadClassImpl::GetPinBlock(PinBlock &block)
     block.dwSize = CDataConvert::HexToString(byResult, wResultLen, (CHAR*)block.data, sizeof(block.data));
 
 END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Leave PinPadClassImpl::GetPinBlock()");
+    LogM("<==Leave PinPadClassImpl::GetPinBlock()return %d", ret);
     return ret;
 }
 
 ErrorCodeEnum PinPadClassImpl::SetAccNo(AccountInfo accInfo)
 {
+    LogM("==>Enter PinPadClassImpl::SetAccNo():%s", accInfo.account);
     if (accInfo.dwAccLen == 0 || accInfo.dwAccLen >= MAX_ACCOUNT_LEN)
     {
         SaveErrorInfo(ERR_PIN_INVALIDCUSTOMERDATA);
@@ -942,13 +955,15 @@ ErrorCodeEnum PinPadClassImpl::SetAccNo(AccountInfo accInfo)
     //ckLog::Print(CMB_LOG_TRACE, "SetAccNo()->accInfo.dwAccLen = %d, accInfo.account = %s", accInfo.dwAccLen, accInfo.account);
     memcpy(m_accountInfo.account, accInfo.account, MAX_ACCOUNT_LEN);
     m_accountInfo.dwAccLen = accInfo.dwAccLen;
+    LogM("<==Leave PinPadClassImpl::SetAccNo()return Error_Succeed");
     return Error_Succeed;
 }
 
 int PinPadClassImpl::GetEncryptFunc()
 {
+    LogM("==>Enter PinPadClassImpl::GetEncryptFunc()");
+    LogM("<==Leave PinPadClassImpl::GetEncryptFunc()return 0x03");
     return 0x03;
-    //return Error_Succeed;
 }
 
 BOOL PinPadClassImpl::ReadPinpadConfig(/*LPCTSTR lpszSPIniPath,*/
@@ -989,7 +1004,7 @@ BOOL PinPadClassImpl::ReadPinpadConfig(/*LPCTSTR lpszSPIniPath,*/
 
     //memcpy(lpDevConfig->sDESKeyIndexFilePath, "/home/keba/CBPM.ADAPTER/keba/assets/DesKeyMap.dat", sizeof("/home/keba/CBPM.ADAPTER/keba/assets/DesKeyMap.dat"));
     //memcpy(lpDevConfig->sSM4KeyIndexFilePath, "/home/keba/CBPM.ADAPTER/keba/assets/SM4KeyMap.dat", sizeof("/home/keba/CBPM.ADAPTER/keba/assets/SM4KeyMap.dat"));
-    lpDevConfig->bKeyIndexFileSaveToEPP = TRUE;
+    lpDevConfig->bKeyIndexFileSaveToEPP = FALSE;
     lpDevConfig->byRemoveInstall = AUTH_INSTALL;
     memcpy(szKeyCode, "3132331B00000000343536080000000037383920000000002E304F0D00000000", sizeof("3132331B00000000343536080000000037383920000000002E304F0D00000000"));
     CDataConvert::StringToHex(szKeyCode, sizeof(szKeyCode), (LPBYTE)lpDevConfig->byKeyCodeMatrix, sizeof(lpDevConfig->byKeyCodeMatrix));
@@ -1008,7 +1023,7 @@ BOOL PinPadClassImpl::ReadPinpadConfig(/*LPCTSTR lpszSPIniPath,*/
 ErrorCodeEnum PinPadClassImpl::EncryptCommon(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo, bool bMac)
 {
     //todo: deal with byIV
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "<==Enter PinPadClassImpl::EncryptCommon()");
+    LogM("<==Enter PinPadClassImpl::EncryptCommon()");
 
     ErrorCodeEnum ret = Error_Succeed;
     LONG lRet = STATUS_SUCCESS;
@@ -1040,7 +1055,7 @@ ErrorCodeEnum PinPadClassImpl::EncryptCommon(EnDecryptInfo srcInfo, EnDecryptInf
     if(!m_bDevOpen)
     {
         ret = SaveErrorInfo(ERR_PIN_DEVNOTOPEN);
-        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "PinPad:Device not open");
+        LogM("PinPad:Device not open");
         goto END_LABEL;
     }
     if (srcInfo.dwSize == 0 || srcInfo.dwSize > MAX_EN_DECRYPT_DATA_SIZE)
@@ -1332,7 +1347,7 @@ ErrorCodeEnum PinPadClassImpl::EncryptCommon(EnDecryptInfo srcInfo, EnDecryptInf
     }
     destInfo.dwSize = CDataConvert::HexToString(lpbyResult, wResultLen, (CHAR*)destInfo.data, sizeof(destInfo.data));
     END_LABEL:
-    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN, "==>Leave PinPadClassImpl::EncryptCommon()");
+    LogM("==>Leave PinPadClassImpl::EncryptCommon()");
     return ret;
 }
 ErrorCodeEnum PinPadClassImpl::SaveErrorInfo(int iErrCode)
@@ -1340,182 +1355,357 @@ ErrorCodeEnum PinPadClassImpl::SaveErrorInfo(int iErrCode)
     //LOG4VTM_FUNCTION();
     ErrorCodeEnum ret;
     memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
+    strcpy(m_szErrMsg, ZT598M1FD_DevCtrl->m_stPinpadStatus.sDescription);
+
     switch (iErrCode)
     {
     case STATUS_SUCCESS:
         m_shErrCode = DEC_SUCCESS;
-        strcpy(m_szErrMsg, "正常");
         ret = Error_Succeed;
         break;
-    case ERR_PIN_BATTERY_LOW:
-        m_shErrCode = DEC_EPP_BATTERY_LOWORERROR;
-        strcpy(m_szErrMsg, "密码键盘电量仿");
-        ret = Error_Succeed;
+    case STATUS_INVALID_COMMAND_LENGTH:
+    case ERR_COMMON_ERROR:
+        m_shErrCode = DEC_INVALID_PARAMETER;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_KEYID:
+        m_shErrCode = DEC_INVALID_KEY_ID;
+        ret = Error_Param;
+        break;
+    case STATUS_KEYID_NOT_EXIST:
+        m_shErrCode = DEC_KEY_NOT_EXIST;
+        ret = Error_Param;
+        break;
+    case STATUS_KEYID_LOCKED:
+        m_shErrCode = DEC_KEY_LOCKED;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_WRITE_MODE:
+    case STATUS_INVALID_IV_ATTRIBUTES:
+    case STATUS_INVALID_KEY_ATTRIBUTES:
+    case STATUS_KEY_ATTRIBUTES_NOT_MATCHED:
+    case STATUS_KEY_USEVIOLATION:
+    case STATUS_KEY_NOTALLOWED:
+        m_shErrCode = DEC_E_KEY_LOST;
+        ret = Error_Param;
+        break;
+    case STATUS_KCV_VERIFICATION_FAIL:
+    case STATUS_INVALID_CHECK_MODE:
+    case STATUS_INVALID_VERIFY_MODE:
+        m_shErrCode = DEC_E_KCV_VERIFICATION;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_AUTHENTICATION_MODE:
+        m_shErrCode = DEC_INVALID_AUTHENTICATION_MODE;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_MACING:
+        m_shErrCode = DEC_INVALID_MAC;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_MODE:
+        m_shErrCode = DEC_INVALID_MODE;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_DATA_SPECIFIED:
+        m_shErrCode = DEC_INVALID_PARAMETER;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_KEY_VALUE:
+    case STATUS_KEY_INVALID:
+        m_shErrCode = DEC_INVALID_KEY_VALUE;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_KEY_LENGTH:
+    case STATUS_INVALID_LENGTH_OR_SUM:
+        m_shErrCode = DEC_INVALID_KEY_LEN;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_OFFSET_LENGTH:
+        m_shErrCode = DEC_INVALID_LENGTH;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_PIN_LENGTH:
+    case STATUS_PIN_NOPIN:
+    case STATUS_INVALID_PIN2_LENGTH:
+        m_shErrCode = DEC_INVALID_PIN_LEN;
+        ret = Error_Param;
+        break;
+    case STATUS_PIN_VERIFICATION_FAIL:
+    case STATUS_PIN2_VERIFICATION_FAIL:
+        m_shErrCode = DEC_VERIFICATION_FAILED;
+        ret = Error_Param;
+        break;
+    case STATUS_PIN_ENCRYPTION_SUSPENDED:
+        m_shErrCode = DEC_ENCRYPT_SUSPENDED;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_MODULUS_LENGTH:
+    case ERR_PIN_INVALID_MOD_LEN:
+        m_shErrCode = DEC_INVALID_MODULE_LEN;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_EXPONENT_LENGTH:
+        m_shErrCode = DEC_INVALID_EXPONENT_LEN;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_PKCS_STRUCTURE:
+    case STATUS_INVALID_PKCS_PADDING:
+        m_shErrCode = DEC_INVALID_PKCS;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_SIGNATURE_LENGTH:
+    case ERR_PIN_SIG_NOT_SUPP:
+    case ERR_PIN_SIG_KEYNOTFOUND:
+    case ERR_PIN_SIG_KEYUSEVIOLATION:
+
+        m_shErrCode = DEC_INVALID_SIGNATURE;
+        ret = Error_Param;
+        break;
+    case STATUS_SIGNATURE_VERIFICATION_FAIL:
+        m_shErrCode = DEC_E_SIGNATURE_VERIFICATION;
+        ret = Error_Param;
+        break;
+    case STATUS_KEY_NOT_LOADED:
+        m_shErrCode = DEC_KEY_NOT_LOADED;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_CERTIFICATE_FROMAT:
+    case STATUS_INVALID_CERTIFICATE_VERSION:
+    case STATUS_INVALID_CERTIFICATE_VALIDITY:
+    case STATUS_INVALID_CERTIFICATE_ISSUER:
+    case STATUS_INVALID_CERTIFICATE_SUBJECT:
+    case STATUS_INVALID_CERTIFICATE_ALGOR:
+    case STATUS_CERTIFICATE_NOT_EXIST:
+        m_shErrCode = DEC_INVALID_CERTIFICATE;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_DATA_DISABLEED:
+        m_shErrCode = DEC_INVALID_DATA;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_USERBLOCK_ADDRESS:
+        m_shErrCode = DEC_INVALID_USER_BLOCK_ADDR;
+        ret = Error_Param;
+        break;
+    case STATUS_INVALID_SERIALNO_SPECIFIED:
+        m_shErrCode = DEC_E_SERIAL_NUMBER;
+        ret = Error_Param;
+        break;
+    case STATUS_NO_CARD:
+    case STATUS_CARD_APDU_ERROR:
+        m_shErrCode = DEC_E_SERIAL_NUMBER;
+        ret = Error_Param;
+        break;
+    case STATUS_EMV_NOT_INITIALIZED:
+    case STATUS_EPP_NOT_INITIALIZED:
+    case ERR_PIN_NEED_INITIALIZATION:
+        m_shErrCode = DEC_EPP_NOT_INITIALIZED;
+        ret = Error_Param;
+        break;
+    case STATUS_EMV_NOT_READY:
+        m_shErrCode = DEC_EMV_NOT_READY;
+        ret = Error_Param;
+        break;
+    case STATUS_EMV_NEED_REINITIALIZE:
+        m_shErrCode = DEC_EMV_NEED_REINITIALIZE;
+        ret = Error_Param;
+        break;
+    case STATUS_EMV_TIMEOUT:
+        m_shErrCode = DEC_EMV_TIMEOUT;
+        ret = Error_Param;
+        break;
+    case STATUS_EMV_ALREADY_INITIALIZED:
+        m_shErrCode = DEC_EMV_INIT_ALREADY;
+        ret = Error_Param;
+        break;
+    case STATUS_ALGORITHMNOTSUPP:
+        m_shErrCode = DEC_ALGORITHM_UNSUPPORTED;
+        ret = Error_Param;
+        break;
+    case STATUS_COMMANDUPSUPP:
+    case STATUS_SM2_ENCRYPT_FAILURE:
+    case STATUS_SM2_DECRYPT_FAILURE:
+    case STATUS_SM2_SIGNATURE_FAILURE:
+    case STATUS_SM2_VERSIG_FAILURE:
+    case STATUS_SM2_KEYEXC_FAILURE:
+    case STATUS_SM2_VER_KEYEXC_FAILURE:
+    case STATUS_FW_VERIFY_FIAL:
+    case STATUS_FW_WRITE_FAIL:
+    case STATUS_FW_EARSE_FAIL:
+    case ERR_PIN_INVALID_FW_FILE:
+        m_shErrCode = DEC_COMMAND_UNSUPPORTED;
+        ret = Error_Param;
+        break;
+    case STATUS_ERROR_INTER_ERROR:
+    case STATUS_MRAM_HARDWARE_ERROR:
+    case STATUS_OTHER_ABNORMAL_ERROR:
+    case ERR_INTERNAL_ERROR:
+        m_shErrCode = DEC_HARDWARE;
+        ret = Error_Hardware;
+        break;
+    case STATUS_COMMAND_LOCK:
+        m_shErrCode = DEC_COMMAND_LOCKED;
+        ret = Error_Hardware;
+        break;
+    case STATUS_INVALID_COMMAND_MAC:
+        m_shErrCode = DEC_INVALID_MAC;
+        ret = Error_Param;
+        break;
+    case STATUS_AUTHENTICATION_FAILED:
+    case STATUS_NOT_AUTHENTE:
+        m_shErrCode = DEC_EPP_NOT_AUTHORIZED;
+        ret = Error_Param;
+        break;
+    case STATUS_EPP_ALREADY_INITIALIZED:
+        m_shErrCode = DEC_EPP_INIT_ALREADY;
+        ret = Error_Hardware;
+        break;
+    case STATUS_CERTIFICATE_ALREADY:
+        m_shErrCode = DEC_EPP_CERTIFICATE_ALREADY;
+        ret = Error_Hardware;
+        break;
+    case STATUS_PHYSICALLY_NOT_INSTALLED:
+    case ERR_PIN_PHYSICALLY_UNINSTALLED:
+        m_shErrCode = DEC_EPP_NOT_PHYSICALLY_INSTALLED;
+        ret = Error_Hardware;
+        break;
+    case STATUS_LOGICALLY_NOT_INSTALLED:
+    case ERR_PIN_LOGICALLY_UNINSTALLED:
+        m_shErrCode = DEC_EPP_NOT_LOGICALLY_INSTALLED;
+        ret = Error_Hardware;
+        break;
+    case STATUS_INPUT_KEY_TIMEOUT:
+        m_shErrCode = DEC_PRESS_KEY_TIMEOUT;
+        ret = Error_Param;
+        break;
+    case STATUS_INVLAID_PASSWORD_LENGTH:
+        m_shErrCode = DEC_INVALID_PASSWORD_LEN;
+        ret = Error_Hardware;
+        break;
+    case STATUS_INVALID_PASSWORD:
+        m_shErrCode = DEC_INVALID_PASSWORD;
+        ret = Error_Hardware;
+        break;
+    case STATUS_INPUT_PASSWORD_LOCKED:
+        m_shErrCode = DEC_PASSWORD_UPDATE_CMD_LOCKED;
+        ret = Error_Hardware;
+        break;
+    case STATUS_SYSTEM_TIME_NOT_SET:
+        m_shErrCode = DEC_SYSTEM_TIME_NOT_SET;
+        ret = Error_Hardware;
+        break;
+    case STATUS_SYSTEM_TIME_ALREADY_SET:
+        m_shErrCode = DEC_SYSTEM_TIME_SET_ALREADY;
+        ret = Error_Hardware;
+        break;
+    case STATUS_DEVICE_TAMPERED:
+        m_shErrCode = DEC_DEVICE_TAMPERED;
+        ret = Error_Hardware;
+        break;
+    case STATUS_A980_NO_RESPONSE:
+        m_shErrCode = DEC_COMMUNICATION_FAILED;
+        ret = Error_Hardware;
+        break;
+    case STATUS_INVALID_SM4_KEYVAL:
+        m_shErrCode = DEC_INVALID_SM4_KEY;
+        ret = Error_Param;
+        break;
+    case STATUS_EXTERNAL_FALSH_WRITE_ERROR:
+    case STATUS_FLASH_CRC_CHECK_ERROR:
+        m_shErrCode = DEC_E_EXTERNAL_FLASH_HARDWARE;
+        ret = Error_Hardware;
+        break;
+    case STATUS_ADDRESS_OUTRANG:
+        m_shErrCode = DEC_INVALID_USER_BLOCK_ADDR;
+        ret = Error_Param;
         break;
     case ERR_EXCHANGE_FAILED:
         m_shErrCode = DEC_DEV_NOT_FOUND;
-        strcpy(m_szErrMsg, "密码键盘通讯故障");
         ret = Error_DevNotAvailable;
         break;
-    case STATUS_INVALID_DATA_SPECIFIED:
+    case ERR_PIN_AUTHENTICATION_FAILED:
+    case ERR_PIN_HOST_AUTHENTICATE_FAILED:
+        m_shErrCode = DEC_INVALID_AUTHENTICATION_MODE;
+        ret = Error_DevNotAvailable;
+        break;
+    case ERR_PIN_INVALIDCUSTOMERDATA:
+        m_shErrCode =DEC_INVALID_PAN;
+        ret = Error_Param;
+        break;
+    case ERR_PIN_ENC_KEYNOTFOUND:
+    case ERR_PIN_KEYNOTFOUND:
+    case ERR_PIN_STARTVALUE_KEYNOTFOUND:
+        m_shErrCode = DEC_INVALID_KEY_ID;
+        ret = Error_Param;
+        break;
+    case ERR_PIN_BATTERY_LOW:
+        m_shErrCode = DEC_EPP_BATTERY_LOWORERROR;
+        ret = Error_Succeed;
+        break;
     case ERR_PIN_INVALIDDATA:
         m_shErrCode = DEC_INVALID_PARAMETER;
-        strcpy(m_szErrMsg, "密码键盘invalid parameter");
         ret = Error_Param;
         break;
-    case ERR_PIN_INVALIDCUSTOMERDATA:
-        m_shErrCode =DEC_INVALID_PARAMETER;
-        strcpy(m_szErrMsg, "PinPad:Invalid AccNo");
-        ret = Error_Param;
     case ERR_PARAM_ERROR:
         m_shErrCode =DEC_INVALID_PARAMETER;
-        strcpy(m_szErrMsg, "PinPad:Invalid Param");
         ret = Error_Param;
+        break;
     case ERR_PIN_DEVNOTOPEN:
         m_shErrCode =DEC_DEV_NOT_OPENED;
-        strcpy(m_szErrMsg, "PinPad:DevNotOpen");
         ret = Error_DevNotAvailable;
+        break;
     case ERR_PIN_INVALIDKEYLENGTH:
         m_shErrCode = DEC_INVALID_KEY_LEN;
-        strcpy(m_szErrMsg, "PinPad:Invalid Key Length");
         ret = Error_Param;
         break;
     case ERR_PIN_ENC_KEYUSEVIOLATION:
     case ERR_PIN_USEVIOLATION:
     case ERR_PIN_STARTVALUE_KEYUSEVIOLATION:
         m_shErrCode = DEC_KEY_VIOLATION;
-        strcpy(m_szErrMsg, "PinPad:Invalid key use");
-        ret = Error_Param;
-        break;
-    case ERR_PIN_ENC_KEYNOTFOUND:
-    case ERR_PIN_KEYNOTFOUND:
-    case ERR_PIN_STARTVALUE_KEYNOTFOUND:
-        m_shErrCode = DEC_INVALID_KEY_ID;
-        strcpy(m_szErrMsg, "PinPad:KeyNotFound");
         ret = Error_Param;
         break;
     case ERR_PIN_DUPLICATEKEY:
         m_shErrCode = DEC_KEY_LOADED_ALREADY;
-        strcpy(m_szErrMsg, "PinPad:Duplicate Key");
-        ret = Error_Param;
-        break;
-    case ERR_INTERNAL_ERROR:
-        m_shErrCode = DEC_INVALID_PARAMETER;
-        strcpy(m_szErrMsg, "PinPad:Adapter Internal Error");
         ret = Error_Param;
         break;
     case ERR_DATA_TOO_LONG:
         m_shErrCode = DEC_INVALID_PARAMETER;
-        strcpy(m_szErrMsg, "PinPad:Data too long");
         ret = Error_Param;
     case ERR_PIN_NOKEYRAM:
         m_shErrCode = DEC_KEY_NO_MORE_SPACE;
-        strcpy(m_szErrMsg, "PinPad:Key Ram is full");
-        ret = Error_DevNotAvailable;
-        break;
-    case ERR_PIN_AUTHENTICATION_FAILED:
-        m_shErrCode = DEC_INVALID_AUTHENTICATION_MODE;
-        strcpy(m_szErrMsg, "PinPad:Authentication failed");
-        ret = Error_DevNotAvailable;
+        ret = Error_Hardware;
         break;
     case ERR_PIN_CHECK_KCV_FAILED:
         m_shErrCode = DEC_VERIFICATION_FAILED;
-        strcpy(m_szErrMsg, "PinPad:Check KCV failed");
-        ret = Error_Param;
-        break;
-    case STATUS_ALGORITHMNOTSUPP:
-        m_shErrCode = DEC_ALGORITHM_UNSUPPORTED;
-        strcpy(m_szErrMsg, "PinPad:Algorithm UnSupported");
-        ret = Error_Param;
-        break;
-    case STATUS_INVALID_MODE:
-        m_shErrCode = DEC_INVALID_MODE;
-        strcpy(m_szErrMsg, "PinPad:Mode UnSupported");
-        ret = Error_Param;
-        break;
-    case STATUS_INVALID_COMMAND_LENGTH:
-        m_shErrCode = DEC_INVALID_PARAMETER;
-        strcpy(m_szErrMsg, "PinPad:Command Invalid Length");
         ret = Error_Param;
         break;
     case ERR_PIN_PRESS_KEY_OVERTIME:
         m_shErrCode = DEC_PRESS_KEY_TIMEOUT;
-        strcpy(m_szErrMsg, "PinPad:KEY LONG PRESSED");
         ret = Error_DevCommFailed;
         break;
     case ERR_PIN_TIMEOUT:
         m_shErrCode = DEC_PRESS_KEY_TIMEOUT;
-        strcpy(m_szErrMsg, "PinPad:KEY LONG PRESSED");
         ret = Error_DevCommFailed;
         break;
     case ERR_PIN_KEY_CODE_NOT_FOUND:
         m_shErrCode = DEC_UNEXPECTED_RET_VALUE;
-        strcpy(m_szErrMsg, "PinPad:READ unexpected KEY");
         ret = Error_DevCommFailed;
         break;
-    case STATUS_INVALID_PIN_LENGTH:
-        m_shErrCode = DEC_INVALID_PIN_LEN;
-        strcpy(m_szErrMsg, "PinPad:Invalid Pin Length");
-        ret = Error_DevCommFailed;
-        break;
-    case STATUS_PIN_NOPIN:
-        m_shErrCode = DEC_INVALID_PIN_LEN;
-        strcpy(m_szErrMsg, "PinPad:No Pin Input");
-        ret = Error_DevCommFailed;
+    case ERR_PIN_UNSUPPORT:
+    case ERR_PIN_NOT_SUPP:
+        m_shErrCode = DEC_PIN_FORMAT_UNSUPPORTED;
+        ret = Error_Param;
         break;
     default:
         m_shErrCode = DEC_ERROR_CODE_UNRECOGNIZABLE;
-        strcpy(m_szErrMsg, "未定义错譿");
         ret = Error_NoDefine;
         break;
     }
+    LogM("ErrorInfo:[0x%x][0x%x]:%s", ret, iErrCode, m_szErrMsg);
     return ret;
 }
 
-//DeviceBaseClass
-
-
-ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    char err_msg[VENDOR_BUFF_SIZE] = { '\0' };
-    //assert(cmb::log4vendor::instance() != NULL);
-    cmb::log4vendor::instance();
-    cmb::log_init_config_c config1;
-    strcpy(config1.dev_name, "PinPad");
-    //config1.dev_name =("PinPad");
-    config1.log_type = CMB_LOG_TYPE_FILE;
-#if defined(_MSC_VER)
-    //config1.log_dir = ("C:\\rvc\\dbg\\");
-    strcpy(config1.log_dir, "C:\\rvc\\dbg\\");
-#else
-    //config1.log_dir = ("/opt/rvc/dbg");
-    strcpy(config1.log_dir, "/home/keba/opt/rvc/dbg");
-#endif //_MSC_VER
-
-   cmb::log4vendor::initp(&config1, err_msg);
-   LOG4VTM(INFO,("PinPad This message would not be record with illegal dev name!"));
-
-
-    pBaseObj = new PinPadClassImpl();
-    if (pBaseObj == NULL)
-        return Error_Resource;
-    return Error_Succeed;
-}
-ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    if (pBaseObj == NULL)
-        return Error_Param;
-    PinPadClassImpl* pTmp = (PinPadClassImpl*)(pBaseObj);
-    delete pTmp;
-    pTmp = NULL;
-    pBaseObj = NULL;
-    return Error_Succeed;
-}
-
-
-
-
-#pragma pack(pop)
 
 
 

+ 2 - 2
DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.h

@@ -11,7 +11,7 @@
 #include <string.h>
 #include "ZT598MGFD_DevCtrl.h"
 #include <assert.h>
-#include "log4vendor.h"
+//#include "log4vendor.h"
 typedef struct tag_KeyReadData
 {
     DWORD dwSize;					//本次StartInput到StopInput之间, ZT_PIN_ReadInputData所读取的所有按键数量
@@ -75,7 +75,7 @@ public:
     virtual ErrorCodeEnum DevClose();
     virtual ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
 
-    //PinPadClass
+    //PinPadClass#include "CkLog.h"
     virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
     virtual ErrorCodeEnum KeyRead(BYTE &ch);
     virtual ErrorCodeEnum PinRead(BYTE &ch);

File diff suppressed because it is too large
+ 387 - 392
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevCtrl.cpp


+ 1 - 1
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevCtrl.h

@@ -129,6 +129,7 @@ public:
 
 public:
     PinpadCap m_stDevCap;
+    PinpadStatus m_stPinpadStatus;
 
 protected:
     WORD KeyTablePos(BYTE byKeyPressValue, BYTE &byKeyPressPos);
@@ -147,7 +148,6 @@ protected:
     CHAR m_szErrMsg[MAX_DEV_ERROR_MSG_LEN];
     short m_shErrCode;
 
-    PinpadStatus m_stPinpadStatus;
     SingleVer m_stDevFWVerList[MAX_FWVER_NUM];
 
     BYTE m_byEPPKeyCode[EPP_MAIN_KEY_CODE_COUNT];

+ 20 - 11
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevImpl.cpp

@@ -1,5 +1,5 @@
 #include "ZT598MGFD_DevImpl.h"
-extern CTraceManager g_Trace;
+LOG_EXTERN()
 
 CZT598M1FD_DevImpl::CZT598M1FD_DevImpl(BOOL bIsFather)
 {
@@ -121,14 +121,17 @@ BOOL CZT598M1FD_DevImpl::ExchangeData(const LPEPPExchangeDataField lpstSendInfo,
     }
     m_stCommInfo.cdSndData.dwDataLen = sizeof(m_bySndBuff);
     m_stCommInfo.cdRcvData.dwDataLen = sizeof(m_byRcvBuff);
-
-    dwLen = m_lpIDevComm->SendData(m_bySndBuff, m_stCommInfo.cdSndData.dwDataLen);
+    LogM( "Send start.....");
+    //dwLen = m_lpIDevComm->SendData(m_bySndBuff, m_stCommInfo.cdSndData.dwDataLen);
+    dwLen = m_lpIDevComm->SendData(m_bySndBuff, wSndBufflen);
+    LogM( "wSndBufflen = %d, m_stCommInfo.cdSndData.dwDataLen = %d", wSndBufflen, m_stCommInfo.cdSndData.dwDataLen);
+    LogM( "Send end.....");
     if (dwLen == 0)
     {
-        g_Trace.TraceInBuffer(TRM_SND, TRM_LV_ERROR, m_bySndBuff, wSndBufflen,NULL, uMaskOffset, uMaskLen, uMaskCnt);
+        LogXE( m_bySndBuff, wSndBufflen , "Send");
         return FALSE;
     }
-   g_Trace.TraceInBuffer(TRM_SND, TRM_LV_COMMN, m_bySndBuff, wSndBufflen,  NULL, uMaskOffset, uMaskLen, uMaskCnt);
+   LogXM(m_bySndBuff, wSndBufflen, "Send");
 
     if (lpstEPPExchangeDataHeadSection->byCmd == READ_ENTRY_TEXT)
     {
@@ -143,28 +146,34 @@ BOOL CZT598M1FD_DevImpl::ExchangeData(const LPEPPExchangeDataField lpstSendInfo,
     }
 
 
+    LogM( "Receive 1st start.....");
     dwReceiveLen=m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout);
+    LogM( "Receive 1st end.....");
     if(dwReceiveLen == 0)
     {
-        usleep(100000);
-        g_Trace.TraceIn(TRM_RCV, TRM_LV_ERROR, "The received data is empty!");
+        //usleep(100000);
+        LogE( "The received data is empty!");
+        LogM( "Receive 2nd start.....");
         m_stCommInfo.cdRcvData.dwDataLen = sizeof(m_byRcvBuff);
         dwReceiveLen = m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout);
+        LogM( "Receive 2nd end.....");
         if(dwReceiveLen == 0)
         {
-            usleep(10);
-            g_Trace.TraceIn(TRM_RCV, TRM_LV_ERROR, "The received data is empty!");
+            //usleep(10);
+            LogE( "The received data is empty!");
             m_stCommInfo.cdRcvData.dwDataLen = sizeof(m_byRcvBuff);
+            LogM( "Receive 3rd start.....");
             dwReceiveLen = m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout);
+            LogM( "Receive 3rd end.....");
         }
     }
     if(dwReceiveLen == 0)
     {
-        g_Trace.TraceIn(TRM_RCV, TRM_LV_ERROR, "The received data is empty!");
+        LogE( "The received data is empty!");
         return FALSE;
     }
 
-    g_Trace.TraceInBuffer(TRM_RCV, TRM_LV_COMMN, m_byRcvBuff, dwReceiveLen, NULL, uMaskOffset, uMaskLen, uMaskCnt);
+    LogXM( m_byRcvBuff, dwReceiveLen, "Rcv");
     bRet = ParseResponse(lpstReceiveInfo, &uMaskCnt, uMaskOffset, uMaskLen);
     if (lpstEPPExchangeDataHeadSection->byCmd == READ_ENTRY_TEXT)
     {

+ 38 - 0
DevAdapter/keba/PinPad.keba.1.1/dllmain.cpp

@@ -0,0 +1,38 @@
+// dllmain.cpp : 定义 DLL 应用程序的入口点。
+#include "stdafx.h"
+//#include "log4vendor.h"
+#include "CkLog.h"
+
+#define DEVICEBASE_EXPORTS
+
+#include "PinPadClassImpl_ZT598M.h"
+
+ LOG_DECLARE()
+
+ DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
+ {
+      LOG_INIT("PinPad", "/home/keba/", "/home/keba/keba-PinPad.log");
+
+      pBaseObj = new PinPadClassImpl();
+      if (pBaseObj == NULL)
+      {
+         LogM("CreateDevComponent PinPadClassImpl failed!");
+          return Error_Resource;
+      }
+
+      LogM("CreateDevComponent PinPadClassImpl scessufull!");
+      return Error_Succeed;
+ }
+
+ ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
+ {
+     if (pBaseObj == NULL)
+         return Error_Param;
+     PinPadClassImpl* pTmp = (PinPadClassImpl*)(pBaseObj);
+     delete pTmp;
+     pTmp = NULL;
+     pBaseObj = NULL;
+     return Error_Succeed;
+ }
+
+

+ 3 - 3
DevAdapter/keba/PinPad.keba.1.1/stdafx.h

@@ -10,7 +10,7 @@
 #include "cstdlib"
 #include <string.h>
 #include <stdarg.h>
-#include "log4vendor.h"
+//#include "log4vendor.h"
 #include "winfunc.h"
 #include "FileDir.h"
 #include "FileAccess.h"
@@ -22,8 +22,8 @@
 #include "lfsapi.h"
 #include "FileDir.h"
 #include "INIAccess.h"
-#include "TraceManager.h"
-
+//#include "TraceManager.h"
+#include "CkLog.h"
 #include "PinPadClass.h"
 #include "DevErrorCode.h"
 #include <dlfcn.h>

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