Эх сурвалжийг харах

#IQRV #comment grg/2023.1213.24

80374374 1 жил өмнө
parent
commit
26ef08f8d0
33 өөрчлөгдсөн 2 нэмэгдсэн , 10929 устгасан
  1. 2 1
      DevAdapter/CMakeLists.txt
  2. 0 18
      DevAdapter/grg/CMakeLists.txt
  3. 0 24
      DevAdapter/grg/FingerPrint.1.1/CMakeLists.txt
  4. 0 302
      DevAdapter/grg/FingerPrint.1.1/FingerPrint_Impl.cpp
  5. 0 42
      DevAdapter/grg/FingerPrint.1.1/FingerPrint_Impl.h
  6. 0 20
      DevAdapter/grg/cardissuer.1.1/CMakeLists.txt
  7. 0 2173
      DevAdapter/grg/cardissuer.1.1/cardissuer_impl.cpp
  8. 0 338
      DevAdapter/grg/cardissuer.1.1/cardissuer_impl.h
  9. 0 25
      DevAdapter/grg/contactlesscard.1.1/CMakeLists.txt
  10. 0 758
      DevAdapter/grg/contactlesscard.1.1/contactless_impl.cpp
  11. 0 101
      DevAdapter/grg/contactlesscard.1.1/contactless_impl.h
  12. 0 23
      DevAdapter/grg/gpio.1.1/CMakeLists.txt
  13. 0 946
      DevAdapter/grg/gpio.1.1/gpio_impl.cpp
  14. 0 191
      DevAdapter/grg/gpio.1.1/gpio_impl.h
  15. 0 18
      DevAdapter/grg/hspscanner.1.1/CMakeLists.txt
  16. 0 635
      DevAdapter/grg/hspscanner.1.1/hspscanner_impl.cpp
  17. 0 113
      DevAdapter/grg/hspscanner.1.1/hspscanner_impl.h
  18. 0 18
      DevAdapter/grg/idcer.1.1/CMakeLists.txt
  19. 0 1133
      DevAdapter/grg/idcer.1.1/idcer_impl.cpp
  20. 0 104
      DevAdapter/grg/idcer.1.1/idcer_impl.h
  21. 0 111
      DevAdapter/grg/pinpad.1.1/CBaseEPPDevDll.cpp
  22. 0 419
      DevAdapter/grg/pinpad.1.1/CBaseEPPDevDll.h
  23. 0 35
      DevAdapter/grg/pinpad.1.1/CMakeLists.txt
  24. 0 1993
      DevAdapter/grg/pinpad.1.1/GrgPinPadImpl.cpp
  25. 0 282
      DevAdapter/grg/pinpad.1.1/GrgPinPadImpl.h
  26. 0 260
      DevAdapter/grg/pinpad.1.1/pinpad_impl.cpp
  27. 0 48
      DevAdapter/grg/pinpad.1.1/pinpad_impl.h
  28. 0 17
      DevAdapter/grg/ups.1.1/CMakeLists.txt
  29. 0 256
      DevAdapter/grg/ups.1.1/ups_impl.cpp
  30. 0 48
      DevAdapter/grg/ups.1.1/ups_impl.h
  31. 0 15
      DevAdapter/grg/watchdog.1.1/CMakeLists.txt
  32. 0 409
      DevAdapter/grg/watchdog.1.1/watchdog_impl.cpp
  33. 0 53
      DevAdapter/grg/watchdog.1.1/watchdog_impl.h

+ 2 - 1
DevAdapter/CMakeLists.txt

@@ -243,12 +243,13 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 
 # 通过conan的方式管理厂商库
 if(DEVADAPTER_USING_CONAN)
-	set(GRG_CONAN_LIB_NAME grg/2023.0526.01@LR04.02_VendorLib/testing)
     if(RVC_INTEGRATE_BUILDV2)
         set(KEBA_CONAN_ALL_LIB_NAME keba/2023.1208.18@LR04.02_VendorLib/stable)
         set(CW_CONAN_ALL_LIB_NAME cw/2023.1207.13@LR04.02_VendorLib/stable)
+        set(GRG_CONAN_ALL_LIB_NAME grg/2023.1213.24@LR04.02_VendorLib/stable)
         rvc_aggerate_vendor_libs(keba)
         rvc_aggerate_vendor_libs(cw)
+        rvc_aggerate_vendor_libs(grg)
     endif(RVC_INTEGRATE_BUILDV2)
 
 endif(DEVADAPTER_USING_CONAN)

+ 0 - 18
DevAdapter/grg/CMakeLists.txt

@@ -1,18 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-project(grg C CXX)
-
-set(CMAKE_COLOR_MAKEFILE ON)
-
-# VENDOR_CURRENT_{DEPS|INCLUDE|ASSET|LIB|BIN}_DIR 等定义已集成到该宏内
-rvc_define_dependen_dirs()
-
-# 遍历当前目录下带有CMakeLists.txt文件的文件夹
-rvc_traverse_sub_cmake_dirs()
-
-#  =-=-=-=-=-=-=-=-=-= {VendorName}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_aggereate_runtime_file()
-
-
-
-

+ 0 - 24
DevAdapter/grg/FingerPrint.1.1/CMakeLists.txt

@@ -1,24 +0,0 @@
-# 声明模块名称的前缀和名称
-rvc_dev_define_module("FingerPrint")
-
-# rvc_dev_config_library 内需要使用这三个参数,用于拼接输出的适配器文件名称
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-# 包含要编译的实现文件,rvc_dev_config_library 内使用
-set(${MODULE_PREFIX}_SRCS SHARED
-	FingerPrint_Impl.cpp
-)
-
-# 适配器工程需要通过此宏替代 add_library
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-# ${MODULE_FULL_NAME} 是 TAGET 名称,在 rvc_dev_config_library 中定义
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME} grgFpDriverUSB_FGB dl ${VENDOR_LOG_LIB_NAME})
-
-#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 302
DevAdapter/grg/FingerPrint.1.1/FingerPrint_Impl.cpp

@@ -1,302 +0,0 @@
-/*
- * Create by LocalUser on 2020/9/22
-*/
-
-#include <memory.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <dlfcn.h>
-#include "FingerPrint_Impl.h"
-#include "FpDriver.h"
-#include "log4vendor.h"
-
-#define MAX_DATA_SIZE 40536
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-    baseObj = new FingerPrintImpl();
-    if(baseObj == NULL) {
-		return Error_Resource;
-    } 
-		
-	cmb::log_init_config config;
-    config.dev_name = "FingerPrint";
-	config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-    config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-    config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-    std::string str;
-    cmb::log4vendor::init(config, str);
-    printf("init after: %s\n", str.c_str());
-	
-	return Error_Succeed;
-    
-}
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    if(pBaseObj == NULL) {
-    return Error_Param;
-    }
-    if(FingerPrintImpl* pTmp = dynamic_cast<FingerPrintImpl*>(pBaseObj))
-    {
-		delete pTmp;
-		pTmp = NULL;
-		return Error_Succeed;
-    }
-    return Error_Param;
-}
-
-FingerPrintImpl::FingerPrintImpl()
-{
-	//m_sDllPath = GeSoFilePath((void*)&WELLDeviceInit);
-	m_sDllPath = GeSoFilePath((void*)&CreateDevComponent);
-}
-
-FingerPrintImpl::~FingerPrintImpl()
-{
-	DevClose();
-}
-
-void FingerPrintImpl::ZeroDevErrorInfo()
-{
-	memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-}
-
-void FingerPrintImpl::FormatDevErrorInfo(const char* funcname, int line,int errCode)
-{
-	ZeroDevErrorInfo();
-	char* errStr = WELLGetErrorInfo(errCode);
-	//snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
-	snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "{\"ErrCode\":0x%x,\"Description\":\"Func:%s,Line:%d,Msg:%s\"}", errCode, funcname, line, errStr);
-	m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-	LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
-}
-
-ErrorCodeEnum FingerPrintImpl::GetDevCategory(DevCategoryInfo& devCategory)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);		
-	char sDevInfo[64+1] = {0};
-	char sID[1024] = {0};
-	memset(&devCategory,0,sizeof(devCategory));
-	memset(sDevInfo, 0, sizeof(sDevInfo));
-	memset(sID, 0, sizeof(sID));
-	int iRet = WELLGetVersion(sDevInfo, sID);
-	strcpy(devCategory.szType,"PVER=WELL");
-	strcat(devCategory.szType,"#MID=");
-	strcat(devCategory.szType,sDevInfo); 
-	strcpy(devCategory.szModel,"FWID=0");
-	strcpy(devCategory.szVendor,"grg");
-
-	devCategory.version.wMajor = 1;
-	devCategory.version.wMinor = 1;
-	devCategory.version.wRevision = 65535;
-	devCategory.version.wBuild = 1;
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);	
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);	
-	ErrorCodeEnum err = Error_Succeed;
-	WELLDeviceClose();
-	int iRet = WELLDeviceInit();
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_DevConnFailed;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return err;
-}
-
-ErrorCodeEnum FingerPrintImpl::Image2Feature(const char* imageName, LPBYTE lpbFeature, int& iLength)
-{
-	LOG4VTM_FUNCTION();
-	//TRACE4VTM_FUNCTION(&iLength);
-	LOG4VTM(INFO,__FUNCTION__);	
-	std::string path = m_sDllPath + "/";
-	path = path + imageName;
-	int iRet = WELLImg2Bmp(1, const_cast<char*>(path.c_str()));
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-	
-	iRet = WELLBmp2Feature(0x63, const_cast<char*>(path.c_str()), (char*)lpbFeature, &iLength);
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-/*	
-	char filePath[128] = {0};
-	sprintf(filePath,"./%s",imageName);
-	SaveToFile(filePath,(char*)lpbFeature,iLength);
-*/	
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::Image2Template(const char* imagePath1, const char* imagePath2, const char* imagePath3, LPBYTE lpbTemplate, int& iLength)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);	
-/*	
-	char imagedata1[MAX_DATA_SIZE] = {0};
-	char imagedata2[MAX_DATA_SIZE] = {0};
-	char imagedata3[MAX_DATA_SIZE] = {0};
-	int len1,len2,len3;
-	if(LS_ERROR_SUCCESS != ReadFromFile(imagePath1,imagedata1,&len1)){
-		return Error_Unexpect;
-	}
-	if(LS_ERROR_SUCCESS != ReadFromFile(imagePath2,imagedata2,&len2)){
-		return Error_Unexpect;
-	}
-	if(LS_ERROR_SUCCESS != ReadFromFile(imagePath3,imagedata3,&len3)){
-		return Error_Unexpect;
-	}
-*/
-
-/*	
-	int iRet = WELLGetTemplate(0x10, 30, (char*)lpbTemplate);
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-	
-	iLength = strlen((char*)lpbTemplate);
-*/
-
-/*	
-	int iRet = WELLImg2Bmp(15, const_cast<char*>(imagePath1));
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-	iRet = WELLImg2Bmp(15, const_cast<char*>(imagePath2));
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-	iRet = WELLImg2Bmp(15, const_cast<char*>(imagePath3));
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-*/	
-	int iRet = WELLBmp2Template(0x63, const_cast<char*>(imagePath1), const_cast<char*>(imagePath2), const_cast<char*>(imagePath3), (char*)lpbTemplate, &iLength);
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Unexpect;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::Match(LPBYTE lpbTemplate[], int iTemplateLen[], int templateNum, LPBYTE lbpFeature, int& iFeatureLen, int level /* = 3 */)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);	
-	int iRet = 0;
-	for(int i = 0;i<templateNum;i++)
-	{
-		
-		iRet = WELLMatch((char*)lbpFeature, (char*)lpbTemplate[i],level);
-		if(iRet == LS_ERROR_SUCCESS)
-		{
-			iTemplateLen[i] = 1;
-		}
-		else
-		{
-			iTemplateLen[i] = 0;
-		}
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::Cancel()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);	
-	WELLCancel();
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);	
-	int iRet = WELLDeviceClose();
-	if(LS_ERROR_SUCCESS != iRet){
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,iRet);
-			return Error_Closed;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum FingerPrintImpl::GetLastErr(DevErrorInfo& devErrInfo)
-{
-	memset(&devErrInfo,0,sizeof(devErrInfo));
-	memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
-	return Error_Succeed;
-}
-
-
-int FingerPrintImpl::SaveToFile(char *psFile, char *data, int nLen)
-{
-	FILE *fp;
-
-	fp = fopen(psFile, "wb");
-	if(NULL == fp)
-		return -1;
-
-	fwrite(data, nLen, 1, fp);
-	
-	fclose(fp);
-
-	return LS_ERROR_SUCCESS;
-}
-
-int FingerPrintImpl::ReadFromFile(const char *psFile, char *psB64Image, int* nLen)
-{
-	FILE *fp;
-	int  nLength = 0;
-
-	fp = fopen(psFile, "rb");
-	if(NULL == fp)
-		return -1;
-
-	nLength = fread(psB64Image, 1, MAX_DATA_SIZE, fp);
-	fclose(fp);
-
-	*nLen = nLength;
-
-	return LS_ERROR_SUCCESS;
-}
-
-std::string FingerPrintImpl::GeSoFilePath(void* Fun)   
-{
-    Dl_info dl_info;
-    if(dladdr(Fun, &dl_info))
-	{
-		char *sFilePath = strdup(dl_info.dli_fname);
- 		char *pName = strrchr(sFilePath, '/');
-		*pName = '\0'; 
-		std::string sPath(sFilePath);
-		return sPath;
-	}
-	return "";
-}

+ 0 - 42
DevAdapter/grg/FingerPrint.1.1/FingerPrint_Impl.h

@@ -1,42 +0,0 @@
-/*
- * Created by LocalUser on 2020/9/22	
-*/
-
-#ifndef LIBFRAMEWORK_FINGERPRINT_IMPL_H
-#define LIBFRAMEWORK_FINGERPRINT_IMPL_H
-
-#include "FingerPrintClass.h"
-#include <string>
-class FingerPrintImpl : public FingerPrintClass
-{
-public:
-	FingerPrintImpl();
-	~FingerPrintImpl();
-
-	ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
-
-	//DeviceBaseClass
-	ErrorCodeEnum GetDevCategory(DevCategoryInfo& devCategory);
-	ErrorCodeEnum Reset();
-	ErrorCodeEnum DevClose();
-	ErrorCodeEnum GetLastErr(DevErrorInfo& devErrInfo);
-
-	//FingerPrintClass
-	virtual ErrorCodeEnum Image2Feature(const char* imageName, LPBYTE lpbFeature, int& iLength);
-	virtual ErrorCodeEnum Image2Template(const char* imagePath1, const char* imagePath2, const char* imagePath3, LPBYTE lpbTemplate, int& iLength);
-	virtual ErrorCodeEnum Match(LPBYTE lpbTemplate[], int iTemplateLen[], int templateNum, LPBYTE lbpFeature, int& iFeatureLen, int level /* = 3 */);
-	virtual ErrorCodeEnum Cancel();
-
-private:
-	int m_mode;
-	DevErrorInfo m_DevErrorInfo;
-	void FormatDevErrorInfo(const char* funcname, int line,int errCode);
-	void ZeroDevErrorInfo(void);
-	int SaveToFile(char *psFile, char *data, int nLen);
-	int ReadFromFile(const char *psFile, char *psB64Image, int* nLen);
-	std::string GeSoFilePath(void* Fun);
-	std::string m_sDllPath;
-};
-
-
-#endif // LIBFRAMEWORK_FINGERPRINT_IMPL_H

+ 0 - 20
DevAdapter/grg/cardissuer.1.1/CMakeLists.txt

@@ -1,20 +0,0 @@
-rvc_dev_define_module("CardIssuer")
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-set(${MODULE_PREFIX}_SRCS SHARED
-        cardissuer_impl.cpp
-        )
-
-
-# 适配器工程需要通过此宏替代 add_library
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-# ${MODULE_FULL_NAME} 是 TAGET 名称,在 rvc_dev_config_library 中定义
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME} grgACTIDCDev dl ${VENDOR_LOG_LIB_NAME})
-
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 2173
DevAdapter/grg/cardissuer.1.1/cardissuer_impl.cpp

@@ -1,2173 +0,0 @@
-#include "cardissuer_impl.h"
-#include <cstring>
-#include <cstdio>
-
-#include "log4vendor.h"
-
-//extern char dllpath[256];
- bool m_bcapSucc;//是否成功获取设备能力
- bool m_Insertcard;
- tIDCIssueCap m_cap;//设备能力
- wchar_t logMsgbuf[LOGBUFLEN];
-
-
-//bhj
-std::string int2str(int nTemp)  
-{
-	std::stringstream stream;
-	stream << nTemp;
-    return stream.str();
-}
-
-
-CardIssuerClassImpl::CardIssuerClassImpl()
-        :m_mode(0)
-{
-
-	m_pCardIssuerDev = new OACTIDCDev("ACTIDCDev");
-	m_ptIDCVersionInfo	= new tIDCVersionInfo;
-	m_bDevIsOpen		= false;
-	m_dwCardType		= 0;
-	m_btOpenType		= 0;
-
-	m_bcapSucc = false;
-
-	memset(&m_cap,0,sizeof(m_cap));
-	memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-}
-
-CardIssuerClassImpl::~CardIssuerClassImpl()
-{
-
-}
-
-ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-    LOG4VTM_FUNCTION();
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		UpdatalastErr(Error_DevLoadFileFailed,Error_DevLoadFileFailed,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_DevLoadFileFailed;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false)
-	{
-		UpdatalastErr(Error_DevLoadFileFailed,Error_DevLoadFileFailed,"设备没有打开",__FUNCTION__,__LINE__);
-		return Error_DevLoadFileFailed;
-	}
-
-	//获取设备信息失败
-	if(m_ptIDCVersionInfo == NULL)
-	{
-		UpdatalastErr(Error_DevLoadFileFailed,Error_DevLoadFileFailed,"获取设备信息失败",__FUNCTION__,__LINE__);
-		return Error_DevLoadFileFailed;
-	}
-
-	memset(&devCategory, 0, sizeof(devCategory));
-
-
-	int l_iResult = FAIL;
-	//获取相关版本信息,供其它地方使用
-	memset(m_ptIDCVersionInfo, 0, sizeof(m_ptIDCVersionInfo));
-
-	int tryCnt =0;
-	bool bl = false;
-	tDevReturn tReturnInfo[8] = { 0 };
-	while(tryCnt < TRYCNT)
-	{
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		l_iResult = m_pCardIssuerDev->iGetVersionInfo(m_ptIDCVersionInfo, tReturnInfo);
-		//memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-		if(SUCCESS != l_iResult) 
-		{
-			UpdatalastErr(Error_DevLoadFileFailed,tReturnInfo[0].iPhyCode,"获取设备信息失败",__FUNCTION__,__LINE__);
-			int rlt = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-			if (rlt == Error_Succeed)
-			{
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				m_pCardIssuerDev->iInit(3,tReturnInfo);
-			}
-			++tryCnt;
-		}
-		else
-		{	
-			bl = true;
-			break;
-		}
-	}
-
-	//memset(devCategory, 0, sizeof(DevCategoryInfo));
-	char l_cVender[20]={0};
-	strcpy(l_cVender,"grg");
-
-	strcpy(devCategory.szVendor,l_cVender);
-
-	char l_acDevVer[20]={0};
-	strcpy(l_acDevVer,"CM=V2.0");
-
-	strcpy(devCategory.szModel,l_acDevVer);
-
-	strcat(devCategory.szModel,"#FWID=");
-	strcat(devCategory.szModel,m_ptIDCVersionInfo->acDevVer); 
-
-	strcat(devCategory.szModel,"#CID=ACT");
-
-
-	//设备类型 	
-	memset(devCategory.szType,0,sizeof(devCategory.szType));
-
-	strcpy(devCategory.szType,"PVER=ACT");
-	strcat(devCategory.szType,"#MID=");
-	strcat(devCategory.szType,m_ptIDCVersionInfo->acSubType); 
-
-
-
-	//设备状态 device status
-	devCategory.eState = DEVICE_STATUS_NORMAL;
-
-	int l_iMajor=1, l_iMinor=1, l_iRevision=65535, l_iBuild=1;
-	//设备版本号 software version
-	devCategory.version.wMajor = l_iMajor;
-	devCategory.version.wMinor = l_iMinor;
-	devCategory.version.wRevision = l_iRevision;
-	devCategory.version.wBuild = l_iBuild;
-
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-    //ErrorCodeEnum err = Error_Succeed;
-    //std::strcpy(devCategory.szModel, "szModel");
-    //std::strcpy(devCategory.szType, "szCategory");
-    //std::strcpy(devCategory.szVendor, "szVendor");
-    //return err;
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"Enter CardIssuer::DevOpen: Begin");
-	//打开通讯
-	int tryCnt =0;
-	bool bl = false;
-	tDevReturn tReturnInfo[8] = { 0 };
-	int l_iResult = FAIL;
-	
-	while(tryCnt < 3)//
-	{
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		LOG4VTM(INFO,"Enter CardIssuer::iSetCommPara: Begin");
-		l_iResult = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-		LOG4VTM(INFO,"Enter CardIssuer::iSetCommPara: End");
-		if(SUCCESS != l_iResult) 
-		{
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpen: iSetCommPara failed ");		
-			++tryCnt;
-
-		}
-		else
-		{
-			bl =true;
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpen: iSetCommPara success ");
-			break;
-		}
-	}
-
-
-	if (!bl)
-	{
-		UpdatalastErr(Error_DevConnFailed,tReturnInfo[0].iPhyCode,"设备打开失败",__FUNCTION__,__LINE__);
-		l_iResult =  Error_DevConnFailed;
-		return Error_DevConnFailed;
-	}
-	
-
-	//打开设备,设备初始化,如果设备内有卡,吞卡操作
-	tryCnt =0;
-	bl = false;
-	bool needRetain = true;
-	while(tryCnt < TRYCNT)
-	{
-		memset(&tReturnInfo, 0, sizeof(tDevReturn));
-		LOG4VTM(INFO,"Enter CardIssuer::iInit: Begin");
-		if (needRetain)
-		{
-			l_iResult = m_pCardIssuerDev->iInit(3, tReturnInfo);
-		}
-		else
-		{
-			l_iResult = m_pCardIssuerDev->iInit(3, tReturnInfo);
-		}
-		
-		if(SUCCESS != l_iResult) 
-		{
-			//p_OCardIssuer->m_log.info(_T("-- m_pCardIssuerDev->iInit 3  SUCCESS"));
-			if (tReturnInfo[0].iLogicCode == 1283)//卡被堵住,不能吞卡
-			{
-				//p_OCardIssuer->m_log.info(_T("-- m_pCardIssuerDev->iInit 3  1283"));
-				needRetain = false;
-			}
-			else
-			{
-				//p_OCardIssuer->ResetComm();
-			}
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpen: iInit failed ");
-			++tryCnt;
-		}
-		else
-		{
-			bl = true;
-			m_bDevIsOpen = true;
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpen: iInit success ");
-			break;
-		}
-	}
-
-	if (!bl)
-	{
-		UpdatalastErr(Error_DevConnFailed,tReturnInfo[0].iPhyCode,"设备初始化失败",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO," CardIssuer::DevOpen: Error_DevConnFailed ");
-		l_iResult = Error_DevConnFailed;
-	}
-
-	
-	////获取版本信息
-	//tIDCVersionInfo tVersionInfo;
-	//memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-	//memset(&tVersionInfo, 0, sizeof(tVersionInfo));
-	//l_iResult = m_pCardIssuerDev->iGetVersionInfo(&tVersionInfo,&tReturnInfo);
-	//if(SUCCESS != l_iResult) 
-	//{
-	//	LOG4VTM(INFO,"Enter CardIssuer::DevOpen: iGetVersionInfo failed ");	
-	//}
-	
-
-
-	if(!m_bDevIsOpen)
-	{
-		UpdatalastErr(Error_DevConnFailed,tReturnInfo[0].iPhyCode,"设备初始化失败",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO," CardIssuer::DevOpen: m_bDevIsOpen  Error_DevConnFailed ");
-		return Error_DevConnFailed;
-	}
-
-	return Error_Succeed;
-	
-	
-}
-
-ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char *pDevSN, BYTE &btType)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"Enter CardIssuer::DevOpenEx: Begin");
-	//打开通讯
-	btType = 2;
-	int tryCnt =0;
-	bool bl = false;
-	//tDevReturn tReturnInfo;
-	tDevReturn tReturnInfo[8] = { 0 };
-	int l_iResult = FAIL;
-	while(tryCnt < 3)//
-	{
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		LOG4VTM(INFO,"Enter CardIssuer::iSetCommPara: Begin");
-		l_iResult = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-		LOG4VTM(INFO,"Enter CardIssuer::iSetCommPara: End");
-		if(SUCCESS != l_iResult) 
-		{
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpenEX: iSetCommPara failed ");		
-			++tryCnt;
-
-		}
-		else
-		{
-			bl =true;
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpenEX: iSetCommPara success ");
-			break;
-		}
-	}
-
-
-	if (!bl)
-	{
-		UpdatalastErr(Error_DevConnFailed,tReturnInfo[0].iPhyCode,"设备打开失败",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-		
-	}
-	
-	//打开设备,设备初始化,如果设备内有卡,吞卡操作
-	tryCnt =0;
-	bl = false;
-	bool needRetain = true;
-	while(tryCnt < TRYCNT)
-	{
-		LOG4VTM(INFO,"Enter CardIssuer::DevOpenEx:location2");
-		memset(&tReturnInfo, 0, sizeof(tDevReturn));
-		LOG4VTM(INFO,"Enter CardIssuer::iInit: Begin");
-		if (needRetain)
-		{
-			l_iResult = m_pCardIssuerDev->iInit(3, tReturnInfo);
-		}
-		else
-		{
-			l_iResult = m_pCardIssuerDev->iInit(3, tReturnInfo);
-		}
-
-		if(SUCCESS != l_iResult) 
-		{
-			//p_OCardIssuer->m_log.info(_T("-- m_pCardIssuerDev->iInit 3  SUCCESS"));
-			if (tReturnInfo[0].iLogicCode == 1283)//卡被堵住,不能吞卡
-			{
-				//p_OCardIssuer->m_log.info(_T("-- m_pCardIssuerDev->iInit 3  1283"));
-				needRetain = false;
-			}
-			else
-			{
-				//p_OCardIssuer->ResetComm();
-			}
-			UpdatalastErr(Error_DevConnFailed,tReturnInfo[0].iPhyCode,"设备初始化失败",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpenEX: iInit failed ");
-			++tryCnt;
-		}
-		else
-		{
-			bl = true;
-			m_bDevIsOpen = true;
-			LOG4VTM(INFO,"Enter CardIssuer::DevOpenEX: iInit success ");
-			break;
-		}
-	}
-
-	if (!bl)
-	{
-		return Error_DevConnFailed;
-
-	}
-
-	
-	
-	////获取版本信息
-	//tIDCVersionInfo tVersionInfo;
-	//memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-	//memset(&tVersionInfo, 0, sizeof(tVersionInfo));
-	//l_iResult = m_pCardIssuerDev->iGetVersionInfo(&tVersionInfo,&tReturnInfo);
-	//if(SUCCESS != l_iResult) 
-	//{
-	//	LOG4VTM(INFO,"Enter CardIssuer::DevOpenEX: iGetVersionInfo failed ");	
-	//}
-	
-
-	if(!m_bDevIsOpen)
-	{
-		LOG4VTM(INFO," CardIssuer::DevOpenEX:m_bDevIsOpen Error_DevConnFailed");
-		return Error_DevConnFailed;
-	}
-	
-	return Error_Succeed;
-	
-	
-}
-
-ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"Enter CardIssuer::GetDevStatus: Begin");
-	int l_iResult = FAIL;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		LOG4VTM(INFO,"enter GetDevStatus : m_pCardIssuerDev == NULL 设备初始化失败");
-		UpdatalastErr(Error_DevConnFailed,Error_DevLoadFileFailed,"设备初始化失败",__FUNCTION__,__LINE__);
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_bDevIsOpen == false 设备没有打开"));
-		LOG4VTM(INFO,"enter GetDevStatus : m_bDevIsOpen == false 设备没有打开");
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	if(blCardIssuerDev)
-	{
-		LOG4VTM(INFO,"enter GetDevStatus : start devStatus");
-		//CardIssuerStatus *devStatus = (CardIssuerStatus*)(&devStatus);
-		
-		memset(&devStatus, 0, sizeof(devStatus));
-
-		//获取设备状态 
-		tIDCStatusInfoEx statusInfo;
-		tDevReturn tReturnInfo[8] = { 0 };
-		int tryCnt =0;
-		bool bl = false;
-
-		while(tryCnt < TRYCNT)
-		{
-			memset(&statusInfo,0,sizeof(statusInfo));
-			memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-			LOG4VTM(INFO,"enter GetDevStatus : start iGetStatus");
-			l_iResult = m_pCardIssuerDev->iGetStatus(&statusInfo, tReturnInfo);
-			//memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-			if(SUCCESS != l_iResult) 
-			{
-				int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-				if (rtcomm == Error_Succeed)
-				{
-					m_pCardIssuerDev->iInit(3,tReturnInfo);
-				}
-				++tryCnt;
-				UpdatalastErr(Error_DevConnFailed,tReturnInfo[0].iPhyCode,"获取设备状态失败",__FUNCTION__,__LINE__);
-				LOG4VTM(INFO,"enter GetDevStatus : iGetStatus failed");
-			}
-			else
-			{
-				bl =true;
-				LOG4VTM(INFO,"enter GetDevStatus : iGetStatus success");
-				break;
-			}
-		}
-		if (!bl)
-		{
-			l_iResult = Error_Hardware;
-			return Error_Hardware;
-		}
-
-		//p_OCardIssuer->m_log.info(L"3  --------statusInfo.byMedia[%d]",statusInfo.byMedia);
-
-		//卡状态位置 0:未知 1:无卡 2:前端有卡 3:内部有卡(读磁/IC) 4:内部有卡(射频) 5:多张卡(射频)
-		if(1283 == tReturnInfo[0].iPhyCode || 1286 == tReturnInfo[0].iPhyCode)
-		{
-			devStatus.eMedia = CI_MEDIA_JAMMED;//card jammed
-			//p_OCardIssuer->m_log.error(_T("card jammed"));
-			LOG4VTM(INFO,"1283 == tReturnInfo[0].iPhyCode || 1286 == tReturnInfo[0].iPhyCode");
-		} 
-		else if(1 == statusInfo.byMedia) 
-		{
-			devStatus.eMedia = CI_MEDIA_NOTPRESENT;//
-			//p_OCardIssuer->m_log.info(_T("no card in machine channel. 无卡"));
-			LOG4VTM(INFO,"1 == statusInfo.byMedia");
-		} 
-		else if(2 == statusInfo.byMedia) 
-		{
-			devStatus.eMedia = CI_MEDIA_ENTERING;//card on front gate
-			//p_OCardIssuer->m_log.info(_T("card on front gate,前端有卡"));
-			LOG4VTM(INFO,"2 == statusInfo.byMedia");
-		} 
-		else if(3 == statusInfo.byMedia) 
-		{
-			devStatus.eMedia = CI_MEDIA_PRESENT;
-			if(1 == m_dwCardType) 
-			{
-				devStatus.eMedia = CI_MEDIA_PRESENT;//detect card in ic slot, but can't active,maybe not ic card
-				//p_OCardIssuer->m_log.info(_T("detect card in ic slot, but can't active,maybe not ic card。磁条卡"));
-				LOG4VTM(INFO,"1 == m_dwCardType");
-			} 
-			else if(2 ==m_dwCardType) 
-			{
-				devStatus.eMedia = CI_MEDIA_PRESENT;//detect IC card in machine
-				//p_OCardIssuer->m_log.info(_T("detect IC card in machine,IC卡"));
-				LOG4VTM(INFO,"2 ==m_dwCardType");
-			}
-			else
-			{
-				devStatus.eMedia = CI_MEDIA_PRESENT;//detect card in machine
-			}
-
-		}	
-		else if(4 == statusInfo.byMedia)//内部有卡 射频位置
-		{
-			devStatus.eMedia = CI_MEDIA_PRESENT;
-			//p_OCardIssuer->m_log.info(_T("detect card in machine,内部有卡 射频位置"));
-			LOG4VTM(INFO,"4 == statusInfo.byMedia");
-		}
-
-
-		//p_OCardIssuer->m_log.info(L"--------l_enumRetainStatus");
-		RtBinStatusEnum l_enumRetainStatus[4] = {CI_RETAIN_NOTSUPP, CI_RETAINBIN_OK, CI_RETAINBIN_HIGH, CI_RETAINBIN_FULL};
-		//回收箱状态
-		devStatus.eRetainBin = l_enumRetainStatus[statusInfo.abyRetainUnit[0]];
-
-		//回收箱容量	 
-		if (m_bcapSucc)
-		{
-			devStatus.dwRetainCount = m_cap.nEmbossedRCard;
-		}
-		else
-		{
-
-			if (m_bcapSucc)
-			{
-				devStatus.dwRetainCount = m_cap.nEmbossedRCard;
-			}
-			else
-			{
-				devStatus.dwRetainCount = 12;
-			}
-		}
-
-		//发卡箱状态(SDK的异常状态归结为银行的空)
-		IssHopperStatusEnum l_enumUnitStatus[5] = {CI_ISSUEHOPPER_NOTSUPP, CI_ISSUEHOPPER_OK, CI_ISSUEHOPPER_LOW, CI_ISSUEHOPPER_EMPTY,CI_ISSUEHOPPER_EMPTY};
-
-		//发卡箱1状态	出卡箱A~出卡箱D 0:无 1:正常 2:低 3:空 4:异常
-		devStatus.eIssuerBin[0] = l_enumUnitStatus[statusInfo.abyCardUnit[0]];
-
-		if (m_bcapSucc)
-		{
-			devStatus.dwIssuerCount[0] = m_cap.nEmbossedICard;
-		}
-		else
-		{
-
-			if (m_bcapSucc)
-			{
-				devStatus.dwIssuerCount[0] = m_cap.nEmbossedICard;
-			}
-			else
-			{
-				devStatus.dwIssuerCount[0] = 75;
-			}
-		}
-
-		//发卡箱2状态	出卡箱A~出卡箱D 0:无 1:正常 2:低 3:空 4:异常
-		devStatus.eIssuerBin[1] = l_enumUnitStatus[statusInfo.abyCardUnit[1]];
-		if (m_bcapSucc)
-		{
-			devStatus.dwIssuerCount[1] = m_cap.nEmbossedICard;
-		}
-		else
-		{
-
-			if (m_bcapSucc)
-			{
-				devStatus.dwIssuerCount[1] = m_cap.nEmbossedICard;
-			}
-			else
-			{
-				devStatus.dwIssuerCount[1] = 75;
-			}
-		}
-
-		if (statusInfo.wEnableMode ==2 ||statusInfo.wEnableMode ==3 ||statusInfo.wEnableMode ==4 )
-		{
-			m_Insertcard = true;
-		}
-		else
-		{
-			m_Insertcard = false;
-		}
-
-		//只有两卡箱,不支持三卡箱
-		devStatus.eIssuerBin[2] = CI_ISSUEHOPPER_NOTSUPP;//no issue hopper
-		devStatus.dwIssuerCount[2] = 0;
-
-		LOG4VTM(INFO,"enter GetDevStatus : Return GetDevStatus Succeed");
-	}
-	else
-	{
-
-		//p_OCardIssuer->m_log.error(_T("---Return GetDevStatusWrapper() fail"));
-	}
-
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter GetDeviceSN : GetDeviceSN Begin");
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		//m_log.error(_T("Return GetDeviceSN(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_NotInit;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) {
-		//m_log.error(_T("Return GetDeviceSN(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		return Error_Closed;
-	}
-
-	//参数传递为空指针
-	if(NULL == pDevSN) {
-		//m_log.error(_T("Return GetDeviceSN(), Error_Param 参数传递为空指针"));
-		UpdatalastErr(Error_Param,Error_Param,"参数传递为空指针",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-
-	//获取设备版本信息失败
-	if(NULL == m_ptIDCVersionInfo) {
-		//m_log.error(_T("Return GetDeviceSN(), Error_Null 获取设备版本信息失败"));
-		UpdatalastErr(Error_Null,Error_Null,"获取设备版本信息失败",__FUNCTION__,__LINE__);
-		return Error_Null;
-	}
-
-	//GetVersionInfo();
-	memset(pDevSN,0,33);
-
-	memcpy(pDevSN, "DT-7000I64A", 32);
-	//memcpy(pDevSN, "A234567890123456A", 7);
-
-
-	return Error_Succeed;
-
-}
-
-
-//
-//	Move card to specified position.
-//	hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱)
-//
-ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo = 1)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter MoveCard : MoveCard Begin");
-	CardPosEnum eCardPoss = eCardPos;
-	int hopperNoo = hopperNo;
-
-	int l_iResult = FAIL;
-	tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};
-	UINT l_uRetainUnitCurrCount[4] = {0};
-	int powerVal = 0 ;
-
-	//获取设备状态
-	int timeCnt = 0;
-	bool bstateOK = false;
-	tDevReturn tReturnInfo[8] = { 0 };
-	
-	LOG4VTM(INFO,"enter MoveCard ");
-	
-	while(timeCnt <TRYCNT)
-	{
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		memset(&l_tIDCStatusInfoEx, 0, sizeof(tIDCStatusInfoEx));
-		l_iResult = m_pCardIssuerDev->iGetStatus(&l_tIDCStatusInfoEx, tReturnInfo);
-
-		if(SUCCESS != l_iResult) 
-		{
-			UpdatalastErr(Error_Null,tReturnInfo[0].iPhyCode,"获取设备版本信息失败",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"enter MoveCard : iGetStatus failed");
-			++timeCnt;
-			continue;
-		}
-		if (l_tIDCStatusInfoEx.byDevice == 1)//正常
-		{
-			if (l_tIDCStatusInfoEx.abyRetainUnit[1] != 3)//回收箱不满
-			{
-				bstateOK = true;
-				LOG4VTM(INFO,"enter MoveCard : iGetStatus : Recycle is normal");
-				break;
-			}
-			else //回收箱满,禁止发卡(预防发卡器异常出白卡)
-			{
-				bstateOK = false;
-				LOG4VTM(INFO,"enter MoveCard : iGetStatus : Recycle is full");
-				break;
-			}
-		}
-		else //
-		{
-			//p_OCardIssuer->m_log.info(_T("Device status=[%d]"),l_tIDCStatusInfoEx.byDevice);
-			//p_OCardIssuer->m_log.info(_T("回收箱状态 [%s]"),byRetainBoxStr[l_tIDCStatusInfoEx.byRetainBox]);
-			memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-			m_pCardIssuerDev->iInit(3,tReturnInfo);//初始化
-			++timeCnt;
-		}
-	}
-
-	if (!bstateOK)
-	{
-		//return Error_Hardware;
-	}
-	//p_OCardIssuer->m_log.info(_T("byMedia=[%s]"),byMediaStr[l_tIDCStatusInfoEx.byMedia]);
-
-	int hopperStatus = 0;
-	int tryCnt =0;
-	bool bl = false;
-	switch(eCardPoss)
-	{
-	case CI_MOVECARD_FRONT_GATE://reject to front gate,hold card//退卡
-		//前端出口有卡,返回提示退卡失败
-		// if(l_tIDCStatusInfoEx.byMedia < 3)
-		// {
-			// LOG4VTM(INFO,"enter MoveCard  : 前端出口有卡,返回提示退卡失败");
-			// l_iResult = Error_DevMedia; 
-
-		// }
-		//else
-		{
-			//p_OCardIssuer->m_pCardIssuerDev->iChipPower(3,NULL,NULL,&tReturnInfo);//释放 update by hzjun1 20160930
-
-			tryCnt = 0;
-			//退卡
-			while(tryCnt < TRYCNT)
-			{
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				l_iResult = m_pCardIssuerDev->iEjectCard(tReturnInfo);
-
-				if(SUCCESS != l_iResult) 
-				{
-					int rlt = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-					if (rlt == Error_Succeed)
-					{
-						m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-					}
-					++tryCnt;
-					LOG4VTM(INFO,"enter MoveCard : iEjectCard failed");
-				}
-				else
-				{
-					bl =true;
-					l_iResult = Error_Succeed; 
-					//PrintInfo(&tReturnInfo,l_iResult,"iEjectCard");
-					//初始化为未知卡片
-					m_dwCardType = 0;				
-					LOG4VTM(INFO,"enter MoveCard : iEjectCard success");
-					
-					break;
-				}
-			}
-			if (!bl)
-			{
-				l_iResult = Error_DevMedia;
-			}
-		}
-		break;
-	case CI_MOVECARD_RF_POSITION://rf position
-		l_iResult = Error_NotImpl;
-		break;
-	case CI_MOVECARD_IC_POSITION://ic position
-		//内部有卡,没有压卡,返回提示插卡失败
-		if(!((3 == l_tIDCStatusInfoEx.byMedia || 4 == l_tIDCStatusInfoEx.byMedia) && 1 != l_tIDCStatusInfoEx.byICContact))
-		{
-			LOG4VTM(INFO,"enter MoveCard : 内部无卡,没有压卡,返回提示插卡失败!");
-			l_iResult = Error_DevMedia;
-		}
-		else
-		{
-			l_iResult = Error_Succeed; 
-			LOG4VTM(INFO,"enter MoveCard : IC卡成功!!");
-		}
-
-		break;
-	case CI_MOVECARD_MAG_POSITION://magnetic position
-		//内部有卡,返回提示插卡失败
-		if(!(3 == l_tIDCStatusInfoEx.byMedia || 4 == l_tIDCStatusInfoEx.byMedia)) 
-		{
-			LOG4VTM(INFO,"enter MoveCard : 内部无卡,返回提示插卡失败!!");
-			l_iResult = Error_DevMedia;
-		}
-		else
-		{
-			l_iResult = Error_Succeed; 
-			//插卡
-			LOG4VTM(INFO,"enter MoveCard : 插磁条卡成功!!");
-		}
-
-
-		break;
-	case CI_MOVECARD_BACK_NOT_HOLD://capture to retain bin //吞卡
-
-		//判断吞卡箱是否已满  
-		if (l_tIDCStatusInfoEx.byRetainBox == 3)//回收箱已满
-		{
-			LOG4VTM(INFO,"enter MoveCard : 回收箱已满!!");
-			l_iResult = Error_Hardware;
-
-
-		}
-		else if (l_tIDCStatusInfoEx.abyRetainUnit[0]==0)//回收箱已满或没有回收箱
-		{
-			LOG4VTM(INFO,"enter MoveCard : 回收箱no start!!");
-
-			l_iResult = Error_Hardware;
-			
-
-		}
-		else
-		{
-			//吞卡
-			tryCnt = 0;
-			while(tryCnt < TRYCNT)
-			{
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				memset(l_uRetainUnitCurrCount, 0, sizeof(l_uRetainUnitCurrCount));
-
-				ReleaseIC();
-
-				l_iResult = m_pCardIssuerDev->iConfig(C_RETAINCNT_ACTION, 0,tReturnInfo);
-
-				m_pCardIssuerDev->iRetainCard(l_uRetainUnitCurrCount, tReturnInfo);
-
-				if(SUCCESS != l_iResult) 
-				{
-
-					int rlt = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-
-					if (rlt == Error_Succeed)
-					{
-						m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-					}
-					++tryCnt;
-				}
-				else
-				{
-					bl =true;
-					l_iResult = Error_Succeed; 
-					//初始化为未知卡片
-					m_dwCardType = 0;
-					LOG4VTM(INFO,"enter MoveCard : 吞卡成功");
-					break;
-				}
-			}
-			if (!bl)
-			{
-				l_iResult = Error_Hardware;
-				LOG4VTM(INFO,"enter MoveCard : 吞卡失败");
-			}
-		}
-
-		break;
-	case CI_MOVECARD_FROM_HOPPER://card set from hopper //卡箱发卡
-		//内部有卡,返回提示发卡箱出卡失败
-		if(3 == l_tIDCStatusInfoEx.byMedia || 4 == l_tIDCStatusInfoEx.byMedia) 
-		{
-			LOG4VTM(INFO,"enter MoveCard : 内部有卡,发卡箱出卡失败");
-			l_iResult = Error_Hardware;
-			break;
-		}
-		if(l_tIDCStatusInfoEx.byMedia == 2) 
-		{
-			LOG4VTM(INFO,"enter MoveCard : 前端有卡,发卡箱出卡失败");
-			l_iResult = Error_Hardware;
-			break;
-		}
-		//目前只支持两卡箱
-		if(!(1 == hopperNoo || 2 == hopperNoo)) 
-		{
-			LOG4VTM(INFO,"enter MoveCard : 卡箱编号只能是1或者2!");
-			l_iResult = Error_Param;
-			break;
-		}
-
-		//当卡箱序号有变,切换卡箱号
-		if(l_tIDCStatusInfoEx.byCurCardUnit != hopperNoo) 
-		{
-			//p_OCardIssuer->m_log.info(_T("current use hopperNo different with wanted hopeerNo,so change current hopperNo."));
-			tryCnt =0;
-			bl = false;
-			while(tryCnt < TRYCNT)
-			{
-				memset(&tReturnInfo, 0, sizeof(tDevReturn));
-				l_iResult = m_pCardIssuerDev->iConfig(C_ISSUECARD_MODE, hopperNoo, tReturnInfo);
-
-				if(SUCCESS != l_iResult) {
-
-					int rlt = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-
-					if (rlt == Error_Succeed)
-					{
-						m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-					}
-					++tryCnt;
-				}
-				else
-				{
-					bl =true;
-					l_iResult = Error_Succeed;
-					break;
-				}
-			}
-			if (!bl)
-			{
-				l_iResult = Error_Hardware;
-			}
-		}
-
-		hopperStatus = l_tIDCStatusInfoEx.abyCardUnit[hopperNoo-1];
-		//p_OCardIssuer->m_log.info(_T("hopperNo:[%d] is %s"),hopperNo,abyCardUnitStr[hopperStatus]);
-		//判断卡箱是否为正常
-		if (hopperStatus ==1 || hopperStatus ==2)
-		{
-
-		}
-		else
-		{	
-			//return Error_Hardware;
-		}
-
-		//卡箱发卡
-		tryCnt =0;
-		bl = false;
-		while(tryCnt < 1)//只尝试1次
-		{
-			memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-			LOG4VTM(INFO,"enter MoveCard : 开始尝试出卡");
-			l_iResult = m_pCardIssuerDev->iAcceptCard(5, tReturnInfo);
-			if(SUCCESS != l_iResult)
-			{
-
-				if (tReturnInfo[0].iLogicCode == 1283)//卡被塞住
-				{
-					//p_OCardIssuer->m_log.error(_T("卡被塞住! hopperNo=[%d]"),hopperNo);
-					LOG4VTM(INFO,"enter MoveCard : 卡被塞住");
-					
-					l_iResult = Error_Hardware;
-				}
-				int rlt = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-
-
-				if (rlt == Error_Succeed)
-				{
-					m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-				}
-				++tryCnt;
-			}
-			else
-			{
-				bl =true;
-				l_iResult = Error_Succeed;
-				LOG4VTM(INFO,"enter MoveCard : 出卡成功");
-
-				break;
-			}
-		}
-		if (!bl)
-		{
-			l_iResult = Error_Hardware;
-			LOG4VTM(INFO,"enter MoveCard : 出卡失败");
-		}
-
-
-
-		break;
-	case CI_MOVECARD_RETRIEVE://retrieve card, which is in Gate position
-		//前端出口无卡,返回提示取回失败
-		if(2 != l_tIDCStatusInfoEx.byMedia) 
-		{
-			LOG4VTM(INFO,"enter MoveCard : 前端出口无卡,返回提示取回失败");
-			l_iResult = Error_Hardware;
-		}
-		else
-		{
-			tryCnt = 0;
-			while(tryCnt < TRYCNT)
-			{
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				l_iResult = m_pCardIssuerDev->iAcceptCard(4, tReturnInfo);
-				if(SUCCESS != l_iResult) 
-				{
-
-					int rlt = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-
-					if (rlt == Error_Succeed)
-					{
-						m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-					}
-					++tryCnt;
-				}
-				else
-				{
-					bl = true;
-					l_iResult = Error_Succeed;
-					LOG4VTM(INFO,"enter MoveCard : 取回卡片到读卡器内部(重进卡)成功");
-					break;
-				}
-			}
-		}
-		if (!bl)
-		{
-			l_iResult = Error_Hardware;
-			LOG4VTM(INFO,"enter MoveCard : 取回卡片到读卡器内部(重进卡)失败");
-		}
-		break;
-	}
-
-	if(l_iResult !=0)
-	{
-		UpdatalastErr(Error_Null,tReturnInfo[0].iPhyCode,"设备故障",__FUNCTION__,__LINE__);
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter SetCardInType : SetCardInType Begin");
-	int l_iResult = FAIL;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-		
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-		
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	if(blCardIssuerDev)
-	{
-		//CardInEnum eCardIn = eCardIn;
-		tDevReturn tReturnInfo[8] = { 0 };
-		tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};
-
-		//获取设备状态
-		int tryCnt =0;
-		bool bl = false;
-
-		tryCnt =0;
-		bl = false;
-
-		switch(eCardIn) 
-		{
-		case CI_CARD_IN_TYPE_FORBIDDEN://forbidden card entry
-			while(tryCnt < TRYCNT)
-			{
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				l_iResult = m_pCardIssuerDev->iAcceptCard(3, tReturnInfo);//停止进卡
-
-				bl =true;
-				l_iResult = Error_Succeed;
-				LOG4VTM(INFO,"enter SetCardInType : 禁止插卡完成");
-				break;
-
-			}
-			if (!bl)
-			{
-				UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"iAcceptCard Error",__FUNCTION__,__LINE__);
-				l_iResult = Error_Hardware;
-				LOG4VTM(INFO,"enter SetCardInType : 禁止插卡失败");
-			}
-			
-			break;
-		case CI_CARD_IN_TYPE_MAG://accept only Magnetic card entry
-
-			while(tryCnt < TRYCNT)
-			{
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				l_iResult = m_pCardIssuerDev->iAcceptCard(1, tReturnInfo);//进卡
-				
-				if(SUCCESS != l_iResult) 
-				{	
-					UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"iAcceptCard Error",__FUNCTION__,__LINE__);		
-					LOG4VTM(INFO,"enter SetCardInType : iAcceptCard 1 failed");					
-					int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-					if (rtcomm == Error_Succeed)
-					{
-						m_pCardIssuerDev->iInit(3,tReturnInfo);						
-					}
-					++tryCnt;
-				}
-				else
-				{
-					bl =true;
-					l_iResult = Error_Succeed;
-
-					break;
-				}
-			}
-			if (!bl)
-			{
-				l_iResult = Error_Hardware;
-				LOG4VTM(INFO,"enter SetCardInType : 插磁条卡失败");	
-			}
-			
-			break;
-		case CI_CARD_IN_TYPE_ALL://accept any card
-			////内部有卡,没有压卡,返回提示插卡失败
-
-			//插卡
-			while(tryCnt < TRYCNT)
-			{
-				//p_OCardIssuer->m_log.info(_T("----开始插卡 --->>>"));
-				memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-				l_iResult = m_pCardIssuerDev->iAcceptCard(2, tReturnInfo);//不判断磁进卡
-
-				bl =true;
-				l_iResult = Error_Succeed;
-				//p_OCardIssuer->m_log.info(_T("等待插卡 --->>>"));
-				break;
-			}
-
-			if (!bl)
-			{
-				UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"iAcceptCard Error",__FUNCTION__,__LINE__);
-				l_iResult = Error_Hardware;
-				LOG4VTM(INFO,"enter SetCardInType : 等待插卡失败");	
-			}
-			
-			break;
-		}
-	}
-
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter MagRead : MagRead Begin");
-	int l_iResult = FAIL;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-		
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"enter MagRead : 设备没有打开");	
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-		
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	if(blCardIssuerDev)
-	{
-		//MagTracks *magTracks = (MagTracks*)(&magTracks);
-		//memset(magTracks, 0, sizeof(MagTracks));
-		memset(&magTracks, 0, sizeof(magTracks));
-
-		//读取磁道信息成功,设置返回信息
-
-		tDevReturn tReturnInfo[8] = { 0 };
-		tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};
-
-		//获取设备状态
-		int tryCnt = 0;
-		bool bl = false;
-
-		while(tryCnt < TINYCNT)
-		{
-			memset(&l_tIDCStatusInfoEx, 0, sizeof(tIDCStatusInfoEx));
-			memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-			l_iResult = m_pCardIssuerDev->iGetStatus(&l_tIDCStatusInfoEx, tReturnInfo);
-			// memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-			if(SUCCESS != l_iResult) 
-			{
-				UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"iGetStatus Error",__FUNCTION__,__LINE__);
-				LOG4VTM(INFO,"enter MagRead : 获取状态失败 重新初始化");	
-				int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-				if (rtcomm == Error_Succeed)
-				{
-					m_pCardIssuerDev->iInit(3,tReturnInfo);
-					
-				}
-				++tryCnt;
-			}
-			else
-			{
-				bl =true;
-				//PrintInfo(&tReturnInfo,&l_tIDCStatusInfoEx,l_iResult,"iGetStatus");
-				break;
-			}
-		}
-		if (!bl)
-		{
-			l_iResult = Error_Hardware;
-			return Error_Hardware;
-		}
-		else
-		{
-			//读卡器内无卡
-			if(3 != l_tIDCStatusInfoEx.byMedia)
-			{
-				LOG4VTM(INFO,"enter MagRead : 读卡器内无卡");	
-				l_iResult = Error_DevMedia;
-			}
-			else
-			{
-
-				char l_acTrack1[256] = {0};
-				char l_acTrack2[256] = {0};
-				char l_acTrack3[256] = {0};
-				memset(l_acTrack1, 0, 256);
-				memset(l_acTrack2, 0, 256); 
-				memset(l_acTrack3, 0, 256);
-
-				bl = false;
-				tryCnt = 0;
-
-				//p_OCardIssuer->m_log.info(_T("begin read Track"));
-				//读磁道
-				tIDCTrackInfo l_tIDCTrackInfo;
-				memset(&tReturnInfo, 0, sizeof(tDevReturn));
-
-				//Sleep(500);
-
-				l_iResult = m_pCardIssuerDev->iReadTrack(&l_tIDCTrackInfo, tReturnInfo);
-				if(SUCCESS != l_iResult) 
-				{
-					//  memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-					//p_OCardIssuer->m_log.error(_T("Return MagRead(), Error_Hardware 读磁道失败"));
-					UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"iReadTrack Error",__FUNCTION__,__LINE__);
-
-					LOG4VTM(INFO,"enter MagRead : 读磁道失败");
-
-					magTracks.track[0].eSource = CI_TRACK_SOURCE_1;
-					magTracks.track[0].eStatus = CI_DATA_INVALID;
-					magTracks.track[0].dwSize = 0;
-					memcpy(magTracks.track[0].data, l_tIDCTrackInfo.acTrack1, l_tIDCTrackInfo.iTrack1);
-
-					magTracks.track[1].eSource = CI_TRACK_SOURCE_2;
-					magTracks.track[1].eStatus = CI_DATA_INVALID;
-					magTracks.track[1].dwSize = 0;
-					memcpy(magTracks.track[1].data, l_tIDCTrackInfo.acTrack2, l_tIDCTrackInfo.iTrack2);
-
-					magTracks.track[2].eSource = CI_TRACK_SOURCE_3;
-					magTracks.track[2].eStatus = CI_DATA_INVALID;
-					magTracks.track[2].dwSize = 0;
-					memcpy(magTracks.track[2].data, l_tIDCTrackInfo.acTrack3, l_tIDCTrackInfo.iTrack3);
-
-					magTracks.eRange = CI_TRACK_RANGE_START;
-
-					l_iResult =  Error_Succeed;
-				}
-				else
-				{
-
-					//p_OCardIssuer->m_log.info(_T("end read Track"));
-					LOG4VTM(INFO,"enter MagRead : 读取磁道信息成功");
-					//读取磁道信息成功,设置返回信息
-					memset(&magTracks, 0, sizeof(magTracks));
-
-					unsigned int l_uTrack1 = l_tIDCTrackInfo.iTrack1 > 0 ? 1 : 0;
-					unsigned int l_uTrack2 = l_tIDCTrackInfo.iTrack2 > 0 ? 2 : 0;
-					unsigned int l_uTrack3 = l_tIDCTrackInfo.iTrack3 > 0 ? 4 : 0;
-
-					switch(l_uTrack1+l_uTrack2+l_uTrack3) {
-					case 1:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_1"));
-						magTracks.eRange = CI_TRACK_RANGE_1;
-						break;
-					case 2:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_2"));
-						magTracks.eRange = CI_TRACK_RANGE_2;
-						break;
-					case 3:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_1_2"));
-						magTracks.eRange = CI_TRACK_RANGE_1_2;
-						break;
-					case 4:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_3"));
-						magTracks.eRange = CI_TRACK_RANGE_3;
-						break;
-					case 5:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_1_3"));
-						magTracks.eRange = CI_TRACK_RANGE_1_3;
-						break;
-					case 6:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_2_3"));
-						magTracks.eRange = CI_TRACK_RANGE_2_3;
-						break;
-					case 7:
-						//p_OCardIssuer->m_log.info(_T("-----CI_TRACK_RANGE_1_2_3"));
-						magTracks.eRange = CI_TRACK_RANGE_1_2_3;
-						break;
-					default:
-						magTracks.eRange = CI_TRACK_RANGE_START;
-						break;
-					}
-
-					magTracks.track[0].eSource = CI_TRACK_SOURCE_1;
-					magTracks.track[0].eStatus = CI_DATA_OK;
-					magTracks.track[0].dwSize = l_tIDCTrackInfo.iTrack1;
-					memcpy(magTracks.track[0].data, l_tIDCTrackInfo.acTrack1, l_tIDCTrackInfo.iTrack1);
-
-					//memset(logMsgbuf,0,sizeof(logMsgbuf));
-					//p_OCardIssuer->c2w(logMsgbuf,LOGBUFLEN,l_tIDCTrackInfo.acTrack1);
-					//p_OCardIssuer->m_log.info(_T("磁道1:[%s]"),logMsgbuf);
-
-					magTracks.track[1].eSource = CI_TRACK_SOURCE_2;
-					magTracks.track[1].eStatus = CI_DATA_OK;
-					magTracks.track[1].dwSize = l_tIDCTrackInfo.iTrack2;
-					memcpy(magTracks.track[1].data, l_tIDCTrackInfo.acTrack2, l_tIDCTrackInfo.iTrack2);
-
-					//memset(logMsgbuf,0,sizeof(logMsgbuf));
-					//p_OCardIssuer->c2w(logMsgbuf,LOGBUFLEN,l_tIDCTrackInfo.acTrack2);
-					//p_OCardIssuer->m_log.info(_T("磁道2:[%s]"),logMsgbuf);
-
-					magTracks.track[2].eSource = CI_TRACK_SOURCE_3;
-					magTracks.track[2].eStatus = CI_DATA_OK;
-					magTracks.track[2].dwSize = l_tIDCTrackInfo.iTrack3;
-					memcpy(magTracks.track[2].data, l_tIDCTrackInfo.acTrack3, l_tIDCTrackInfo.iTrack3);
-
-					//memset(logMsgbuf,0,sizeof(logMsgbuf));
-					//p_OCardIssuer->c2w(logMsgbuf,LOGBUFLEN,l_tIDCTrackInfo.acTrack3);
-					//p_OCardIssuer->m_log.info(_T("磁道3:[%s]"),logMsgbuf);
-
-
-					//p_OCardIssuer->m_log.info(_T("read Track  2"));
-					//检测到是磁条卡
-					m_dwCardType = 1;
-
-				}
-			}
-		}
-	}
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-}
-
-
-
-//
-//	Write data to magnetic track.向磁道写入数据
-//
-ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter MagWrite : MagWrite Begin");
-	int l_iResult = FAIL;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-		
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-		
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	if(blCardIssuerDev)
-	{
-
-		MagTracks magTracks = magTracks;
-		MagWriteModeEnum eWriteMode = eWriteMode;
-		tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};
-
-		//获取设备状态
-		int tryCnt =0;
-		bool bl = false;
-		tDevReturn tReturnInfo[8] = { 0 };
-		while(tryCnt < TRYCNT)
-		{
-			memset(&l_tIDCStatusInfoEx, 0, sizeof(tIDCStatusInfoEx));
-			memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-			l_iResult = m_pCardIssuerDev->iGetStatus(&l_tIDCStatusInfoEx, tReturnInfo);
-
-			if(SUCCESS != l_iResult) 
-			{
-				UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"iGetStatus Error",__FUNCTION__,__LINE__);
-				LOG4VTM(INFO,"enter MagWrite : iGetStatus failed");
-				int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-				if (rtcomm == Error_Succeed)
-				{
-					m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-				}
-				++tryCnt;
-			}
-			else
-			{
-				bl =true;
-				//p_OCardIssuer->PrintInfo(&tReturnInfo,&l_tIDCStatusInfoEx,l_iResult,"iGetStatus");
-				break;
-			}
-		}
-		if (!bl)
-		{
-			l_iResult = Error_Hardware;
-			return Error_Hardware;
-		}
-		else
-		{
-			//读卡器内无卡
-			if(3 != l_tIDCStatusInfoEx.byMedia)
-			{
-				//p_OCardIssuer->m_log.error(_T("Return MagWrite(), Error_DevMedia 读卡器内无卡"));
-				LOG4VTM(INFO,"enter MagWrite : Error_DevMedia 读卡器内无卡");
-				l_iResult= Error_DevMedia;
-			}
-			else
-			{
-				char l_acTrack1[80]; //磁道一数据 79 
-				char l_acTrack2[41]; //磁道二数据 40 
-				char l_acTrack3[108]; //磁道三数据 107 
-
-				unsigned int l_uTrackTags = 0;
-
-				memset(l_acTrack1, 0, sizeof(l_acTrack1));
-				memset(l_acTrack2, 0, sizeof(l_acTrack2));
-				memset(l_acTrack3, 0, sizeof(l_acTrack3));
-
-				//根据磁条卡磁道数目参数计算磁条标记码
-				switch(magTracks.eRange) 
-				{
-				case CI_TRACK_RANGE_1:
-					l_uTrackTags = 1;
-					break;
-				case CI_TRACK_RANGE_2:
-					l_uTrackTags = 2;
-					break;
-				case CI_TRACK_RANGE_1_2:
-					l_uTrackTags = 3;
-					break;
-				case CI_TRACK_RANGE_3:
-					l_uTrackTags = 4;
-					break;
-				case CI_TRACK_RANGE_1_3:
-					l_uTrackTags = 5;
-					break;
-				case CI_TRACK_RANGE_2_3:
-					l_uTrackTags = 6;
-					break;
-				case CI_TRACK_RANGE_1_2_3:
-					l_uTrackTags = 7;
-					break;
-				default:
-					break;
-				}
-
-				unsigned int l_uCheckTrackTags = 0;
-				//检查各个参数是否符合规范,不符合规范禁止写入
-				for(int i=0; i<3; i++) 
-				{
-					if(magTracks.track[i].eStatus != CI_DATA_OK) 
-					{
-						continue;
-					}
-
-					switch(magTracks.track[i].eSource) 
-					{
-					case CI_TRACK_SOURCE_1:
-						if(magTracks.track[i].dwSize >= sizeof(l_acTrack1)) 
-						{
-							continue;
-						}
-
-						l_uCheckTrackTags += 1;
-						break;
-					case CI_TRACK_SOURCE_2:
-						if(magTracks.track[i].dwSize >= sizeof(l_acTrack2)) 
-						{
-							continue;
-						}
-
-						l_uCheckTrackTags += 2;
-						break;
-					case CI_TRACK_SOURCE_3:
-						if(magTracks.track[i].dwSize >= sizeof(l_acTrack3)) 
-						{
-							continue;
-						}
-						l_uCheckTrackTags += 4;
-						break;
-					}	
-				}
-
-				//如果参数不合法,返回报错
-				if(l_uCheckTrackTags != l_uTrackTags) 
-				{
-					UpdatalastErr(Error_Param,Error_Param,"Param Error",__FUNCTION__,__LINE__);
-					LOG4VTM(INFO,"enter MagWrite : 参数不合法,返回报错");
-					l_iResult =  Error_Param;
-				}
-				else
-				{
-
-					unsigned int l_uWriteTrackTags = 0;
-					//写入各个磁道
-					for(int i=0; i<3; i++) 
-					{
-						tryCnt =0;
-						bl = false;
-
-						if(magTracks.track[i].eStatus != CI_DATA_OK) 
-						{
-							continue;
-						}
-
-						switch(magTracks.track[i].eSource)
-						{
-						case CI_TRACK_SOURCE_1:
-							if(l_uTrackTags & 1) 
-							{
-								l_iResult = FAIL;
-								memcpy(l_acTrack1, magTracks.track[i].data, magTracks.track[i].dwSize);
-								while(tryCnt < TRYCNT)
-								{	
-									memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-									l_iResult = m_pCardIssuerDev->iWriteTrack(1, l_acTrack1, magTracks.track[i].dwSize, tReturnInfo);
-									//memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-									if(SUCCESS != l_iResult) 
-									{
-										UpdatalastErr(Error_Param,tReturnInfo[0].iPhyCode,"iWriteTrack Error",__FUNCTION__,__LINE__);
-										//p_OCardIssuer->PrintError(&tReturnInfo,l_iResult,Error_Hardware,"iWriteTrack failed");
-										LOG4VTM(INFO,"enter MagWrite : iWriteTrack1 failed");
-										int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-										if (rtcomm == Error_Succeed)
-										{
-											m_pCardIssuerDev->iInit(3,tReturnInfo);
-										}
-										++tryCnt;
-									}
-									else
-									{
-										bl =true;
-										//p_OCardIssuer->PrintInfo(&tReturnInfo,l_iResult,"iWriteTrack");
-										break;
-									}
-								}
-								if (!bl)
-								{
-									continue;
-								}
-
-								l_uWriteTrackTags += 1;
-								//p_OCardIssuer->m_log.info(_T("写1磁道成功!"));
-							}
-							break;
-						case CI_TRACK_SOURCE_2:
-							if(l_uTrackTags & 2) 
-							{
-								l_iResult = FAIL;
-								memcpy(l_acTrack2, magTracks.track[i].data, magTracks.track[i].dwSize);
-								while(tryCnt < TRYCNT)
-								{
-									memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-									l_iResult = m_pCardIssuerDev->iWriteTrack(2, l_acTrack2, magTracks.track[i].dwSize, tReturnInfo);
-
-									if(SUCCESS != l_iResult) 
-									{
-										UpdatalastErr(Error_Param,tReturnInfo[0].iPhyCode,"iWriteTrack Error",__FUNCTION__,__LINE__);
-										//p_OCardIssuer->PrintError(&tReturnInfo,l_iResult,Error_Hardware,"iWriteTrack2 failed");
-										LOG4VTM(INFO,"enter MagWrite : iWriteTrack2 failed");
-										int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-
-										if (rtcomm == Error_Succeed)
-										{
-											m_pCardIssuerDev->iInit(3,tReturnInfo);
-
-										}
-										++tryCnt;
-									}
-									else
-									{
-										bl =true;
-										//p_OCardIssuer->PrintInfo(&tReturnInfo,l_iResult,"iWriteTrack");
-										break;
-									}
-								}
-								if (!bl)
-								{
-									continue;
-								}
-
-								l_uWriteTrackTags += 2;
-								//p_OCardIssuer->m_log.info(_T("写2磁道成功!"));
-							}
-							break;
-						case CI_TRACK_SOURCE_3:
-							if(l_uTrackTags & 4) 
-							{
-								l_iResult = FAIL;
-								memcpy(l_acTrack3, magTracks.track[i].data, magTracks.track[i].dwSize);
-								while(tryCnt < TRYCNT)
-								{
-									memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-									l_iResult = m_pCardIssuerDev->iWriteTrack(3, l_acTrack3, magTracks.track[i].dwSize, tReturnInfo);
-
-									if(SUCCESS != l_iResult) 
-									{
-										UpdatalastErr(Error_Param,tReturnInfo[0].iPhyCode,"iWriteTrack Error",__FUNCTION__,__LINE__);
-										//p_OCardIssuer->PrintError(&tReturnInfo,l_iResult,Error_Hardware,"iWriteTrack3 failed");
-										LOG4VTM(INFO,"enter MagWrite : iWriteTrack3 failed");
-										int rtcomm = m_pCardIssuerDev->iSetCommPara(tReturnInfo);
-
-										if (rtcomm == Error_Succeed)
-										{
-											m_pCardIssuerDev->iInit(3,tReturnInfo);
-										}
-										++tryCnt;
-									}
-									else
-									{
-										bl =true;
-										//p_OCardIssuer->PrintInfo(&tReturnInfo,l_iResult,"iWriteTrack");
-										break;
-									}
-								}
-								if (!bl)
-								{
-									continue;
-								}
-
-								l_uWriteTrackTags += 4;
-								//p_OCardIssuer->m_log.info(_T("写3磁道成功"));
-							}
-							break;
-						}	
-					}
-
-					//如果写入磁道数和参数磁道数是否一致,返回成功,否则失败
-					if(l_uWriteTrackTags != l_uTrackTags) 
-					{
-						//p_OCardIssuer->m_log.error(_T("Return MagWrite(), Error_Hardware 如果写入磁道数和参数磁道数不一致,返回失败!"));
-						l_iResult =  Error_Hardware;
-					}
-				}
-			}
-		}
-	}
-
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
-{
-	//m_log.info(_T("Enter SetRetractCounter() dwCount=[%d]"),dwCount);
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter SetRetractCounter : SetRetractCounter Begin");
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL)
-	{
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		//m_log.error(_T("Return SetRetractCounter(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		return Error_NotInit;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		UpdatalastErr(Error_Closed,Error_Closed,"设备初始化失败",__FUNCTION__,__LINE__);
-		//m_log.error(_T("Return SetRetractCounter(), m_bDevIsOpen == false 设备没有打开"));
-		return Error_Closed;
-	}
-
-	//m_log.info(_T("Return SetRetractCounter(), Error_Succeed"));
-	return Error_Succeed;
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount, int hopperNo = 1)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter SetIssuerCounter : SetIssuerCounter Begin");
-	//m_log.info(_T("Enter SetIssuerCounter() dwCount=[%d] hopperNo=[%d]"),dwCount,hopperNo);
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) {
-		//m_log.error(_T("Return SetIssuerCounter(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_NotInit;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) {
-		//m_log.error(_T("Return SetIssuerCounter(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		return Error_Closed;
-	}
-
-	//目前只是支持2卡箱,卡箱序号是1,2,3...
-	if(!(hopperNo == 1 || hopperNo == 2)) {
-		//m_log.error(_T("Return SetIssuerCounter(), Error_NotExist 目前只支持卡箱1和2"));
-		UpdatalastErr(Error_NotExist,Error_NotExist,"只支持2卡箱",__FUNCTION__,__LINE__);
-		return Error_NotExist;
-	}
-
-	//m_log.info(_T("Return SetIssuerCounter(), Error_Succeed"));
-	return Error_Succeed;
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter ActiveICCard : ActiveICCard Begin");
-	int l_iResult = -1;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL)
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);	
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-	if(blCardIssuerDev)
-	{
-		//IC卡上电
-		tDevReturn tReturnInfo[8] = { 0 };
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		l_iResult = m_pCardIssuerDev->iChipPower(1, NULL, NULL, tReturnInfo);//只尝试1次
-		//memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-		if(SUCCESS != l_iResult) 
-		{
-			//m_log.error(_T("Return ActiveICCard(), Error_Hardware IC卡上电失败"));
-			//p_OCardIssuer->PrintError(&tReturnInfo,l_iResult,Error_Hardware,"iChipPower 1 failed");
-			UpdatalastErr(l_iResult,tReturnInfo[0].iPhyCode,"设备没有打开",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"enter ActiveICCard : Error_Hardware IC卡上电失败");
-
-		}
-		else
-		{
-			//上电成功设置为IC卡类型
-			LOG4VTM(INFO,"enter ActiveICCard :  IC卡上电成功");
-			m_dwCardType = 2;
-		}
-
-	}
-
-
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-}
-
-ErrorCodeEnum CardIssuerClassImpl::ContactIC()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter ContactIC : ContactIC Begin");
-	//m_log.info(_T("Enter ContactIC()"));
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) {
-		//m_log.error(_T("Return ContactIC(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_NotInit;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) {
-		//m_log.error(_T("Return ContactIC(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		return Error_Closed;
-	}
-
-	int l_iResult = FAIL;
-	tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};	
-	//m_log.info(_T("Return ContactIC(), Error_Succeed"));
-	return Error_Succeed;
-}
-
-ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter ReleaseIC : ReleaseIC Begin");
-	////m_log.info(_T("Enter ReleaseIC()"));
-	////设备初始化失败
-	//if(m_pCardIssuerDev == NULL) {
-	//	//m_log.error(_T("Return ReleaseIC(), m_pCardIssuerDev == NULL 设备初始化失败"));
-	//	return Error_NotInit;
-	//}
-
-	////设备没有打开
-	//if(m_bDevIsOpen == false) {
-	//	//m_log.error(_T("Return ReleaseIC(), m_bDevIsOpen == false 设备没有打开"));
-	//	return Error_Closed;
-	//}
-
-	//int l_iResult = FAIL;
-	//tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};
-	////m_log.info(_T("Return ReleaseIC(), Error_Succeed"));
-	//return Error_Succeed;
-
-
-	int l_iResult = -1;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL)
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"enter ReleaseIC :  设备初始化失败");
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"enter ReleaseIC : Error_Hardware 设备没有打开");
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-	if(blCardIssuerDev)
-	{
-		tDevReturn tReturnInfo[8] = { 0 };
-		//IC卡下电
-		
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		LOG4VTM(INFO,"enter ReleaseIC : 开始下电");
-		l_iResult = m_pCardIssuerDev->iChipPower(3, NULL, NULL, tReturnInfo);
-		//LOG4VTM(INFO,"enter ReleaseIC : iChipPower return %d",l_iResult);
-		if(SUCCESS != l_iResult)
-		{
-			UpdatalastErr(Error_Hardware,tReturnInfo[0].iPhyCode,"设备没有打开",__FUNCTION__,__LINE__);
-			//p_OCardIssuer->PrintError(&tReturnInfo,l_iResult,Error_Hardware,"iChipPower 3 failed");
-			LOG4VTM(INFO,"enter ReleaseIC : Error_Hardware IC卡下电失败");
-			l_iResult = Error_Hardware;
-		}
-	}
-
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::WarmReset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter WarmReset : WarmReset Begin");
-	//m_log.info(_T("Enter WarmReset()"));
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) {
-		//m_log.error(_T("Return WarmReset(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_NotInit;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false) {
-		//m_log.error(_T("Return WarmReset(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		return Error_Closed;
-	}
-
-	//IC卡热复位
-	tDevReturn tReturnInfo[8] = { 0 };
-	memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-	int l_iResult = m_pCardIssuerDev->iChipPower(2, NULL, NULL, tReturnInfo);
-	//memcpy(&m_devLastReturn,&tReturnInfo,m_returnSize);
-	if(SUCCESS != l_iResult)
-	{
-		//m_log.error(_T("Return WarmReset(), Error_Hardware IC卡热复位失败"));
-		//PrintError(&tReturnInfo,l_iResult,Error_Hardware,"iChipPower 2 failed");
-		UpdatalastErr(Error_Closed,tReturnInfo[0].iPhyCode,"设备没有打开",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"enter MagWrite : Error_Hardware IC卡热复位失败");
-		return Error_Hardware;
-	}
-	//m_log.info(_T("Return WarmReset(), Error_Succeed"));
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter ICCommand : ICCommand Begin");
-	//PAPCReturn	pAPCRet = NULL;
-	//pAPCRet = (PAPCReturn)dwPARAM;
-	//OCardIssuer *p_OCardIssuer = (OCardIssuer*)(pAPCRet->m_Object);
-
-	int l_iResult = FAIL;
-	bool blCardIssuerDev = false;
-
-	//设备初始化失败
-	if(m_pCardIssuerDev == NULL) 
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_pCardIssuerDev == NULL 设备初始化失败"));
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		l_iResult = Error_NotInit;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-	//设备没有打开
-	if(m_bDevIsOpen == false)
-	{
-		//p_OCardIssuer->m_log.error(_T("Return DeactivateICCard(), m_bDevIsOpen == false 设备没有打开"));
-		UpdatalastErr(Error_Closed,Error_Closed,"设备没有打开",__FUNCTION__,__LINE__);
-		l_iResult = Error_Closed;
-		blCardIssuerDev  = false;
-	}
-	else
-	{
-		blCardIssuerDev  = true;
-	}
-
-
-	tIDCStatusInfoEx l_tIDCStatusInfoEx = {0};
-	
-	
-	memset(&recvBuf, 0, sizeof(recvBuf));
-	CmdInfo sendBuff = sendBuf;
-	//CmdInfo *recvBuff = (CmdInfo*)&recvBuf;
-
-
-	if(blCardIssuerDev)
-	{
-		//获取设备状态
-		int tryCnt =0;
-		bool bl = false;
-		//	tDevReturn tReturnInfo;
-
-		tDevReturn m_ptDevReturn[8] = {0};
-		unsigned char l_pbyCmd[1024] = {0}, l_pbyRev[1024] = {0};
-		int l_iCmdLen = 0;
-		unsigned int l_uRevLen = 0;
-
-		memset(l_pbyCmd, 0, sizeof(l_pbyCmd));
-		memset(l_pbyRev, 0, sizeof(l_pbyRev));
-		l_iCmdLen = sendBuff.dwSize;
-		l_uRevLen = sizeof(recvBuf.data);
-
-		//发启CHIPIO通讯,发送数据
-		memcpy(l_pbyCmd, sendBuff.data, sendBuff.dwSize);
-		memset(&m_ptDevReturn, 0, sizeof(m_ptDevReturn));
-		l_iResult = m_pCardIssuerDev->iChipIO(0, l_pbyCmd, l_iCmdLen, l_pbyRev, &l_uRevLen, m_ptDevReturn);
-		if(SUCCESS != l_iResult) 
-		{
-			UpdatalastErr(Error_Closed,m_ptDevReturn[0].iPhyCode,"iChipIO Error",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"enter ICCommand iChipIO err");
-			//p_OCardIssuer->m_log.error(_T("ICCommand iChipIO err"));
-			//return Error_Hardware;
-		}
-
-		//接受数据,并返回
-		memcpy(recvBuf.data, l_pbyRev, l_uRevLen);
-		recvBuf.dwSize = l_uRevLen;
-	}
-	char buffer[32] = {0};
-
-
-	if(l_iResult !=0)
-	{
-		return (ErrorCodeEnum)l_iResult;
-	}
-
-	return Error_Succeed;
-
-}
-
-ErrorCodeEnum CardIssuerClassImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter Reset : Reset Begin");
-    ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
-    return err;
-}
-
-ErrorCodeEnum CardIssuerClassImpl::DevClose()
-{
-
-//    int log = 0;
-//    TRACE4VTM_FUNCTION(&log);
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter DevClose : DevClose Begin");
-    ErrorCodeEnum err = Error_Succeed;
-    return err;
-}
-
-ErrorCodeEnum CardIssuerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	LOG4VTM_FUNCTION();
-	devErrInfo.dwErrMsgLen = m_tDevErrorInfo.dwErrMsgLen;
-    memcpy(devErrInfo.szErrMsg,m_tDevErrorInfo.szErrMsg,m_tDevErrorInfo.dwErrMsgLen);
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    return Error_Succeed;
-}
-
-void CardIssuerClassImpl::UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func,int line)
-{
-	LOG4VTM_FUNCTION();
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    std::string lCode = int2str(logicCode);
-    std::string pCode = int2str(phyCode);
-	std::string sline = int2str(line);
-	//std::string msgError = "ErrCode: "+ pCode + "," + "Descprition: " + "Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg; //bhj
-	std::string msgError = "{\"ErrCode\": "+ pCode + "," + "\"Description\": " + "\"Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg + "\"}";
-	LOG4VTM(ERROR,msgError.c_str());   //新增厂商日志输出
-    //防止溢出
-	if (msgError.length() > sizeof(m_tDevErrorInfo.szErrMsg))
-	{
-		msgError.resize(sizeof(m_tDevErrorInfo.szErrMsg));
-	}
-	m_tDevErrorInfo.dwErrMsgLen = msgError.length();
-    memcpy(m_tDevErrorInfo.szErrMsg,msgError.c_str(),msgError.length());
-}
-
-
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-	cmb::log_init_config config;
-    config.dev_name = "CardIssuer";
-	config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-    config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-    config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-    std::string str;
-    cmb::log4vendor::init(config, str);
-    //printf("init after: %s\n", str.c_str());
-	
-	
-    baseObj = new CardIssuerClassImpl();
-    if(baseObj == NULL) {
-    return Error_Resource;
-    } else {
-    return Error_Succeed;
-    }
-}
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-    if(pBaseObj == NULL) {
-    return Error_Param;
-    }
-    if(CardIssuerClassImpl* pTmp = dynamic_cast<CardIssuerClassImpl*>(pBaseObj))
-    {
-    delete pTmp;
-    pTmp = NULL;
-    return Error_Succeed;
-    }
-    return Error_Param;
-}
-

+ 0 - 338
DevAdapter/grg/cardissuer.1.1/cardissuer_impl.h

@@ -1,338 +0,0 @@
-#ifndef LIBFRAMEWORK_CARDISSUER_IMPL_H
-#define LIBFRAMEWORK_CARDISSUER_IMPL_H
-
-#include "CardIssuerClass.h"
-#include "ACTIDCDev.h"
-
-#include <iostream>
-
-#define TOOTH_PWD  "1111"
-#define TRYCNT     3
-#define TINYCNT    1
-#define CMB_FILLMASK  //屏蔽敏感信息开关
-#define BUFSIZE 512  //日志内容缓冲区大小
-
-#define  LOGBUFLEN  1024
-
-
-class CardIssuerClassImpl : public CardIssuerClass
-{
-public:
-    CardIssuerClassImpl();
-    ~CardIssuerClassImpl();
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-
-private:
-
-	OACTIDCDev*	    m_pCardIssuerDev;
-	tIDCVersionInfo*	m_ptIDCVersionInfo;
-	bool				m_bDevIsOpen;
-	DWORD				m_dwCardType;//卡种类 0,未知卡片;1,磁条卡;2,IC卡
-	BYTE				m_btOpenType;
-	BYTE				m_bWorkingKey[16];
-
-
-	tDevReturn		    m_devLastReturn;
-	char LastReturnErr[32];
-	ErrorCodeEnum retErrCodeEnum;
-
-	int m_returnSize;
-	char comPortStr[20];
-
-public:
-
-    virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
-
-    virtual ErrorCodeEnum GetDevStatus(CardIssuerStatus& devStatus);
-
-    virtual ErrorCodeEnum GetDeviceSN(char*& pDevSN);
-
-    virtual ErrorCodeEnum MoveCard(CardPosEnum eCardPos, int hopperNo);
-
-    //
-    //	Set card entry
-    //
-    virtual ErrorCodeEnum SetCardInType(CardInEnum eCardIn);
-
-    //
-    //	Read data from magnetic track.
-    //
-    virtual ErrorCodeEnum MagRead(MagTracks& magTracks);
-    //
-    //	Write data to magnetic track.
-    //
-    virtual ErrorCodeEnum MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode);
-    //
-    //	Set retract counter
-    //
-    virtual ErrorCodeEnum SetRetractCounter(DWORD dwCount);
-    //
-    //	Set issuer counter
-    //	hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱)
-    //
-    virtual ErrorCodeEnum SetIssuerCounter(DWORD dwCount, int hopperNo);
-    //
-    //	Active contact IC card
-    //
-    virtual ErrorCodeEnum ActiveICCard();
-    //
-    //	Move IC card to contact position
-    //
-    virtual ErrorCodeEnum ContactIC();
-    //
-    //	Release IC contact
-    //
-    virtual ErrorCodeEnum ReleaseIC();
-    //
-    //	Warm reset card(IC)
-    //
-    virtual ErrorCodeEnum WarmReset();
-    //
-    //	APDU:Application Protocol Data Unit
-    //	CmdSend.lpCmd:Command-APDU
-    //	CmdRecv.lpData:Response-APDU
-    //
-    virtual ErrorCodeEnum ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
-
-
-
-
-
-
-    //////////////////SAM 卡操作部分////////////////////
-    virtual ErrorCodeEnum SAMActive(BYTE vcc = 0x30) { return Error_NotImpl; };
-    virtual ErrorCodeEnum SAMDeactivate() { return Error_NotImpl; };
-    virtual ErrorCodeEnum SAMWarmReset() { return Error_NotImpl; };
-    virtual ErrorCodeEnum SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf) { return Error_NotImpl; };
-    virtual ErrorCodeEnum SAMQueryStatus(SAMStatus& samStatus) { return Error_NotImpl; };
-    virtual ErrorCodeEnum SAMSelect(const int sn) { return Error_NotImpl; };
-    virtual ErrorCodeEnum ActiveICCardATR(CmdInfo& atrBuf) { return Error_NotImpl; }
-    ////////////////卡面打印部分,部分机型有此功能//////////////////
-    virtual ErrorCodeEnum Print(BYTE*& data, const int dataSize, const int side) { return Error_NotImpl; };
-    virtual ErrorCodeEnum QueryPrinterStatus() { return Error_NotImpl; };
-
-    ////////////////////////////////////////////////////////////////////////////
-    ////////非接(IC)部分 start,没有此部分,在接口实现中直接返回Error_NotImpl///////////////
-    ////////////////////////////////////////////////////////////////////////////
-    //	Active contactless IC card(Type A,B,Mifare)
-    //	The first,second,third activation order decided by fstType,scdType,thdType respectively
-    //	fstType,scdType,thdType can be one of 'A','B','M','0'(30H,no type)
-    //	outType indicates the type of  activation result
-    //
-    virtual ErrorCodeEnum ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //
-    //	Deactivate contact IC card
-    //
-    virtual ErrorCodeEnum DeactivateICCard()
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //
-    //	Deactivate contactless IC card
-    //
-    virtual ErrorCodeEnum DeactContactlessICCard()
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //
-    //	RF Mifare Classic protocol operation
-    //	Arguments:
-    //	- eFunType:function type as load key,authentication and so on
-    //	- sendBuf:[parameter][data]
-    //	- recvBuf:[status(1byte)][return data]
-    //
-    virtual ErrorCodeEnum MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf)
-    {
-        //return Error_NotImpl
-		return Error_Succeed;
-    }
-    //
-    //	RF Type A,B command.
-    //	APDU:Application Protocol Data Unit
-    //	Arguments:
-    // 	- CmdSend.lpCmd:Command-APDU
-    // 	- CmdRecv.lpData:Response-APDU
-    //
-    virtual ErrorCodeEnum RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    ////////非接(IC)部分 end/////////////////////////////////////////////////////////
-
-    virtual ErrorCodeEnum DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType);
-
-
-    /////////////////////////////////////////////////////////////////////////
-    ///以下是便携式卡机特有API,接口实现中其他机型直接返回Error_NotImpl即可//
-    /////////////////////////////////////////////////////////////////////////
-
-    //	返回值Error_Succeed表示成功,其他值表示失败
-    //	iStatus   0:成功   -1:银行公钥不存在   -2:产生设备密钥故障  -x:其他厂商自定义故障
-    //	Cr1:随机数r1的密文; Cr3:随机数r3的密文,dKey:用银行公钥加密的设备公钥密文
-    //	r1,r3第16字节为数据完整性校验字节,例如r1为B1B2...B15B16,则B16=B1^B2^...^B15
-    virtual ErrorCodeEnum TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-
-    //	返回值Error_Succeed表示成功,其他值表示失败
-    //	iStatus   0:成功   -x:厂商自定义故障
-    //	r2第16字节为数据完整性校验字节,例如r2为B1B2...B15B16,则B16=B1^B2^...^B15
-    virtual ErrorCodeEnum SetR2(int& iStatus, BYTE* pCr2, int lenR2)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //
-    //	设置会话密钥
-    //	pWorkingKey:会话密钥,传递16进制的字符形式,例如0x123456FFAB  --> "123456FFAB"
-    virtual ErrorCodeEnum SendWorkingKey(const char* pWorkingKey)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-
-    //安全锁接口部分 begin
-    virtual ErrorCodeEnum SLLoadKey(const SCIKeyInfo key)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //case ParamBeep: value:0,close beep;value:1,open beep
-    //case ParamLed: value:0,close led;value:1,open led
-    //case ParamLevelTime: value:the duration of level,100ms per unit
-    //		ex.	the value 10 means duration time is 1 second
-    virtual ErrorCodeEnum SLSetParam(SCIParamType eType, int value)
-    {
-       // return Error_NotImpl;
-	   return Error_Succeed;
-    }
-    virtual ErrorCodeEnum SLLock()
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    virtual ErrorCodeEnum SLUnLock(const SCICheckCode checkCode, bool bTemp = true)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    virtual ErrorCodeEnum SLGetTempData(SCITempData& ksnData, SCITempData& ramData)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    virtual ErrorCodeEnum SLOpenDoor(const SCITempData data)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //安全锁接口部分 end
-
-    //蓝牙控制部分 start
-    //蓝牙指令控制,命令参看SCIBluetoothCMD说明
-    virtual ErrorCodeEnum BluetoothControl(SCIBluetoothCMD eCmd)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //修改配对密码
-    virtual ErrorCodeEnum BluetoothModifyKey(unsigned char* key)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //修改蓝牙设备名称
-    virtual ErrorCodeEnum BluetoothModifyName(unsigned char* name)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //获取版本信息
-    virtual ErrorCodeEnum BluetoothGetVersion(char*& version)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //获取连接设备名称
-    virtual ErrorCodeEnum BluetoothGetConnectName(unsigned char*& name)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //获取连接设备信号强度
-    virtual ErrorCodeEnum BluetoothGetSignalStrength(unsigned char*& signal)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //蓝牙控制部分 end
-
-    //控制灯光
-    //eLight:所控制的灯 ;
-    //bOnOff:true 亮灯;fasle 灭灯
-    virtual ErrorCodeEnum LightControl(SCILightType eLight, bool bOnOff)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //以百分比数值返回剩余电量(1-100),例如剩余51%,则bat赋值为51
-    virtual ErrorCodeEnum QueryBatteryPower(int& bat)
-    {
-        //return Error_NotImpl;
-		return Error_Succeed;
-    }
-    //把卡片从读卡器移动到指定卡槽位
-    virtual ErrorCodeEnum MoveCardToSlot(int slot)
-	{ 
-	//return Error_NotImpl; 
-	return Error_Succeed;
-	}
-    //把卡片从指定卡槽位移动到读卡器
-    virtual ErrorCodeEnum MoveCardFromSlot(int slot)
-	{
-		//return Error_NotImpl; 
-		return Error_Succeed;
-	}
-    //读取卡号
-    //优先从IC卡解析卡号,如果纯磁条卡,则返回磁道解析的卡号
-    virtual ErrorCodeEnum ReadAccount(CardNo& cardNo)
-	{ 
-	return Error_Succeed;
-	//return Error_NotImpl; 
-	}
-    //获取总卡槽数
-    virtual ErrorCodeEnum GetSlotSum(int& sum) 
-	{
-		return Error_Succeed;
-		//return Error_NotImpl; 
-	}
-    //获取卡槽状态
-    virtual ErrorCodeEnum QuerySlotsStatus(SlotStatus& slots, const int slot, bool bFull = false) 
-	{ 
-	return Error_Succeed;
-	//return Error_NotImpl; 
-	}
-
-    void UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func = "defaultfunc",int line = 0);
-private:
-    int m_mode;
-    DevErrorInfo m_tDevErrorInfo;
-};
-
-
-#endif //LIBFRAMEWORK_CARDISSUER_IMPL_H

+ 0 - 25
DevAdapter/grg/contactlesscard.1.1/CMakeLists.txt

@@ -1,25 +0,0 @@
-# 声明模块名称的前缀和名称
-rvc_dev_define_module("ContactlessCard")
-
-# rvc_dev_config_library 内需要使用这三个参数,用于拼接输出的适配器文件名称
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-# 包含要编译的实现文件,rvc_dev_config_library 内使用
-set(${MODULE_PREFIX}_SRCS SHARED
-	contactless_impl.cpp
-)
-
-# 适配器工程需要通过此宏替代 add_library
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-# ${MODULE_FULL_NAME} 是 TAGET 名称,在 rvc_dev_config_library 中定义
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME} grgRFIDCDev dl ${VENDOR_LOG_LIB_NAME})
-
-#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 758
DevAdapter/grg/contactlesscard.1.1/contactless_impl.cpp

@@ -1,758 +0,0 @@
-#include "contactless_impl.h"
-#include <cstring>
-#include <cstdio>
-#include <iostream>
-#include <string>
-#include <stdio.h>
-#include "log4vendor.h"
-
-extern char ** environ;
-//using namespace std;
-
-//bhj
-std::string int2str(int nTemp)  
-{
-	std::stringstream stream;
-	stream << nTemp;
-    return stream.str();
-}
-
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-	
-	cmb::log_init_config config;
-    config.dev_name = "ContactlessCard";
-	config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-    config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-    config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-    std::string str;
-    cmb::log4vendor::init(config, str);
-    printf("init after: %s\n", str.c_str());
-	
-	
-	baseObj = new ContactlessCardImpl();
-	if(baseObj == NULL) {
-		return Error_Resource;
-	} else {
-		return Error_Succeed;
-	}
-}
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-	if(pBaseObj == NULL) {
-		return Error_Param;
-	}
-	if(ContactlessCardImpl* pTmp = dynamic_cast<ContactlessCardImpl*>(pBaseObj))
-	{
-		delete pTmp;
-		pTmp = NULL;
-		return Error_Succeed;
-	}
-	return Error_Param;
-}
-
-
-
-ContactlessCardImpl::ContactlessCardImpl()
-        :m_mode(0)
-{
-	m_pCardRFIDCDev  = NULL;	
-	memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-
-	//char m_acLogicDevName[32] ={0};
-	//m_pCardRFIDCDev = new ORFReaderDev(m_acLogicDevName);
-}
-
-ContactlessCardImpl::~ContactlessCardImpl()
-{
-	
- 	if(NULL != m_pCardRFIDCDev) 
- 	{
- 		m_pCardRFIDCDev->iCloseComm();//关闭通信
- 		delete m_pCardRFIDCDev;
- 		m_pCardRFIDCDev = NULL;
-	}
-}
-
-ErrorCodeEnum ContactlessCardImpl::DevOpen(DWORD dwPort,DWORD dwBaudRate)
-{
-	LOG4VTM_FUNCTION();
-	char **var;
-    for(var = environ;*var != NULL;var++)
-	{
-		LOG4VTM(INFO,*var);
-		//cout<<*var<<endl;
-	}
-	
-	// FILE *fp = NULL;
-	// char data[150] = {'0'};
-	// //fp = popen("ldd -r /opt/run/version/0.0.3.45/dep/grg/libgrgRFIDCDev.so", "r");
-	// fp = popen("ldd -r /opt/run/version/0.0.3.45/dep/grg/libgrgRFIDCDev.so", "r");
-	// if (fp == NULL)
-	// {
-	// 	printf("popen error!\n");
-	// }
-	// while (fgets(data, sizeof(data), fp) != NULL)
-	// {
-	// 	LOG4VTM(INFO,data);
-	// 	//printf("%s", data);
-	// }
-	// pclose(fp);
-	
-	if(m_pCardRFIDCDev == NULL)
-	{
-		m_pCardRFIDCDev = new ORFReaderDev();
-	}
-	
-	LOG4VTM(INFO,"enter DevOpen ");
-	if(m_pCardRFIDCDev == NULL)
-	{
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"m_pCardRFIDCDev == NULL");
-		return Error_NotInit;
-	}
-	tDevReturn tReturnInfo;
-	memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-
-	int l_iResult = m_pCardRFIDCDev->iSetCommPara(&tReturnInfo);
-	if (l_iResult != 0)
-	{
-		UpdatalastErr(Error_DevConnFailed,tReturnInfo.iPhyCode,"设备打开失败",__FUNCTION__,__LINE__);
-
-		LOG4VTM(INFO,"DevOpen - iSetCommPara fail");
-		
-		char szErrMsg[256]={0};
-		snprintf(szErrMsg, sizeof(szErrMsg), "iSetCommPara fail code: %d",tReturnInfo.iLogicCode);
-		LOG4VTM(INFO,szErrMsg);
-			
-		return Error_DevConnFailed;
-	}
-	l_iResult = m_pCardRFIDCDev->iInit(1, &tReturnInfo);
-	if (l_iResult != 0)
-	{
-		UpdatalastErr(Error_NotInit,tReturnInfo.iPhyCode,"设备初始化失败",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"DevOpen - iInit fail");
-		
-		char szErrMsg[256]={0};
-		snprintf(szErrMsg, sizeof(szErrMsg), "iInit fail code: %d",tReturnInfo.iLogicCode);
-		LOG4VTM(INFO,szErrMsg);
-
-		return Error_NotInit;
-	}
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::GetDevStatus(RFICReaderStatus &devStatus)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter  GetDevStatus ");
-	if(m_pCardRFIDCDev == NULL)
-	{
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_NotInit;
-	}
-	tIDCStatusInfoEx l_srStatusInfo = {0};
-	l_srStatusInfo.byIssueCard = 0xFF;	// 不获取发卡器状态
-	tDevReturn l_asReturn[8] = {0};
-
-	//可先判断卡类型
-	int l_iResult = m_pCardRFIDCDev->iGetDevStatus(&l_srStatusInfo, l_asReturn);
-	if (l_iResult != 0)
-	{
-		UpdatalastErr(Error_NotExist,l_asReturn[0].iPhyCode,"iGetDevStatus Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"iGetDevStatus : fail");
-		return Error_NotExist;
-	}
-	memset(&devStatus,0,sizeof(devStatus));
-	devStatus.eMediaPos = CI_MEDIA_NOT_IC;
-
-	if(l_srStatusInfo.byMedia == 4)
-	{
-
-		if(l_srStatusInfo.byICType =='A')
-		{
-			devStatus.eMediaPos = CI_MEDIA_RF;
-		}
-		else if(l_srStatusInfo.byICType =='B')
-		{
-			 devStatus.eMediaPos = CI_MEDIA_IDCARD;
-		}
-		else if(l_srStatusInfo.byICType =='M')
-		{
-			 devStatus.eMediaPos = CI_MEDIA_IC;
-		}
-		else
-		{
-			devStatus.eMediaPos = CI_MEDIA_NOT_IC;
-			
-		}
-	}
-	else
-	{
-		devStatus.eMediaPos = CI_MEDIA_NOTPRESENT;
-	}
-  
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::AbortRead()
-{
-	LOG4VTM_FUNCTION();
-	if(m_pCardRFIDCDev == NULL)
-	{
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_NotInit;
-	}
-
-	return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::ActiveContactlessICCard(char fstType,char scdType,char thdType,char &outType)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : ActiveContactlessICCard");
-	outType = '0';
-    if(m_pCardRFIDCDev == NULL)
-    {
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"ActiveContactlessICCard : fail");
-        return Error_NotInit;
-    }
-
-    int count = 0;
-    char loop[3] = {0};
-    loop[0] = fstType;
-    loop[1] = scdType;
-    loop[2] = thdType;
-    bool isSuccess = false;
-    ErrorCodeEnum retActivate = Error_NotImpl;
-    
-    unsigned char buf[128] = {0};
-   
-	short rr  =0;
-    while(count<3)
-    {
-        char thisType = loop[count];
-       // sleep(100);   //延迟100 ,不延迟第一次调用获取状态失败
-        if(thisType == 'A')
-        {
-			
-            retActivate = A_ActivateCard(outType);
-            if(retActivate == Error_Succeed)
-            {
-                isSuccess = true;
-                break;
-            }
-        }else if(thisType == 'B')
-        {
-            retActivate = B_ActivateCard(outType);
-            if(retActivate == Error_Succeed)
-            {
-                isSuccess = true;
-                break;
-            } 
-        }else if(thisType == 'M')
-        {
-            retActivate = M_ActivateCard(outType);
-            if(retActivate == Error_Succeed)
-            {
-                isSuccess = true;
-                break;
-            } 
-        }
-        count++;
-    }
-    if(!isSuccess)
-    {
-        return retActivate;
-    }
-    
-    return Error_Succeed;
-}
-ErrorCodeEnum ContactlessCardImpl::A_ActivateCard(char &outType)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : A_ActivateCard");
-
-	int l_iPowerMode = 7;	// 不论激活成功与否,操作完非接后,最好都释放非接卡片
-	int l_uiDataLen = 1024;
-	BYTE l_acData[1024] = {0};
-
-	tDevReturn l_asReturn[8] = {0};
-	int l_iResult = m_pCardRFIDCDev->iChipPower(l_iPowerMode,l_acData, &l_uiDataLen, l_asReturn);
-	if (SUCCESS != l_iResult)
-	{
-		UpdatalastErr(Error_NotExist,l_asReturn[0].iPhyCode,"iChipPower Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"A_ActivateCard::iChipPower 7: fail");
-	}
-	else
-	{
-		LOG4VTM(INFO,"A_ActivateCard::iChipPower 7: success");
-		//bhj 确认上电成功后发送蜂鸣器操作指令
-		tDevReturn tReturnInfo;
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		int BeepResult = m_pCardRFIDCDev->iConfig(C_SPEAKER_SETTING,0x00010011,&tReturnInfo);
-		if(BeepResult!=0)
-		{
-			UpdatalastErr(Error_NotExist,tReturnInfo.iPhyCode,"iConfig Error",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"iConfig:Error");
-		}else
-		{
-			LOG4VTM(INFO,"iConfig:Success");
-		}
-	}
-
-	tIDCStatusInfoEx l_srStatusInfo = {0};
-	l_srStatusInfo.byIssueCard = 0xFF;	// 不获取发卡器状态
-
-	int l_iResult2 = m_pCardRFIDCDev->iGetDevStatus(&l_srStatusInfo, l_asReturn);
-	if (SUCCESS != l_iResult2)
-	{
-		UpdatalastErr(Error_Cancel,l_asReturn[0].iPhyCode,"iGetDevStatus Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"iGetDevStatus : fail");
-		return Error_Cancel;
-	}
-	if (l_srStatusInfo.byMedia == 4&&l_srStatusInfo.byICType =='A')
-	{
-		int l_iPowerMode = 5;	// 激活非接卡片
-		BYTE l_acData[1024] = {0};
-		int  l_uiDataLen = 1024;
-
-		tDevReturn l_asReturn2[8] = {0};
-
-		l_uiDataLen = sizeof(l_acData);
-		int l_iResult = m_pCardRFIDCDev->iChipPower(l_iPowerMode,l_acData, &l_uiDataLen, l_asReturn2);
-		if (SUCCESS == l_iResult)
-		{
-			outType = 'A';
-			
-		}else
-		{
-			UpdatalastErr(Error_Cancel,l_asReturn2[0].iPhyCode,"iChipPower Error",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"iChipPower 5: fail");
-			return Error_Cancel;
-
-		}
-	}
-	else
-	{
-
-
-		memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-		snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "l_srStatusInfo.byMedia : %d  l_srStatusInfo.byICType :  %d", l_srStatusInfo.byMedia, l_srStatusInfo.byICType);
-		m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-		LOG4VTM(INFO,m_DevErrorInfo.szErrMsg);
-
-		LOG4VTM(INFO,"l_srStatusInfo.byICType or l_srStatusInfo.byMedia not right");
-		return Error_Cancel;
-	}
-	return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::B_ActivateCard(char &outType)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : B_ActivateCard");
-
-	int l_iPowerMode = 7;	// 不论激活成功与否,操作完非接后,最好都释放非接卡片
-	int l_uiDataLen = 1024;
-	BYTE l_acData[1024] = {0};
-
-	tDevReturn l_asReturn[8] = {0};
-	int l_iResult = m_pCardRFIDCDev->iChipPower(l_iPowerMode,l_acData, &l_uiDataLen, l_asReturn);
-	if (SUCCESS != l_iResult)
-	{
-		UpdatalastErr(Error_Cancel,l_asReturn[0].iPhyCode,"iChipPower Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"B_ActivateCard::iChipPower  : fail");
-	}else
-	{
-		LOG4VTM(INFO,"B_ActivateCard::iChipPower : success");
-		//bhj 确认上电成功后发送蜂鸣器操作指令
-		tDevReturn tReturnInfo;
-		memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-		int BeepResult = m_pCardRFIDCDev->iConfig(C_SPEAKER_SETTING,0x00010011,&tReturnInfo);
-		if(BeepResult!=0)
-		{
-			UpdatalastErr(Error_Cancel,tReturnInfo.iPhyCode,"iConfig Error",__FUNCTION__,__LINE__);
-			LOG4VTM(INFO,"iConfig:Error");
-		}else
-		{
-			LOG4VTM(INFO,"iConfig:Success");
-		}
-	}
-
-	tIDCStatusInfoEx l_srStatusInfo = {0};
-	l_srStatusInfo.byIssueCard = 0xFF;	// 不获取发卡器状态
-
-	int l_iResult2 = m_pCardRFIDCDev->iGetDevStatus(&l_srStatusInfo, l_asReturn);
-	if (SUCCESS != l_iResult2)
-	{
-		UpdatalastErr(Error_Cancel,l_asReturn[0].iPhyCode,"iConfig Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"iGetDevStatus : fail");
-		return Error_Cancel;
-	}
-	if (l_srStatusInfo.byMedia == 4&&l_srStatusInfo.byICType =='B')
-	{
-		int l_iPowerMode = 5;	// 激活非接卡片
-		BYTE l_acData[1024] = {0};
-		int  l_uiDataLen = 1024;
-
-		tDevReturn l_asReturn2[8] = {0};
-
-		l_uiDataLen = sizeof(l_acData);
-		int l_iResult = m_pCardRFIDCDev->iChipPower(l_iPowerMode,l_acData, &l_uiDataLen, l_asReturn2);
-		if (SUCCESS == l_iResult)
-		{
-			outType = 'B';
-		}else
-		{
-			UpdatalastErr(Error_Cancel,l_asReturn2[0].iPhyCode,"iConfig Error",__FUNCTION__,__LINE__);
-			return Error_Cancel;
-		}
-	}
-	else
-	{
-
-		memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-		snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "l_srStatusInfo.byMedia : %d  l_srStatusInfo.byICType :  %d", l_srStatusInfo.byMedia, l_srStatusInfo.byICType);
-		m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-		LOG4VTM(INFO,m_DevErrorInfo.szErrMsg);
-		
-		LOG4VTM(INFO,"l_srStatusInfo.byICType or l_srStatusInfo.byMedia not right");
-		return Error_Cancel;
-	}
-
-	
-	return Error_Succeed;
-
-}
-
-ErrorCodeEnum ContactlessCardImpl::M_ActivateCard(char &outType)
-{
-	LOG4VTM_FUNCTION();
-	return Error_NotImpl;
-}
-////禁用非接触式IC卡
-ErrorCodeEnum ContactlessCardImpl::DeactContactlessICCard()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : DeactContactlessICCard");
-
-	if(m_pCardRFIDCDev == NULL)
-    {
-        UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-        return Error_NotInit;
-    }
-    
-	int l_iPowerMode = 7;	// 不论激活成功与否,操作完非接后,最好都释放非接卡片
-	int l_uiDataLen = 1024;
-	BYTE l_acData[1024] = {0};
-		
-	tDevReturn l_asReturn[8] = {0};
-	int l_iResult = m_pCardRFIDCDev->iChipPower(l_iPowerMode,l_acData, &l_uiDataLen, l_asReturn);
-
-	if(l_iResult  != SUCCESS)
-	{	
-		LOG4VTM(INFO,"iChipPower 7: fail");
-		UpdatalastErr(Error_DevCommFailed,l_asReturn[0].iPhyCode,"设备初始化失败",__FUNCTION__,__LINE__);
-		return Error_DevCommFailed;
-				
-	}
-   
-    
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::WarmReset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : WarmReset");
-    RFICReaderStatus devStatus;
-    if(GetDevStatus(devStatus)!=Error_Succeed)
-    {
-		//UpdatalastErr(Error_DevCommFailed,l_asReturn[0].iPhyCode,"设备初始化失败",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"GetDevStatus : fail");
-        return Error_DevCommFailed;
-    }
-    if(devStatus.eMediaPos == CI_MEDIA_NOTPRESENT)
-    {
-        LOG4VTM(INFO,"GetDevStatus : devStatus.eMediaPos == CI_MEDIA_NOTPRESENT");
-		UpdatalastErr(Error_NoTarget,Error_NoTarget,"CI_MEDIA_NOTPRESENT",__FUNCTION__,__LINE__);
-        return Error_NoTarget;
-    }
-   
-    return Reset();
-}
-
-ErrorCodeEnum ContactlessCardImpl::MifareCommand(MifareFuctionEnum eFunType,CmdInfo sendBuf,CmdInfo &recvBuf)
-{
-	LOG4VTM_FUNCTION();
-//    
-//	memset(&recvBuf, 0, sizeof(recvBuf));
-//   
-//    short ret = -1;
-//
-//    switch(eFunType)
-//    {
-//    case CI_MIFARE_LOAD_KEY:
-//        {
-//            unsigned char buff[6] = {0};
-//            memcpy(buff,(char*)sendBuf.data[2],6);
-//           
-//        } 
-//        break;
-//    case CI_MIFARE_AUTH: //验证
-//        {
-//            
-//        }
-//        break;
-//    case CI_MIFARE_READ:
-//        {
-//            unsigned char buff[16] = {0};
-//         
-//            memcpy(recvBuf.data,buff,sizeof(buff));
-//            recvBuf.dwSize = sizeof(buff);
-//        }
-//        break;
-//    case CI_MIFARE_WRITE:
-//        {
-//            unsigned char buff[16] = {0};
-//            memcpy(buff,(char*)sendBuf.data[2],16);
-//          
-//        }
-//        break;
-//    case CI_MIFARE_INC:
-//        {
-//            return Error_NotImpl;
-//        }
-//        break;
-//    case CI_MIFARE_DEC:
-//        {
-//            return Error_NotImpl;
-//        }
-//        break;
-//    }
-//    if(ret<0)
-//    {
-//       
-//    }
-//   
-    return Error_Succeed;
-}
-//
-ErrorCodeEnum ContactlessCardImpl::RFTypeABCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
-{
-	LOG4VTM_FUNCTION();
-	
-	if(m_pCardRFIDCDev == NULL)
-   {
-	   UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-       return Error_NotInit;
-   }
-	tIDCStatusInfoEx l_srStatusInfo = {0};
-	l_srStatusInfo.byIssueCard = 0xFF;	// 不获取发卡器状态
-	tDevReturn l_asReturn[8] = {0};
-
-	//可先判断卡类型
-	m_pCardRFIDCDev->iGetDevStatus(&l_srStatusInfo, l_asReturn);
-
-	//std::string dadf = ByteArray2String(sendBuf.data,sendBuf.dwSize);
-	
-	BYTE l_acData[1024] = {0};
-	UINT l_uiDataLen = 1024;
-	
-	// 与卡片交互
-	int l_iIndex = 0;
-	int CommLen = sendBuf.dwSize;
-	
-	int l_iResult = m_pCardRFIDCDev->iChipIO(l_iIndex, sendBuf.data,CommLen,l_acData,&l_uiDataLen, l_asReturn);
-	if(l_iResult  != SUCCESS)
-	{
-		UpdatalastErr(Error_DevCommFailed,l_asReturn[0].iPhyCode,"iChipIO ERROR",__FUNCTION__,__LINE__);
-		recvBuf.dwSize = 0;
-		memset(&recvBuf,0,sizeof(recvBuf));
-		return Error_DevCommFailed;
-	}else
-	{
-		
-	}
-	recvBuf.dwSize = l_uiDataLen;
-	memcpy(recvBuf.data,l_acData,l_uiDataLen);
-
-
- 
-    return Error_Succeed;
-}
-//std::string ContactlessCardImpl::ByteArray2String(const BYTE* lpData,int nDataLen) 
-//{
-//	std::string strAscii;
-//	if( lpData == NULL || nDataLen <= 0 )
-//		return strAscii ;
-//
-//	TCHAR szBuf[3] = {0} ;
-//	for(int i=0; i<nDataLen; i++)
-//	{
-//		_stprintf(szBuf,L"%02X",*(lpData+i)) ;
-//		int iLen = WideCharToMultiByte(CP_ACP, 0, szBuf, -1, NULL, 0, NULL, NULL);
-//
-//		char* chRtn = new char[iLen * sizeof(char)];
-//
-//		WideCharToMultiByte(CP_ACP, 0, szBuf, -1, chRtn, iLen, NULL, NULL);
-//
-//		std::string m_strAscii(chRtn);
-//
-//		strAscii += m_strAscii;
-//
-//		delete chRtn;
-//	}
-//
-//	return strAscii;
-//}
-ErrorCodeEnum ContactlessCardImpl::HaltCard()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : HaltCard");
-	if(m_pCardRFIDCDev == NULL)
-    {
-        UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-        return Error_NotInit;
-    }
-	int l_iPowerMode = 7;	// 不论激活成功与否,操作完非接后,最好都释放非接卡片
-	int l_uiDataLen = 1024;
-	BYTE l_acData[1024] = {0};
-
-	tDevReturn l_asReturn[8] = {0};
-	int l_iResult = m_pCardRFIDCDev->iChipPower(l_iPowerMode,l_acData, &l_uiDataLen, l_asReturn);
-
-	if(l_iResult  != SUCCESS)
-	{
-		UpdatalastErr(Error_DevCommFailed,l_asReturn[0].iPhyCode,"iChipPower Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"iChipPower 7 : fail");
-		return Error_DevCommFailed;
-	}
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : GetDevCategory");
-    if(m_pCardRFIDCDev == NULL)
-    {
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"m_pCardRFIDCDev == NULL");
-        return Error_NotInit;
-    }
-	tIDCVersionInfo* m_ptIDCVersionInfo = new tIDCVersionInfo();
-
-	memset(m_ptIDCVersionInfo, 0, sizeof(m_ptIDCVersionInfo));
-
-	tDevReturn tReturnInfo;
-	int l_iResult = m_pCardRFIDCDev->iGetVersionInfo(m_ptIDCVersionInfo,&tReturnInfo);
-
-	if(l_iResult  != SUCCESS)
-	{
-		UpdatalastErr(Error_NotInit,tReturnInfo.iPhyCode,"iGetVersionInfo Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"iGetVersionInfo : fail");
-		return Error_DevCommFailed;
-	}
-    unsigned char buf[128] = {0};
-   
-    short ret =0;
-    devCategory.eState = DEVICE_STATUS_NOT_READY;
-    
-	char pType[128] = {"PVER=grg#MID=CRT-603"};
-
-	char pMode[128]= {"STYLE=#FUNCTION=#FWID="};
-	char pVendor[10]= {"grg"};
-    memcpy(devCategory.szType,pType,strlen(pType));
-    memcpy(devCategory.szModel,pMode,strlen(pMode));
-	strcat(devCategory.szModel,m_ptIDCVersionInfo->acDevVer); //CRT591H
-    memcpy(devCategory.szVendor,pVendor,strlen(pVendor));
-
-
-	int l_iMajor=1, l_iMinor=1, l_iRevision=65535, l_iBuild=1;
-	//设备版本号 software version
-	
-	devCategory.version.wMajor = l_iMajor;
-	devCategory.version.wMinor = l_iMinor;
-	devCategory.version.wRevision = l_iRevision;
-	devCategory.version.wBuild = l_iBuild;
-
-	if(NULL != m_ptIDCVersionInfo)
-		delete m_ptIDCVersionInfo;
-	m_ptIDCVersionInfo = NULL;
-
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : Reset");
-    if(m_pCardRFIDCDev==NULL)
-    {
-		UpdatalastErr(Error_NotInit,Error_NotInit,"设备初始化失败",__FUNCTION__,__LINE__);
-        return Error_NotInit;
-    }
-    unsigned char len = 0;
-    unsigned char buff[128] = {0};
-
-	tDevReturn tReturnInfo;
-	memset(&tReturnInfo, 0, sizeof(tReturnInfo));
-
-	int l_iResult = m_pCardRFIDCDev->iInit(1, &tReturnInfo);
-	if(l_iResult  != SUCCESS)
-	{
-		UpdatalastErr(Error_NotInit,tReturnInfo.iPhyCode,"iInit Error",__FUNCTION__,__LINE__);
-		LOG4VTM(INFO,"iInit : fail");
-		return Error_DevCommFailed;
-	}
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	int l_iResult = m_pCardRFIDCDev->iCloseComm();//关闭通信
-    if(l_iResult  != SUCCESS)
-    {
-		UpdatalastErr(Error_NotInit,Error_NotInit,"iCloseComm Error",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"iCloseComm : fail");
-    }
-	
-
-    return Error_Succeed;
-}
-
-ErrorCodeEnum ContactlessCardImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	LOG4VTM_FUNCTION();
-    devErrInfo.dwErrMsgLen = m_tDevErrorInfo.dwErrMsgLen;
-    memcpy(devErrInfo.szErrMsg,m_tDevErrorInfo.szErrMsg,sizeof(m_tDevErrorInfo.szErrMsg));
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    return Error_Succeed;
-
-}
-
- void ContactlessCardImpl::UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func,int line)
-{
-	LOG4VTM_FUNCTION();
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    std::string lCode = int2str(logicCode);
-    std::string pCode = int2str(phyCode);
-	std::string sline = int2str(line);
-	//std::string msgError = "ErrCode: "+ pCode + "," + "Descprition: " + "Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg; //bhj
-	std::string msgError = "{\"ErrCode\": "+ pCode + "," + "\"Description\": " + "\"Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg + "\"}";
-	LOG4VTM(ERROR,msgError.c_str());   //新增厂商日志输出
-    //防止溢出
-	if (msgError.length() > sizeof(m_tDevErrorInfo.szErrMsg))
-	{
-		msgError.resize(sizeof(m_tDevErrorInfo.szErrMsg));
-	}
-	m_tDevErrorInfo.dwErrMsgLen = msgError.length();
-    memcpy(m_tDevErrorInfo.szErrMsg,msgError.c_str(),msgError.length());
-}

+ 0 - 101
DevAdapter/grg/contactlesscard.1.1/contactless_impl.h

@@ -1,101 +0,0 @@
-#ifndef LIBFRAMEWORK_CONTACTLESSCARD_IMPL_H
-#define LIBFRAMEWORK_CONTACTLESSCARD_IMPL_H
-
-#include "RFICClass.h"
-#include "RFReaderDev.h"
-#include <iostream>
-
-class ContactlessCardImpl : public RFICClass
-{
-public:
-    ContactlessCardImpl();
-    ~ContactlessCardImpl();
-
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-    //device initialization
-    virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
-   
-
-    //
-//	Get card reader status
-//
-    virtual ErrorCodeEnum GetDevStatus(RFICReaderStatus& devStatus);
-    
-    //
-    //	Abort current operation.
-    //
-    virtual ErrorCodeEnum AbortRead();
-    
-    //
-    //	Active contactless card(Type A,B,Mifare)
-    //	The first,second,third activation order decided by fstType,scdType,thdType respectively
-    //	fstType,scdType,thdType can be one of 'A','B','M','0'(30H,no type)
-    //	outType indicates the type of  activation result
-    //
-    virtual ErrorCodeEnum ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType);
-	
-    //
-    //	Deactivate contactless IC card
-    //
-    virtual ErrorCodeEnum DeactContactlessICCard();
-    //
-    //	Warm reset card(IC)
-    //
-    virtual ErrorCodeEnum WarmReset();
-    
-    //
-    //	Mifare operation
-    //	Arguments:
-    //	- eFunType:function type as load key,authentication and so on
-    //	- return/data(hex) byte order like BIG EDIAN. ex:0x12345678 --> data[i] = 0x12,data[i+1] = 0x34,data[i+2] = 0x56,data[i+3] = 0x78
-    //	- sendBuf:[parameter(hex)][data(hex)]
-    //	- recvBuf:[status(1byte)][return data(hex)]
-    //		-- [eFunType],[parameter,data],[status(1byte),return data]
-    //		-- [CI_MIFARE_LOAD_KEY],[key select(1byte),sector num(1byte),uncoded keys(6bytes)],[status(1byte)]
-    //		-- [CI_MIFARE_AUTH],[key select(1byte),sector num(1byte)],[status(1byte)]
-    //		-- [CI_MIFARE_READ],[block num(1byte)],[status(1byte),data(16bytes)]
-    //		-- [CI_MIFARE_WRITE],[block num(1byte),data(16bytes)],[status(1byte)] 
-    //		-- [CI_MIFARE_INC],[source block num(1byte),destination block num(1byte),inc value(4bytes)],[status(1byte)]
-    //		-- [CI_MIFARE_DEC],[source block num(1byte),destination block num(1byte),dec value(4bytes)],[status(1byte)]
-    //		-- key select(1byte):AKey(00h),BKey(01h)
-    //		-- status(1byte):OK(00h),other error code(!00h)
-
-    virtual ErrorCodeEnum MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf);
-    
-    //
-    //	RF Type A,B command.
-    //	APDU:Application Protocol Data Unit
-    //	Arguments:
-    // 	- CmdSend.lpCmd:Command-APDU
-    // 	- CmdRecv.lpData:Response-APDU
-    //
-    virtual ErrorCodeEnum RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
-    
-
-    //halt card
-    //card have been halted must move from induction zone then can be found again
-    virtual ErrorCodeEnum HaltCard();
-    
-	ErrorCodeEnum A_ActivateCard(char &outType);
-	ErrorCodeEnum B_ActivateCard(char &outType);
-	ErrorCodeEnum M_ActivateCard(char &outType);
-
-	
-	//void UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg);
-    void UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func = "defaultfunc",int line = 0);
-	DevErrorInfo m_tDevErrorInfo;
-	ORFReaderDev*	m_pCardRFIDCDev;
-	
-	DevErrorInfo m_DevErrorInfo;
-private:
-    int m_mode;
-};
-
-
-#endif //LIBFRAMEWORK_CONTACTLESSCARD_IMPL_H

+ 0 - 23
DevAdapter/grg/gpio.1.1/CMakeLists.txt

@@ -1,23 +0,0 @@
-# 声明模块名称的前缀和名称
-rvc_dev_define_module("Gpio")
-# rvc_dev_config_library 内需要使用这三个参数,用于拼接输出的适配器文件名称
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-# 包含要编译的实现文件,rvc_dev_config_library 内使用
-set(${MODULE_PREFIX}_SRCS SHARED
-	gpio_impl.cpp
-)
-
-# 适配器工程需要通过此宏替代 add_library
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-# ${MODULE_FULL_NAME} 是 TAGET 名称,在 rvc_dev_config_library 中定义
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME} grgIOSignalCtrBoardDev dl ${VENDOR_LOG_LIB_NAME})
-
-#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 946
DevAdapter/grg/gpio.1.1/gpio_impl.cpp

@@ -1,946 +0,0 @@
-#include <memory.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "gpio_impl.h"
-#include "log4vendor.h"
-#include "IOSignalCtrBoardDevDef.h"
-
-#define SIU_DEF_DEVNAME			"IOEXTENDDEV"
-#define SIGNAL_NUM				16
-
-bool Red_Flag;
-bool White_Flag;
-
-
-GPIOClassImpl::GPIOClassImpl()
-	:m_mode(0)
-{
- 	Red_Flag = false;
-	White_Flag = false;
-
-	m_pHandle = NULL;
-	memset(&m_GpioParm,0,sizeof(m_GpioParm));
-	
-    g_pDev = new DEVCLASSNAME
-#ifdef DEVCLASSPARA 
-    (DEVCLASSPARA)
-#endif
-    ;
-
-}
-
-GPIOClassImpl::~GPIOClassImpl()
-{
-	DevClose();
-}
-
-ErrorCodeEnum GPIOClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	const char *pType = "PVER=GRG#MID=IOExtern";
-	const char *pMode = "FWID=0";
-	const char *pVendor = "grg";
-	strcpy(devCategory.szType, pType);
-	strcpy(devCategory.szModel, pMode);
-	strcpy(devCategory.szVendor, pVendor);
-	devCategory.version.wMajor = 1;
-	devCategory.version.wMinor = 1;
-	devCategory.version.wRevision = 65535;
-	devCategory.version.wBuild = 1;
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum GPIOClassImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	tDevReturn l_tDevReturn[8] = { 0 };
-	iInit(m_pHandle,INIT_IO_STAUTS, l_tDevReturn);
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum GPIOClassImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	if (m_pHandle) {
-		iCloseComm(m_pHandle);
-		vCloseLigicDevice(m_pHandle);
-		m_pHandle = NULL;
-	}
-	delete g_pDev;
-	g_pDev = NULL;
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-ErrorCodeEnum GPIOClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	memset(&devErrInfo, 0, sizeof(devErrInfo));
-	memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
-	return Error_Succeed;
-}
-
-ErrorCodeEnum GPIOClassImpl::DevOpen(GpioInitParam initParam)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_oDuniteResult = SUCCESS;
-	memcpy(&m_GpioParm,&initParam,sizeof(initParam));
-	tDevReturn l_tDevReturn[8] = { 0 };
-
-	m_pHandle = hOpenLogicDevice(SIU_DEF_DEVNAME);
-	if (m_pHandle == NULL) {
-		//Open Dev error
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,E_IOSignalCtrBoard_BASE,"Open logicDevice Failed,hOpenLogicDevice");
-		return Error_DevConnFailed;
-	}
-
-	l_oDuniteResult = iSetCommPara(m_pHandle,l_tDevReturn);
-
-	if (SUCCESS != l_oDuniteResult)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "Open logicDevice Failed,iSetCommPara");
-		return Error_DevConnFailed;
-	}
-
-	memset(l_tDevReturn, 0, sizeof(l_tDevReturn));
-	l_oDuniteResult = iInit(m_pHandle,INIT_IO_STAUTS, l_tDevReturn);
-	if (SUCCESS != l_oDuniteResult)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "Open logicDevice Failed,iInit");
-		return Error_NotInit;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-
-	//打开IO扩展板
-	int Exresult  = ExiSetCommPara(__FUNCTION__,__LINE__);
-	if(SUCCESS != Exresult)
-	{
-		return Error_DevConnFailed;
-	}
-
-	Exresult = ExiInit(__FUNCTION__, __LINE__);
-	if(SUCCESS != Exresult)
-	{
-		return Error_NotInit;
-	}
-
-	return Error_Succeed;
-}
-
-ErrorCodeEnum GPIOClassImpl::WritePort(DWORD dwPort, BYTE btData)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	if (0>dwPort || dwPort >= MAX_PORT_NUM)
-	{
-		//LOG4VTM(ERROR,__FUNCTION__<<"0>dwPort || dwPort >= MAX_PORT_NUM"<<"dwPort = "<<dwPort);
-		char msg[1024]={0};
-		sprintf(msg,"invalid param dwPort = %d",dwPort);
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,E_IOSignalCtrBoard_INVALIDPARAM, msg);
-		return Error_Param;
-	}
-
-	ErrorCodeEnum l_ErrRlt = Error_Succeed;
-	tDevReturn l_tDevReturn[8] = { 0 };
-
-	int l_oDuniteResult = iSetCommPara(m_pHandle,l_tDevReturn);
-	if (SUCCESS != l_oDuniteResult)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetCommPara");
-		return Error_DevConnFailed;
-		//return (ErrorCodeEnum)l_tDevReturn[0].iLogicCode;
-	}
-
-	l_oDuniteResult = ExiSetCommPara(__FUNCTION__, __LINE__);
-	if (SUCCESS != l_oDuniteResult)
-	{
-		return Error_DevConnFailed;
-	}
-
-	l_oDuniteResult = iGetLightStatus(0, l_tDevReturn);
-	BYTE l_btStatus[2] = { 0 };
-	vGetLightStatus(l_btStatus, l_tDevReturn);
-	
-	//process hspscanner Tips light 26-6
-	if(dwPort == 3)
-	{
-		l_oDuniteResult = iSetLightStatus(m_pHandle,6, btData >> (2) & 1, l_tDevReturn);
-		if (SUCCESS != l_oDuniteResult)
-		{
-			FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetLightStatus");
-			return Error_Unexpect;
-		}
-		return l_ErrRlt;
-	}
-	//process hspscanner Tips light
-	
-	//process other light
-	if (dwPort>1)	//12路扩展板只能支持dwPort=0,dwPort=1
-	{
-		return l_ErrRlt;
-	}
-
-	//先判断usb通断
-	if (dwPort == 0)
-	{
-		if (btData >> 1 & 1)
-		{
-			//usb 通
-			l_oDuniteResult = iUsbOnOffSetting(m_pHandle,1, 0, l_tDevReturn);
-		}
-		else
-		{
-			//usb 断
-			l_oDuniteResult = iUsbOnOffSetting(m_pHandle,0, 0, l_tDevReturn);
-		}
-	}
-
-	//BYTE l_byStatusChanged = l_btStatus[dwPort] ^ btData;
-
-	for (int i = 1; i <= 8; i++)
-	{
-		int l_iIoNum = dwPort * 8 + i;
-		if (l_iIoNum>SIGNAL_NUM)
-		{
-			break;
-		}
-
-		//if (l_byStatusChanged & (1 << (i - 1)))
-		{
-			memset(l_tDevReturn, 0, sizeof(l_tDevReturn));
-			int l_iGrg = -1;
-			//can't find no
-			if(!vChangeTable(l_iGrg, l_iIoNum, false))
-				continue;
-/*				
-			//jump usb control
-			if(l_iGrg == -1)
-				continue;
-*/				
-			//printf("l_iGrg = %d, on = %d\n",l_iGrg,btData >> (i - 1) & 1);
-			//bhj
-			if(l_iGrg==12)
-			{
-				//跟行里沟通,故障灯优先,亮故障灯的时候,把白灯灭掉
-				LOG4VTM(INFO,"l_iGrg==12");
-				if (Red_Flag)
-				{
-					LOG4VTM(INFO,"Red_Flag is true");
-					if((btData >> (i - 1) & 1)==0)
-					{
-						l_oDuniteResult = ExiSetLightStatus(2,btData >> (i - 1) & 1,__FUNCTION__, __LINE__);    //red light
-						Red_Flag = false;
-						if(l_oDuniteResult!=SUCCESS)
-						{
-							return Error_Unexpect; 
-						}
-						if(White_Flag)
-						{
-							l_oDuniteResult = ExiSetLightStatus(1,1,__FUNCTION__, __LINE__);    // light  on
-							if(l_oDuniteResult!=SUCCESS)
-							{
-								return Error_Unexpect; 
-							}
-						}
-					}
-					
-				}else
-				{
-					if(White_Flag)
-					{
-						if((btData >> (i - 1) & 1)==1)
-						{
-							l_oDuniteResult = ExiSetLightStatus(1,0,__FUNCTION__, __LINE__);    // light  off
-							if(l_oDuniteResult!=SUCCESS)
-							{
-								return Error_Unexpect; 
-							}
-							l_oDuniteResult = ExiSetLightStatus(2,btData >> (i - 1) & 1,__FUNCTION__, __LINE__);    //red light
-							if(l_oDuniteResult!=SUCCESS)
-							{
-								return Error_Unexpect; 
-							}else
-							{
-								Red_Flag = true;
-							}
-						}else
-						{
-							l_oDuniteResult = ExiSetLightStatus(2,btData >> (i - 1) & 1,__FUNCTION__, __LINE__);    //red light
-							if(l_oDuniteResult!=SUCCESS)
-							{
-								return Error_Unexpect;
-							}else
-							{
-								Red_Flag = false;
-							}
-						}	
-					}else
-					{
-						l_oDuniteResult = ExiSetLightStatus(2,btData >> (i - 1) & 1,__FUNCTION__, __LINE__);    //red light
-						if(l_oDuniteResult!=SUCCESS)
-						{
-							return Error_Unexpect; 
-						}else
-						{
-							Red_Flag = false;
-						}
-					}
-				}
-		
-			}
-
-			if(l_iGrg==10)
-			{
-				LOG4VTM(INFO,"l_iGrg==10");
-				if(Red_Flag==false)
-				{
-					l_oDuniteResult = ExiSetLightStatus(1,btData >> (i - 1) & 1,__FUNCTION__, __LINE__);	//white light
-					if(l_oDuniteResult==0)
-					{
-						if((btData >> (i - 1) & 1)==1)
-						{
-							White_Flag = true;
-						}else
-						{
-							White_Flag = false;
-						}
-					}else
-					{
-						return Error_Unexpect;
-					}
-				}
-			}
-
-			if (l_iGrg!=10)   //out 10 修改成非接的指示灯
-			{
-				l_oDuniteResult = iSetLightStatus(m_pHandle,l_iGrg, btData >> (i - 1) & 1, l_tDevReturn);
-				if (SUCCESS != l_oDuniteResult)
-				{
-					FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetLightStatus");
-					return Error_Unexpect;
-				}
-
-				if (l_iGrg==9)  //out9 跟 out10 同时输出
-				{
-					l_oDuniteResult = iSetLightStatus(m_pHandle,10, btData >> (i - 1) & 1, l_tDevReturn);
-					if (SUCCESS != l_oDuniteResult)
-					{
-						FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetLightStatus");
-						return Error_Unexpect;
-					}
-				}
-				
-			}
-			
-
-
-			
-		}
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return l_ErrRlt;
-}
-
-ErrorCodeEnum GPIOClassImpl::ReadPort(DWORD dwPort, BYTE& btStatus)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	ErrorCodeEnum l_ErrRlt = Error_Succeed;
-	btStatus = 0;
-	if (0>dwPort || dwPort >= MAX_PORT_NUM)
-	{
-		//LOG4VTM(ERROR,__FUNCTION__<<"0>dwPort || dwPort >= MAX_PORT_NUM"<<"dwPort = "<<dwPort);
-		char msg[1024]={0};
-		sprintf(msg,"invalid param dwPort = %d",dwPort);
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,E_IOSignalCtrBoard_INVALIDPARAM, msg);
-		return Error_Param;
-	}
-/*	
-	if (0 > dwPort || dwPort >= MAX_PORT_NUM) //错误dwPort输入
-	{
-		return Error_Param;
-	}
-*/
-	//get IOIn status start
-	if(dwPort == 2)
-	{
-		BYTE l_btStatus[2] = { 0 };
-		tDevReturn l_tDevReturn[8] = { 0 };
-		int l_iStartus = iGetIOInStatus(0, l_tDevReturn);
-		vGetIOInStatus(l_btStatus, l_tDevReturn);
-		btStatus = l_btStatus[0];
-		LOG4VTM(INFO,__FUNCTION__<<" OK");
-		return l_ErrRlt;
-	}
-	//get IOIn status end
-	
-	//get hspscanner Tips light status
-	if(dwPort == 3)
-	{
-		tDevReturn l_tDevReturn[8] = { 0 };
-		int l_iStartus = iGetLightStatus(0, l_tDevReturn);
-		btStatus |= l_tDevReturn[5].iLogicCode << 5;
-		LOG4VTM(INFO,__FUNCTION__<<" OK");
-		return l_ErrRlt;
-	}
-	//get hspscanner Tips light status
-
-	//get other light status
-	if (dwPort > 1)	//12路扩展板只能支持dwPort=0,dwPort=1
-	{
-		return l_ErrRlt;
-	}
-
-	BYTE l_btStatus[2] = { 0 };
-	tDevReturn l_tDevReturn[8] = { 0 };
-	int l_iStartus = iGetLightStatus(0, l_tDevReturn);
-	vGetLightStatus(l_btStatus, l_tDevReturn);
-
-//	BYTE l_byMask[] = { 0x0F,0x03,0,0 };
-//	btStatus = l_btStatus[dwPort] & l_byMask[dwPort];
-	btStatus = l_btStatus[dwPort];
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return l_ErrRlt;
-}
-
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-	baseObj = new GPIOClassImpl();
-	if (baseObj == NULL) {
-		return Error_Resource;
-	}
-
-	cmb::log_init_config config;
-	config.dev_name = "Gpio";
-	config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-	config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-	config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-	std::string str;
-	cmb::log4vendor::init(config, str);
-	printf("init after: %s\n", str.c_str());
-
-	return Error_Succeed;
-}
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-	if (pBaseObj == NULL) {
-		return Error_Param;
-	}
-
-	if (GPIOClassImpl* pTmp = dynamic_cast<GPIOClassImpl*>(pBaseObj))
-	{
-		delete pTmp;
-		pTmp = NULL;
-		return Error_Succeed;
-	}
-	return Error_Param;
-}
-
-void GPIOClassImpl::ZeroDevErrorInfo()
-{
-	memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-}
-
-void GPIOClassImpl::FormatDevErrorInfo(const char* funcname, int line, int errCode,const char* errStr)
-{
-	ZeroDevErrorInfo();
-	//snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
-	snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "{\"ErrCode\":0x%x,\"Description\":\"Func:%s,Line:%d,Msg:%s\"}", errCode, funcname, line, errStr);
-	m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-	LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
-}
-
-void GPIOClassImpl::vGetLightStatus(BYTE *p_pbtStatus, tDevReturn *p_ptDevReturn)
-{
-	int l_Grg_vaules[SIGNAL_NUM] = { 0 };
-	for (int i = 0; i < 8; i++)
-	{
-		l_Grg_vaules[i] = p_ptDevReturn[i].iLogicCode;
-		//p_pbtStatus[0] |= (p_ptDevReturn[i].iLogicCode << i);
-
-		if (i < 4)
-		{
-			l_Grg_vaules[i + 8] = p_ptDevReturn[i + 4].iPhyCode;
-			//	p_pbtStatus[1] |= (p_ptDevReturn[i+4].iPhyCode << i);
-		}
-	}
-	int l_iZS = 0, l_iGrg = 0;
-	int l_ZS_vaules[SIGNAL_NUM] = { 0 };
-	for (int j = 0; j < SIGNAL_NUM; j++)
-	{
-		printf("vGetLightStatus[%d] = %d\n",j+1,l_Grg_vaules[j]);
-		l_iGrg = j + 1;
-		if(vChangeTable(l_iGrg, l_iZS))
-		{
-			l_ZS_vaules[l_iZS - 1] = l_Grg_vaules[j];
-		}
-	}
-
-	p_pbtStatus[0] = 0;
-	p_pbtStatus[1] = 0;
-	for (int k = 0; k < SIGNAL_NUM; k++)
-	{
-		//printf("light state[%d] : %d\n",k,l_ZS_vaules[k]);
-		if (k < 8)
-		{
-			p_pbtStatus[0] |= l_ZS_vaules[k] << k;
-		}
-		else
-		{
-			p_pbtStatus[1] |= l_ZS_vaules[k] << (k - 8);
-		}
-	}
-
-}
-/*
-招行信号灯序号		公司信号灯编号
-1.读卡器			2.读/发卡指示灯
-2.USB通断控制	
-3.身份证灯			1.身份证指示灯
-4.键盘提示灯		5.键盘照明灯
-5.脸部照明灯		10.摄像头补光灯
-6.故障灯			12.故障指示灯
-7.发卡器维护灯		8.读/发卡器维护灯
-8.USB口提示灯		4.USB口提示灯
-9.非接IC提示		9.非接指示灯
-10.二维码提示灯	
-11.指纹仪提示灯		11.指纹仪指示灯
-12.凭条打印提示灯	7.凭条指示灯
-13.高拍仪照明灯		3.高拍仪照明灯
-14.打印盖章提示绿灯	
-15.纸槽提示绿灯	
-16.纸槽缺纸红灯	
-*/
-//信号灯编号转换
-bool GPIOClassImpl::vChangeTable(int &p_iGrg, int &p_iZS, bool p_bToZS)
-{
-	int l_iGrgs[]={2,1,5,10,12,8,4,9,11,7,3};
-	int l_iZSs[] ={1,3,4,5,6,7,8,9,11,12,13};
-
-	//grg转zs
-	if (p_bToZS)
-	{
-		for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
-		{
-			if (p_iGrg == l_iGrgs[i])
-			{
-				p_iZS = l_iZSs[i];
-				return true;
-			}
-		}
-	}
-	else
-	{
-		//zs转grg
-		for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
-		{
-			if (p_iZS == l_iZSs[i])
-			{
-				p_iGrg = l_iGrgs[i];
-				return true;
-			}
-		}
-	}
-	
-	return false;
-}
-
-#define IOEXTEND_ALLDOOR 0
-int GPIOClassImpl::iGetLightStatus(int p_piLightNum, tDevReturn *p_psStatus)
-{
-	tIOStatus l_stIOStatus;
-	int l_iReuslt = iGetIODevStatus(m_pHandle,&l_stIOStatus, p_psStatus);
-	if (l_iReuslt == SUCCESS)
-	{
-		char	l_acStatusData[0x20];
-		memset(l_acStatusData, 0x00, sizeof(l_acStatusData));
-		sprintf(l_acStatusData, "I%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
-			l_stIOStatus.byLightStauts[0], l_stIOStatus.byLightStauts[1], l_stIOStatus.byLightStauts[2],
-			l_stIOStatus.byLightStauts[3], l_stIOStatus.byLightStauts[4], l_stIOStatus.byLightStauts[5],
-			l_stIOStatus.byLightStauts[6], l_stIOStatus.byLightStauts[7], l_stIOStatus.byLightStauts[8],
-			l_stIOStatus.byLightStauts[9], l_stIOStatus.byLightStauts[10], l_stIOStatus.byLightStauts[11]);
-		memcpy(p_psStatus[0].acReserve, l_acStatusData, strlen(l_acStatusData));
-
-		if (p_piLightNum == IOEXTEND_ALLDOOR)
-		{
-			int i = 0;
-			for (i = 0; i < 4; i++)
-			{
-				p_psStatus[i].iLogicCode = l_stIOStatus.byLightStauts[i];
-				p_psStatus[i].iPhyCode = l_stIOStatus.byLightStauts[i];
-			}
-			for (i = 4; i < 8; i++)
-			{
-				p_psStatus[i].iLogicCode = l_stIOStatus.byLightStauts[i];
-				p_psStatus[i].iPhyCode = l_stIOStatus.byLightStauts[i + 4];
-			}
-		}
-		else
-		{
-			p_psStatus[0].iLogicCode = l_stIOStatus.byLightStauts[p_piLightNum - 1];
-			p_psStatus[0].iPhyCode = l_stIOStatus.byLightStauts[p_piLightNum - 1];
-		}
-	}
-	return l_iReuslt;
-}
-
-int GPIOClassImpl::iGetIOInStatus(int p_piLightNum, tDevReturn *p_psStatus)
-{
-	tIOStatus l_stIOStatus;
-	int l_iReuslt = iGetIODevStatus(m_pHandle,&l_stIOStatus, p_psStatus);
-	if (l_iReuslt == SUCCESS)
-	{
-		char	l_acStatusData[0x20];
-		memset(l_acStatusData, 0x00, sizeof(l_acStatusData));
-		sprintf(l_acStatusData, "I%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
-			l_stIOStatus.byDoorStauts[0], l_stIOStatus.byDoorStauts[1], l_stIOStatus.byDoorStauts[2],
-			l_stIOStatus.byDoorStauts[3], l_stIOStatus.byDoorStauts[4], l_stIOStatus.byDoorStauts[5],
-			l_stIOStatus.byDoorStauts[6], l_stIOStatus.byDoorStauts[7], l_stIOStatus.byDoorStauts[8],
-			l_stIOStatus.byDoorStauts[9], l_stIOStatus.byDoorStauts[10], l_stIOStatus.byDoorStauts[11]);
-		memcpy(p_psStatus[0].acReserve, l_acStatusData, strlen(l_acStatusData));
-
-		if (p_piLightNum == IOEXTEND_ALLDOOR)
-		{
-			int i = 0;
-			for (i = 0; i < 4; i++)
-			{
-				p_psStatus[i].iLogicCode = l_stIOStatus.byDoorStauts[i];
-				p_psStatus[i].iPhyCode = l_stIOStatus.byDoorStauts[i];
-			}
-			for (i = 4; i < 8; i++)
-			{
-				p_psStatus[i].iLogicCode = l_stIOStatus.byDoorStauts[i];
-				p_psStatus[i].iPhyCode = l_stIOStatus.byDoorStauts[i + 4];
-			}
-		}
-		else
-		{
-			p_psStatus[0].iLogicCode = l_stIOStatus.byDoorStauts[p_piLightNum - 1];
-			p_psStatus[0].iPhyCode = l_stIOStatus.byDoorStauts[p_piLightNum - 1];
-		}
-	}
-	return l_iReuslt;
-}
-
-void GPIOClassImpl::vGetIOInStatus(BYTE *p_pbtStatus, tDevReturn *p_ptDevReturn)
-{
-	int l_Grg_vaules[SIGNAL_NUM] = { 0 };
-	for (int i = 0; i < 8; i++)
-	{
-		l_Grg_vaules[i] = p_ptDevReturn[i].iLogicCode;
-
-		if (i < 4)
-		{
-			l_Grg_vaules[i + 8] = p_ptDevReturn[i + 4].iPhyCode;
-		}
-	}
-	int l_iZS = 0, l_iGrg = 0;
-	int l_ZS_vaules[SIGNAL_NUM] = { 0 };
-
-	//bhj 人体感应的高低电平反了
-	if (l_Grg_vaules[5]==0)
-	{
-		l_Grg_vaules[5] = 1;
-	}else
-	{
-		l_Grg_vaules[5] = 0;
-	}
-
-
-	for (int j = 0; j < SIGNAL_NUM; j++)
-	{
-		printf("vGetIOInStatus[%d] = %d\n",j+1,l_Grg_vaules[j]);
-		LOG4VTM(INFO,__FUNCTION__<<" org vGetIOInStatus["<<j+1<<"]"<<" = "<<l_Grg_vaules[j]);
-		l_iGrg = j + 1;
-		if(vChangeTableIOIn(l_iGrg, l_iZS))
-		{
-			//subtract start no 17
-			l_ZS_vaules[l_iZS - 17] = l_Grg_vaules[j];
-		}
-	}
-
-	p_pbtStatus[0] = 0;
-	p_pbtStatus[1] = 0;
-	for (int k = 0; k < SIGNAL_NUM; k++)
-	{
-		//printf("IOIn state[%d] : %d\n",k,l_ZS_vaules[k]);
-		LOG4VTM(INFO,__FUNCTION__<<" change state["<<k<<"]"<<" = "<<l_ZS_vaules[k]);
-		if (k < 8)
-		{
-			p_pbtStatus[0] |= l_ZS_vaules[k] << k;
-		}
-		else
-		{
-			p_pbtStatus[1] |= l_ZS_vaules[k] << (k - 8);
-		}
-	}
-}
-
-bool GPIOClassImpl::vChangeTableIOIn(int &p_iGrg, int &p_iZS, bool p_bToZS)
-{
-	int l_iGrgs[]={1,2,6,7,9};
-	int l_iZSs[] ={17,18,20,21,19};//zs no
-
-	//grg转zs
-	if (p_bToZS)
-	{
-		for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
-		{
-			if (p_iGrg == l_iGrgs[i])
-			{
-				p_iZS = l_iZSs[i];
-				return true;
-			}
-		}
-	}
-	else
-	{
-		//zs转grg
-		for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
-		{
-			if (p_iZS == l_iZSs[i])
-			{
-				p_iGrg = l_iGrgs[i];
-				return true;
-			}
-		}
-	}
-	return false;
-}
-
-
-//IO扩展板接口
-int GPIOClassImpl::ExiSetCommPara(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-    int l_iResult = SUCCESS;
-	tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	
-	BEG_TICK;
-    if (g_pDev)
-    {
-        l_iResult = g_pDev->iSetCommPara(l_asStatus);
-    }
-	END_TICK;
-
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiSetCommPara");
-	}
-
-	printf("iSetCommPara() = %d, phy=%d log=%d execute time = %ldms.\n", l_iResult, l_asStatus[0].iPhyCode, l_asStatus[0].iLogicCode, (long)CAL_TICK);
-
-    return l_iResult;
-}
-
-int GPIOClassImpl::ExiCloseComm(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-	tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	
-	BEG_TICK;
-    if (g_pDev)
-    {
-        l_iResult = g_pDev->iCloseComm(l_asStatus);
-    }
-	END_TICK;
-
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiCloseComm");
-	}
-
-	printf("iCloseComm() = %d, execute time = %ldms.\n", l_iResult, (long)CAL_TICK);
-	
-    return l_iResult;
-}
-
-int GPIOClassImpl::ExiInit(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-	tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	
-	BEG_TICK;
-    if (g_pDev)
-    {
-        l_iResult = g_pDev->iInit(l_asStatus);
-    }
-	END_TICK;
-	
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiInit");
-	}
-
-	printf("iInit() = %d, phy=%d log=%d execute time = %ldms.\n", l_iResult, l_asStatus[0].iPhyCode, l_asStatus[0].iLogicCode, (long)CAL_TICK);
-	
-    return l_iResult;
-}
-
-int GPIOClassImpl::ExiGetVersion(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-	char l_acVersion[32] = {0};
-	DEF_TICK;
-	
-	BEG_TICK;
-    if (g_pDev)
-    {
-        l_iResult = g_pDev->iGetVersion(l_acVersion);
-    }
-	END_TICK;
-	
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname,line,l_iResult,"Open logicDevice Failed,ExiGetVersion");
-	}
-
-	printf("iGetVersion() = %d, execute time = %ldms.\n", l_iResult, (long)CAL_TICK);
-
-	if (0 == l_iResult)
-	{
-		printf("Ver=%s \n", l_acVersion);
-	}
-
-    return l_iResult;
-}
-
-int GPIOClassImpl::ExiGetDevVersion(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-    tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	char l_acVersion[32] = {0};
-
-	BEG_TICK;
-	if (g_pDev)
-	{
-		l_iResult = g_pDev->iGetDevVersion(l_acVersion);
-	}
-	END_TICK;
-	
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiGetDevVersion");
-	}
-
-	printf("iGetDevVersion() = %d, phy=%d log=%d execute time = %ldms.\n", l_iResult, l_asStatus[0].iPhyCode, l_asStatus[0].iLogicCode, (long)CAL_TICK);
-	if (0 == l_iResult)
-	{
-		printf("Ver=%s \n", l_acVersion);
-	}
-	
-	return l_iResult;
-}
-
-int GPIOClassImpl::ExiGetSerialNumber(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-    tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	char l_acType[32] = {0};
-	
-	BEG_TICK;
-	if (g_pDev)
-	{
-		l_iResult = g_pDev->iGetSerialNumber(l_acType, l_asStatus);
-	}
-	END_TICK;
-	
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiGetSerialNumber");
-	}
-
-	printf("iGetSerialNumber() = %d, phy=%d log=%d execute time = %ldms.\n", l_iResult, l_asStatus[0].iPhyCode, l_asStatus[0].iLogicCode, (long)CAL_TICK);
-	if (0 == l_iResult)
-	{
-		printf("Typ=%s \n", l_acType);
-	}
-	
-	return l_iResult;
-}
-
-int GPIOClassImpl::ExiGetLightStatus(const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-    tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	int l_nLightNum = 0;
-	
-	BEG_TICK;
-	if (g_pDev)
-	{
-		l_iResult = g_pDev->iGetLightStatus(l_nLightNum, l_asStatus);
-	}
-	END_TICK;
-	
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiGetLightStatus");
-	}
-
-	printf("iGetLightStatus() = %d, phy=%d log=%d execute time = %ldms.\n", l_iResult, l_asStatus[0].iPhyCode, l_asStatus[0].iLogicCode, (long)CAL_TICK);
-	if (0 == l_iResult)
-	{
-		
-	}
-	
-	return l_iResult;
-}
-
-int GPIOClassImpl::ExiSetLightStatus(int p_piLightNum, int p_piStatus,const char* funcname, int line)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int l_iResult = SUCCESS;
-    tDevReturn l_asStatus[8] = {0};
-	DEF_TICK;
-	int l_nLightNum = 0;
-	
-	BEG_TICK;
-	if (g_pDev)
-	{
-		l_iResult = g_pDev->iSetLightStatus(p_piLightNum,p_piStatus,l_asStatus);
-	}
-	END_TICK;
-	
-	if (SUCCESS != l_iResult)
-	{
-		FormatDevErrorInfo(funcname, line, l_asStatus[0].iLogicCode, "Open logicDevice Failed,ExiSetLightStatus");
-	}
-
-	printf("iGetLightStatus() = %d, phy=%d log=%d execute time = %ldms.\n", l_iResult, l_asStatus[0].iPhyCode, l_asStatus[0].iLogicCode, (long)CAL_TICK);
-	if (0 == l_iResult)
-	{
-		
-	}
-	
-	return l_iResult;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

+ 0 - 191
DevAdapter/grg/gpio.1.1/gpio_impl.h

@@ -1,191 +0,0 @@
-#ifndef LIBFRAMEWORK_GPIO_IMPL_H
-#define LIBFRAMEWORK_GPIO_IMPL_H
-
-#include "GpioClass.h"
-#include "IOSignalCtrBoardDev.h"
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <cassert>
-#include <string>
-#include <iostream>
-
-//bhj
-#include "ExactTick.h"
-
-#if (defined _WIN32 || defined _WIN64)
-
-#include "windows.h"
-
-#ifndef AFX_ODEVBASE_H__8BBC195A_112D_11D4_B865_5254AB1A7D30__INCLUDED_COM_
-#define AFX_ODEVBASE_H__8BBC195A_112D_11D4_B865_5254AB1A7D30__INCLUDED_COM_
-#pragma pack(push, 1)
-// typedef struct tDevReturn
-// {
-// 	int		iLogicCode;	
-// 	int		iPhyCode;
-// 	int		iHandle;
-// 	int		iType;
-	
-// 	char	acDevReturn[128];
-// 	char	acReserve[128];
-// } tDevReturn;
-#pragma pack(pop)
-
-#define SUCCESS		0
-#define FAIL		1
-#define ERRORFLAG_CLEAR 0 
-#endif	// AFX_ODEVBASE_H__8BBC195A_112D_11D4_B865_5254AB1A7D30__INCLUDED_COM_
-
-#define snprintf	_snprintf
-
-#else   // 
-
-#include <unistd.h>
-#include <dlfcn.h>
-#include <cwchar>
-
-typedef void* HMODULE;
-//typedef void* HANDLE;
-typedef unsigned int    UINT;
-
-HMODULE LoadLibraryA(const char* lpLibFileName)
-{
-    std::string l_szLibFileName = lpLibFileName;
-
-    l_szLibFileName = "lib"+l_szLibFileName.substr(0, l_szLibFileName.rfind(".dll", l_szLibFileName.length()))+".so";
-
-	void* h = dlopen(l_szLibFileName.c_str(), RTLD_NOW);
-	printf("LoadLibrary %s = %p \r\n", l_szLibFileName.c_str(), h);
-    return (HMODULE)h;
-}
-void* GetProcAddress(HMODULE hModule, const char* lpProcName)
-{
-    return (void*)dlsym(hModule, lpProcName);
-}
-
-int FreeLibrary(HMODULE hLibModule)
-{
-    if (NULL==hLibModule)
-    {
-        return 0;
-    }
-    int l_bRet = 0==dlclose(hLibModule);
-    printf("FreeLibrary %p \r\n", hLibModule);
-    return l_bRet;
-}
-#define NOERROR		0
-
-#define UNREFERENCED_PARAMETER(p)		if ((p)!=NULL)assert(p)
-#define WINAPI
-#define LoadLibrary    LoadLibraryA
-typedef unsigned int    WPARAM;
-typedef unsigned char   BYTE;
-
-#ifndef GRGDEVBASE_H
-#define GRGDEVBASE_H
-#pragma pack(push, 1)
-typedef struct tDevReturn
-{
-	int		iLogicCode;	
-	int		iPhyCode;
-	int		iHandle;
-	int		iType;
-	
-	char	acDevReturn[128];
-	char	acReserve[128];
-} tDevReturn;
-#pragma pack(pop)
-
-#define SUCCESS		0
-#define FAIL		1
-#define ERRORFLAG_CLEAR 0 
-#endif	// GRGDEVBASE_H
-
-#endif // _WIN32
-
-#pragma pack(push, 1)
-#include "IOExtendDev.h"
-#pragma pack(pop)
-
-#define DEVCLASSNAME        IOExtendDev
-#define DEVCLASSPARA        "grgIOExtendDev.dll"
-
-#define SAVETRACE(sz)		printf("%s,%s,%d:%s\n", __FILE__, __FUNCTION__, __LINE__, (sz));
-
-DEVCLASSNAME* g_pDev = NULL;
-
-//////////////////////////////////////////////////////////////////////////
-
-
-
-class GPIOClassImpl : public GpioClass
-{
-public:
-    GPIOClassImpl();
-    ~GPIOClassImpl();
-
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-    //
-    //	Device initialization.
-    //	Configure port input/output direction.
-    //
-    virtual ErrorCodeEnum DevOpen(GpioInitParam initParam);
-
-    //
-    //	Set ports output.
-    //	Arguments:
-    //	- dwPort:port serial number,0~MAX_PORT_NUM-1
-    //	- btData:output value
-    //	  bit value 1/0 means voltage high or low
-    //	  ex.dwPort=0 btData=10001010 means set port 0's the 2nd,4th,8th pin output high
-    //
-    virtual ErrorCodeEnum WritePort(DWORD dwPort, BYTE btData);
-    //
-    //	Get port input.
-    //	Arguments:
-    //	- dwPort:port serial number,0~MAX_PORT_NUM-1
-    //	- btStatus:input value
-    //	  ex.dwPort=0 btStatus=10001010 means port 0's the 2nd,4th,8th pin with high level
-    //
-    virtual ErrorCodeEnum ReadPort(DWORD dwPort, BYTE& btStatus);
-
-private:
-  
-    int m_mode;
-	void* m_pHandle;
-	DevErrorInfo m_DevErrorInfo;
-	GpioInitParam m_GpioParm;
-	void ZeroDevErrorInfo();
-	void FormatDevErrorInfo(const char* funcname, int line, int errCode,const char* errStr);
-	//light
-	bool vChangeTable(int &p_iGrg, int &p_iZS, bool p_bToZS = true);
-	void vGetLightStatus(BYTE *p_pbtStatus, tDevReturn *p_ptDevReturn);
-	int iGetLightStatus(int p_piLightNum, tDevReturn *p_psStatus);
-	//IO in
-	int iGetIOInStatus(int p_piLightNum, tDevReturn *p_psStatus);
-	void vGetIOInStatus(BYTE *p_pbtStatus, tDevReturn *p_ptDevReturn);
-	bool vChangeTableIOIn(int &p_iGrg, int &p_iZS, bool p_bToZS = true);
-
-    //IO扩展板接口
-    int ExiSetCommPara(const char* funcname, int line);
-    int ExiCloseComm(const char* funcname, int line);
-    int ExiInit(const char* funcname, int line);
-    int ExiGetVersion(const char* funcname, int line);
-    int ExiGetDevVersion(const char* funcname, int line);
-    int ExiGetSerialNumber(const char* funcname, int line);
-    int ExiGetLightStatus(const char* funcname, int line);
-    int ExiSetLightStatus(int p_piLightNum, int p_piStatus,const char* funcname, int line);
-
-
-};
-
-
-#endif //LIBFRAMEWORK_GPIO_IMPL_H

+ 0 - 18
DevAdapter/grg/hspscanner.1.1/CMakeLists.txt

@@ -1,18 +0,0 @@
-rvc_dev_define_module("HSPScanner")
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-set(${MODULE_PREFIX}_SRCS SHARED
-        hspscanner_impl.cpp
-        )
-
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME} dl ${VENDOR_LOG_LIB_NAME})
-
-#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 635
DevAdapter/grg/hspscanner.1.1/hspscanner_impl.cpp

@@ -1,635 +0,0 @@
-#include "hspscanner_impl.h"
-#include <cstring>
-#include <cstdio>
-#include <unistd.h>
-#include "log4vendor.h"
-#include "dlfcn.h"
-#include "BHCamBase.h"
-
-class Inner_Log{
-	public:
-		Inner_Log(const char* funcname){
-			memset(m_funcname,0,sizeof(m_funcname));
-			strcpy(m_funcname,funcname);
-			LOG4VTM(INFO,"========"<<m_funcname<<" entry");
-		}
-		~Inner_Log(){
-			LOG4VTM(INFO,"========"<<m_funcname<<" leave");
-		}
-	private:
-		char m_funcname[256];
-};
-
-#define DEFAULT_HPIXEL	3264
-#define DEFAULT_VPIXEL	2448
-#define IMAGEBUFF_SIZE	(DEFAULT_HPIXEL*DEFAULT_VPIXEL*3)
-
-#ifdef LOG4VTM_FUNCTION
-#undef LOG4VTM_FUNCTION
-#define LOG4VTM_FUNCTION()	\
-		Inner_Log log(__FUNCTION__);
-#endif 
-
-#define CHECK_FUNC_VALID(funcname)	\
-		if(funcname == NULL){\
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, #funcname" == NULL");\
-			return Error_Unexpect;\
-		}
-
-#define CHECK_RETURN_VALUE(funcname,ret,retvalue)	\
-		if(ret != FR_RET_SUCC)\
-		{\
-			FormatDevErrorInfo(__FUNCTION__, __LINE__,ret, #funcname" Failed");\
-			return retvalue;\
-		}
-
-HSPSClassImpl::HSPSClassImpl()
-	:m_mode(0)
-{
-	ResetParm();
-	//m_pBuffPic = (unsigned char*)malloc(IMAGEBUFF_SIZE);
-	m_hSo = NULL;
-	m_hSo = dlopen("libBHCamBase.grg.so", RTLD_LAZY);
-	if(m_hSo)
-	{
-		HIGH_StartCamera 			= (PHIGH_StartCamera)dlsym(m_hSo,"HIGH_StartCamera");
-		HIGH_GetFirmwareVersion 	= (PHIGH_GetFirmwareVersion)dlsym(m_hSo,"HIGH_GetFirmwareVersion");
-		HIGH_GetStatus 				= (PHIGH_GetStatus)dlsym(m_hSo,"HIGH_GetStatus");
-		HIGH_StopCamera 			= (PHIGH_StopCamera)dlsym(m_hSo,"HIGH_StopCamera");
-		HIGH_SetAutoCrop 			= (PHIGH_SetAutoCrop)dlsym(m_hSo,"HIGH_SetAutoCrop");
-		HIGH_SetCameraPixel 		= (PHIGH_SetCameraPixel)dlsym(m_hSo,"HIGH_SetCameraPixel");
-		HIGH_SetRotateSize 			= (PHIGH_SetRotateSize)dlsym(m_hSo,"HIGH_SetRotateSize");
-		HIGH_SetColorType 			= (PHIGH_SetColorType)dlsym(m_hSo,"HIGH_SetColorType");
-		HIGH_SetJPGQuality 			= (PHIGH_SetJPGQuality)dlsym(m_hSo,"HIGH_SetJPGQuality");
-		HIGH_GetPixelNum 			= (PHIGH_GetPixelNum)dlsym(m_hSo,"HIGH_GetPixelNum");
-		HIGH_GetHPixelByIndex 		= (PHIGH_GetHPixelByIndex)dlsym(m_hSo,"HIGH_GetHPixelByIndex");
-		HIGH_GetVPixelByIndex 		= (PHIGH_GetVPixelByIndex)dlsym(m_hSo,"HIGH_GetVPixelByIndex");
-		HIGH_CreateWindow 			= (PHIGH_CreateWindow)dlsym(m_hSo,"HIGH_CreateWindow");
-		HIGH_CloseWindow 			= (PHIGH_CloseWindow)dlsym(m_hSo,"HIGH_CloseWindow");
-		HIGH_PauseAndPlay 			= (PHIGH_PauseAndPlay)dlsym(m_hSo,"HIGH_PauseAndPlay");
-		HIGH_TakePicture 			= (PHIGH_TakePicture)dlsym(m_hSo,"HIGH_TakePicture");
-		HIGH_CameraData 			= (PHIGH_CameraData)dlsym(m_hSo,"HIGH_CameraData");
-		HIGH_HideWindow 			= (PHIGH_HideWindow)dlsym(m_hSo,"HIGH_HideWindow");
-	}else{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "dlopen Failed");
-	}
-}
-
-HSPSClassImpl::~HSPSClassImpl()
-{
-	if(m_hSo)
-	{
-		dlclose(m_hSo);
-		m_hSo = NULL;
-	}
-/*	
-	if(m_pBuffPic)
-	{
-		free(m_pBuffPic);
-	}
-*/	
-	DevClose();
-}
-
-void HSPSClassImpl::ResetParm()
-{
-	memset(&m_status,0,sizeof(m_status));
-	m_nX = 0;
-	m_nY = 0;
-	m_nWidth = DEFAULT_DIALOG_WIDTH;
-	m_bAutoCorp = true;
-	m_nColorType = 0;
-	m_nRotateSize = 0;
-}
-
-void HSPSClassImpl::ZeroDevErrorInfo()
-{
-	memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-}
-
-void HSPSClassImpl::FormatDevErrorInfo(const char* funcname, int line, int errCode,const char* errStr)
-{
-	ZeroDevErrorInfo();
-	//snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
-	snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "{\"ErrCode\":0x%x,\"Description\":\"Func:%s,Line:%d,Msg:%s\"}", errCode, funcname, line, errStr);
-	m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-	LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
-}
-
-ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	LOG4VTM_FUNCTION();
-	ErrorCodeEnum err = Error_Succeed;
-	const char *pType = "PVER=ShenGuoTu#MID=Q800L";
-	const char *pMode = "FWID=0";
-	const char *pVendor = "grg";
-	strcpy(devCategory.szType, pType);
-	strcpy(devCategory.szModel, pMode);
-	strcpy(devCategory.szVendor, pVendor);
-	devCategory.version.wMajor = 1;
-	devCategory.version.wMinor = 1;
-	devCategory.version.wRevision = 65535;
-	devCategory.version.wBuild = 1;
-/*	
-	CHECK_FUNC_VALID(HIGH_GetFirmwareVersion);
-	char szVersion[64] = {0};
-	int ret = HIGH_GetFirmwareVersion(szVersion);
-	CHECK_RETURN_VALUE(HIGH_GetFirmwareVersion,ret,Error_Unexpect);
-	printf("szVersion = %s\n",szVersion);
-*/
-	return err;
-}
-
-ErrorCodeEnum HSPSClassImpl::DevOpen()
-{
-	LOG4VTM_FUNCTION();
-	ErrorCodeEnum err = Error_Succeed;
-	DevClose();
-	CHECK_FUNC_VALID(HIGH_StartCamera);
-	int ret = HIGH_StartCamera();
-	CHECK_RETURN_VALUE(HIGH_StartCamera,ret,Error_DevConnFailed);
-	m_status.isConnected = 1;
-	int hPixel = DEFAULT_HPIXEL;
-	int vPixel = DEFAULT_VPIXEL;
-	LOG4VTM(INFO,"========HIGH_SetCameraPixel entry");
-	CHECK_FUNC_VALID(HIGH_SetCameraPixel);
-	ret = HIGH_SetCameraPixel(hPixel,vPixel);
-	CHECK_RETURN_VALUE(HIGH_SetCameraPixel,ret,Error_Unexpect);
-	LOG4VTM(INFO,"========HIGH_SetCameraPixel leave");
-	return err;
-}
-
-ErrorCodeEnum HSPSClassImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	ErrorCodeEnum err = Error_Succeed;
-	DevClose();
-	ResetParm();
-	DevOpen();
-	return err;
-}
-
-ErrorCodeEnum HSPSClassImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	ErrorCodeEnum err = Error_Succeed;
-	if(m_status.inPreview)
-	{
-		CHECK_FUNC_VALID(HIGH_CloseWindow);
-		HIGH_CloseWindow();
-	}
-	CHECK_FUNC_VALID(HIGH_StopCamera);
-	//if(m_status.isConnected)
-	{
-		HIGH_StopCamera();
-	}
-	m_status.isConnected = 0;
-	m_status.inPreview = 0;
-	m_status.inShow = 0;
-	return err;
-}
-
-ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
-{
-	try{
-		LOG4VTM_FUNCTION();
-		LOG4VTM(INFO,"ParamType = "<<type<<" ParamTypeValue = "<<value);
-		switch(type){
-			case HSPS_MODEL_COLOR:
-				if(value == HSPS_COLOR_GREY)
-				{
-					m_nColorType = 1;
-				}else
-				{
-					m_nColorType = 0;
-				}
-			break;
-			case HSPS_MODEL_ROTATE:
-				if(value == HSPS_ROTATE_LEFT)
-				{
-					m_nRotateSize = 1;
-				}else if(value == HSPS_ROTATE_MIRROR)
-				{
-					m_nRotateSize = 2;
-				}else if(value == HSPS_ROTATE_RIGHT)
-				{
-					m_nRotateSize = 3;
-				}else{
-					m_nRotateSize = 0;
-				}
-			break;
-			case HSPS_MODEL_SCANSIZE:
-				if(value == HSPS_SCAN_FULL || value == HSPS_SCAN_A4)
-				{
-					m_bAutoCorp = false;
-				}else{
-					m_bAutoCorp = true;
-				}
-			break;
-			case HSPS_MODEL_VIEW:
-				CHECK_FUNC_VALID(HIGH_HideWindow);
-				if(value == HSPS_VIEW_HIDE)
-				{
-					if(	m_status.inPreview)
-					{
-						if(m_status.inShow)
-						{
-							int ret = HIGH_HideWindow(true);
-							CHECK_RETURN_VALUE(HIGH_HideWindow,ret,Error_Unexpect);
-							m_status.inShow = 0;
-						}
-					}
-				}else{
-					if(	m_status.inPreview)
-					{
-						if(!m_status.inShow){
-							int ret = HIGH_HideWindow(false);
-							CHECK_RETURN_VALUE(HIGH_HideWindow,ret,Error_Unexpect);
-							m_status.inShow = 1;
-						}
-					}
-				}
-			break;
-		default:
-			break;
-		}
-
-		CHECK_FUNC_VALID(HIGH_SetAutoCrop);
-		int ret = HIGH_SetAutoCrop(m_bAutoCorp);
-		CHECK_RETURN_VALUE(HIGH_SetAutoCrop,ret,Error_Unexpect);
-
-		CHECK_FUNC_VALID(HIGH_SetColorType);
-		ret = HIGH_SetColorType(m_nColorType);
-		CHECK_RETURN_VALUE(HIGH_SetColorType,ret,Error_Unexpect);
-
-		CHECK_FUNC_VALID(HIGH_SetRotateSize);
-		ret = HIGH_SetRotateSize(m_nRotateSize);
-		CHECK_RETURN_VALUE(HIGH_SetRotateSize,ret,Error_Unexpect);
-	}
-	catch(const std::exception& e)
-	{
-		LOG4VTM(ERROR,"========SetParam coredump:"<<e.what());
-		return Error_Unexpect;
-	}
-	return Error_Succeed;
-}
-
-ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
-{
-	try{	
-		LOG4VTM_FUNCTION();
-		LOG4VTM(INFO,"nValue = "<<nValue);	
-/*		
-		//check dev status
-		int iStatus;
-		CHECK_FUNC_VALID(HIGH_GetStatus);
-		HIGH_GetStatus(&iStatus);
-		LOG4VTM(INFO,"GetDevStatus dev return = "<<iStatus);
-		if(FR_DS_ONLINE != iStatus)
-		{
-			//if not connected then reopen dev
-			ErrorCodeEnum retcode = DevOpen();
-			if(Error_Succeed != retcode)
-				return retcode;
-		}
-		//
-*/		
-		int ret = 0;
-		if(nValue)
-		{
-			//Check device is available
-			HspsDevStatus status;
-			GetDevStatus(status);
-			if(!m_status.isConnected)
-			{
-				FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_NotInit, "device NotInit or NotExist");
-				return Error_NotInit;
-			}
-			//if already previewed,return
-			if(m_status.inPreview)
-			{
-				LOG4VTM(INFO,"========already previewed m_status.inPreview = " << m_status.inPreview);
-				return Error_Succeed;
-			}
-				
-			LOG4VTM(INFO,"========HIGH_SetAutoCrop entry");
-			CHECK_FUNC_VALID(HIGH_SetAutoCrop);
-			ret = HIGH_SetAutoCrop(m_bAutoCorp);
-			CHECK_RETURN_VALUE(HIGH_SetAutoCrop,ret,Error_Unexpect);
-			LOG4VTM(INFO,"========HIGH_SetAutoCrop leave");
-			
-			LOG4VTM(INFO,"========HIGH_SetColorType entry");
-			CHECK_FUNC_VALID(HIGH_SetColorType);
-			ret = HIGH_SetColorType(m_nColorType);
-			CHECK_RETURN_VALUE(HIGH_SetColorType,ret,Error_Unexpect);
-			LOG4VTM(INFO,"========HIGH_SetColorType leave");
-			
-			LOG4VTM(INFO,"========HIGH_SetRotateSize entry");
-			CHECK_FUNC_VALID(HIGH_SetRotateSize);
-			ret = HIGH_SetRotateSize(m_nRotateSize);
-			CHECK_RETURN_VALUE(HIGH_SetRotateSize,ret,Error_Unexpect);
-			LOG4VTM(INFO,"========HIGH_SetRotateSize leave");
-			
-	/*		
-			if(HIGH_GetPixelNum == NULL){
-				FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "HIGH_GetPixelNum == NULL");
-				return Error_Unexpect;
-			}
-			int num = HIGH_GetPixelNum();
-	*/		
-	/*		
-			if(HIGH_GetHPixelByIndex == NULL || HIGH_GetVPixelByIndex == NULL){
-				FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "HIGH_GetHPixelByIndex == NULL || HIGH_GetVPixelByIndex == NULL");
-				return Error_Unexpect;
-			}
-			
-			int hPixel = HIGH_GetHPixelByIndex(0);
-			int vPixel = HIGH_GetVPixelByIndex(0);
-			printf("hPixel = %d,vPixel = %d\n",hPixel,vPixel);
-	*/
-/*	
-			int hPixel = DEFAULT_HPIXEL;
-			int vPixel = DEFAULT_VPIXEL;
-
-			LOG4VTM(INFO,"========HIGH_SetCameraPixel entry");
-			CHECK_FUNC_VALID(HIGH_SetCameraPixel);
-			ret = HIGH_SetCameraPixel(hPixel,vPixel);
-			CHECK_RETURN_VALUE(HIGH_SetCameraPixel,ret,Error_Unexpect);
-			LOG4VTM(INFO,"========HIGH_SetCameraPixel leave");
-*/
-			LOG4VTM(INFO,"========HIGH_CreateWindow entry");
-			CHECK_FUNC_VALID(HIGH_CreateWindow);
-			ret = HIGH_CreateWindow(m_nX,m_nY,m_nWidth,m_nWidth*9/16);
-			CHECK_RETURN_VALUE(HIGH_CreateWindow,ret,Error_Unexpect);
-			LOG4VTM(INFO,"========HIGH_CreateWindow leave");
-		}else
-		{
-			LOG4VTM(INFO,"========HIGH_CloseWindow entry");
-			CHECK_FUNC_VALID(HIGH_CloseWindow);
-			ret = HIGH_CloseWindow();
-			CHECK_RETURN_VALUE(HIGH_CloseWindow,ret,Error_Unexpect);
-			LOG4VTM(INFO,"========HIGH_CloseWindow leave");
-		}
-	}catch(const std::exception& e)
-	{
-		LOG4VTM(ERROR,"========SetPreview coredump:"<<e.what());
-		return Error_Unexpect;
-	}
-	
-	m_status.inPreview = nValue;
-	m_status.inShow = nValue;
-	return Error_Succeed;
-}
-
-ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"pszFileName = "<<pszFileName);
-	CHECK_FUNC_VALID(HIGH_TakePicture);
-	DeleteOldPic(pszFileName);
-	int ret = HIGH_TakePicture(pszFileName);
-	CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
-	CheckSavePic(pszFileName);
-	return Error_Succeed;
-}
-
-ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"input nBtLen = "<<nBtLen<<" pszFileName = "<<pszFileName);
-	const char* filename = "/tmp/HSPTempImage.jpg";
-	CHECK_FUNC_VALID(HIGH_TakePicture);
-	FILE* fp = NULL;
-	int ret = 0;
-	if(nBtLen == 0)
-	{
-		//get pic size
-		if(strlen(pszFileName) != 0)
-		{
-			ret = HIGH_TakePicture(pszFileName);
-			CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
-			fp = fopen(pszFileName,"rb");
-		}else{
-			ret = HIGH_TakePicture(filename);
-			CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
-			fp = fopen(filename,"rb");
-		}
-		
-		if(fp)
-		{
-			fseek(fp,0,SEEK_END);
-			nBtLen=ftell(fp);
-			LOG4VTM(INFO,"ScanImageEx get nBtLen = "<<nBtLen);
-			fclose(fp);
-			fp = NULL;
-		}
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_TooSmallBuffer, "ScanImageEx Error_TooSmallBuffer");
-		return Error_TooSmallBuffer;
-	}
-	
-	if(pBtImg == NULL)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Param, "pBtImg == NULL");
-		return Error_Param;
-	}
-	
-	if(strlen(pszFileName) != 0)
-	{
-		fp = fopen(pszFileName,"rb");
-		if(fp)
-		{
-			fread(pBtImg,1,nBtLen,fp);
-			fclose(fp);
-			fp = NULL;
-		}else{
-			LOG4VTM(ERROR,"get image data file fp == NULL,pszFileName = "<<pszFileName);
-		}
-	}else{
-		fp = fopen(filename,"rb");
-		if(fp)
-		{
-			fread(pBtImg,1,nBtLen,fp);
-			fclose(fp);
-			fp = NULL;
-		}else{
-			LOG4VTM(ERROR,"get image data file fp == NULL,filename = "<<filename);
-		}
-		remove(filename);
-	}
-	
-/*		
-	const int nSize = 1024*700;//DEFAULT_HPIXEL*DEFAULT_VPIXEL*3;
-	char* pTemp = (char*)malloc(DEFAULT_HPIXEL*DEFAULT_VPIXEL*3);
-	if(nBtLen < nSize)
-	{
-		nBtLen = nSize;
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_TooSmallBuffer, "ScanImageEx Error_TooSmallBuffer");
-		return Error_TooSmallBuffer;
-	}
-	
-	if(pBtImg == NULL)
-	{
-		//pBtImg = m_pBuffPic;
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Param, "pBtImg == NULL");
-		return Error_Param;
-	}
-		
-	CHECK_FUNC_VALID(HIGH_CameraData);
-	//int ret = HIGH_CameraData((char*)pBtImg);
-	int ret = HIGH_CameraData((char*)pTemp);
-	CHECK_RETURN_VALUE(HIGH_CameraData,ret,Error_Unexpect);
-	memcpy(pBtImg,pTemp,nSize);
-	free(pTemp);
-	
-	if(strlen(pszFileName) != 0)
-	{
-		CHECK_FUNC_VALID(HIGH_TakePicture);
-		DeleteOldPic(pszFileName);
-		ret = HIGH_TakePicture(pszFileName);
-		CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
-		CheckSavePic(pszFileName);
-	}
-*/	
-	return Error_Succeed;
-}
-
-ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"nX = "<<nX<<" nY = "<<nY<<" nWidth = "<<nWidth);
-	if(nWidth == 0)   //bhj  宽度参数为0时,设置隐藏,不再返回参数错误。
-	{
-		//special process
-		LOG4VTM(INFO,"nWidth == 0 special process");
-		if(m_status.inPreview)
-		{
-			if(m_status.inShow)
-			{
-				CHECK_FUNC_VALID(HIGH_HideWindow);
-				int ret = HIGH_HideWindow(true);
-				CHECK_RETURN_VALUE(HIGH_HideWindow,ret,Error_Unexpect);
-				m_status.inShow = 0;
-			}
-		}
-
-		return Error_Succeed;
-	}
-	
-	//exception process  //bhj
-	if(nX<0 || nY<0 || nWidth<0)
-	{
-		LOG4VTM(ERROR,"nX<0 || nY<0 || nWidth<0 Error_Param");
-		return Error_Param;
-	}
-	
-	m_nX = nX;
-	m_nY = nY;
-	m_nWidth = nWidth;
-	if(m_status.inPreview)
-	{
-		SetPreview(0);
-		SetPreview(1);
-	}
-	return Error_Succeed;
-}
-
-ErrorCodeEnum HSPSClassImpl::SetProperty()
-{
-	LOG4VTM_FUNCTION();
-	return Error_NotImpl;
-}
-
-ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
-{
-	LOG4VTM_FUNCTION();
-	int iStatus;
-	CHECK_FUNC_VALID(HIGH_GetStatus);
-	HIGH_GetStatus(&iStatus);
-	LOG4VTM(INFO,"GetDevStatus dev return = "<<iStatus);
-	if(FR_DS_ONLINE != iStatus)
-	{
-		m_status.isConnected = 0;
-	}
-	status = m_status;
-/*	
-	int iStatus;
-	if(HIGH_GetStatus == NULL){
-		FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "HIGH_GetStatus == NULL");
-		return Error_Unexpect;
-	}
-	HIGH_GetStatus(&iStatus);
-	printf("GetDevStatus = %d\n",iStatus);
-*/	
-	return Error_Succeed;
-}
-
-ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	memset(&devErrInfo, 0, sizeof(devErrInfo));
-	memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
-	return Error_Succeed;
-}
-
-void HSPSClassImpl::DeleteOldPic(const char* pszFileName)
-{
-/*	
-	FILE* fp = NULL;
-	fp = fopen(pszFileName,"rb");
-	if(fp)
-	{
-		remove(pszFileName);
-		fclose(fp);
-	}
-*/	
-}
-
-void HSPSClassImpl::CheckSavePic(const char* pszFileName){
-/*	
-	FILE* fp = NULL;
-	int time = 0;
-	while(!fp && time++ < 5)//检测次数5次
-	{
-		sleep(1);
-		fp = fopen(pszFileName,"rb");
-	}
-	if(fp)
-		fclose(fp);
-*/		
-}
-
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-	baseObj = new HSPSClassImpl();
-	if(baseObj == NULL) {
-		return Error_Resource;
-	} else {
-		cmb::log_init_config config;
-		config.dev_name = "HSPScanner";
-		config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-		config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-		config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-		std::string str;
-		cmb::log4vendor::init(config, str);
-		printf("init after: %s\n", str.c_str());
-		return Error_Succeed;
-	}
-}
-
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-	if(pBaseObj == NULL) {
-		return Error_Param;
-	}
-
-	if(HSPSClassImpl* pTmp = dynamic_cast<HSPSClassImpl*>(pBaseObj))
-	{
-		delete pTmp;
-		pTmp = NULL;
-		return Error_Succeed;
-	}
-
-	return Error_Param;
-}

+ 0 - 113
DevAdapter/grg/hspscanner.1.1/hspscanner_impl.h

@@ -1,113 +0,0 @@
-#ifndef LIBFRAMEWORK_HSPS_IMPL_H
-#define LIBFRAMEWORK_HSPS_IMPL_H
-
-#include "HSPScannerClass.h"
-/*
-enum HSP_STATE{
-	HSP_DISCONNECTED = 0,
-	HSP_CONNECTED,
-	HSP_INPREVIEW,
-	HSP_OUTPREVIEW,
-	HSP_SHOW,
-	HSP_HIDE
-};
-*/
-class HSPSClassImpl : public CHSPSClass
-{
-public:
-    HSPSClassImpl();
-    ~HSPSClassImpl();
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-    virtual ErrorCodeEnum DevOpen();
-
-    //
-    //	Set param, more detail please to see ParamType and its according ParamTypeValue.
-    //
-    virtual ErrorCodeEnum SetParam(ParamType type, ParamTypeValue value);
-
-    //
-    //	Command the device to start to preview or stop previewing.
-    //	-nValue[in] set 1 means StartPreview while 0 means StopPreview.
-    //	If the device' state had been setted before what the nValue commanded, ignore it and
-    //		return Error_Succeed.
-    //	The function returns only the specified behavior is done completely, StartPreview in special.
-    //  更新20161117: nValue值为 1 时打开预览,确保当前打开预览过程执行结束且窗口处于显示状态才返回Error_Succeed,
-    //	nValue值为 0 时关闭预览并隐藏窗口
-    //		
-    //
-    virtual ErrorCodeEnum SetPreview(short nValue);
-
-    //
-    //	Scan Image from device and store the image.
-    //	-pszFileName[in] Store the path and name using suffix ".jpg"
-    //		specifies that where the image will be located and what it would be named.
-    //	拍摄照片,传入的文件名已带绝对路径,无需再进行拼接处理
-    //
-    virtual ErrorCodeEnum ScanImage(const char* pszFileName);
-
-    //
-    //	Scan Image from device and return the image data in byte format.
-    //	-pBtImg[out] The buffer used to store the scanned image data.
-    //		存储图片字节流的缓冲区,大小为 nBtLen 字节
-    //	-nBtLen[in,out] Indicate the max byte-type size of pBtImg could be stored 
-    //		and Store the real byte-type size of pBtImg had used when returned.
-    //		when detect value of nBtLen is 0 or smaller that necessary size, please
-    //		set nBtlen with real byte-type size and return Error_TooSmallBuffer.
-    //		如果nBtLen指定的字节数过小,那么对nBtLen赋值实际所需的大小并返回 Error_TooSmallBuffer,此操作仅允许一次
-    //	-pszFileName[in] Store the path and name where the image file should be located
-    //		while "" indicates that the image file shouldn't be stored at locate.
-    //		文件名长度为零表示不在本地生成图片文件
-    //  
-    //
-    virtual ErrorCodeEnum ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName = "");
-
-    //
-    //	Set position and width of preview dialog with the rate of length to width: 16:9.
-    //	-nX[in] The X coordinate of leftTop point.
-    //  -nY[in] The Y coordinate of leftTop point.
-    //	-nWidth[in] The Width of Preview Dialog .
-    //	传入预览窗口显示的坐标,左上角的横坐标nX,左上角的纵坐标nY,以及预览窗口的宽,宽与高的比例为 16:9
-    //
-    virtual ErrorCodeEnum SetViewPos(int nX, int nY, int nWidth);
-
-    //
-    //	Show property dialog of HSPS of LiangTian.
-    //	If there is no property dialog function, ignore it and return Error_NotImpl(更新20161117).
-    //  更新20161117:用于打开良田高拍仪设备的设置属性页,可能用不到
-    //
-    virtual ErrorCodeEnum SetProperty();
-
-    //
-    //	Get current status of device.
-    //
-    virtual ErrorCodeEnum GetDevStatus(HspsDevStatus& status);
-
-private:
-	void* m_hSo;
-    int m_mode;
-	unsigned char* m_pBuffPic;
-	HspsDevStatus m_status;
-//	ParamType m_ptype;
-//	ParamTypeValue m_ptValue;
-	bool m_bAutoCorp;
-	int m_nColorType;
-	int m_nRotateSize;
-	int m_nX;
-	int m_nY;
-	int m_nWidth;
-	DevErrorInfo m_DevErrorInfo;
-	void ZeroDevErrorInfo();
-	void FormatDevErrorInfo(const char* funcname, int line, int errCode,const char* errStr);
-	void ResetParm();
-	void DeleteOldPic(const char* pszFileName);
-	void CheckSavePic(const char* pszFileName);
-};
-
-
-#endif //LIBFRAMEWORK_HSPS_IMPL_H

+ 0 - 18
DevAdapter/grg/idcer.1.1/CMakeLists.txt

@@ -1,18 +0,0 @@
-rvc_dev_define_module("IDCertificate")
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-set(${MODULE_PREFIX}_SRCS SHARED
-        idcer_impl.cpp
-        )
-		
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME}  grgGRGIDRCHKDev ${VENDOR_LOG_LIB_NAME})
-#target_link_libraries(${MODULE_FULL_NAME} GRGIDRCHKDev)
-
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 1133
DevAdapter/grg/idcer.1.1/idcer_impl.cpp

@@ -1,1133 +0,0 @@
-#include <memory.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <dlfcn.h>
-#include <iconv.h>
-#include "idcer_impl.h"
-#include "GRGIDRCHKDev.h"
-#include "log4vendor.h"
-
-DEVICEBASE_API ErrorCodeEnum  CreateDevComponent(DeviceBaseClass *&baseObj) {
-	baseObj = new IDCerClassImpl();
-	if (baseObj == NULL)
-	{
-		return Error_Resource;
-	}
-	
-	cmb::log_init_config config;
-    config.dev_name = "IDCer";
-	config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-    config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-    config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-    std::string str;
-    cmb::log4vendor::init(config, str);
-    printf("init after: %s\n", str.c_str());
-    return Error_Succeed;
-}
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-	if(pBaseObj == NULL)
-    {
-        return Error_Param;
-    }
-    if(IDCerClassImpl* pTmp = dynamic_cast<IDCerClassImpl*>(pBaseObj))
-    {
-        delete pTmp;
-        pTmp = NULL;
-        return Error_Succeed;
-    }
-    return Error_Param;
-}
-
-IDCerClassImpl::IDCerClassImpl()
-{
-	m_DeviceID = -1;
-	ZeroDevErrorInfo();
-	//m_sSoPath = GeSoFilePath((void*)&EnumScannerDevice);
-	m_sSoPath = GeSoFilePath((void*)&CreateDevComponent);
-	m_sHeadImageName = "./zp.bmp";
-	m_sFrontPath = "./idfront.bmp";
-	m_sBackPath = "./idback.bmp";
-	if(m_sSoPath != ""){
-		m_sFrontPath = m_sSoPath + "/idfront.bmp";
-		m_sBackPath = m_sSoPath + "/idback.bmp";
-		m_sHeadImageName = m_sSoPath + "/zp.bmp";
-	}
-}
-
-IDCerClassImpl::~IDCerClassImpl()
-{
-	remove(const_cast<char*>(m_sHeadImageName.c_str()));
-	remove(const_cast<char*>(m_sFrontPath.c_str()));
-	remove(const_cast<char*>(m_sBackPath.c_str()));
-	DevClose();
-}
-
-void IDCerClassImpl::ZeroDevErrorInfo()
-{
-	memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-}
-
-void IDCerClassImpl::FormatDevErrorInfo(const char* funcname, int line)
-{
-	ZeroDevErrorInfo();
-	int errCode = GetLastErrorCode();
-	if (errCode != IDDIGITALCOPIER_NO_ERROR)
-	{
-		char errStr[1024]={ 0 };
-		GetLastErrorStr(errStr);
-		//snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
-		snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "{\"ErrCode\":0x%x,\"Description\":\"Func:%s,Line:%d,Msg:%s\"}", errCode, funcname, line, errStr);
-		m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-		LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
-	}
-}
-
-ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	char* szType = "PVER=GRG#MID=IDR-001";
-	char* szVendor = "grg";
-	char* szModel = "STYLE=IG#FUNCTON=ITF#CODE=UCS2";
-	memset(&devCategory,0,sizeof(devCategory));
-	strcpy(devCategory.szType, szType);
-	strcpy(devCategory.szVendor, szVendor);
-	strcpy(devCategory.szModel, szModel);
-/*
-	char versionInfo[128] = { 0 };
-	if (IDDIGITALCOPIER_NO_ERROR != GetSWVersion(versionInfo)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	//V1.1.5.1去掉V
-	char *tokenPtr=strtok(versionInfo+1,".");
-	int ver[4] = {0};
-	int index = 0;
-	while(tokenPtr!=NULL){
-		ver[index++] = atoi(tokenPtr);
-		tokenPtr=strtok(NULL,".");
-    }
-	devCategory.version.wMajor = ver[0];
-	devCategory.version.wMinor = ver[1];
-	devCategory.version.wRevision = ver[2];
-	devCategory.version.wBuild = ver[3];
-*/
-	devCategory.version.wMajor = 4;
-	devCategory.version.wMinor = 20;
-	devCategory.version.wRevision = 65535;
-	devCategory.version.wBuild = 1;
-
-	DEVSTATUSEx dev;
-	int ret = GetDevStatusEx(m_DeviceID,&dev);
-	if (ret == IDDIGITALCOPIER_NO_ERROR)
-	{
-		devCategory.eState = DEVICE_STATUS_CONNECTING;
-	}
-	else if (ret == IDDIGITALCOPIER_HAVE_NOT_INIT
-		|| ret == IDDIGITALCOPIER_PORT_ERROR)
-	{
-		devCategory.eState = DEVICE_STATUS_NOT_READY;
-	}
-	else if (ret == IDDIGITALCOPIER_FIRMWARE_ERROR
-		|| ret == IDDIGITALCOPIER_VOLTAGE_LOW
-		|| ret == IDDIGITALCOPIER_POWER_OFF
-		|| dev.iStatusLowVoltage == 1
-		|| dev.iStatusPowerOff == 1)
-	{
-		devCategory.eState = DEVICE_STATUS_FAULT;
-	}
-/*
-	DEVSTATUSEx devStatus;
-	if (IDDIGITALCOPIER_NO_ERROR != GetDevStatusEx(m_DeviceID, &devStatus)) {
-		//FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		devCategory.eState = DEVICE_STATUS_NOT_READY;
-	}else{
-		devCategory.eState = DEVICE_STATUS_NORMAL;
-	}
-*/
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//	Reset device.
-//	Do the cleaning work and initialize device again in order to return to
-//	the normal condition.
-ErrorCodeEnum IDCerClassImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	if (IDDIGITALCOPIER_NO_ERROR != ResetDevice(m_DeviceID)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//	
-//	Close device and do the cleaning work.
-//	ex. close connection,close port,release memery and so on
-ErrorCodeEnum IDCerClassImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	DEVSTATUSEx dev;
-	if (IDDIGITALCOPIER_NO_ERROR == GetDevStatusEx(m_DeviceID, &dev))
-	{
-		if (dev.iStatusCardJam == 1
-			|| dev.iStatusMiddleSensorHaveCard == 1
-			|| dev.iStatusScanSensorHaveCard == 1)
-		{
-			BackIdCard(m_DeviceID);
-		}
-	}
-
-	if (IDDIGITALCOPIER_NO_ERROR != CloseConnection(m_DeviceID)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-//	Get last error the device issued.
-//	Error message must include explanatory memorandum ,the original error 
-//	code and anything in favour of location problem.
-ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	memset(&devErrInfo,0,sizeof(devErrInfo));
-	memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
-	return Error_Succeed;
-}
-
-//IDCerClass
-//
-//	Open device.
-//	if usb device,set dwPort=0
-//
-ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	unsigned DeviceCount = 8;
-	ScannerInfoRec  ScannerInfo[8]={0};
-	int retv = EnumScannerDevice(ScannerInfo,&DeviceCount);
-	m_DeviceID = ScannerInfo[0].DeviceID;
-	//printf("EnumScannerDevice :retv=%d,count=%d,DeviceID=%d\n",retv,DeviceCount,m_DeviceID);
-	//default image format is bmp
-	if (IDDIGITALCOPIER_NO_ERROR != OpenConnection(m_DeviceID)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_DevConnFailed;
-	}
-	if (IDDIGITALCOPIER_NO_ERROR != SetInitFeedMode(m_DeviceID,0)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	
-	if (IDDIGITALCOPIER_NO_ERROR != SetButtonEnable(m_DeviceID,1)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	
-	if (IDDIGITALCOPIER_NO_ERROR != SetAutoFeedEnable(m_DeviceID,0)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//
-//	Optional.
-//	Open or close RF. 
-//	Arguments:
-//	- bControl:true:open RF,false close RF
-//	-	对于吸入式,为true接收身份证插入,为false时弹出身份证并关闭接收身份证插入
-//
-ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	DEVSTATUSEx dev;
-	if (IDDIGITALCOPIER_NO_ERROR != GetDevStatusEx(m_DeviceID, &dev))
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Hardware;
-	}
-
-	if (bControl)
-	{
-		if (dev.iStatusMiddleSensorHaveCard == 1
-			|| dev.iStatusScanSensorHaveCard == 1)
-		{
-			if (IDDIGITALCOPIER_NO_ERROR != BackIdCardToRerec(m_DeviceID))
-			{
-				FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			}
-		}
-
-		if (IDDIGITALCOPIER_NO_ERROR != SetAutoFeedEnable(m_DeviceID,1))
-		{
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-	}
-	else
-	{
-		if (dev.iStatusMiddleSensorHaveCard == 1
-			|| dev.iStatusScanSensorHaveCard == 1)
-		{
-			if (IDDIGITALCOPIER_NO_ERROR != BackAndHoldIdCard(m_DeviceID))
-			{
-				FormatDevErrorInfo(__FUNCTION__, __LINE__);
-				return Error_DevMedia;
-			}
-		}
-		int ret = SetAutoFeedEnable(m_DeviceID,0);
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-
-/*
-	int ret = 0;
-	int checktime = 30 * 1000;//先设定30秒
-	if (bControl) {
-		ret = CheckHaveIdCard(m_DeviceID, checktime);
-	}
-	else {
-		ret = BackAndHoldIdCard(m_DeviceID);
-	}
-	if (IDDIGITALCOPIER_NO_ERROR != ret) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	return Error_Succeed;
-*/
-}
-
-//
-//	Optional.
-//	Certificate authentication.
-//
-ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	DEVSTATUS dev;
-	if (IDDIGITALCOPIER_NO_ERROR != GetDevStatus(m_DeviceID, &dev))
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_DevCommFailed;
-	}
-
-	// 先判断在内部
-	if (dev.iStatusCardJam == 1
-		|| dev.iStatusMiddleSensorHaveCard == 1
-		|| dev.iStatusScanSensorHaveCard == 1
-		)
-	{
-		//in
-		LOG4VTM(INFO,__FUNCTION__<<" in");
-
-	}
-	else if (dev.iStatusInputSensorHaveCard == 1)
-	{
-		//out
-		LOG4VTM(INFO,__FUNCTION__<<" out");
-	}
-	else
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-/*
-	int checktime = 30 * 1000;
-	if (IDDIGITALCOPIER_NO_CARD == CheckHaveIdCard(m_DeviceID, checktime)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-*/
-	//如果没有识别到卡类型则表示无效卡
-	int iCardType;
-	if (IDDIGITALCOPIER_NO_ERROR != GetIDCardType(m_DeviceID, &iCardType)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_DevMedia;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//  即将废弃,请使用IDCerGetDataEx
-//	Get Identity Card info.
-//
-//是否包含字符串\0结束符
-#define EOF_LEN 1
-#define UTF8_BUFF_SIZE 1024
-ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	IDInfo idInfo = {0};
-	memset(&idCerInfo, 0, sizeof(idCerInfo));
-	if (IDDIGITALCOPIER_NO_ERROR != GetID2Info(m_DeviceID, &idInfo, const_cast<char*>(m_sHeadImageName.c_str()))) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	//姓名
-	char utf8buf[UTF8_BUFF_SIZE] = {0};
-	GbkToUtf8(idInfo.name,strlen(idInfo.name),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.name.data, utf8buf);
-	idCerInfo.name.dwSize = strlen(utf8buf);
-	//性别
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(idInfo.sex,strlen(idInfo.sex),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.sex.data, utf8buf);
-	idCerInfo.sex.dwSize = strlen(utf8buf);
-	//民族
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(idInfo.nation,strlen(idInfo.nation),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.nation.data, utf8buf);
-	idCerInfo.nation.dwSize = strlen(utf8buf);
-	//生日
-	std::string Newbirthday = ForDataFormat(std::string(idInfo.birthday), "for");
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.birthday.data, utf8buf);
-	idCerInfo.birthday.dwSize = strlen(utf8buf);
-	//住址
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(idInfo.address,strlen(idInfo.address),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.address.data, utf8buf);
-	idCerInfo.address.dwSize = strlen(utf8buf);
-	//证件号
-	int len = sizeof(idCerInfo.idno.data) > strlen(idInfo.number) ? strlen(idInfo.number) : sizeof(idCerInfo.idno.data);
-	strncpy(idCerInfo.idno.data, idInfo.number, len);
-	idCerInfo.idno.dwSize = len;
-	//签发机关
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(idInfo.department,strlen(idInfo.department),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.department.data, utf8buf);
-	idCerInfo.department.dwSize = strlen(utf8buf);
-	//处理有效期
-	std::string beginTime = "", endTime = "";
-	std::string data = std::string(idInfo.timeLimit);
-	if (data.length() > 0)
-	{
-		int location = data.find_first_of("-");
-		if (location > 0)
-		{
-			beginTime = data.substr(0, location);
-			beginTime = ForDataFormat(beginTime, ".");
-			endTime = data.substr(location + 1, data.length());
-			endTime = ForDataFormat(endTime, ".");
-		}
-	}
-	//有效日期签发日
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(const_cast<char*>(beginTime.c_str()),strlen(beginTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.startDate.data, utf8buf);
-	idCerInfo.startDate.dwSize = strlen(utf8buf);
-	//有效日期终止日
-	memset(utf8buf,0,UTF8_BUFF_SIZE);
-	GbkToUtf8(const_cast<char*>(endTime.c_str()),strlen(endTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-	strcpy(idCerInfo.endDate.data, utf8buf);
-	idCerInfo.endDate.dwSize = strlen(utf8buf);
-	//头像信息
-	strcpy(idCerInfo.photoPath.data, idInfo.Image);
-	idCerInfo.photoPath.dwSize = strlen(idInfo.Image);
-
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//  获取证件信息,包括二代身份证、外国人永久居留证
-//	Get Identity Card info.
-//
-ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int iCardType;
-	memset(&idCerInfoEx, 0, sizeof(idCerInfoEx));
-	if (IDDIGITALCOPIER_NO_ERROR != GetIDCardType(m_DeviceID, &iCardType)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	switch (iCardType)
-	{
-	case 0://普通身份证
-	{
-		IDInfo idInfo = {0};
-		if (IDDIGITALCOPIER_NO_ERROR != GetID2Info(m_DeviceID, &idInfo, const_cast<char*>(m_sHeadImageName.c_str()))) {
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-		//姓名
-		char utf8buf[UTF8_BUFF_SIZE] = {0};
-		GbkToUtf8(idInfo.name,strlen(idInfo.name),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.name.data, utf8buf);
-		idCerInfoEx.name.dwSize = strlen(utf8buf);
-		//性别
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfo.sex,strlen(idInfo.sex),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.sex.data, utf8buf);
-		idCerInfoEx.sex.dwSize = strlen(utf8buf);
-		//民族
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfo.nation,strlen(idInfo.nation),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.nation.data, utf8buf);
-		idCerInfoEx.nation.dwSize = strlen(utf8buf);
-		//生日
-		std::string Newbirthday = ForDataFormat(std::string(idInfo.birthday), "for");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.birthday.data, utf8buf);
-		idCerInfoEx.birthday.dwSize = strlen(utf8buf);
-		//住址
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfo.address,strlen(idInfo.address),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.address.data, utf8buf);
-		idCerInfoEx.address.dwSize = strlen(utf8buf);
-		//证件号
-		int len = sizeof(idCerInfoEx.idno.data) > strlen(idInfo.number) ? strlen(idInfo.number) : sizeof(idCerInfoEx.idno.data);
-		strncpy(idCerInfoEx.idno.data, idInfo.number, len);
-		idCerInfoEx.idno.dwSize = len;
-		//签发机关
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfo.department,strlen(idInfo.department),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.department.data, utf8buf);
-		idCerInfoEx.department.dwSize = strlen(utf8buf);
-		//处理有效期
-		std::string beginTime = "", endTime = "";
-		std::string data = std::string(idInfo.timeLimit);
-		if (data.length() > 0)
-		{
-			int location = data.find_first_of("-");
-			if (location > 0)
-			{
-				beginTime = data.substr(0, location);
-				beginTime = ForDataFormat(beginTime, ".");
-				endTime = data.substr(location + 1, data.length());
-				endTime = ForDataFormat(endTime, ".");
-			}
-		}
-		//有效日期签发日
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(beginTime.c_str()),strlen(beginTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.startDate.data, utf8buf);
-		idCerInfoEx.startDate.dwSize = strlen(utf8buf);
-		//有效日期终止日
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(endTime.c_str()),strlen(endTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.endDate.data, utf8buf);
-		idCerInfoEx.endDate.dwSize = strlen(utf8buf);
-		//头像信息
-		strcpy(idCerInfoEx.photoPath.data, idInfo.Image);
-		idCerInfoEx.photoPath.dwSize = strlen(idInfo.Image);
-		break;
-	}
-	case 1://外国人居住证
-	{
-		IDInfoForeign idInfoFore;
-		if (IDDIGITALCOPIER_NO_ERROR != GetIDInfoForeign(m_DeviceID, &idInfoFore, const_cast<char*>(m_sHeadImageName.c_str()))) {
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-		char utf8buf[UTF8_BUFF_SIZE] = {0};
-		//英文姓名
-		strcpy(idCerInfoEx.englishName.data, idInfoFore.NameENG);
-		idCerInfoEx.englishName.dwSize = strlen(idInfoFore.NameENG);
-		//国籍
-		GbkToUtf8(idInfoFore.Nation,strlen(idInfoFore.Nation),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.nationality.data, utf8buf);
-		idCerInfoEx.nationality.dwSize = strlen(utf8buf);
-		//证件类型
-		strcpy(idCerInfoEx.idType.data, "I");
-		idCerInfoEx.idType.dwSize = strlen("I");
-		//证件版本
-		strcpy(idCerInfoEx.idVersion.data, idInfoFore.IDVersion);
-		idCerInfoEx.idVersion.dwSize = strlen(idInfoFore.IDVersion);
-		//保留字段
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoFore.Reserve,strlen(idInfoFore.Reserve),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.reserved.data, utf8buf);
-		idCerInfoEx.reserved.dwSize = strlen(utf8buf);
-		//中文姓名
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoFore.NameCHN,strlen(idInfoFore.NameCHN),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.name.data, utf8buf);
-		idCerInfoEx.name.dwSize = strlen(utf8buf);
-		//性别
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoFore.Sex,strlen(idInfoFore.Sex),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.sex.data, utf8buf);
-		idCerInfoEx.sex.dwSize = strlen(utf8buf);
-		//生日
-		std::string Newbirthday = ForDataFormat(std::string(idInfoFore.Born), "for");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.birthday.data, utf8buf);
-		idCerInfoEx.birthday.dwSize = strlen(utf8buf);
-		//证件号
-		strcpy(idCerInfoEx.idno.data, idInfoFore.IDCardNO);
-		idCerInfoEx.idno.dwSize = strlen(idInfoFore.IDCardNO);
-		//签发机关
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoFore.Department,strlen(idInfoFore.Department),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.department.data, utf8buf);
-		idCerInfoEx.department.dwSize = strlen(utf8buf);
-		//有效日期签发日
-		std::string NewTimeLimitBegin = GetForeignTimeLimit(std::string(idInfoFore.TimeLimitBegin), ".");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(NewTimeLimitBegin.c_str()),strlen(NewTimeLimitBegin.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.startDate.data, utf8buf);
-		idCerInfoEx.startDate.dwSize = strlen(utf8buf);
-		//有效日期终止日
-		std::string NewTimeLimitEnd = GetForeignTimeLimit(std::string(idInfoFore.TimeLimitEnd), ".");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(NewTimeLimitEnd.c_str()),strlen(NewTimeLimitEnd.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.endDate.data, utf8buf);
-		idCerInfoEx.endDate.dwSize = strlen(utf8buf);
-		//头像信息
-		int len = sizeof(idCerInfoEx.photoPath.data) > strlen(idInfoFore.Image) ? strlen(idInfoFore.Image) : sizeof(idCerInfoEx.photoPath.data);
-		strncpy(idCerInfoEx.photoPath.data, idInfoFore.Image, len);
-		idCerInfoEx.photoPath.dwSize = len;
-		break;
-	}
-	case 2://港澳台居住证
-	{
-		IDInfoGAT idInfoGAT;
-		if (IDDIGITALCOPIER_NO_ERROR != GetIDInfoGAT(m_DeviceID, &idInfoGAT, const_cast<char*>(m_sHeadImageName.c_str()))) {
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-		//姓名
-		char utf8buf[UTF8_BUFF_SIZE] = {0};
-		GbkToUtf8(idInfoGAT.name,strlen(idInfoGAT.name),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.name.data, utf8buf);
-		idCerInfoEx.name.dwSize = strlen(utf8buf);
-		//性别
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoGAT.sex,strlen(idInfoGAT.sex),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.sex.data, utf8buf);
-		idCerInfoEx.sex.dwSize = strlen(utf8buf);
-		//民族
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoGAT.nation,strlen(idInfoGAT.nation),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.nation.data, utf8buf);
-		idCerInfoEx.nation.dwSize = strlen(utf8buf);
-		//生日
-		std::string Newbirthday = ForDataFormat(std::string(idInfoGAT.birthday), "for");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.birthday.data, utf8buf);
-		idCerInfoEx.birthday.dwSize = strlen(utf8buf);
-		//住址
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoGAT.address,strlen(idInfoGAT.address),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.address.data, utf8buf);
-		idCerInfoEx.address.dwSize = strlen(utf8buf);
-		//证件号
-		int len = sizeof(idCerInfoEx.idno.data) > strlen(idInfoGAT.number) ? strlen(idInfoGAT.number) : sizeof(idCerInfoEx.idno.data);
-		strncpy(idCerInfoEx.idno.data, idInfoGAT.number, len);
-		idCerInfoEx.idno.dwSize = len;
-		//签发机关
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(idInfoGAT.department,strlen(idInfoGAT.department),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.department.data, utf8buf);
-		idCerInfoEx.department.dwSize = strlen(utf8buf);
-		//有效日期签发日
-		std::string beginTime = "", endTime = "";
-		std::string data = std::string(idInfoGAT.timeLimit);
-		if (data.length() > 0)
-		{
-			int location = data.find_first_of("-");
-			if (location > 0)
-			{
-				beginTime = data.substr(0, location);
-				beginTime = ForDataFormat(beginTime, ".");
-				endTime = data.substr(location + 1, data.length());
-				endTime = ForDataFormat(endTime, ".");
-			}
-		}
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(beginTime.c_str()),strlen(beginTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.startDate.data, utf8buf);
-		idCerInfoEx.startDate.dwSize = strlen(utf8buf);
-		//有效日期终止日
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		GbkToUtf8(const_cast<char*>(endTime.c_str()),strlen(endTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		strcpy(idCerInfoEx.endDate.data, utf8buf);
-		idCerInfoEx.endDate.dwSize = strlen(utf8buf);
-		//头像信息
-		strcpy(idCerInfoEx.photoPath.data, idInfoGAT.Image);
-		idCerInfoEx.photoPath.dwSize = strlen(idInfoGAT.Image);
-		//通行证号码
-		strcpy(idCerInfoEx.txzCode.data, idInfoGAT.passport);
-		idCerInfoEx.txzCode.dwSize = strlen(idInfoGAT.passport);
-		//签发次数
-		strcpy(idCerInfoEx.issuedSN.data, idInfoGAT.issue);
-		idCerInfoEx.issuedSN.dwSize = strlen(idInfoGAT.issue);
-		//证件类型
-		strcpy(idCerInfoEx.idType.data, "J");
-		idCerInfoEx.idType.dwSize = strlen("J");
-		break;
-	}
-	default:
-		break;
-	}
-	
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//  修改结构体获取证件信息,包括二代身份证、外国人永久居留证
-ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx2(IDCerInfoEx2 &idCerInfoEx)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	int iCardType;
-	memset(&idCerInfoEx, 0, sizeof(idCerInfoEx));
-	if (IDDIGITALCOPIER_NO_ERROR != GetIDCardType(m_DeviceID, &iCardType)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	switch (iCardType)
-	{
-	case 0://普通身份证
-	{
-		IDInfoEx idInfo = {0};
-		if (IDDIGITALCOPIER_NO_ERROR != GetID2InfoExByCode(m_DeviceID, &idInfo, const_cast<char*>(m_sHeadImageName.c_str()),1)) 
-        {
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-		//姓名
-		char utf8buf[UTF8_BUFF_SIZE] = {0};
-
-		//GbkToUtf8(idInfo.name,strlen(idInfo.name),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.name.data, idInfo.name,sizeof(idInfo.name));
-		idCerInfoEx.name.dwSize = strlen(idInfo.name);
-		//性别
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfo.sex,strlen(idInfo.sex),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.sex.data, idInfo.sex,sizeof(idInfo.sex));
-		idCerInfoEx.sex.dwSize = sizeof(idInfo.sex);
-
-		//民族
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfo.nation,strlen(idInfo.nation),utf8buf,UTF8_BUFF_SIZE);		
-        //strcpy(idCerInfoEx.nation.data, idInfo.nation);
-        memcpy(idCerInfoEx.nation.data, idInfo.nation,sizeof(idInfo.nation));
-		idCerInfoEx.nation.dwSize = sizeof(idInfo.nation);
-       
-		//生日
-		std::string Newbirthday = ForDataFormat(std::string(idInfo.birthday), "for");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.birthday.data, idInfo.birthday,sizeof(idInfo.birthday));
-		idCerInfoEx.birthday.dwSize = sizeof(idInfo.birthday);
-		//住址
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfo.address,strlen(idInfo.address),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.address.data, idInfo.address,sizeof(idInfo.address));
-		idCerInfoEx.address.dwSize = sizeof(idInfo.address);
-		//证件号
-		//int len = sizeof(idCerInfoEx.idno.data) > strlen(idInfo.number) ? strlen(idInfo.number) : sizeof(idCerInfoEx.idno.data);
-		int len = strlen(idInfo.number);
-		memcpy(idCerInfoEx.idno.data, idInfo.number,sizeof(idInfo.number));
-		idCerInfoEx.idno.dwSize = sizeof(idInfo.number);
-		//签发机关
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfo.department,strlen(idInfo.department),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.department.data, idInfo.department,sizeof(idInfo.department));
-		idCerInfoEx.department.dwSize = sizeof(idInfo.department);
-		//处理有效期
-		std::string beginTime = "", endTime = "";
-		std::string data = std::string(idInfo.timeLimit);
-		if (data.length() > 0)
-		{
-			int location = data.find_first_of("-");
-			if (location > 0)
-			{
-				beginTime = data.substr(0, location);
-				beginTime = ForDataFormat(beginTime, ".");
-				endTime = data.substr(location + 1, data.length());
-				endTime = ForDataFormat(endTime, ".");
-			}
-		}
-
-		//有效日期签发日
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(beginTime.c_str()),strlen(beginTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		//strcpy(idCerInfoEx.startDate.data, utf8buf);
-        memcpy(idCerInfoEx.startDate.data,idInfo.timeLimit,16);
-		idCerInfoEx.startDate.dwSize = 18;
-		//有效日期终止日
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(endTime.c_str()),strlen(endTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-        
-		memcpy(idCerInfoEx.endDate.data,idInfo.timeLimit+16 ,18);
-		idCerInfoEx.endDate.dwSize = 18;
-		//头像信息
-		strcpy(idCerInfoEx.photoPath.data, idInfo.Image);
-		idCerInfoEx.photoPath.dwSize = sizeof(idInfo.Image);
-		break;
-	}
-	case 1://外国人居住证
-	{
-        
-		IDInfoForeign idInfoFore;
-		if (IDDIGITALCOPIER_NO_ERROR != GetIDInfoForeignByCode(m_DeviceID, &idInfoFore, const_cast<char*>(m_sHeadImageName.c_str()),1)) {
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-    
-		char utf8buf[UTF8_BUFF_SIZE] = {0};
-		//英文姓名
-		memcpy(idCerInfoEx.englishName.data, idInfoFore.NameENG,sizeof(idInfoFore.NameENG));
-		idCerInfoEx.englishName.dwSize = sizeof(idInfoFore.NameENG);
-
-		//国籍3
-		//GbkToUtf8(idInfoFore.Nation,strlen(idInfoFore.Nation),utf8buf,UTF8_BUFF_SIZE);
-
-		memcpy(idCerInfoEx.nationality.data, idInfoFore.Nation,sizeof(idInfoFore.Nation));
-		idCerInfoEx.nationality.dwSize = sizeof(idInfoFore.Nation);
-
-		//证件类型
-
-		strcpy(idCerInfoEx.idType.data, "I");
-		idCerInfoEx.idType.dwSize = strlen("I");
-
-		//证件版本
-		memcpy(idCerInfoEx.idVersion.data, idInfoFore.IDVersion,sizeof(idInfoFore.IDVersion));
-		idCerInfoEx.idVersion.dwSize = sizeof(idInfoFore.IDVersion);
-
-
-		//保留字段
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoFore.Reserve,strlen(idInfoFore.Reserve),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.reserved.data, idInfoFore.Reserve,sizeof(idInfoFore.Reserve));
-		idCerInfoEx.reserved.dwSize = sizeof(idInfoFore.Reserve);
-		//中文姓名
-
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoFore.NameCHN,strlen(idInfoFore.NameCHN),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.name.data, idInfoFore.NameCHN,sizeof(idInfoFore.NameCHN));
-		idCerInfoEx.name.dwSize = sizeof(idInfoFore.NameCHN);
-
-		//性别
-
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoFore.Sex,strlen(idInfoFore.Sex),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.sex.data, idInfoFore.Sex,sizeof(idInfoFore.Sex));
-		idCerInfoEx.sex.dwSize = sizeof(idInfoFore.Sex);
-
-		//生日
-
-		//std::string Newbirthday = ForDataFormat(std::string(idInfoFore.Born), "for");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.birthday.data, idInfoFore.Born,sizeof(idCerInfoEx.birthday.data));
-		idCerInfoEx.birthday.dwSize = sizeof(idCerInfoEx.birthday.data);
-		//证件号
-
-		memcpy(idCerInfoEx.idno.data, idInfoFore.IDCardNO,sizeof(idInfoFore.IDCardNO));
-		idCerInfoEx.idno.dwSize = sizeof(idInfoFore.IDCardNO);
-		//签发机关
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoFore.Department,strlen(idInfoFore.Department),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.department.data, idInfoFore.Department,sizeof(idInfoFore.Department));
-		idCerInfoEx.department.dwSize = sizeof(idInfoFore.Department);
-		//有效日期签发日
-
-		//std::string NewTimeLimitBegin = GetForeignTimeLimit(std::string(idInfoFore.TimeLimitBegin), ".");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(NewTimeLimitBegin.c_str()),strlen(NewTimeLimitBegin.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.startDate.data, idInfoFore.TimeLimitBegin,sizeof(idInfoFore.TimeLimitBegin));
-		idCerInfoEx.startDate.dwSize = sizeof(idInfoFore.TimeLimitBegin);
-		//有效日期终止日
-
-		//std::string NewTimeLimitEnd = GetForeignTimeLimit(std::string(idInfoFore.TimeLimitEnd), ".");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(NewTimeLimitEnd.c_str()),strlen(NewTimeLimitEnd.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.endDate.data, idInfoFore.TimeLimitEnd,sizeof(idInfoFore.TimeLimitEnd));
-		idCerInfoEx.endDate.dwSize = sizeof(idInfoFore.TimeLimitEnd);
-		//头像信息sizeof
-
-		int len = sizeof(idCerInfoEx.photoPath.data) > strlen(idInfoFore.Image) ? strlen(idInfoFore.Image) : sizeof(idCerInfoEx.photoPath.data);
-		strncpy(idCerInfoEx.photoPath.data, idInfoFore.Image, len);
-		idCerInfoEx.photoPath.dwSize = len;
-		break;
-	}
-	case 2://港澳台居住证
-	{
-		IDInfoGAT idInfoGAT;
-		if (IDDIGITALCOPIER_NO_ERROR != GetIDInfoGATByCode(m_DeviceID, &idInfoGAT, const_cast<char*>(m_sHeadImageName.c_str()),1)) {
-			FormatDevErrorInfo(__FUNCTION__, __LINE__);
-			return Error_Unexpect;
-		}
-		//姓名
-		char utf8buf[UTF8_BUFF_SIZE] = {0};
-		//GbkToUtf8(idInfoGAT.name,strlen(idsizeofInfoGAT.name),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.name.data, idInfoGAT.name,sizeof(idInfoGAT.name));
-		idCerInfoEx.name.dwSize = sizeof(idInfoGAT.name);
-		//性别
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoGAT.sex,strlen(idInfoGAT.sex),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.sex.data, idInfoGAT.sex,sizeof(idInfoGAT.sex));
-		idCerInfoEx.sex.dwSize = strlen(idInfoGAT.sex);
-		//民族
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoGAT.nation,strlen(idInfoGAT.nation),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.nation.data, idInfoGAT.nation,sizeof(idInfoGAT.nation));
-		idCerInfoEx.nation.dwSize = sizeof(idInfoGAT.nation);
-		//生日
-		std::string Newbirthday = ForDataFormat(std::string(idInfoGAT.birthday), "for");
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(Newbirthday.c_str()),strlen(Newbirthday.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.birthday.data, idInfoGAT.birthday,sizeof(idInfoGAT.birthday));
-		idCerInfoEx.birthday.dwSize = sizeof(idInfoGAT.birthday);
-		//住址
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoGAT.address,strlen(idInfoGAT.address),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.address.data, idInfoGAT.address,sizeof(idInfoGAT.address));
-		idCerInfoEx.address.dwSize = sizeof(idInfoGAT.address);
-		//证件号
-		int len = sizeof(idCerInfoEx.idno.data) > strlen(idInfoGAT.number) ? strlen(idInfoGAT.number) : sizeof(idCerInfoEx.idno.data);
-		memcpy(idCerInfoEx.idno.data, idInfoGAT.number, sizeof(idInfoGAT.number));
-		idCerInfoEx.idno.dwSize =  sizeof(idInfoGAT.number);
-		//签发机关
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(idInfoGAT.department,strlen(idInfoGAT.department),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.department.data, idInfoGAT.department,sizeof(idInfoGAT.department));
-		idCerInfoEx.department.dwSize = sizeof(idInfoGAT.department);
-		//有效日期签发日
-		std::string beginTime = "", endTime = "";
-		std::string data = std::string(idInfoGAT.timeLimit);
-		if (data.length() > 0)
-		{
-			int location = data.find_first_of("-");
-			if (location > 0)
-			{
-				beginTime = data.substr(0, location);
-				beginTime = ForDataFormat(beginTime, ".");
-				endTime = data.substr(location + 1, data.length());
-				endTime = ForDataFormat(endTime, ".");
-			}
-		}
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(beginTime.c_str()),strlen(beginTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.startDate.data, idInfoGAT.timeLimit,16);
-		idCerInfoEx.startDate.dwSize = 18;
-		//有效日期终止日
-		memset(utf8buf,0,UTF8_BUFF_SIZE);
-		//GbkToUtf8(const_cast<char*>(endTime.c_str()),strlen(endTime.c_str()),utf8buf,UTF8_BUFF_SIZE);
-		memcpy(idCerInfoEx.endDate.data, idInfoGAT.timeLimit+16,18);
-		idCerInfoEx.endDate.dwSize = 18;
-		//头像信息
-		strcpy(idCerInfoEx.photoPath.data, idInfoGAT.Image);
-		idCerInfoEx.photoPath.dwSize = sizeof(idInfoGAT.Image);
-		//通行证号码
-		memcpy(idCerInfoEx.txzCode.data, idInfoGAT.passport,sizeof(idInfoGAT.passport));
-		idCerInfoEx.txzCode.dwSize = sizeof(idInfoGAT.passport);
-		//签发次数
-		memcpy(idCerInfoEx.issuedSN.data, idInfoGAT.issue,sizeof(idInfoGAT.issue));
-		idCerInfoEx.issuedSN.dwSize = sizeof(idInfoGAT.issue);
-		//证件类型
-		strcpy(idCerInfoEx.idType.data, "J");
-		idCerInfoEx.idType.dwSize = strlen("J");
-		break;
-	}
-	default:
-		break;
-	}
-	
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//	强制弹出身份证等证件
-//	Force ID Card to eject。
-//
-ErrorCodeEnum IDCerClassImpl::ForceIDEject()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	if (IDDIGITALCOPIER_NO_ERROR != BackIdCard(m_DeviceID)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-
-	SetAutoFeedEnable(m_DeviceID,0);
-
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-//	扫描证件并保留扫描文件到默认路径(dep目录下),证件正面使用“idfront.bmp”,证件反面使用“idback.bmp”
-//	Scan ID Card and save the image to the position(dep/),using default name "idfront.bmp" and "idback.bmp"。
-//
-ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	const int max_len = 16 * 1024 * 1024;//驱动接口最大支持16M
-	char* cFrontImgBuf = (char*)malloc(max_len);
-	char* cRearImgBuf = (char*)malloc(max_len);
-	int iFrontLen = max_len;
-	int iRearLen = max_len;
-	memset(cFrontImgBuf,0x0,max_len);
-	memset(cRearImgBuf,0x0,max_len);
-	//remove bmp
-	//remove(const_cast<char*>(m_sFrontPath.c_str()));
-	//remove(const_cast<char*>(m_sBackPath.c_str()));
-	ErrorCodeEnum errCode = Error_Succeed;
-	int ret = StartScanIdCard(m_DeviceID);
-	if (ret != IDDIGITALCOPIER_NO_ERROR) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		errCode = Error_Unexpect;
-		goto End;
-	}
-	ret = SavePicToMemory(m_DeviceID, cFrontImgBuf, cRearImgBuf, &iFrontLen, &iRearLen);
-	if (ret != IDDIGITALCOPIER_NO_ERROR) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		errCode = Error_Unexpect;
-		goto End;
-	}
-	ret = SavePicToFile(m_DeviceID, cFrontImgBuf, iFrontLen, const_cast<char*>(m_sFrontPath.c_str()), 0);
-	if (ret != IDDIGITALCOPIER_NO_ERROR) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		errCode = Error_Unexpect;
-		goto End;
-	}
-	ret = SavePicToFile(m_DeviceID, cRearImgBuf, iRearLen, const_cast<char*>(m_sBackPath.c_str()), 0);
-	if (ret != IDDIGITALCOPIER_NO_ERROR) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		errCode = Error_Unexpect;
-		goto End;
-	}
-End:
-	if(cFrontImgBuf){
-		free(cFrontImgBuf);
-	}
-	
-	if(cRearImgBuf){
-		free(cRearImgBuf);
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return errCode;
-}
-
-//	获取卡片是否插入或者取走
-//	Query if ID Card have been inserted or fetched。
-//	pos:
-//		-- 0,未检测到任何证件;1,证件在读卡器内部;2,证件在进卡口
-//
-ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	DEVSTATUSEx DevStatusEx;	
-	if (IDDIGITALCOPIER_NO_ERROR != GetDevStatusEx(m_DeviceID, &DevStatusEx)) {
-		FormatDevErrorInfo(__FUNCTION__, __LINE__);
-		return Error_Unexpect;
-	}
-	pos = 0;
-
-	if (DevStatusEx.iStatusMiddleSensorHaveCard > 0 ||
-		DevStatusEx.iStatusScanSensorHaveCard > 0 ||
-		DevStatusEx.iStatusCardJam > 0)
-	{
-		pos = 1;
-	}else if (DevStatusEx.iStatusInputSensorHaveCard > 0)
-	{
-		pos = 2;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" pos = "<<pos);
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-std::string IDCerClassImpl::ForDataFormat(std::string str, std::string frm)
-{
-	if (str.empty())
-	{
-		return"";
-	}
-	str.erase(0, str.find_first_not_of(" "));
-	str.erase(str.find_last_not_of(" ") + 1);
-	const char *pData = str.c_str();
-	if (pData == NULL)return"";
-	std::string newStr = "";
-
-	if (str.length() > 7)
-	{
-
-		std::string year(pData, 4);
-		pData += 4;
-		std::string mon(pData, 2);
-		pData += 2;
-		std::string data(pData, 2);
-
-		if (frm == ".")
-		{
-			newStr = year + "." + mon + "." + data;
-		}
-		else
-		{
-			newStr = year + "年" + mon + "月" + data + "日";
-		}
-	}
-	else
-	{
-		newStr = str;
-	}
-	return newStr;
-}
-
-std::string IDCerClassImpl::GetForeignTimeLimit(std::string time_, std::string format_)
-{
-	if (time_.length() < 8)return "";
-	std::string year = time_.substr(0, 4);
-	std::string yue = time_.substr(4, 2);
-	std::string day = time_.substr(6, 2);
-	std::string newData = year + format_ + yue + format_ + day;
-	return newData;
-}
-
-std::string IDCerClassImpl::GeSoFilePath(void* Fun)   
-{
-    Dl_info dl_info;
-    if(dladdr(Fun, &dl_info))
-	{
-		char *sFilePath = strdup(dl_info.dli_fname);
- 		char *pName = strrchr(sFilePath, '/');
-		*pName = '\0'; 
-		std::string sPath(sFilePath);
-		return sPath;
-	}
-	return "";
-}
-
-int IDCerClassImpl::GbkToUtf8(char *str_str, size_t src_len, char *dst_str, size_t dst_len)
-{
-	iconv_t cd;
-	char **pin = &str_str;
-	char **pout = &dst_str;
-
-	cd = iconv_open("utf8", "gbk");
-	if (cd == 0)
-		return -1;
-	memset(dst_str, 0, dst_len);
-	if (iconv(cd, pin, &src_len, pout, &dst_len) == -1)
-		return -1;
-	iconv_close(cd);
-	**pout = '\0';
-
-	return 0;
-}

+ 0 - 104
DevAdapter/grg/idcer.1.1/idcer_impl.h

@@ -1,104 +0,0 @@
-#ifndef LIBFRAMEWORK_IDCER_IMPL_H
-#define LIBFRAMEWORK_IDCER_IMPL_H
-
-#include "IDCerClass.h"
-#include <string>
-class IDCerClassImpl : public IDCerClass
-{
-public:
-	IDCerClassImpl();
-	~IDCerClassImpl();
-	//DeviceBaseClass
-	//	
-	//	Get category infomation about device.
-	//
-	ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-
-	//	Reset device.
-	//	Do the cleaning work and initialize device again in order to return to
-	//	the normal condition.
-	ErrorCodeEnum Reset();
-
-	//	
-	//	Close device and do the cleaning work.
-	//	ex. close connection,close port,release memery and so on
-	ErrorCodeEnum DevClose();
-
-	//	Get last error the device issued.
-	//	Error message must include explanatory memorandum ,the original error 
-	//	code and anything in favour of location problem.
-	ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-	//IDCerClass
-	//
-	//	Open device.
-	//	if usb device,set dwPort=0
-	//
-	ErrorCodeEnum DevOpen(DWORD dwPort);
-
-	//
-	//	Optional.
-	//	Open or close RF. 
-	//	Arguments:
-	//	- bControl:true:open RF,false close RF
-	//	-	对于吸入式,为true接收身份证插入,为false时弹出身份证并关闭接收身份证插入
-	//
-	ErrorCodeEnum IDCerRFControl(bool bControl);
-
-	//
-	//	Optional.
-	//	Certificate authentication.
-	//
-	ErrorCodeEnum IDCerAuthenticate();
-
-	//  即将废弃,请使用IDCerGetDataEx
-	//	Get Identity Card info.
-	//
-	ErrorCodeEnum IDCerGetData(IDCerInfo &idCerInfo);
-
-	//  获取证件信息,包括二代身份证、外国人永久居留证
-	//	Get Identity Card info.
-	//
-	ErrorCodeEnum IDCerGetDataEx(IDCerInfoEx &idCerInfoEx);
-
-
-	//新增身份证信息获取接口,用于获取身份证中存储的原始文字UCS2编码信息
-	ErrorCodeEnum IDCerGetDataEx2(IDCerInfoEx2 &idCerInfoEx);
-
-
-	//	强制弹出身份证等证件
-	//	Force ID Card to eject。
-	//
-	ErrorCodeEnum ForceIDEject();
-
-	//	扫描证件并保留扫描文件到默认路径(dep目录下),证件正面使用“idfront.bmp”,证件反面使用“idback.bmp”
-	//	Scan ID Card and save the image to the position(dep/),using default name "idfront.bmp" and "idback.bmp"。
-	//
-	ErrorCodeEnum ScanIDAndSaveImage();
-
-	//	获取卡片是否插入或者取走
-	//	Query if ID Card have been inserted or fetched。
-	//	pos:
-	//		-- 0,未检测到任何证件;1,证件在读卡器内部;2,证件在进卡口
-	//
-	ErrorCodeEnum QueryCardPos(int &pos);
-private:
-	DWORD m_DeviceID;
-	DevErrorInfo m_DevErrorInfo;
-	std::string m_sSoPath;
-	std::string m_sHeadImageName;
-	std::string m_sFrontPath;
-	std::string m_sBackPath;
-	
-private:
-	void ZeroDevErrorInfo(void);
-	void FormatDevErrorInfo(const char* funcname,int line);
-	std::string ForDataFormat(std::string str, std::string frm);
-	std::string GetForeignTimeLimit(std::string time_, std::string format_);
-	std::string GeSoFilePath(void* Fun);
-	int GbkToUtf8(char *str_str, size_t src_len, char *dst_str, size_t dst_len);
-};
-extern ErrorCodeEnum  CreateDevComponent(DeviceBaseClass *&baseObj);
-extern ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj);
-
-#endif //LIBFRAMEWORK_IDCER_IMPL_H

+ 0 - 111
DevAdapter/grg/pinpad.1.1/CBaseEPPDevDll.cpp

@@ -1,111 +0,0 @@
-#include "CBaseEPPDevDll.h"
-
-CBaseEPPDevDll::CBaseEPPDevDll(const char* p_pcLogicName)
-{
-    m_devhandle = hOpenLogicDevice(p_pcLogicName);
-}
-CBaseEPPDevDll::CBaseEPPDevDll()
-{
-    m_devhandle = hOpenLogicDevice("USERKEY");
-    if(!m_devhandle) {
-        printf("hOpenLogicDevice  failed\n");
-    }
-}
-CBaseEPPDevDll::~CBaseEPPDevDll()
-{
-    if(m_devhandle)vCloseLogicDevice(m_devhandle);
-}
-
-int CBaseEPPDevDll::iSetCommPara(tDevReturn* p_psStatus)
-{
-    return  ::iSetCommPara(m_devhandle, p_psStatus);
-}
-void CBaseEPPDevDll::vSetProcFun(const PROCFUN p_pvProcFun)
-{
-    ::vSetProcFun(m_devhandle, p_pvProcFun);
-}
-int CBaseEPPDevDll::iCloseComm()
-{
-    return ::iCloseComm(m_devhandle);
-}
-int CBaseEPPDevDll::iCloseComm2()
-{
-    return ::iCloseComm(m_devhandle);
-}
-
-int CBaseEPPDevDll::iSM_AlgorithmMode(BYTE& p_bySymmetry, BYTE& p_byAsymmetric,	BYTE& p_byHash,	tDevReturn* p_psStatus){
-    return ::iSM_AlgorithmMode(m_devhandle, p_bySymmetry,  p_byAsymmetric,	 p_byHash,	p_psStatus);
-}	
-int CBaseEPPDevDll::iLoadKeyPart(char *p_pcKeyName, char p_cPartType,char *p_pcKeyValue, short p_iKeyLen, tDevReturn *p_psStatus)
-{
-    return ::iLoadKeyPart(m_devhandle,  p_pcKeyName,  p_cPartType, p_pcKeyValue,  p_iKeyLen, p_psStatus);
-}
-int	CBaseEPPDevDll::iImportKey(char *p_pcKeyName, char *p_pcEncKeyName, char p_cUseMode,
-		char *p_pcKeyValue, short p_iKeyLen, char *p_pcKVVOrKeyAttr, 
-		tDevReturn *p_psStatus, char p_cKVVType)
-        {
-            return ::iImportKey(m_devhandle, p_pcKeyName, p_pcEncKeyName,  p_cUseMode,
-		p_pcKeyValue,  p_iKeyLen, p_pcKVVOrKeyAttr, 
-		p_psStatus,  p_cKVVType);
-        }
-
-        
-	int CBaseEPPDevDll::iStartPinEntry(char p_cPINMinLen, char p_cPINMaxLen, tDevReturn *p_psStatus)
-    {
-        return ::iStartPinEntry(m_devhandle, p_cPINMinLen,  p_cPINMaxLen, p_psStatus);
-    }
-	int CBaseEPPDevDll::iStartDataEntry(tDevReturn *p_psStatus)
-    {
-        return ::iStartDataEntry2(m_devhandle, p_psStatus);
-    }
-
-	int CBaseEPPDevDll::iDisableKeyEntry (tDevReturn *p_psStatus)
-    {
-        return ::iDisableKeyEntry(m_devhandle, p_psStatus);
-    }
-//bhj
-int CBaseEPPDevDll::iStopPinEntry(tDevReturn *p_psStatus)
-{
-    return ::iStopPinEntry(m_devhandle, p_psStatus);
-}
-
-
-int CBaseEPPDevDll::iCrypt(char *p_pcKeyName, 
-        char p_cAlgorithms,
-        char *p_pcInitVectorKeyName, 
-        char *p_pcInitVectorValue, short p_iInitVectorValueLen,   
-        char *p_pcData, short p_iDataLen,
-        char *p_pcResult, short &p_iResultLen, 
-        tDevReturn *p_psStatus)
-{
-    return ::iCrypt(m_devhandle, p_pcKeyName, 
-        p_cAlgorithms,
-        p_pcInitVectorKeyName, 
-        p_pcInitVectorValue,  p_iInitVectorValueLen,   
-        p_pcData,  p_iDataLen,
-        p_pcResult,  p_iResultLen, 
-       p_psStatus);
-}
-        
-int CBaseEPPDevDll::iSafeGetKVV(char* p_pcKeyName, int p_iKVVlen, char* p_pcKVV, tDevReturn *p_psStatus)
-{
-        return ::iSafeGetKVV(m_devhandle, p_pcKeyName, p_iKVVlen, p_pcKVV, p_psStatus);
-}
-
-int CBaseEPPDevDll::iGetDevInfo(char *p_pcInfo, tDevReturn* p_psStatus)
-{
-        return ::iGetDevInfo(m_devhandle, p_pcInfo, p_psStatus);
-}
-int CBaseEPPDevDll::iInit(tDevReturn* p_psStatus) 
-{
-        return ::iInit(m_devhandle, p_psStatus);
-}
-
-int CBaseEPPDevDll::iGetPinBlock(char *p_pcKeyName, char p_cPinLen,				 
-    char p_cPINFormat, char p_cPadding, char *p_pcCustomerData, 
-    char *p_pcPINBlock, tDevReturn *p_psStatus)
-{
-    return ::iGetPinBlock2(m_devhandle, p_pcKeyName, p_cPinLen,				 
-                p_cPINFormat,  p_cPadding, p_pcCustomerData, 
-                p_pcPINBlock, p_psStatus);
-}

+ 0 - 419
DevAdapter/grg/pinpad.1.1/CBaseEPPDevDll.h

@@ -1,419 +0,0 @@
-// OEPPDevDll.h: interface for the OEPPDevDll class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_CBASEEPPDEVDLL_H__AD09D37F_4DA5_465F_A396_F1B8EE6966A5__INCLUDED_)
-#define AFX_CBASEEPPDEVDLL_H__AD09D37F_4DA5_465F_A396_F1B8EE6966A5__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-#ifdef _WINDOWS
-#include "afxmt.h"
-#endif
-
-#include "ODevBase.h"
-#include "GRGEPPDev.h"
-
-class AFX_EXT_CLASS CBaseEPPDevDll  
-{
-public:
-	CBaseEPPDevDll(const char* p_pcLogicName);
-	CBaseEPPDevDll();
-	virtual ~CBaseEPPDevDll();
-public:		
-	//nt iGetKeyLength(char *p_pcKeyName, char *p_pcKeyLen, tDevReturn *p_psStatus);
-	//nt iDeleteOneKey(char *p_pcKeyName, tDevReturn	*p_psStatus);
-
-	//oid vOnDataReceived(char *p_pacData, int p_iLen);
-	
-	int iSetCommPara(tDevReturn* p_psStatus);					// 设置通讯串口
-	void vSetProcFun(const PROCFUN p_pvProcFun);
-	int iCloseComm();
-	int iCloseComm2();
-
-	int iInit(tDevReturn* p_psStatus) ;
-	//int iTest(char* p_pcTestInfo, tDevReturn *p_psStatus);	
-	//int iGetStatus(tDevReturn *p_psStatus) ;				
-	//int iGetDevStatus(tDevReturn *p_psStatus);
-	//
-	//int	iExcuteCommand(CONST char* p_pcCmdData,CONST UINT p_wCmdLen,char* p_pcRevData, 
-	//	UINT& p_wRevLen, tDevReturn *p_psStatus, UINT p_wWaitTime=3000);
-	//
-	//int iGetVersion(char *p_pcVersion);						
-	//int iGetDevVersion(char *p_pcVersion) ;			
-	//
-	int iGetDevInfo(char *p_pcInfo, tDevReturn* p_psStatus);
-	//int iGetCaps(char *p_pcCaps, tDevReturn *p_psStatus) ;		
-	////////////////////////////********************密钥管理命令集********************////////////////////////////
-	int	iImportKey(char *p_pcKeyName, char *p_pcEncKeyName, char p_cUseMode,
-		char *p_pcKeyValue, short p_iKeyLen, char *p_pcKVVOrKeyAttr, 
-		tDevReturn *p_psStatus, char p_cKVVType=KVV_ZERO);
-	//int	iBackupKey(char *p_pcKeyName, tDevReturn *p_psStatus);
-	//int iRestoreKey(char *p_pcKeyName, tDevReturn *p_psStatus);
-	//int iDeleteAllKey(tDevReturn *p_psStatus);
-	////////////////////////////********************加解密命令集**********************////////////////////////////
-	int iCrypt(char *p_pcKeyName, 
-		char p_cAlgorithms,
-		char *p_pcInitVectorKeyName, 
-		char *p_pcInitVectorValue, short p_iInitVectorValueLen,   
-		char *p_pcData, short p_iDataLen,
-		char *p_pcResult, short &p_iResultLen, 
-		tDevReturn *p_psStatus);
-	//int iGetChallenge(char *p_pcChallenge , tDevReturn *p_psStatus);
-	////////////////////////////******************PIN输入功能命令集*******************////////////////////////////
-	//int iSetTerminalKey (char *p_pcTerminalKey, tDevReturn *p_psStatus);
-	int iStartPinEntry(char p_cPINMinLen, char p_cPINMaxLen, tDevReturn *p_psStatus);
-	//int iStartPinEntry(char p_cPINMinLen, char p_cPINMaxLen, 
-	//					char *p_pcTerminalKey,tDevReturn *p_psStatus);
-	int iStopPinEntry(tDevReturn *p_psStatus);    //bhj
-	//int iGetPinBlock(char *p_pcKeyName, 
-	//	char p_cPINFormat, char p_cPadding, char *p_pcCustomerData, 
-	//	char *p_pcPINBlock, tDevReturn *p_psStatus);
-	int iGetPinBlock(char *p_pcKeyName, char p_cPinLen,				 
-		char p_cPINFormat, char p_cPadding, char *p_pcCustomerData, 
-		char *p_pcPINBlock, tDevReturn *p_psStatus);
-	////////////////////////////********************Data输入功能**********************////////////////////////////
-	//int iStartDataEntry(char *p_pcMac, char *p_pcChallenge , tDevReturn *p_psStatus);
-	int iStartDataEntry(tDevReturn *p_psStatus);
-	//int iStartFKEntry(tDevReturn *p_psStatus);
-	//	//////////////////////////**********通过键盘设置KEY命令集***********************////////////////////////////
-	//int iStartPWDEntry(char p_cPwdMinLen, char p_cPwdMaxLen, tDevReturn *p_psStatus);
-	//int iCheckPassWord(char p_cPWDName, tDevReturn *p_psStatus);
-	//int iConfirmPWDEntry (char p_cPwdMinLen, char p_cPwdMaxLen, tDevReturn *p_psStatus);
-	//int iSetPassWord(char p_cPWDName, tDevReturn *p_psStatus);
-	//int iStartKeyEntry(tDevReturn *p_psStatus);
-	//int iConfirmKeyEntry(tDevReturn *p_psStatus);
-	//int iSaveKeyPart(char p_cKeyPartName, char p_cKeyPartLen, char *p_pcKVV, 
-	//				tDevReturn *p_psStatus, char p_cKVVType=KVV_ZERO);
-	//int iSetKey(char *p_pcKeyName, char p_cCombinationMode, tDevReturn *p_psStatus);
-	////////////////////////////********************其他命令集************************////////////////////////////
-	int iDisableKeyEntry (tDevReturn *p_psStatus);
-	//int iTestKeyboard(tDevReturn *p_psStatus);
-	//int iGetKVV(char *p_pcKeyName, char *p_pcKVV, tDevReturn *p_psStatus, char p_cKVVType=KVV_ZERO);
-	//int iGetKeyAttribute(char *p_pcKeyName, char *p_pcKeyAttr, tDevReturn *p_psStatus);
-//
-    ////add by hying on V3.1.0
-    //int iSetMode(char *p_pcModeInfo,tDevReturn *p_psStatus);
-    //int iGetMode(char *p_pcModeInfo,tDevReturn *p_psStatus);
-	////end of add by hying
-//
-//
-    ////add by hying on V3.2.0
-	int iLoadKeyPart(char *p_pcKeyName, char p_cPartType,char *p_pcKeyValue, short p_iKeyLen, tDevReturn *p_psStatus);   	
-	//int iVerifyMac(char *p_pcKeyName, 
-	//	char p_cAlgorithms,
-	//	char *p_pcInitVectorKeyName, 
-	//	char *p_pcInitVectorValue, short p_iInitVectorValueLen,   
-	//	char *p_pcData, short p_iDataLen,
-	//	char *p_pcMAC, tDevReturn *p_psStatus);
-    //int iWriteUserInfo(char *p_pcUserInfo, BYTE p_iStartPoint, BYTE p_iInfoLen, tDevReturn *p_psStatus);//edit by CIVET on 3.2.0 2009-04-08 p_iInfoLen是一个字节,再增加一个起始地址的参数
-    //int iReadUserInfo(BYTE p_iStartPoint, BYTE p_iInfoLen, char *p_pcUserInfo, tDevReturn *p_psStatus);//edit by CIVET on 3.2.0 2009-04-08 p_iInfoLen是一个字节,再增加一个起始地址的参数
-//
-	////////////////////////////********************法国NAC协议************************////////////////////////////
-	//int iNACLoadKGp(tKeyId p_sKGpId, tKeyValue p_sKGpValue,
-	//	                char *p_pcThumbprint,tDevReturn *p_psStatus);
-	//int iNACRenewalKGp(tKeyId p_sKGpId, tKeyValue p_sKGpValue, tSignature p_sKGpSign, 
-	//	                char *p_pcThumbprint, tDevReturn *p_psStatus);
-	//int iNACGetKGpId(tKeyId& p_sKGpId, tDevReturn *p_psStatus);
-	//int iNACGenerateKDp(char p_cInitOrUpdate, int p_iKeyLen,
-	//		    tKeyId& p_sKDpId, tKeyValue& p_sKDpValue,tSignature& p_sKDpSign,tDevReturn *p_psStatus);
-	//int iNACVerifySign (tSignature p_sSignData, tDevReturn *p_psStatus);
-	//int iNACLoadKTK(tKeyId p_sKDpID, tKTKEncrypte p_sKTKCryptogram,	tSignature p_sKTKSignature, 
-	//			tDevReturn	*p_psStatus);
-	////end of add by hying
-//
-	////////////////////////////********************WINCOR RKL协议************************////////////////////////////
-	//int iGetEPPPublicKey(char *p_pcKeyName,tPublicKey& p_sEPPPublicKey,tSign& p_sSignEPPPK,tDevReturn *p_psStatus);
-	///*
-	//output
-	//char *p_pcKeyName:EPP公钥名,取值"EPK"
-	//tPublicKey p_sEPPPublicKey:EPP公钥值
-	//tSign p_sSignEPPPK:GRG私钥对EPP公钥的签名
-	//		该签名的生成是在键盘生产时生成的,由GRG私钥对EPP公钥签名生成,然后和公钥值一起写入到EPP键盘中。
-	//		该接口只是将存在EPP中的EPP公钥及其签名读出来返回。
-	//*/
-	//int iLoadBankPublicKey(char *p_pcKeyName,tPublicKey p_sBankPublicKey,tSign p_sSignBankPK,tDevReturn *p_psStatus);
-	///*
-	//input
-	//char *p_pcKeyName:Bank公钥名,取值"BPK"
-	//tPublicKey p_sBankPublicKey:Bank公钥值
-	//tSign p_sSignBankPK:GRG私钥对Bank公钥的签名
-	//		该签名是银行通过其他安全途径(如邮件等)从GRG处获取,由GRG私钥对Bank公钥签名生成,
-	//		该签名和公钥值一起通过该接口输入。
-	//		签名前的数据格式应该是:(0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || Hash
-	//*/
-	//int iImportRSASignedDesKey(char *p_pcKeyName,char *p_pcDecryptKeyName,char *p_pcSignKeyName,tKeyEncrypt p_sKeyEncrypt,tSign p_sSignKeyEncrypt,char p_cKVVType,char *p_pcKVV,tDevReturn *p_psStatus);
-	///*
-	//input
-	//char *p_pcKeyName:准备安装的密钥名
-	//char *p_pcDecryptKeyName:解密密钥名,即EPP私钥,取值"ESK"
-	//char *p_pcSignKeyName:签名验证密钥名,即Bank公钥,取值"BPK"
-	//tKeyEncrypt p_sKeyEncrypt:用EPP公钥加密后的DES key
-	//			用EPP_Public_Key对DES密钥进行加密的信息格式为:
-	//			00||BT(公钥操作为02)||PS(对于02型,填充串为假散列生成的非0值)||00||D(要安装的DES密钥明文值)
-	//tSign p_sSignKeyEncrypt:用Bank私钥对加密后数据的签名
-	//			用Bank_Private_Key对加密后数据进行签名的信息格式为:
-	//			00 || BT(01,表示私钥操作) || PS(填充0xFF) || 00 || Data(加密后的数据的hash值)
-	//*/
-//
-	//int iDelRSAKey(char *p_pcKeyName,tDevReturn	*p_psStatus);
-	///*
-	//input
-	//char *p_pcKeyName:Bank公钥名,取值"BPK"
-	//*/
-	//int iGetSignature(char *p_pcEPPID,tSign& p_sSign, tDevReturn* p_psrStatus);
-	///*
-	//output
-	//char *p_pcEPPID:8个字节
-	//tSign& p_sSign:GRG私钥对EPPID的签名
-	//*/
-//
-	//int iImportRSASignedDesKeyUsingRandom(char *p_pcKeyName, char *p_pcDecryptKeyName,char *p_pcSignKeyName, tKeyEncrypt p_sKeyEncrypt,tSign p_sSignKeyEncrypt, char p_cKVVType,char *p_pcKVV, tDevReturn *p_psStatus);
-	//int iGetEppIDWithEppIDSign(char *p_pEppID,tSign& p_sSign, tDevReturn *p_psStatus);
-	//int iGetSerialNoWithSerialSign(char *p_pSerialNo,tSign& p_sSign, tDevReturn *p_psStatus);
-	//int iGetSerialNo(char *p_pSerialNo, tDevReturn *p_psStatus);
-	//int iGetATMSerialNumber(char* p_pcATMSerial, tDevReturn* p_psStatus);
-	//int iSetATMSerialNumber(char *p_pcATMSerial, tDevReturn *p_psStatus);
-//
-	//int iFirmwareDownload(const char* p_pcDownloadPath, const int p_iMode, tDevReturn* p_psStatus); // 设置在线升级的文件目录路径 [8/26/2010 zhtfeng]
-	//int iGetCurFileProgress(tEPP_PDL_Progress *p_psPdlProgress); // 获取文件下载进度 [8/26/2010 zhtfeng]
-//
-	//// 获取设备类型
-	//int iGetDevType(int* p_piDevType, tDevReturn* p_psStatus);
-	//// 删除银行公钥(需要先输入Password获得权限)
-	//int iDelRSAKeyAfterPWDCheck(char* p_pcKeyName, BYTE p_byDCType, tDevReturn* p_psStatus);
-	//// 锁定(使用设备前需要先锁定才能正常使用 锁定后要解锁再移除,否则密钥全部丢失)
-	//int iRemovalLock(BYTE p_byDCType, tDevReturn* p_psStatus);
-	//// 解锁(若设备已被锁定 移除设备前需要先解锁)
-	//int iRemovalUnlock(BYTE p_byDCType, tDevReturn* p_psStatus);
-	//// 获得移除检测相关状态记录
-	//int iGetRemovalRecord(tEPP_RemovalRecord* p_psRemovalRecord, tDevReturn* p_psStatus);
-//
-	////***********************RKL with Certificates***********************//
-	//// 获取EPP的加密公钥和随机数效验公钥
-	//int iGetEPPPublicKeyToCA(const char* p_pcKeyName, tPublicKey* p_psEPPPublicKey, tDevReturn* p_psStatus);
-	//
-	//// 需要SP层解析证书的接口
-	//// 安装公钥证书
-	//int iLoadPublicKeyCertificate(const tEPP_PKCertificate* p_psPublicKeyCertificate,
-	//	char* p_pcHashData, int* p_piHashLen, tDevReturn* p_psStatus);
-	//// 获取EPP公钥证书
-	//int iGetEppPublicKeyCertificate(const char* p_pcCertificateName,
-	//	char* p_pcCertificateData, int* p_piCertificateLen, tDevReturn* p_psStatus);
-	//// 替换CA公钥证书
-	//int iReplaceCAPublicKeyCertificate(const tEPP_PKCertificate* p_psCAPublicKeyCertificate,
-	//	char* p_pcHashData, int* p_piHashLen, tDevReturn* p_psStatus);	
-	//// 解密要安装的DES密钥
-	//int iImportDesKeyByCertificate(const char* p_pcDesKeyName, const tEPP_MKCertificate* p_psMKCertificate, int p_iIHostLen, 
-	//	int* p_piDesKeyLen, char* p_pcIHost, int* p_piIHostLen, tDevReturn* p_psStatus);
-	//// 结束密钥信息输入
-	//int iEndKeyExchange(const tEPP_SignalCertTemplate* p_psSignalCertTemplate,
-	//	char* p_pcSignal, int* p_piSignalLen, tDevReturn* p_psStatus);
-	//
-	//// 不需要SP层解析证书的接口(未实现)
-	//// 安装公钥证书
-	//int iLoadPublicKeyCertificate(const char* p_pcCertificateData, int p_iCertificateLen,
-	//	char* p_pcHashData, int* p_piHashLen, tDevReturn* p_psStatus);
-	//// 替换CA公钥证书
-	//int iReplaceCAPublicKeyCertificate(const char* p_pcCertificateData, int p_iCertificateLen,
-	//	char* p_pcHashData, int* p_piHashLen, tDevReturn* p_psStatus);
-	//// 解密要安装的DES密钥
-	//int iImportDesKeyByCertificate(const char* p_pcDesKeyName, const char* p_pcMKCertificate, int p_iMKCertificateLen, int p_iIHostLen,
-	//	int* p_piDesKeyLen, char* p_pcIHost, int* p_piIHostLen, tDevReturn* p_psStatus);
-	//int iEndKeyExchange(const char* p_pcSignalCertTemplate, int p_iSignalCertTemplateLen, char* p_pcSignal,
-	//	int* p_piSignalLen, tDevReturn* p_psStatus);
-//
-	//// 返回密钥3字节KVV 不支持对密钥自身加密
-	int iSafeGetKVV(char* p_pcKeyName, int p_iKVVlen, char* p_pcKVV, tDevReturn *p_psStatus);
-//
-	//// add by kgxue [2012-8-14] begin
-	//// 更换加密PIN的密钥,重新加密PIN
-	//int iReEncryptPin(const tEPP_ReEncryptPin* p_psReEncryptPin, BYTE* p_pcNewPinBlock, tDevReturn *p_psStatus);
-	//
-	//// 获取密码状态(判断是否第一次使用键盘)
-	//int iGetPwdStatus(BYTE p_byPwdName, BYTE& p_byPwdStatus, tDevReturn* p_psStatus);
-	//
-	//// 明文安装证书公钥
-	//int iLoadCaPubKeyByPlaintext(const tEPP_LoadCaPubKey* p_psLoadPubKey, tDevReturn* p_psStatus);
-	//
-	//// 恢复证书公钥
-	//int iRecoveryCaPubKey(const tEPP_RecoveryPubKey* p_psRecoveryPubKey, BYTE* p_pbyCaPubKey, 
-	//	BYTE& p_byCaPubKeyLength, tDevReturn* p_psStatus);
-//
-	////安装主机公钥KGp的HASH值到EPP,HASH值固定20字节。
-	//int iNAC_LoadPubKeyHash(BYTE* p_pbyHash, BYTE p_byHashLength, tDevReturn* p_psStatus);
-	//
-	////下面为德国ZKA项目接口
-	//int iZKA_SaveOrComparePin(BYTE p_byType,BYTE& p_byCompRet,tDevReturn* p_psStatus);
-	//int iZKA_GetKeyVersion(BYTE p_byKeyNo, BYTE& p_byKeyVersionAmount, BYTE& p_byKeyVersion1,
-	//	BYTE& p_byKeyVersion2, tDevReturn* p_psStatus);
-	//int iZKA_GenerateWorkKey(tZKA_KeyVersion p_sKeyVersion, BYTE* p_pbyEF_ID, 
-	//	BYTE p_byEF_ID_Length, tDevReturn* p_psStatus);
-	//int iZKA_GenerateMasterKey(tZKA_KeyVersion p_sKeyVersion, BYTE* p_byKeyName,
-	//	BYTE p_byKeyNameLength, BYTE* p_pbyInRandom, BYTE p_byInRandomLength, BYTE* p_pbyOutRandom,
-	//	BYTE& p_byOutRandomLength, tDevReturn* p_psStatus);
-	//int iZKA_GetPinBlock(BYTE p_byFormat, BYTE* p_pbyTransCode,	BYTE p_byTransCodeLength, 
-	//BYTE* p_pbyPinBlock, BYTE& p_byPinBlockLength, tZKA_KeyVersion& p_sKeyVersion, tDevReturn* p_psStatus);
-	//int iZKA_GenerateEnc(BYTE* p_pbyRandom, BYTE p_byRandomLength, BYTE* p_pbyEnc, BYTE& p_byEncLength,
-	//	BYTE& p_byKeyId, tZKA_KeyVersion& p_sKeyVersion, tDevReturn* p_psStatus);
-	//int iZKA_GenerateKS(BYTE* p_pbyEnc,	BYTE p_byEncLength, tDevReturn* p_psStatus);
-	//int iZKA_GenerateEncPin(BYTE* p_pbyPinBlock, BYTE& p_byPinBlockLength, tDevReturn* p_psStatus);
-	//int iZKA_CalculateMacGK(tZKA_KeyVersion p_sKeyVersion, BYTE p_byAlgorithm, BYTE* p_pbyInitialValue,	BYTE p_byInitialLength,
-	//	BYTE* p_pbyData, UINT p_uiDataLength, BYTE* p_pbyMac, BYTE& p_pbyMacLength, tDevReturn* p_psStatus);
-	//int iZKA_CalculateMacOPT(tZKA_KeyVersion p_sKeyVersion, BYTE* p_pbyInitialValue, BYTE p_byInitialLength,
-	//	BYTE* p_pbyData, UINT p_uiDataLength, BYTE* p_pbyMac, BYTE& p_pbyMacLength, tDevReturn* p_psStatus);
-	//int iZKA_VerifyMacGK(tZKA_KeyVersion p_sKeyVersion, BYTE p_byAlgorithm, BYTE* p_pbyInitialValue, BYTE p_byInitialLength, 
-	//	BYTE* p_pbyMac, BYTE p_pbyMacLength, BYTE* p_pbyData, UINT p_uiDataLength, tDevReturn* p_psStatus);
-	//int iZKA_VerifyMacOPT(tZKA_KeyVersion p_sKeyVersion, BYTE* p_pbyInitialValue, BYTE p_byInitialLength, 
-	//	BYTE* p_pbyMac, BYTE p_pbyMacLength, BYTE* p_pbyData, UINT p_uiDataLength, tDevReturn* p_psStatus);
-	//int iZKA_GetSerialNo(tZKA_KeyVersion& p_sKeyVersion, BYTE* p_pbySerialNo,
-	//	BYTE& p_bySerialNoLength, tDevReturn* p_psStatus);
-	//int iZKA_GetRandom(BYTE p_byRandomId, BYTE p_byKeyId, tZKA_KeyVersion& p_sKeyVersion,
-	//	BYTE* p_pbyRandom, BYTE& p_byRandomLength, tDevReturn* p_psStatus);
-	//int iZKA_ImportRandom(BYTE p_byRandomId, BYTE p_byKeyId, BYTE* p_pbyRandom,
-	//	BYTE p_byRandomLength, tZKA_KeyVersion& p_sKeyVersion, tDevReturn* p_psStatus);
-	//int iZKA_ImportKinit(tZKA_Kinit p_sKinit, tDevReturn* p_psStatus);
-	//int iZKA_ImportDataQueue(BYTE* p_pbyQueueId, BYTE p_byQueueIdLength, tZKA_LdiData* p_psLdiData,
-	//	BYTE p_byLdiAmount,BYTE* p_pbyMac, BYTE p_byMacLength, tDevReturn* p_psStatus);
-	//int iZKA_ExportDataQueue(BYTE& p_byLdiAmount, tZKA_ExportLdi* p_psLdiData, tDevReturn* p_psStatus);
-	//int iZKA_GetHsmStatus(BYTE& p_byGetStatus, tDevReturn* p_psStatus);
-	//int iZKA_ServiceQuit(tDevReturn* p_psStatus);
-	//int iMigrateKeyValue(tEPP_MigrateKeyValue* p_psMigrateKeyValue,	tDevReturn* p_psStatus);
-	////===========================================================================//
-	////功	能:  使用之前的KS密钥解密PINBLOCK,并使用当前的KS重新加密PINBLOCK
-	////作	者:cbsheng 2014-12-10
-	////输	入:数据类型   		变量名						说明
-	////			tZKA_KeyVersion p_sKeyVersion				密钥号,密钥版本号
-	////			BYTE*			p_pbyPinBlock				输入pinblock 8位
-	////			BYTE			p_byPinBlockLength			pinblock长度
-	////			BYTE*			p_pbyEncRandom				加密随机数 16位
-	////			BYTE*			p_pbyDncRandom				解密随机数 16位
-	////输	出:数据类型   		变量名						说明
-	////			BYTE*			p_pbyRetPinBlock			输出pinblock
-	////===========================================================================//
-	//int iZKA_ReGetPinBlock(tZKA_KeyVersion p_sKeyVersion,BYTE* p_pbyPinBlock, BYTE p_byPinBlockLength,
-	//	BYTE* p_pbyEncRandom, BYTE* p_pbyDncRandom,BYTE* p_pbyRetPinBlock, tDevReturn* p_psStatus);
-//
-	////  [5/20/2013 lmqi]
-	int iSM_AlgorithmMode(BYTE& p_bySymmetry, BYTE& p_byAsymmetric,	BYTE& p_byHash,	tDevReturn* p_psStatus);	
-	//int iSM3_CalculateHashValue(
-	//	BYTE* p_pbyData, //用于计算杂凑值的数据
-	//	UINT p_uiDataLength, //数据长度,每次最多256字节
-	//	BYTE* p_pbyResult, //杂凑值
-	//	UINT& p_uiResultLength, //杂凑值长度,固定32字节
-	//	tDevReturn* p_psStatus
-	//	);
-	//int iSM2_Encrypt(
-	//	tKeyValue* p_psKeyValue,	//SM2公钥信息								   
-	//	BYTE* p_pbyData,			//待加密数据
-	//	UINT p_uiDataLength,		//待加密数据长度(32~256字节)
-	//	BYTE* p_pbyResult,			//加密后的数据
-	//	UINT& p_uiResultLength,	//加密后的数据长度(32~256字节)
-	//	tDevReturn* p_psStatus
-	//	);	
-	//int iSM2_Decrypt(
-	//	BYTE* p_pbyExponent,		// 私钥指数
-	//	UINT p_uiExponentLength,	// 私钥指数长度(32字节)
-	//	BYTE* p_pbyData,			//待解密数据
-	//	UINT p_uiDataLength,		//待解密数据长度(32~256字节)
-	//	BYTE* p_pbyResult,			// 解密后的数据
-	//	UINT& p_uiResultLength,	//  解密后的数据长度(32~256字节)
-	//	tDevReturn* p_psStatus
-	//	);
-	//int iSM2_GenerateKey(
-	//	UINT p_uiKeyLength, // 生成密钥信息的长度(32字节)
-	//	BYTE* p_pbyExponent, // 私钥指数
-	//	UINT p_uiExponentLength, // 私钥指数长度(32字节)
-	//	tKeyValue* p_psPublicKey, // 公钥信息
-	//	tDevReturn* p_psStatus
-	//	);
-	//int iSM2_SetPara(tSM2_SetPara* p_psSetPara, tDevReturn* p_psStatus);
-	//int iSM_ClearSerialNo(tDevReturn* p_psStatus);
-	//int iSM_GetDevVersion(BYTE* p_pbyVersion, BYTE& p_byVersionLength, tDevReturn* p_psStatus);
-	//
-	//int iSSF33_CryptData(
-	//	BYTE p_byEncryptOrDecrypt, //'D' = 解密;'E' = 加密
-	//	BYTE* p_pbyKey, //密钥
-	//	BYTE p_byKeyLength, //密钥长度
-	//	BYTE* p_pbyData, //数据
-	//	BYTE p_byDataLength, //数据长度
-	//	bool p_bParaType,//00H = 内部参数;01H = 外部参数
-	//	BYTE* p_pbyPara, //外部参数。p_bParaType为01H有效;p_bParaType为00H忽略
-	//	BYTE p_byParaLength, //外部参数长度。p_bParaType为01H有效;p_bParaType为00H忽略
-	//	BYTE* p_pbyResult, //结果
-	//	BYTE& p_byResultLength, //结果长度								 
-	//	tDevReturn* p_psStatus
-	//	);
-	//
-	//int iSM4_CbcCryptData(
-	//	BYTE p_byEncryptOrDecrypt, //'D' = 解密;'E' = 加密
-	//	BYTE* p_pbyKey,		//密钥
-	//	BYTE p_byKeyLength,	//密钥长度
-	//	BYTE* p_pbyData,		//数据
-	//	BYTE p_byDataLength,	//数据长度
-	//	BYTE* p_pbyIvValue,	//IV值
-	//	BYTE p_byIvLength,	//IV值长度
-	//	BYTE* p_pbyResult,	//结果
-	//	BYTE& p_byResultLength, //结果长度								 
-	//	tDevReturn* p_psStatus
-	//	);
-	//
-	//int iSM4_EcbCryptData(
-	//	BYTE p_byEncryptOrDecrypt, //'D' = 解密;'E' = 加密
-	//	BYTE* p_pbyKey,		//密钥
-	//	BYTE p_byKeyLength,	//密钥长度
-	//	BYTE* p_pbyData,		//数据
-	//	BYTE p_byDataLength,	//数据长度
-	//	BYTE* p_pbyResult,	//结果
-	//	BYTE& p_byResultLength, //结果长度								 
-	//	tDevReturn* p_psStatus
-	//	);
-//
-	//int iSM2_SignData(
-	//	BYTE* p_pbySkExponent,		// 私钥指数
-	//	UINT p_uiSkExponentLength,	// 私钥指数长度(32字节)
-	//	BYTE* p_pbyPkModulo,		// 公钥的模的值
-	//	UINT p_uiPkModuloLength,	// 公钥的模的长度
-	//	BYTE* p_pbyPkExponent,		// 公钥指数
-	//	UINT p_uiPkExponentLength,	// 公钥指数长度(32字节)
-	//	BYTE* p_pbySignID,			// 签名者ID的值
-	//	BYTE p_bySignIDLength,		// 签名者ID的长度
-	//	BYTE* p_pbySignData,		// 签名数据
-	//	BYTE p_bySignDataLength,	// 签名数据长度
-	//	BYTE* p_pbyResult,			//结果
-	//	BYTE& p_byResultLength,		//结果长度								 
-	//	tDevReturn* p_psStatus
-	//	);	
-	//
-	//int iSM2_VerifyData(
-	//	BOOL p_byMode,
-	//	BYTE* p_pbyPkModulo,		// 公钥的模的值
-	//	UINT p_uiPkModuloLength,	// 公钥的模的长度
-	//	BYTE* p_pbyPkExponent,		// 公钥指数
-	//	UINT p_uiPkExponentLength,	// 公钥指数长度(32字节)
-	//	BYTE* p_pbySignID,			// 签名者ID的值
-	//	BYTE p_bySignIDLength,		// 签名者ID的长度
-	//	BYTE* p_pbySignData,		// 签名数据
-	//	BYTE p_bySignDataLength,	// 签名数据长度
-	//	BYTE* p_pbyResult,			// 签名结果
-	//	BYTE p_byResultLength,		// 签名结果长度								 
-	//	tDevReturn* p_psStatus
-	//	);
-//
-	//// 读写用户信息 [6/14/2013 lmqi]
-	//int iWriteUserInfoEx(WORD p_wStart, WORD p_wToWrite, char *p_pcUserInfo, tDevReturn *p_psStatus);
-	//int iReadUserInfoEx(WORD p_wStart, WORD& p_wRead, char *p_pcUserInfo, tDevReturn *p_psStatus);
-//
-	////---------------------农行测试案例指令 ------------------------------------------------------- [6/17/2020 ljjun10]
-	//int iGenerate_RSA_KEY(char *p_szRSAName,tDevReturn *p_psStatus);						//产生RSK密钥对
-	//int iRSA_Crypt_DATA(tEPP_CRYPT_DATA *p_pCryptData,tDevReturn *p_psStatus);				//RSA加解密
-	//int iLoad_RSA_Public_Key(tEPP_RSA_PUBLIC_KEY p_tRSAKey,tDevReturn *p_psStatus);			//明文安装公钥及签名签名数据
-	//int iImport_RSA_Encrypted_MKey(tEPP_RSA_ENCRYPTED_MKEY *p_tKey,tDevReturn *p_psStatus);	//基于RSA下载主密钥
-	//// 获取EPP的加密公钥和随机数效验公钥
-	//int iGetEPPPublicKeyToCAEx(const char* p_pcKeyName, tEPP_PublicKeyEx* p_psEPPPublicKey, tDevReturn* p_psStatus);
-private:
-HANDLE  m_devhandle;
-};
-
-#endif // !defined(AFX_CBASEEPPDEVDLL_H__AD09D37F_4DA5_465F_A396_F1B8EE6966A5__INCLUDED_)

+ 0 - 35
DevAdapter/grg/pinpad.1.1/CMakeLists.txt

@@ -1,35 +0,0 @@
-# 声明模块名称的前缀和名称
-rvc_dev_define_module("PinPad")
-
-# rvc_dev_config_library 内需要使用这三个参数,用于拼接输出的适配器文件名称
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-# 包含要编译的实现文件,rvc_dev_config_library 内使用
-set(${MODULE_PREFIX}_SRCS SHARED
-        pinpad_impl.cpp   
-#PinPadImpl.cpp
-GrgPinPadImpl.cpp
-CBaseEPPDevDll.cpp
-        )
-
-# 适配器工程需要通过此宏替代 add_library
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-# ${MODULE_FULL_NAME} 是 TAGET 名称,在 rvc_dev_config_library 中定义
-#target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_DEPS_DIR}/cmbsz.sample")
-
-#target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-#target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}")
-
-#target_link_libraries(${MODULE_FULL_NAME} EPPDevDll ${VENDOR_LOG_LIB_NAME})
-
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-#target_link_libraries(${MODULE_FULL_NAME} EPPDevDll log4vendor)
-target_link_libraries(${MODULE_FULL_NAME} grgEPPDevDll ${VENDOR_LOG_LIB_NAME})
-
-#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 1993
DevAdapter/grg/pinpad.1.1/GrgPinPadImpl.cpp

@@ -1,1993 +0,0 @@
-
-
-
-#include "GrgPinPadImpl.h"
-#include <stdio.h>//必要头文件和依赖顄1�7
-#include <stdlib.h>
-#include <dlfcn.h>
-#include <unistd.h>
-#include "log4vendor.h"
-
-#define APCSyncCall(func, para) func((void*)para)
-#define SetEvent(xxx)
-#define ResetEvent(xxx)
-tDevReturn DevRetInfo[8] = {0};
-static CGrgPinPadImpl *pCGrgPinPadImpl = NULL;
-
-#define SM4 0x01 
-
-#define SM3 0x01 
-
-#define SM2 0x01 
-
-#define Sleep(mscount) usleep(1000*mscount)
-
-const static unsigned short InputKeyTimeOut = 60;
-
-HANDLE m_hTimerManagerThread = NULL;
-int mode = 0;
-
-/*void epptest()
-{
-	OEPPDevDll *epp = new OEPPDevDll();
-	if(!epp) {
-		printf("==epp new failed\n");
-		return;
-	}
-	tDevReturn l_psStatus;
-	int ret = epp->iSetCommPara(l_psStatus);
-	if( 0 != ret) {
-		printf("==setcomm failed:%d\n",ret);
-		//exit(ret);
-	}
-	else {
-		printf("==setcomm ok.\n");
-	}
-	delete epp;
-}*/
-
-static std::string int2str(int nTemp)  
-{
-	std::stringstream stream;
-	stream << nTemp;
-	return stream.str();
-}
-static void unpack_(char *pSrc, char * pDest, int iSrcLen) 
-{ 
-    unsigned char ch1, ch2; 
-    for( int i = 0; i < iSrcLen; i++ ) 
-    { 
-        ch1 = (pSrc[i] & 0xF0) >> 4; 
-        ch2 = pSrc[i] & 0x0F; 
-        ch1 += ( (ch1 > 9 ) ? 0x37 : 0x30 ); 
-        ch2 += ( (ch2 > 9 ) ? 0x37 : 0x30 ); 
-        pDest[i*2] = ch1; 
-        pDest[i*2 + 1] = ch2; 
-    } 
-}
-//%2
-static void pack_(char *pSrc, char *pDest, int iSrcLen)
-{
-    char ch1, ch2;	
-    for( int i = 0; i < (iSrcLen / 2); i++ )
-    {
-        ch1 = pSrc[i*2];
-        ch2 = pSrc[i*2 + 1];
-        (ch1 >= 'a' && ch1 <= 'z') ? (ch1 -= 32) : (ch1);
-        (ch2 >= 'a' && ch2 <= 'z') ? (ch2 -= 32) : (ch2);
-        ch1 -= ( (ch1 > '9' ) ? 0x37 : 0x30 );
-        ch2 -= ( (ch2 > '9' ) ? 0x37 : 0x30 );
-        pDest[i] = ( ch1 << 4 ) | ch2;
-    }
-}
-
-//CUserIoDll useIo;
-#if 0 // windows
-HMODULE GetSelfModuleHandle()  
-{  
-    MEMORY_BASIC_INFORMATION mbi;
-    return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);  
-}
-
-std::string GetLibPath(HMODULE p_hMod)
-{
-	char lpszPath[MAX_PATH] = {0};
-	GetModuleFileNameA(p_hMod,lpszPath,MAX_PATH);  
-
-	int len = strlen(lpszPath);
-	if(len>=1)
-	{
-		int i=0;
-		for (i=len -1;i>=0;i--)
-		{
-			if (lpszPath[i] =='\\')
-			{
-				break;
-			}
-		}
-		lpszPath[i+1] =0;
-	}
-	return lpszPath;
-}
-#else
-HMODULE GetSelfModuleHandle()
-{
-	return NULL;
-}
-
-std::string GetLibPath(HMODULE p_hMod)
-{
-    std::string wdir;
-    Dl_info dl_info;
-    dladdr((void*)GetLibPath, &dl_info);
-
-    std::string path(dl_info.dli_fname);
-    wdir = path.substr(0, path.find_last_of('/') + 1);
-
-    return  wdir;
-}
-#endif
-
-CGrgPinPadImpl::CGrgPinPadImpl() :
-m_EppDll(NULL),
-nIsListenExit(false),
-nIsListenStop(true),
-m_bKeyValue(0),
-nIsConnecting(false),
-nIskeyReadstatus_(false),
-m_hEvent(NULL),
-PinKeyLength(6),
-m_KeyReadMode(E_NULL_MODE),
-m_nWorkKeyMode(0),
-m_bActiveWkKeyNum(0),
-m_bActiveMsKeyNum(0),
-isRunExit(false),
-isPlaySound(false),
-m_PinPadDllPath(L"")
-{
-	memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-
-	memset(m_tAccountInfo.account,0,MAX_ACCOUNT_LEN);
-	m_tAccountInfo.dwAccLen = 0;
-
-	m_eEncryptMethod = EPP_ALGO_METHOD_3DES;
-	m_eMacAlgorithm = EPP_MAC_ALGO_ASNIX99;
-	m_ePinAlgorithm = EPP_PIN_ALGO_ISO9564_1_ANSI;
-	m_eEcbCbcMode = EPP_ALGO_MODE_DEC_ECB;
-
-
-	m_EppDll = new CBaseEPPDevDll();
-	//LOG4VTM(INFO,"++++begin iSetCommPara");
-    //int ret = m_EppDll->iSetCommPara(DevRetInfo); 
-	//LOG4VTM(INFO,"++++begin iSetCommPara end");
-
-
-    m_hTimerManagerThread = NULL;
-    pCGrgPinPadImpl = this;
-
-    LOG4VTM(INFO,"Enter CGrgPinPadImpl::CGrgPinPadImpl");
-
-    if (NULL == m_hTimerManagerThread)
-    {
-        //m_hTimerManagerThread = CreateThread(NULL, 0, OnProThreadEnter, this, 0, NULL);
-	}
-	
-	m_EppDll->vSetProcFun(UpdataProFun);
-
-//    m_pCRunQueueAPC = new CRunQueueAPC();
- 
-	// for test play wav
-	//isPlaySound=true;
-	//mPlaySound();
-    
-//    m_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
-
-   LOG4VTM(INFO,"Return CGrgPinPadImpl::CGrgPinPadImpl");
-}
-
-
-CGrgPinPadImpl::~CGrgPinPadImpl(void)
-{
-    LOG4VTM(INFO,"Enter CGrgPinPadImpl::~CGrgPinPadImpl");
-	nIsListenStop = false;
-	nIsListenExit = true;
-    isRunExit = true;
-//    SetEvent(m_eventExit);
-    //CloseRunThread();
-//    if(m_eventExit!=NULL)
-//    {
-//        CloseHandle(m_eventExit);
- //       m_eventExit = NULL;
- //   } 
-
-  /*  if(m_pCRunQueueAPC!=NULL)
-    {
-        delete m_pCRunQueueAPC;
-        m_pCRunQueueAPC = NULL;
-    }*/
-	if(m_hEvent!=NULL)
-    {
-        //CloseHandle(m_hEvent);
-        m_hEvent = NULL;
-    } 
-    isPlaySound = false;
-
-	delete m_EppDll;
-	m_EppDll = NULL;
-
-    LOG4VTM(INFO,"CGrgPinPadImpl::~CGrgPinPadImpl success");
-}
-
-ErrorCodeEnum CGrgPinPadImpl::CreateRunThread()
-{
-    
-/*	if (NULL==m_pCRunQueueAPC)
-	{
-		return Error_NoTarget;
-	}*/
-    return Error_Succeed;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::DevOpen(DWORD dwPort,DWORD dwBaudRate)
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"enter CGrgPinPadImpl::DevOpen");
-    if(nIsConnecting)
-    {
-        DevClose();
-    }
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        UpdatalastErr(Error_NoTarget,Error_NoTarget,"CreateRunThread Error!",__FUNCTION__,__LINE__);
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(DevOpenWrapper,&l_apcRet);
-   
-    if(l_apcRet.m_iReturn!=0)
-    {
-        UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"DevOpen Error!",__FUNCTION__,__LINE__);
-        return Error_DevConnFailed;
-    }
-    LOG4VTM(INFO,"CGrgPinPadImpl::DevOpen success");
-    nIsConnecting = true;
-    
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::DevOpenWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = NULL;
-    pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-    LOG4VTM(INFO,"begin iSetCommPara");
-    int ret = pPinPad->m_EppDll->iSetCommPara(DevRetInfo); 
-   // LOG4VTM(INFO,"end iSetCommPara");
-
-    if(ret == 0)
-    {
-        BYTE SM4_B = 0x00;
-        BYTE SM2_B = 0x00;
-        BYTE SM3_B = 0x00;
-        ret = pPinPad->m_EppDll->iSM_AlgorithmMode(SM4_B,SM2_B,SM3_B,DevRetInfo);//
-    }
-	
-    char buffer[32] = {0};
-    pAPCRet->m_iReturn = ret;
-    if(pAPCRet->m_hEvent)
-    {
-        SetEvent(pAPCRet->m_hEvent);
-    }
-}
-
-ErrorCodeEnum CGrgPinPadImpl::KeyRead(BYTE &ch)
-{
-    LOG4VTM_FUNCTION();
-	ch = 0;
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevCommFailed,Error_DevCommFailed,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevCommFailed;
-    }
-	if(!nIskeyReadstatus_)return Error_InvalidState;
-	
-    return GetKeyValue(ch);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::SetParam(SetParamTypeEnum eType,SetParamValueEnum eValue)
-{
-    LOG4VTM_FUNCTION();
-    std::string str = "CGrgPinPadImpl::SetParam SetParamTypeEnum: "+int2str(eType)+" SetParamValueEnum"+int2str(eValue);
-  //  LOG4VTM(INFO,Lstr.c_str());
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-	if(eType == EPP_PT_SET_ENCRYPT_METHOD)
-	{
-		m_eEncryptMethod = eValue;
-	}else if(eType == EPP_PT_SET_MAC_ALGORITH)
-	{
-		m_eMacAlgorithm = eValue;
-	}else if(eType == EPP_PT_SET_PIN_ALGORITH)
-	{
-		m_ePinAlgorithm = eValue;
-	}else if(eType == EPP_PT_SET_ECB_CBC_MODE)
-	{
-		m_eEcbCbcMode = eValue;
-	}
-    return Error_Succeed;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::SetAccNo(AccountInfo accInfo)
-{
-    LOG4VTM_FUNCTION();
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-	LOG4VTM(INFO,"CGrgPinPadImpl::SetAccNo");
-    char buffer[32] = {0};
-    unpack_((char*)accInfo.account,buffer,accInfo.dwAccLen);
-	std::string str = "AccountInfo dwAccLen:"+int2str(accInfo.dwAccLen);
-	
-	memcpy(m_tAccountInfo.account,accInfo.account,accInfo.dwAccLen);
-	m_tAccountInfo.dwAccLen = accInfo.dwAccLen;
-    LOG4VTM(INFO,"CGrgPinPadImpl::SetAccNo success");
-    return Error_Succeed;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::LoadMasterKey(MasterKeyParam masterKey)
-{
-    LOG4VTM_FUNCTION();
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-	LOG4VTM(INFO,"CGrgPinPadImpl::LoadMasterKey");
-	int mkLen = strlen((char*)masterKey.key);
-    if(mkLen > 32)
-    {
-        UpdatalastErr(Error_Param,Error_Param,"MasterKey size only{16,24}",__FUNCTION__,__LINE__);
-        return Error_Param;
-    }
-    
-	if((mkLen!=32 && mkLen!=48))
-	{
-        UpdatalastErr(Error_Param,Error_Param,"MasterKey size only{16,24}",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread error!",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-	std::string info = "LoadMasterKey smFlag: "+int2str(masterKey.smFlag)+"dwSN:"+int2str(masterKey.dwSN)+" masterKey len:"+int2str(mkLen);
-	//LOG4VTM(INFO,Linfo.c_str());
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-    /*MasterKeyParam newMsKey = {0};
-    newMsKey.dwSN = masterKey.dwSN;
-    newMsKey.smFlag = masterKey.smFlag;
-    memcpy(newMsKey.key,buffer,mkLen);*/
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_iReturn = -1;
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &masterKey;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        UpdatalastErr(Error_NoTarget,Error_NoTarget,"CreateRunThread Error!",__FUNCTION__,__LINE__);
-        return Error_NoTarget;
-    }
-    APCSyncCall(LoadMasterKeyWrapper,&l_apcRet);
-    //QueueUserAPC(LoadMasterKeyWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-    //CloseRunThread();
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"LoadMasterKey::iLoadKeyPart Error!",__FUNCTION__,__LINE__);
-		return Error_Exception;
-	}
-    LOG4VTM(INFO,"CGrgPinPadImpl::LoadMasterKey success");
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::LoadMasterKeyWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    MasterKeyParam *pmasterKey = (MasterKeyParam*)pAPCRet->m_p1;
-    int ret = Error_Exception;
-    char buffer[8] = {0};
-    if(pmasterKey->dwSN<10)
-    {
-        sprintf(buffer, "MK%d", pmasterKey->dwSN);
-    }else
-    {
-        sprintf(buffer, "M%d", pmasterKey->dwSN);
-    }
-
-    unsigned char PackKeybuffer[30] = {0};
-    int mkLen = strlen((char*)pmasterKey->key);
-    pack_((char*)pmasterKey->key,(char*)PackKeybuffer,mkLen);
-    mkLen = mkLen/2;
-
-    std::string info = "LoadMasterKey  WorkKey len:"+int2str(mkLen);
-   // LOG4VTM(INFO,Linfo.c_str());
-
-    int l_iResult = FAIL;
-    //获取设备状��1�7�1�7 
-    int tryCnt =0;
-    bool bl = false;
-    int TRYCNT = 3;
-
-    int mainTryCnt = 0;
-    bool isLoadPartOk = false;
-
-    while(mainTryCnt < TRYCNT)
-    {
-        while(tryCnt < TRYCNT)
-        {
-            ret = pPinPad->m_EppDll->iLoadKeyPart(buffer,'A',(char*)PackKeybuffer,mkLen,DevRetInfo);
-            if(SUCCESS != ret) {
-                //int openRet = pPinPad->m_EppDll->iCloseComm();
-               // tDevReturn devRet[8] = {0};
-                Sleep(100);
-               // openRet = pPinPad->m_EppDll->iSetCommPara(devRet);
-               // pPinPad->LOG4VTM(ERROR,"iLoadKeyPart a ones error");
-                ++tryCnt;
-            }
-            else
-            {
-                bl =true;
-                break;
-            }
-        }
-
-        if(ret!=0)
-        {
-            isLoadPartOk = false;
-            break;
-        }
-
-        l_iResult = FAIL;
-        //获取设备状��1�7�1�7 
-        tryCnt =0;
-        bl = false;
-        while(tryCnt < TRYCNT)
-        {
-            char x_park[32] = {0};
-            ret = pPinPad->m_EppDll->iLoadKeyPart(buffer,'X',(char*)x_park,mkLen,DevRetInfo);
-            if(SUCCESS != ret) {
-                if(DevRetInfo[0].iLogicCode == 40042)
-                {
-                    break;
-                }else
-                {
-                    //int openRet = pPinPad->m_EppDll->iCloseComm();
-                   // tDevReturn devRet[8] = {0};
-                    Sleep(100);
-                   // openRet = pPinPad->m_EppDll->iSetCommPara(devRet);
-//                    pPinPad->LOG4VTM(ERROR,"iLoadKeyPart x ones error");
-                    ++tryCnt;
-                }
-                
-            }
-            else
-            {
-                isLoadPartOk = true;
-                bl =true;
-                break;
-            }
-        }
-        if(isLoadPartOk)
-        {
-            break;
-        }
-        mainTryCnt++;
-    }
-
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::LoadWorkingKey(WorkKeyParam wkKey)
-{
-   LOG4VTM_FUNCTION();
-   LOG4VTM(INFO,"endter CGrgPinPadImpl::LoadWorkingKey");
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-	int mkLen = strlen((char*)wkKey.key);
-    
-	if(mkLen!=32&&mkLen!=48)
-	{
-        UpdatalastErr(Error_Param,Error_Param,"WorkingKey size only{16,24}",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-	std::string info = "LoadWorkingKey smFlag: "+int2str(wkKey.smFlag)+" MasterSN: "+int2str(wkKey.dwMasterSN)+" WorkSN:"+int2str(wkKey.dwWorkingSN)+" WorkKey len:"+int2str(mkLen);
-//	LOG4VTM(INFO,Linfo.c_str());
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-    /*WorkKeyParam wkKey_new = {0};
-    memcpy(&wkKey_new,&wkKey,sizeof(wkKey_new));
-    memset(wkKey_new.key,0,sizeof(wkKey_new.key));
-    memcpy(wkKey_new.key,buffer,mkLen);
-*/
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &wkKey;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(LoadWorkingKeyWrapper,&l_apcRet);
-    //QueueUserAPC(LoadWorkingKeyWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-    //CloseRunThread();
-
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"LoadMasterKey::LoadWorkingKey Error!",__FUNCTION__,__LINE__);
-		return Error_Exception;
-	}
-     LOG4VTM(INFO,"CGrgPinPadImpl::LoadWorkingKey success");
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::LoadWorkingKeyWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    WorkKeyParam *pWorkKey = (WorkKeyParam*)pAPCRet->m_p1;
-    int ret = Error_Exception;
-    int mkLen = strlen((char*)pWorkKey->key);
-    int retMode = -1;
-
-    std::string MsName = "MK0";
-    char WkBuff[8] = {0};
-    char WkBuff_ver[8] = {0};
-    if(pWorkKey->smFlag==1)
-    {
-        //国密
-        MsName = "MK1";
-        sprintf(WkBuff, "W%02d", pWorkKey->dwWorkingSN+10);
-        sprintf(WkBuff_ver, "W%02d", pWorkKey->dwWorkingSN+30);
-        BYTE SM4_B = 0x01;
-        BYTE SM2_B = 0x01;
-        BYTE SM3_B = 0x01;
-        
-        retMode = pPinPad->m_EppDll->iSM_AlgorithmMode(SM4_B,SM2_B,SM3_B,DevRetInfo);//
-    }else if(pWorkKey->smFlag==0)
-    {
-        std::string MsName = "MK0";
-        sprintf(WkBuff, "W%02d", pWorkKey->dwWorkingSN);
-        sprintf(WkBuff_ver, "W%02d", pWorkKey->dwWorkingSN+20);
-        BYTE SM4_B = 0x00;
-        BYTE SM2_B = 0x00;
-        BYTE SM3_B = 0x00;
-        retMode = pPinPad->m_EppDll->iSM_AlgorithmMode(SM4_B,SM2_B,SM3_B,DevRetInfo);//
-    }
-
-    char PackKeybuffer[30] = {0};
-    pack_((char*)pWorkKey->key,PackKeybuffer,mkLen);
-    mkLen = mkLen/2;
-    std::string info = "LoadWorkingKey  WorkKey len:"+int2str(mkLen);
-//    LOG4VTM(INFO,Linfo.c_str());
-    char kvv_buf[8] = {0};
-    int l_iResult = FAIL;
-    //获取设备状��1�7�1�7 
-    int tryCnt =0;
-    bool bl = false;
-    int TRYCNT = 3;
-    if(pWorkKey->dwWorkingSN == 0)
-    {//pin加密
-
-        while(tryCnt < TRYCNT)
-        {
-            ret = pPinPad->m_EppDll->iImportKey(WkBuff,(char*)MsName.c_str(),0x04,(char*)PackKeybuffer,mkLen,kvv_buf,DevRetInfo,0);
-            if(SUCCESS != ret) {
-                int openRet = pPinPad->m_EppDll->iCloseComm2();
-                tDevReturn devRet[8] = {0};
-                Sleep(500);
-                openRet = pPinPad->m_EppDll->iSetCommPara(devRet);
-//                pPinPad->LOG4VTM(ERROR,"iImport pin Key a ones error");
-                ++tryCnt;
-            }
-            else
-            {
-                bl =true;
-                break;
-            }
-        }
-
-        if(ret!=0)
-        {
-            pAPCRet->m_iReturn = ret;
-            SetEvent(pPinPad->m_hEvent);
-            return;
-        }
-
-         l_iResult = FAIL;
-         //获取设备状��1�7�1�7 
-         tryCnt =0;
-         bl = false;
-         TRYCNT = 3;
-         while(tryCnt < TRYCNT)
-         {
-             ret = pPinPad->m_EppDll->iImportKey(WkBuff_ver,(char*)MsName.c_str(),0x01,(char*)PackKeybuffer,mkLen,kvv_buf,DevRetInfo,0);
-             if(SUCCESS != ret) {
-                 //int openRet = pPinPad->m_EppDll->iCloseComm();
-                // tDevReturn devRet[8] = {0};
-                 Sleep(500);
-                // openRet = pPinPad->m_EppDll->iSetCommPara(devRet);
-//                 pPinPad->LOG4VTM(ERROR,"iImportKey pin  two error");
-                 ++tryCnt;
-             }
-             else
-             {
-                 bl =true;
-                 break;
-             }
-         }
-
-         if(ret!=0)
-         {
-             pAPCRet->m_iReturn = ret;
-             SetEvent(pPinPad->m_hEvent);
-             return;
-         }        
-  
-    }else if(pWorkKey->dwWorkingSN == 1)
-    {//数据加密
-
-        l_iResult = FAIL;
-        //获取设备状��1�7�1�7 
-        tryCnt =0;
-        bl = false;
-        TRYCNT = 3;
-        while(tryCnt < TRYCNT)
-        {
-            ret = pPinPad->m_EppDll->iImportKey(WkBuff,(char*)MsName.c_str(),0x01,(char*)PackKeybuffer,mkLen,kvv_buf,DevRetInfo,0);
-            if(SUCCESS != ret) {
-                //int openRet = pPinPad->m_EppDll->iCloseComm();
-                //tDevReturn devRet[8] = {0};
-                Sleep(500);
-                //openRet = pPinPad->m_EppDll->iSetCommPara(devRet);
-//                pPinPad->LOG4VTM(ERROR,"iImport data Key a ones error");
-                ++tryCnt;
-            }
-            else
-            {
-                bl =true;
-                break;
-            }
-        }
-
-        if(ret!=0)
-        {
-            pAPCRet->m_iReturn = ret;
-            SetEvent(pPinPad->m_hEvent);
-            return;
-        } 
-        
-    }else if(pWorkKey->dwWorkingSN == 2)
-    {
-        ret = pPinPad->m_EppDll->iImportKey(WkBuff,(char*)MsName.c_str(),0x02,(char*)PackKeybuffer,mkLen,kvv_buf,DevRetInfo,0);
-    }else if(pWorkKey->dwWorkingSN == 3)
-    {//作为MAC校验密钥使用 
-        ret = pPinPad->m_EppDll->iImportKey(WkBuff,(char*)MsName.c_str(),0x20,(char*)PackKeybuffer,mkLen,kvv_buf,DevRetInfo,0); 
-    }
-
-    char str_kvv[32]={0};
-    unpack_(kvv_buf,str_kvv,4);
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::ActiveWorkingKey(DWORD dwMkSN,DWORD dwWkSN)
-{
-    LOG4VTM_FUNCTION();
-    std::string str = "CGrgPinPadImpl::ActiveWorkingKey dwMkSN:"+int2str(dwMkSN)+" dwWkSN"+int2str(dwWkSN);
-    LOG4VTM(INFO,str);
-  
-		
-    m_bActiveMsKeyNum = dwMkSN;
-    m_bActiveWkKeyNum = dwWkSN;
-
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &dwMkSN;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        UpdatalastErr(Error_NoTarget,Error_NoTarget,"CreateRunThread Error!",__FUNCTION__,__LINE__);
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(ActiveWorkingKeyWrapper,&l_apcRet);
-   
-    if(l_apcRet.m_iReturn!=0)
-    {
-        UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"LoadMasterKey::ActiveWorkingKey Error!",__FUNCTION__,__LINE__);
-        return Error_Exception;
-    }
-
-    LOG4VTM(INFO,"ActiveWorkingKey success");
-    return Error_Succeed;
-}
-void CALLBACK CGrgPinPadImpl::ActiveWorkingKeyWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    BYTE mode = *((BYTE*)(pAPCRet->m_p1));
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    int ret = 1;
-    if(mode==0)
-    { //3des
-        BYTE SM4_B = 0x00;
-        BYTE SM2_B = 0x00;
-        BYTE SM3_B = 0x00;
-        ret = pPinPad->m_EppDll->iSM_AlgorithmMode(SM4_B,SM2_B,SM3_B,DevRetInfo);//
-    }else if(mode==1)
-    { //国密
-        BYTE SM4_B = 0x01;
-        BYTE SM2_B = 0x01;
-        BYTE SM3_B = 0x01;
-        ret = pPinPad->m_EppDll->iSM_AlgorithmMode(SM4_B,SM2_B,SM3_B,DevRetInfo);//
-    }
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::StartPinInput(BYTE byLen)
-{
-    LOG4VTM_FUNCTION();
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevNotAvailable;
-    }
-	LOG4VTM(INFO,"Enter CGrgPinPadImpl::StartPinInput");
-	if(byLen<4)
-	{
-        UpdatalastErr(Error_Param,Error_Param,"byLen<4",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    m_keyVtrAll.clear();  //2022.12.07
-    PinKeyLength = byLen;
-	std::string Info = "byLen$1�7 "+int2str(byLen)+" AccountInfo.dwAccLen:"+int2str(m_tAccountInfo.dwAccLen);
-//	LOG4VTM(INFO,LInfo.c_str());
-	LOG4VTM(INFO,(Info));
-
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-	
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &byLen;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    SetKeyValue(0x00);
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(StartPinInputWrapper,&l_apcRet);
-    
-    m_KeyReadMode = E_NULL_MODE;
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"StartPinInput Error!",__FUNCTION__,__LINE__);
-		return Error_Exception; 
-	}
-    LOG4VTM(INFO,"CGrgPinPadImpl::StartPinInput success");
-    m_KeyReadMode = E_PIN_MODE;
-    nIskeyReadstatus_ = true;
-    isPlaySound = true;
-
-    //m_CUserIoDll.Open(m_PinPadDllPath,0,0);
-//    m_CUserIoDll.SetLightStatus(20,3,1);
-	return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::StartPinInputWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    BYTE byLen = *((BYTE*)(pAPCRet->m_p1));
-    int ret = pPinPad->m_EppDll->iStartPinEntry(byLen,byLen,DevRetInfo);
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::StartPinInputConfirm(BYTE byLen)
-{
-    LOG4VTM_FUNCTION();
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevNotAvailable;
-    }
-	LOG4VTM(INFO,"Enter CGrgPinPadImpl::StartPinInputConfirm");
-	if(byLen<4)
-	{
-        UpdatalastErr(Error_Param,Error_Param,"byLen<4",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    PinKeyLength = byLen;
-	std::string Info = "byLen$1�7 "+int2str(byLen);
-	LOG4VTM(INFO,(Info));
-
-//	LOG4VTM(INFO,LInfo.c_str());
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-	
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &byLen;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    SetKeyValue(0x00);
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(StartPinInputWrapper,&l_apcRet);
-    //QueueUserAPC(StartPinInputWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-    //CloseRunThread();
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"StartPinInputConfirm Error!",__FUNCTION__,__LINE__);
-		return Error_Exception; 
-	}
-    nIskeyReadstatus_ = true;
-    m_KeyReadMode = E_PIN_MODE;
-//    LOG4VTM(INFO,"Enter CGrgPinPadImpl::StartPinInputConfirm");
-    isPlaySound = true;
-    //m_CUserIoDll.Open(m_PinPadDllPath,0,0);
-//    m_CUserIoDll.SetLightStatus(20,3,1);
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::StartPinInputConfirmWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    BYTE byLen = *((BYTE*)(pAPCRet->m_p1));
-    int ret = pPinPad->m_EppDll->iStartPinEntry(byLen,byLen,DevRetInfo);
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::StartPlainInput()
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"Enter CGrgPinPadImpl::StartPlainInput");
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    SetKeyValue(0x00);
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(StartPlainInputWrapper,&l_apcRet);
-    //QueueUserAPC(StartPlainInputWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-    //CloseRunThread();
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"StartPlainInput Error!",__FUNCTION__,__LINE__);
-		return Error_Exception; 
-	}
-    m_KeyReadMode = E_PLAIN_MODE;
-	nIskeyReadstatus_ = true;
-    LOG4VTM(INFO,"CGrgPinPadImpl::StartPlainInput success");
-
-    isPlaySound = true; 
-    //m_CUserIoDll.Open(m_PinPadDllPath,0,0);
-//    m_CUserIoDll.SetLightStatus(20,3,1);
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::StartPlainInputWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    int ret = pPinPad->m_EppDll->iStartDataEntry(DevRetInfo);
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::StopInput()
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"CGrgPinPadImpl::StopInput");
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevNotAvailable;
-    }
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(StopInputWrapper,&l_apcRet);
-    //QueueUserAPC(StopInputWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-    //CloseRunThread();
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"StopInput Error!",__FUNCTION__,__LINE__);
-		return Error_Exception; 
-	}
-    m_KeyReadMode = E_NULL_MODE;
-	nIskeyReadstatus_ = false;
-    LOG4VTM(INFO,"CGrgPinPadImpl::StopInput success");
-    //m_CUserIoDll.Open(m_PinPadDllPath,0,0);
-//    m_CUserIoDll.SetLightStatus(20,3,0);
-    isPlaySound = true;
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::StopInputWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    int ret = pPinPad->m_EppDll->iDisableKeyEntry(DevRetInfo);
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::GetPinBlock(PinBlock &block)
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"CGrgPinPadImpl::GetPinBlock");
-	memset(&block, 0, sizeof(block));
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevNotAvailable;
-    }
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    ErrorCodeEnum e = GrgGetpinBlock(PinKeyLength);
-    if(e!=Error_Succeed)
-    {
-        return e;
-    }
-    
-	LOG4VTM(INFO,"Enter CGrgPinPadImpl::GetPinBlock");
-	if(m_tPinBlockInfo.mPinBlockLen == 0)
-	{
-        UpdatalastErr(Error_InvalidState,Error_InvalidState,"mCreateThread Error",__FUNCTION__,__LINE__);
-		LOG4VTM(ERROR,"GetPinBlock and Pinblock size=0");
-		return Error_InvalidState;
-	}
-	memcpy(block.data,m_tPinBlockInfo.PinBlockBuff,m_tPinBlockInfo.mPinBlockLen);
-	block.dwSize = m_tPinBlockInfo.mPinBlockLen;
-    PinKeyLength = 0;
-    m_tPinBlockInfo.Init();
-    LOG4VTM(INFO,"CGrgPinPadImpl::GetPinBlock success");
-    return Error_Succeed;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::EncryptData(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo)
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"Enter CGrgPinPadImpl::EncryptData");
-	memset(&destInfo,0,sizeof(destInfo));
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevNotAvailable;
-    }
-	if(srcInfo.data==NULL||srcInfo.dwSize<1)
-	{
-        UpdatalastErr(Error_Param,Error_Param,"srcInfo.data==NULL||srcInfo.dwSize<1",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    
-
-	std::string str1 = "EncryptData m_eEcbCbcMode:"+int2str(m_eEcbCbcMode);
-	LOG4VTM(INFO,(str1));
-
-	
-	std::string str = "EncryptData dataLEn:"+int2str(srcInfo.dwSize);//+".data:"+ *byteToHexStr(srcInfo.data,srcInfo.dwSize);
-	LOG4VTM(INFO,str);
-
-
-
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    BYTE mode = 0x01;
-    if(m_eEcbCbcMode==EPP_ALGO_MODE_ECB||m_eEcbCbcMode==EPP_ALGO_MODE_3DEC_ECB)
-    {
-        mode = 0x01;
-
-		std::string str = "EncryptData mode:0x01";
-		LOG4VTM(INFO,str);
-
-    }else if(m_eEcbCbcMode==EPP_ALGO_MODE_CBC||m_eEcbCbcMode==EPP_ALGO_MODE_3DEC_CBC)
-    {
-        mode = 0x02;
-		std::string str = "EncryptData mode:0x02";
-		LOG4VTM(INFO,str);
-
-		
-    }else
-    {
-		std::string str = "--- err EncryptData out ";
-		LOG4VTM(INFO,str);
-        UpdatalastErr(Error_NotImpl,Error_NotImpl," err EncryptData out",__FUNCTION__,__LINE__);
-        return Error_NotImpl;
-    }
-    
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &mode;
-    l_apcRet.m_p2 = &srcInfo;
-    l_apcRet.m_p3 = &destInfo;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(EncryptDataWrapper,&l_apcRet);
-    //QueueUserAPC(EncryptDataWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-//    CloseRunThread();
-    if(l_apcRet.m_iReturn!=0)
-	{
-		std::string str = "--- err EncryptData::iCrypt Error!----- ";
-		LOG4VTM(INFO,str);
-		LOG4VTM(INFO,"CGrgPinPadImpl::EncryptData fail");
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"EncryptData::iCrypt Error!",__FUNCTION__,__LINE__);
-		return Error_Exception;
-	}
-	std::string str2 = "return EncryptData destInfo dataLEn:"+int2str(destInfo.dwSize);//+".data:"+ *byteToHexStr(destInfo.data,destInfo.dwSize);
-	LOG4VTM(INFO,(str2));
-
-    LOG4VTM(INFO,"CGrgPinPadImpl::EncryptData success");
-	return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::EncryptDataWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-    short lenOut = 0;
-    BYTE mode = *((BYTE*)pAPCRet->m_p1);
-    EnDecryptInfo *srcInfo = (EnDecryptInfo*)pAPCRet->m_p2;
-    EnDecryptInfo *destInfo = (EnDecryptInfo*)pAPCRet->m_p3;
-    //
-    char pInitData[16] = {0};
-    BYTE buffOut[MAX_EN_DECRYPT_DATA_SIZE] = {0};
-    int ret = -1;
-
-    char sreBuffer[MAX_EN_DECRYPT_DATA_SIZE*2] = {0};
-    pack_((char*)srcInfo->data,sreBuffer,srcInfo->dwSize);
-    int DataLen = (srcInfo->dwSize)/2;
-    char workName[8] = {0};
-    int addDataLen = 0;
-    if(pPinPad->m_bActiveMsKeyNum == 0)
-    {
-        //3des
-        if(pPinPad->m_bActiveWkKeyNum==0)
-        {
-            //PIN
-            sprintf(workName, "W%02d", pPinPad->m_bActiveWkKeyNum+20);
-        }else
-        {
-            sprintf(workName, "W%02d", pPinPad->m_bActiveWkKeyNum);
-        }
-        char pInitData[8] = {0};
-		memset(pInitData, 0, sizeof(pInitData));
-		
-        ret = pPinPad->m_EppDll->iCrypt((char*)workName,mode,(char*)"",pInitData,sizeof(pInitData),sreBuffer,DataLen,(char*)buffOut,lenOut,DevRetInfo);
-    }else if(pPinPad->m_bActiveMsKeyNum == 1)
-    {//sm4
-        if(pPinPad->m_bActiveWkKeyNum==0)
-        {
-            //PIN
-            if(DataLen<16)
-            {
-                addDataLen = 16 - DataLen;
-                DataLen = 16;
-            }
-            sprintf(workName, "W%02d", pPinPad->m_bActiveWkKeyNum+30);
-            //ret = pPinPad->m_EppDll->iSafeGetKVV(workName,8,(char*)buffOut,DevRetInfo);
-        }else
-        {
-            sprintf(workName, "W%02d", pPinPad->m_bActiveWkKeyNum+10);
-            char pInitData[16] = {0};
-			memset(pInitData, 0, sizeof(pInitData));
-            ret = pPinPad->m_EppDll->iCrypt((char*)workName,mode,(char*)"",pInitData,sizeof(pInitData),sreBuffer,DataLen,(char*)buffOut,lenOut,DevRetInfo);
-        }
-        char pInitData[16] = {0};
-		memset(pInitData, 0, sizeof(pInitData));
-        ret = pPinPad->m_EppDll->iCrypt((char*)workName,mode,(char*)"",pInitData,sizeof(pInitData),sreBuffer,DataLen,(char*)buffOut,lenOut,DevRetInfo);
-    }
-
-    if(ret!=0)
-    {
-        pAPCRet->m_iReturn = ret;
-        SetEvent(pPinPad->m_hEvent);
-    }
-    //C7326C5FD87D7DC64D49CA387F0DE082
-    //addDataLen 8
-	memset(sreBuffer,0,sizeof(sreBuffer));
-	unpack_((char*)buffOut,sreBuffer,lenOut);
-	memset(destInfo,0,sizeof(EnDecryptInfo));
-	memcpy(destInfo->data,sreBuffer,lenOut*2);
-	destInfo->dwSize = lenOut*2;
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo)
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"enter CGrgPinPadImpl::MacEncrypt");
-	memset(&destInfo,0,sizeof(destInfo));
-    if(!nIsConnecting)
-    {
-        LOG4VTM(INFO,"Dev Not open!");
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        return Error_DevNotAvailable;
-    }
-	if(srcInfo.data==NULL||srcInfo.dwSize<1)
-	{
-        UpdatalastErr(Error_Param,Error_Param,"srcInfo.data==NULL||srcInfo.dwSize<1",__FUNCTION__,__LINE__);
-		return Error_Param;
-	}
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-
-	std::string str = "MacEncrypt dataLEn:"+int2str(srcInfo.dwSize);
-
-	LOG4VTM(INFO,str);
-
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-	BYTE mode = 0x04;
-	if(m_eMacAlgorithm == EPP_MAC_ALGO_ASNIX99)
-	{
-		mode = 0x04;
-	}else if(m_eEcbCbcMode == EPP_MAC_ALGO_PBOC)
-	{
-		return Error_NotImpl;
-	}else if(m_eEcbCbcMode == EPP_PIN_ALGO_ISO9564_1_ANSI)
-	{
-		mode = 0x08;
-	}else
-	{
-        UpdatalastErr(Error_NotImpl,Error_NotImpl," err EncryptData out",__FUNCTION__,__LINE__);
-		return Error_NotImpl;
-	}
-	
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &mode;
-    l_apcRet.m_p2 = &srcInfo;
-    l_apcRet.m_p3 = &destInfo;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        UpdatalastErr(Error_NoTarget,Error_NoTarget," err CreateRunThread",__FUNCTION__,__LINE__);
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(EncryptDataWrapper,&l_apcRet);
-    //QueueUserAPC(EncryptDataWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-//    CloseRunThread();
-	//int ret = m_EppDll->iCrypt((char*)m_ActiveWkKey.c_str(),mode,"SV1",pInitData,strlen(pInitData),(char*)srcInfo.data,srcInfo.dwSize,(char*)buffOut,lenOut,DevRetInfo);
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"EncryptData::iCrypt Error!",__FUNCTION__,__LINE__);
-		return Error_Exception;
-	}
-	std::string str2 = "return MacEncrypt destInfo dataLEn:"+int2str(destInfo.dwSize);
-	LOG4VTM(INFO,(str2));
-    LOG4VTM(INFO,"CGrgPinPadImpl::MacEncrypt success");
-	return Error_Succeed;
-}
-
-int CGrgPinPadImpl::GetEncryptFunc()
-{
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-    return 0x03;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-    LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"Enter CGrgPinPadImpl::GetDevCategory");
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-
-	TAPCReturn	l_apcRet;
-	memset(&l_apcRet,0x00,sizeof(l_apcRet));
-	l_apcRet.m_Object = this;
-	l_apcRet.m_hEvent = m_hEvent;
-	l_apcRet.m_p1 = &devCategory;
-	ResetEvent(l_apcRet.m_hEvent);
-	if(CreateRunThread()!=Error_Succeed)
-	{
-        UpdatalastErr(Error_NoTarget,Error_NoTarget,"CreateRunThread error!",__FUNCTION__,__LINE__);
-		return Error_NoTarget;
-	}
-	l_apcRet.m_iReturn = -1;
-	APCSyncCall(GetDevCategoryWrapper,&l_apcRet);
-
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"GetDevCategory::GetDevCategory Error!",__FUNCTION__,__LINE__);
-		return Error_Exception;
-	}
-	if(nIsConnecting)
-	{
-		devCategory.eState = DEVICE_STATUS_CONNECTING;
-	}else
-	{
-		devCategory.eState = DEVICE_STATUS_NOT_READY;
-	}
-	//char *pMode= "PM=V2.0#PID=3445345345345";
-	
-	//memcpy(devCategory.szModel,version,strlen(version));
-	LOG4VTM(INFO,"CGrgPinPadImpl::GetDevCategory secc");
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::GetDevCategoryWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-	
-	DevCategoryInfo*  devCategory = (DevCategoryInfo*)pAPCRet->m_p1;
-	memset(devCategory, 0, sizeof(DevCategoryInfo));
-
-	char version[100] = {0};
-    LOG4VTM(INFO,"Before iGetDevInfo");
-	int ret = pPinPad->m_EppDll->iGetDevInfo(version,DevRetInfo);
-    LOG4VTM(INFO,"After iGetDevInfo");
-	if (ret==0)
-	{
-		const char *pMode= "PM=V2.0#PID=";
-	     //bhj
-		std::string strversion;
-        std::string mid_info;
-		strversion = version;
-        LOG4VTM(INFO,strversion.c_str());
-		int nPos = strversion.find(";");
-        int lnpos = strversion.find_last_of(";");
-        mid_info = strversion.substr(nPos+1,lnpos-nPos-1);
-        LOG4VTM(INFO,mid_info.c_str());
-		if(nPos != -1)
-		{
-			strversion = strversion.substr(nPos+1, strversion.size());
-			nPos = strversion.find(";");
-			if(nPos != -1)
-			{
-				strversion = strversion.substr(nPos+1, strversion.size());
-			}
-		}
-
-		
-		memcpy(devCategory->szModel,pMode,strlen(pMode));
-		strcat(devCategory->szModel,strversion.c_str());
-		
-    
-        std::string mid;
-        std::string fmid;
-        mid = "#MID=";
-        fmid = "#FMID=";
-        mid.append(strversion.c_str());
-        fmid.append(mid_info.c_str());
-        strcat(devCategory->szModel,mid.c_str());
-        strcat(devCategory->szModel,fmid.c_str());
-
-		const char *pType = "CMB.PinPad.Grg-EPP-004A";
-
-		const char *pVendor= "grg";
-		memcpy(devCategory->szType,pType,strlen(pType));
-		
-		memcpy(devCategory->szVendor,pVendor,strlen(pVendor));
-		
-		devCategory->version.wMajor = 1;
-		devCategory->version.wMinor = 1;
-		devCategory->version.wRevision = 65535;
-		devCategory->version.wBuild = 1;
-	}
-	
-	
-
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::Reset()
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"CGrgPinPadImpl::Reset");
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    if(!mCreateThread())
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-	l_apcRet.m_iReturn = -1;
-	APCSyncCall(ResetWrapper,&l_apcRet);
-    //QueueUserAPC(DevCloseWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-//    CloseRunThread();
-	if(l_apcRet.m_iReturn!=0)
-	{
-		UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"Reset::iInit",__FUNCTION__,__LINE__);
-		return Error_Exception;
-	}
-	Sleep(1000);
-	ErrorCodeEnum openRet = DevOpen(0,0);
-	if(openRet!=Error_Succeed)
-	{
-		return openRet;
-	}
-    LOG4VTM(INFO,"CGrgPinPadImpl::Reset Succeed");
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::ResetWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-    int ret = pPinPad->m_EppDll->iInit(DevRetInfo);
-
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-bool CGrgPinPadImpl::mCreateThread()
-{
-    LOG4VTM_FUNCTION();
-    /*if (NULL == m_hTimerManagerThread)
-    {
-        m_hTimerManagerThread = CreateThread(NULL, 0, OnProThreadEnter, this, 0, NULL);
-        Sleep(100);
-    }
-    if(m_hTimerManagerThread==NULL)return false;*/
-    return true;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::DevClose()
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"Enter CGrgPinPadImpl::DevClose");
-    if(!nIsConnecting)
-    {
-        UpdatalastErr(Error_DevNotAvailable,Error_DevNotAvailable,"Dev Not open!",__FUNCTION__,__LINE__);
-        LOG4VTM(INFO,"Dev Not open!");
-        return Error_DevNotAvailable;
-    }
-    //m_CUserIoDll.Open(m_PinPadDllPath,0,0);
-//     m_CUserIoDll.SetLightStatus(20,3,0);
-//     m_CUserIoDll.Close();
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(!mCreateThread()) //这里是因为线程� KILL,重新启动一个线稄1�7
-    {
-        UpdatalastErr(Error_NoDefine,Error_NoDefine,"mCreateThread Error",__FUNCTION__,__LINE__);
-        return Error_NoDefine;
-    }
-    l_apcRet.m_iReturn = -1;
-
-    APCSyncCall(DevCloseWrapper,&l_apcRet);
-    //QueueUserAPC(DevCloseWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-//    CloseRunThread();
-    int ret = l_apcRet.m_iReturn;
-	if(ret!=0)
-	{
-		UpdatalastErr(Error_Exception,ret,"CGrgPinPadImpl::DevClose Error",__FUNCTION__,__LINE__);
-	}
-    LOG4VTM(INFO,"CGrgPinPadImpl::DevClose Succeed");
-	nIsConnecting = false;
-    isPlaySound = false;
-    return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::DevCloseWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    //LOG4VTM(INFO,"begin iCloseComm");
-    int ret = pPinPad->m_EppDll->iCloseComm2();
-   // LOG4VTM(INFO,"end iCloseComm");
-
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-ErrorCodeEnum CGrgPinPadImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-    LOG4VTM_FUNCTION();
-	devErrInfo.dwErrMsgLen = m_tDevErrorInfo.dwErrMsgLen;
-	memcpy(devErrInfo.szErrMsg,m_tDevErrorInfo.szErrMsg,m_tDevErrorInfo.dwErrMsgLen & 0xFFFF);
-
-	memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-	return Error_Succeed;
-}
-
-
-void CGrgPinPadImpl::UpdataProFun(int p_iType, void* p_pData, int p_iLen)
-{
-    LOG4VTM_FUNCTION();
-	unsigned char val = *(unsigned char*)p_pData;
-	if(val==0xAA)return;
-	if(pCGrgPinPadImpl==NULL)return;
-	switch(p_iType)
-	{
-	case 40000:
-        {
-            //string keySta= "UpdataProFun: "+int2str(val);
-            //pCGrgPinPadImpl->LOG4VTM(INFO,LkeySta.c_str());
-			//printf("input:%d(%c)\n",val,val);
-            pCGrgPinPadImpl->SetDataKey(val);
-        }
-	break;
-	default:
-		//printf("input p_iType:%d p_iLen:%d :%d(%c)\n",p_iType,p_iLen,val,val);
-	break;
-	}
-}
-
-
-void CGrgPinPadImpl::SetPinDataKey(BYTE ch)
-{
-    LOG4VTM_FUNCTION();
-    switch(ch)
-    {
-    case 'P':
-        SetKeyValue(0x1b);
-        break;
-    case 'L':
-        SetKeyValue(0x08);
-        break;
-    case 'H':
-        SetKeyValue(0x20);
-        break;
-    case 'D':
-        SetKeyValue(0x0d);
-        break;
-    case 'C':
-        SetKeyValue(0x3d);
-        break;
-    case 'B':
-        SetKeyValue(0x3d);
-        break;
-    case '1':
-        SetKeyValue(0x3f);
-        break;
-    }
-    std::string str1 = "SetPinDataKey---m_bKeyValue:"+int2str(m_bKeyValue);
-	LOG4VTM(INFO,(str1));
-
-    //LOG4VTM(INFO,Lstr.c_str());
-}
-
-void CGrgPinPadImpl::SetPlainDataKey(BYTE ch)
-{
-    LOG4VTM_FUNCTION();
-	switch(ch)
-	{
-	case 'A':
-		SetKeyValue(0x30);
-		break;
-	case 'E':
-		SetKeyValue(0x31);
-		break;
-	case 'F':
-		SetKeyValue(0x32);
-		break;
-	case 'G':
-		SetKeyValue(0x33);
-		break;
-	case 'I':
-		SetKeyValue(0x34);
-		break;
-	case 'J':
-		SetKeyValue(0x35);
-		break;
-	case 'K':
-		SetKeyValue(0x36);
-		break;
-	case 'M':
-		SetKeyValue(0x37);
-		break;
-	case 'N':
-		SetKeyValue(0x38);
-		break;
-	case 'O':
-		SetKeyValue(0x39);
-		break;
-	case 'P':
-        SetKeyValue(0x1b);
-		break;
-	case 'L':
-        SetKeyValue(0x08);
-		break;
-	case 'H':
-        SetKeyValue(0x20);
-		break;
-	case 'D':
-		SetKeyValue(0x0d);
-		break;
-	case 'C':
-		SetKeyValue(0x4f);
-		break;
-	case 'B':
-		SetKeyValue(0x2e);
-		break;
-	case '1':
-		SetKeyValue(0x2a);
-		m_tInputPinKeySta.m_nKeyCount++;
-		break;
-	}
-	std::string str1 = "SetPlainDataKey--m_bKeyValue:"+int2str(m_bKeyValue);
-	LOG4VTM(INFO,(str1));
-
-	//LOG4VTM(INFO,Lstr.c_str());
-}
-
-void CGrgPinPadImpl::SetDataKey(BYTE ch)
-{
-   // LOG4VTM(INFO,"Rev key data: *");
-    LOG4VTM_FUNCTION();
-	//mPlaySound();
-    if(m_KeyReadMode==E_PIN_MODE)
-    {
-        SetPinDataKey(ch);
-    }else if(m_KeyReadMode==E_PLAIN_MODE)
-    {
-        SetPlainDataKey(ch);
-    }
-
-	//mPlaySound();
-
-	if(0 == fork())
-	{
-		mPlaySound();
-		_exit(0);
-	}
-}
-
-void CGrgPinPadImpl::UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func,int line)
-{
-	LOG4VTM_FUNCTION();
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    std::string lCode = int2str(logicCode);
-    std::string pCode = int2str(phyCode);
-	std::string sline = int2str(line);
-	//std::string msgError = "ErrCode: "+ pCode + "," + "Descprition: " + "Func:"+ func +"," + "Line:" + sline + "," + "msg:" + msg; //bhj
-    std::string msgError = "{\"ErrCode\": "+ pCode + "," + "\"Description\": " + "\"Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg + "\"}";
-	LOG4VTM(ERROR,msgError.c_str());   //新增厂商日志输出
-    //防止溢出
-	if (msgError.length() > sizeof(m_tDevErrorInfo.szErrMsg))
-	{
-		msgError.resize(sizeof(m_tDevErrorInfo.szErrMsg));
-	}
-	m_tDevErrorInfo.dwErrMsgLen = msgError.length();
-    memcpy(m_tDevErrorInfo.szErrMsg,msgError.c_str(),msgError.length());
-
-//	LOG4VTM(ERROR,msgError.c_str());
-}
-
-void CGrgPinPadImpl::SetKeyValue(BYTE ch)
-{
-    LOG4VTM_FUNCTION();
-	std::unique_lock<std::mutex> lock(m_lockObj);
-	//CGrgAutoLock lock(&m_lockObj);
-    if(ch == 0x00)
-    {
-        m_keyVtr.clear();
-    }else
-    {
-        m_keyVtr.push_back(ch);
-    }
-	
-    
-}
-
-ErrorCodeEnum CGrgPinPadImpl::GetKeyValue(BYTE &ch)
-{
-    LOG4VTM_FUNCTION();
-    LOG4VTM(INFO,"start GetKeyValue");
-	std::unique_lock<std::mutex> lock(m_lockObj);
-    //CGrgAutoLock lock(&m_lockObj);
-    if(m_keyVtr.size()==0)return Error_DevCommFailed;
-    int keyVal = m_keyVtr[0];
-    m_keyVtr.erase(m_keyVtr.begin());
-    if(keyVal==0x00)
-    {
-        return Error_DevCommFailed;
-    }
-    ch = keyVal;
-
-    //bhj  
-    m_keyVtrAll.push_back(ch);
-
-	if (ch != 0x3f)
-	{
-		m_keyVtrAll.clear();
-        LOG4VTM(INFO,"---- GetKeyValue  m_keyVtrAll clear");
-	}
-
-	if (m_keyVtrAll.size() == 6)
-	{
-         //bhj
-        TAPCReturn	l_apcRet;
-        memset(&l_apcRet,0x00,sizeof(l_apcRet));
-        l_apcRet.m_Object = this;
-        l_apcRet.m_hEvent = m_hEvent;
-        ResetEvent(l_apcRet.m_hEvent);
-        APCSyncCall(InputStopWrapper,&l_apcRet);
-        if(l_apcRet.m_iReturn!=0)
-	    {
-		    UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"StopInput Error!",__FUNCTION__,__LINE__);
-		    return Error_Exception; 
-	    }
-		m_keyVtrAll.clear();
-	}
-    LOG4VTM(INFO,"End GetKeyValue");
-    return Error_Succeed;
-}
-
-ErrorCodeEnum CGrgPinPadImpl::GrgGetpinBlock(BYTE byLen)
-{
-	//getPinBlock
-    LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"begin getPinblock!");
-	memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    if(m_tAccountInfo.dwAccLen == 0)
-    {
-        UpdatalastErr(Error_Null,Error_Null,"Account is null!",__FUNCTION__,__LINE__);
-        return Error_Null;
-    }
-	m_tPinBlockInfo.Init();
-	
-    TAPCReturn	l_apcRet;
-    memset(&l_apcRet,0x00,sizeof(l_apcRet));
-    l_apcRet.m_Object = this;
-    l_apcRet.m_hEvent = m_hEvent;
-    l_apcRet.m_p1 = &byLen;
-    ResetEvent(l_apcRet.m_hEvent);
-    if(CreateRunThread()!=Error_Succeed)
-    {
-        return Error_NoTarget;
-    }
-    l_apcRet.m_iReturn = -1;
-    APCSyncCall(GetPinBlockWrapper,&l_apcRet);
-    //QueueUserAPC(GetPinBlockWrapper,m_hTimerManagerThread,(DWORD)&l_apcRet);
-    //WaitForSingleObject(l_apcRet.m_hEvent,INFINITE);
-    //CloseRunThread();
-    int rets = l_apcRet.m_iReturn;
-    if(rets!=0)
-    {
-        UpdatalastErr(DevRetInfo[0].iLogicCode,DevRetInfo[0].iPhyCode,"iGetPinBlock Error",__FUNCTION__,__LINE__);
-        return Error_Exception;
-    }
-	
-	LOG4VTM(INFO,"StartPinInput and getPinblock success!");
-
-    memset(&m_tAccountInfo,0,sizeof(m_tAccountInfo));
-	return Error_Succeed;
-}
-
-void CALLBACK CGrgPinPadImpl::GetPinBlockWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-
-    std::string MsName = "MK0";
-    char workName[8]={0};
-    int pinBlockLen = 8;
-    if(pPinPad->m_bActiveMsKeyNum == 0)
-    {
-        MsName = "MK0";
-        pinBlockLen = 8;
-        sprintf(workName, "W%02d", pPinPad->m_bActiveWkKeyNum);
-    }else if(pPinPad->m_bActiveMsKeyNum == 1)
-    {
-        MsName = "MK1";
-        pinBlockLen = 16;
-        sprintf(workName, "W%02d", pPinPad->m_bActiveWkKeyNum+10);
-    }
-
-    BYTE byLen = *((BYTE*)pAPCRet->m_p1);
-    char bufOut[128] = {0};
-    char cPINFormat = '1';
-    if(pPinPad->m_ePinAlgorithm == EPP_PIN_ALGO_IBM3624 || pPinPad->m_ePinAlgorithm==EPP_PIN_ALGO_SM4)
-    {
-        cPINFormat = '7';
-    }if(pPinPad->m_ePinAlgorithm == EPP_PIN_ALGO_ISO9564_1_ANSI)
-    {
-        cPINFormat = '1';
-    }
-    int rets = pPinPad->m_EppDll->iGetPinBlock((char*)workName,byLen,cPINFormat,'0',(char*)pPinPad->m_tAccountInfo.account,bufOut,DevRetInfo);  
-    if(rets!=0)
-    {
-        pAPCRet->m_iReturn = rets;
-      
-        SetEvent(pPinPad->m_hEvent);
-    }
-    char buff[128] = {0};
-    unpack_(bufOut,buff,pinBlockLen);
-    std::string str = "pinblock size:"+int2str(strlen(buff))+" len:"+int2str(pinBlockLen*2);
-	LOG4VTM(INFO,str);
-
-//    LOG4VTM(INFO,Lstr.c_str());
-
-    memcpy(pPinPad->m_tPinBlockInfo.PinBlockBuff,buff,pinBlockLen*2);
-    pPinPad->m_tPinBlockInfo.mPinBlockLen = pinBlockLen*2;
-
-
-    pAPCRet->m_iReturn = rets;
-    SetEvent(pPinPad->m_hEvent);
-}
-
-DWORD CGrgPinPadImpl::OnProThreadEnter(LPVOID lpParameter)
-{
-    LOG4VTM_FUNCTION();
-    /*CGrgPinPadImpl *pObj = (CGrgPinPadImpl*)lpParameter;
-    DWORD l_dwRet = 0;
-    while(!pObj->isRunExit)
-    {
-        l_dwRet = WaitForSingleObjectEx(pObj->m_eventExit,INFINITE,TRUE);
-
-        if(WAIT_OBJECT_0 == l_dwRet)
-        {
-            ResetEvent(pObj->m_eventExit);
-            break;
-        }
-    }*/
-    return 0;
-}
-
-/*void CGrgPinPadImpl::AddThreadRunFun(ThreadRunFun fun,HANDLE han_,DWORD dwPARAM)
-{
-    m_tThreadRunFunInfo.m_ThreadRunFun = fun;
-    m_tThreadRunFunInfo.m_data = dwPARAM;
-}*/
-
-int CGrgPinPadImpl::strToHex(char *ch, char *hex)
-{
-    int high,low;
-    int tmp = 0;
-    if(ch == NULL || hex == NULL){
-        return -1;
-    }
-    if(strlen(ch) == 0){
-        return -2;
-    }
-
-    while(*ch){
-        tmp = (int)*ch;
-        high = tmp >> 4;
-        low = tmp & 15;
-        *hex++ = valueToHexCh(high); //先写高字芄1�7
-        *hex++ = valueToHexCh(low); //其次写低字节
-        ch++;   }
-        *hex = '\0';
-        return 0;
-}
-
-char CGrgPinPadImpl::valueToHexCh(const int value)
-{
-    char result = '\0';
-    if(value >= 0 && value <= 9){
-        result = (char)(value + 48); //48为ascii编码的��1�7�1�70’字符编码��1�7�1�7
-    }
-    else if(value >= 10 && value <= 15){
-        result = (char)(value - 10 + 65); //减去10则找出其圄1�716进制的偏移量$1�765为ascii的1�7'A'的字符编码��1�7�1�7
-        }
-    else{}
-    return 0;
-}
-
-void CGrgPinPadImpl::mPlaySound()
-{
-    if(isPlaySound)
-    {
-        //PlaySound(LPWSTR(IDR_WAVE1), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP);
-       // std::wstring path = m_PinPadDllPath + "keypress.wav";
-
-		//std::string l_szDllFile = GetLibPath(GetSelfModuleHandle());
-
-		//l_szDllFile = l_szDllFile + "/home/grg/grg/lib/grgkeypress.wav";
-        
-        //std::string l_szDllFile = "/home/grg/grg/lib/grgkeypress.wav";   bhj 密码键盘增加物理按键声,去除音频文件调用。
-
-		//std::wstring path = s2ws(l_szDllFile);
-        //BOOL l_bRet = sndPlaySound(path.c_str(), SND_FILENAME | SND_ASYNC);
-		//char buff[MAX_PATH];
-		//snprintf(buff, MAX_PATH, "aplay %s", l_szDllFile.c_str());
-		//system(buff);
-		//l_szDllFile = "aplay " + l_szDllFile + " > /dev/null 2>&1 ";
-		//printf("aplay cmd:^%s$\n", l_szDllFile.c_str());
-		//system(l_szDllFile.c_str());
-
-        //PlaySound("IDR_WAVE1", GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC);
-    }
-}
-/*
-std::wstring CGrgPinPadImpl::s2ws(const std::string& s)
-{
-	int len;
-	int slength = (int)s.length() + 1;
-	len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
-	wchar_t* buf = new wchar_t[len];
-	MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
-	std::wstring r(buf);
-	delete[] buf;
-	return r;
-}*/
-
-
-
-void CALLBACK CGrgPinPadImpl::InputStopWrapper(void* dwPARAM)
-{
-    LOG4VTM_FUNCTION();
-    PAPCReturn	pAPCRet = (PAPCReturn)dwPARAM;
-    CGrgPinPadImpl *pPinPad = (CGrgPinPadImpl*)(pAPCRet->m_Object);
-    memset(&DevRetInfo,0,sizeof(DevRetInfo));
-    int ret = pPinPad->m_EppDll->iStopPinEntry(DevRetInfo);
-    pAPCRet->m_iReturn = ret;
-    SetEvent(pPinPad->m_hEvent);
-}

+ 0 - 282
DevAdapter/grg/pinpad.1.1/GrgPinPadImpl.h

@@ -1,282 +0,0 @@
-#ifndef _GRG_PINPAD_IMPL_H
-#define _GRG_PINPAD_IMPL_H
-
-#define WINAPI
-typedef void* HANDLE;
-typedef void* LPVOID;
-#define CALLBACK 
-
-typedef unsigned char         *PBYTE;
-#if 1 /* CEvent */
-//typedef unsigned char  CEvent[256];
-#else
-#pragma pack(push,1)
-
-typedef int BOOL;
-#define TRUE 1
-#define FALSE 0
-typedef const char * LPCSTR;
-#define INFINITE 0xFFFFFFFF
-class ILock
-{
-public:
-	virtual ~ILock()
-	{
-	}
-
-	virtual ILock* Handle()
-	{
-		return this;
-	}
-
-	virtual operator HANDLE() const
-	{
-		return (HANDLE) this;
-	}
-
-	virtual BOOL Lock(DWORD p_dwMilliseconds = INFINITE) = 0;
-	virtual BOOL Unlock() = 0;
-};
-
-typedef ILock *ILockPointer;
-
-class CMutex: public ILock
-{
-public:
-	CMutex(BOOL p_bInitiallyOwn = FALSE);
-	virtual ~CMutex();
-
-	virtual BOOL Lock(DWORD p_dwMilliseconds = INFINITE);
-	virtual BOOL Unlock();
-
-private:
-	class CMutexImpl* m_impl;
-};
-
-class CEvent: public ILock
-{
-public:
-	CEvent(BOOL p_bInitiallyOwn = FALSE, BOOL p_bManualReset = FALSE, LPCSTR lpName = NULL);
-	virtual ~CEvent();
-
-	virtual BOOL Lock(DWORD p_dwMilliseconds = INFINITE);
-	virtual BOOL Unlock();
-
-	virtual BOOL SetEvent();
-	virtual BOOL ResetEvent();
-
-private:
-	class CEventImpl* m_impl;
-};
-#pragma pack(pop)
-#endif /* CEvent */
-
-#include "CBaseEPPDevDll.h"
-
-#include <mutex>
-#include <vector>
-#include "PinPadClass.h"
-
-#include <iostream>
-
-
-typedef struct T_InputPinKeySta
-{
-	bool m_bIsIpunt;
-	BYTE m_nKeyCount;
-	BYTE m_nKeyLen;
-	T_InputPinKeySta()
-	{
-		m_bIsIpunt = false;
-		m_nKeyCount = 0;
-	}
-	void Init(BYTE len)
-	{
-		m_nKeyLen = len;
-		m_nKeyCount = 0;
-		m_bIsIpunt = true;
-	}
-	bool IsEnd()
-	{
-		if(m_nKeyLen==m_nKeyCount)
-		{
-			m_nKeyLen = 0;
-			m_nKeyCount = 0;
-			m_bIsIpunt = false;
-			return true;
-		}
-		return false;
-	}
-}tInputPinKeySta;
-
-typedef enum E_KeyReadMode
-{
-    E_NULL_MODE =  0x00,
-    E_PIN_MODE  =  0x01,
-    E_PLAIN_MODE = 0x02
-}KeyReadMode;
-
-typedef struct T_PinBlockInfo
-{
-	unsigned short mPinBlockLen;
-	BYTE PinBlockBuff[128];
-	T_PinBlockInfo()
-	{
-		mPinBlockLen = 0;
-		memset(PinBlockBuff,0,128);
-	}
-	void Init()
-	{
-		mPinBlockLen = 0;
-		memset(PinBlockBuff,0,128);
-	}
-}tPinBlockInfo;
-
-typedef struct _tagAPCReturn
-{
-    void	*m_Object;				// 上下文
-    int		m_iReturn;				// 返回值
-    HANDLE	m_hEvent;				// 执行完成事件
-    void	*m_p1;					// 参数1
-    void	*m_p2;					// 参数2
-    void	*m_p3;					// 参数3
-}TAPCReturn,*PAPCReturn;
-
-/*typedef void (*ThreadRunFun)(DWORD dwPARAM);
-
-typedef struct T_ThreadRunFunInfo
-{
-    ThreadRunFun m_ThreadRunFun;
-    DWORD m_data;
-    T_ThreadRunFunInfo()
-    {
-        m_ThreadRunFun = NULL;
-        m_data = NULL;
-    }
-}ThreadRunFunInfo;*/
-
-class CGrgPinPadImpl : public PinPadClass
-{
-public:
-    CGrgPinPadImpl();
-    ~CGrgPinPadImpl(void);
-
-
-    virtual ErrorCodeEnum DevOpen(DWORD dwPort,DWORD dwBaudRate);
-    static void CALLBACK DevOpenWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum KeyRead(BYTE &ch);
-    virtual ErrorCodeEnum SetParam(SetParamTypeEnum eType,SetParamValueEnum eValue);
-    virtual ErrorCodeEnum SetAccNo(AccountInfo accInfo);
-    virtual ErrorCodeEnum LoadMasterKey(MasterKeyParam masterKey);
-    static void CALLBACK LoadMasterKeyWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum LoadWorkingKey(WorkKeyParam wkKey);
-    static void CALLBACK LoadWorkingKeyWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum ActiveWorkingKey(DWORD dwMkSN,DWORD dwWkSN);	
-    static void CALLBACK ActiveWorkingKeyWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum StartPinInput(BYTE byLen);
-    static void CALLBACK StartPinInputWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum StartPinInputConfirm(BYTE byLen);
-    static void CALLBACK StartPinInputConfirmWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum StartPlainInput();
-    static void CALLBACK StartPlainInputWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum StopInput();
-    static void CALLBACK StopInputWrapper(void* dwPARAM);
-	//bhj
-	static void CALLBACK InputStopWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum GetPinBlock(PinBlock &block);
-    static void CALLBACK GetPinBlockWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum EncryptData(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo);
-    static void CALLBACK EncryptDataWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo);
-    //static void CALLBACK MacEncryptWrapper(void* dwPARAM);
-
-    virtual int GetEncryptFunc();
-
-    virtual ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    static void CALLBACK GetDevCategoryWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum Reset();
-    static void CALLBACK ResetWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum DevClose();
-    static void CALLBACK DevCloseWrapper(void* dwPARAM);
-
-    virtual ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-//	LogWriter m_logger;
-protected:
-	void UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func = "defaultfunc",int line = 0);
-	static void UpdataProFun(int p_iType, void* p_pData, int p_iLen);
-	void SetDataKey(BYTE ch);
-
-    void SetPlainDataKey(BYTE ch);
-    void SetPinDataKey(BYTE ch);
-	void SetKeyValue(BYTE ch);
-
-    ErrorCodeEnum GetKeyValue(BYTE &ch);
-
-	ErrorCodeEnum GrgGetpinBlock(BYTE chLen);
-
-    static DWORD WINAPI OnProThreadEnter(LPVOID lpParameter);
-
-//    void AddThreadRunFun(ThreadRunFun fun,HANDLE han_,DWORD dwPARAM);
-
-    int strToHex(char *ch, char *hex);
-    char valueToHexCh(const int value);
-    bool mCreateThread();
-    void mPlaySound();
-//	std::wstring s2ws(const std::string& s);
-
-    ErrorCodeEnum CreateRunThread();
-//    void CloseRunThread();
-private:
-   
-	class CBaseEPPDevDll* m_EppDll;
-	bool nIsListenExit;
-	bool nIsListenStop;
-	BYTE m_bKeyValue;
-	DevErrorInfo m_tDevErrorInfo;
-	bool nIsConnecting;
-	bool nIskeyReadstatus_;
-	//CLockObject m_lockObj;
-	std::mutex m_lockObj;
-	AccountInfo m_tAccountInfo;
-
-	T_InputPinKeySta m_tInputPinKeySta;
-	T_PinBlockInfo m_tPinBlockInfo;
-
-	SetParamValueEnum m_eEncryptMethod;
-	SetParamValueEnum m_eMacAlgorithm;
-	SetParamValueEnum m_ePinAlgorithm;
-	SetParamValueEnum m_eEcbCbcMode;
-    //string m_ActiveWkKey;
-    //string m_ActiveMsKey;
-//    HANDLE  m_eventExit;
-    HANDLE m_hEvent;
-    BYTE PinKeyLength;
-//    T_ThreadRunFunInfo m_tThreadRunFunInfo;
-    KeyReadMode m_KeyReadMode;
-    BYTE m_nWorkKeyMode;
-
-    BYTE m_bActiveWkKeyNum;
-    BYTE m_bActiveMsKeyNum;
-    bool isRunExit;
-    bool isPlaySound;
-    std::wstring m_PinPadDllPath;
-//    CUserIoDll m_CUserIoDll;
-    std::vector<BYTE> m_keyVtr;
-	std::vector<BYTE> m_keyVtrAll;
-	
-};
-
-#endif /* _GRG_PINPAD_IMPL_H */

+ 0 - 260
DevAdapter/grg/pinpad.1.1/pinpad_impl.cpp

@@ -1,260 +0,0 @@
-//
-// Created by LocalUser on 2019/1/7.
-//
-#include <cstring>
-
-#include "pinpad_impl.h"
-//#include "sample.h"
-
-//typedef unsigned char         *PBYTE;
-//typedef unsigned char  CEvent[256];
-//#include "OEPPDevDll.h"
-
-#include "log4vendor.h"
-
-#include "GrgPinPadImpl.h"
-
-PinPadClassImpl::PinPadClassImpl()
-//    :m_mode(0)
-{
-	m_pDeviceImpl = new CGrgPinPadImpl();
-}
-
-PinPadClassImpl::~PinPadClassImpl()
-{
-    if(m_pDeviceImpl!=NULL)
-    {
-        delete (CGrgPinPadImpl*)m_pDeviceImpl;
-        m_pDeviceImpl = NULL;
-    }
-}
-
-ErrorCodeEnum PinPadClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->GetDevCategory(devCategory);
-	/*
-    LOG4VTM_FUNCTION();
-    ErrorCodeEnum err = Error_Succeed;
-    std::strcpy(devCategory.szModel, "szModel");
-    std::strcpy(devCategory.szType, "szCategory");
-    std::strcpy(devCategory.szVendor, "szVendor");
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::Reset()
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->Reset();
-	/*
-    ErrorCodeEnum err = Error_Unexpect;
-    m_mode = 0;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->DevOpen(dwPort,dwBaudRate);
-   // LOG4VTM_FUNCTION();
-    /*static int nums = 0;
-    ErrorCodeEnum err = Error_Succeed;
-    if (nums == 0) {
-        err = Error_Unexpect;
-        nums = 1;
-    } else {
-        LOG4VTM(TRACE, ("This is first TRACE type message."));
-        LOG4VTM(INFO, ("This is first INFO type message."));
-        LOG4VTM(WARN, ("This is first WARN type message."));
-        LOG4VTM(ERROR, ("This is first ERROR type message."));
-        LOG4VTM(FATAL, ("This is first FATAL type message."));
-    }
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::DevClose()
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->DevClose();
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::KeyRead(BYTE &ch)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->KeyRead(ch);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    static int cursor = 0;
-    if(m_mode == 0) {
-        ch = 0x0d;
-        cursor = 0;
-    }
-    else {
-        ch = 0x3f;
-    }
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::StartPinInput(BYTE byLen)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->StartPinInput(byLen);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    m_mode = 1;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::StartPinInputConfirm(BYTE byLen)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->StartPinInputConfirm(byLen);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    m_mode = 1;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::StartPlainInput()
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->StartPlainInput();
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::StopInput()
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->StopInput();
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::LoadMasterKey(MasterKeyParam masterKey)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->LoadMasterKey(masterKey);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::LoadWorkingKey(WorkKeyParam wkKey)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->LoadWorkingKey(wkKey);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::ActiveWorkingKey(DWORD dwMkSN, DWORD dwWkSN)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->ActiveWorkingKey(dwMkSN,dwWkSN);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::SetParam(SetParamTypeEnum eType, SetParamValueEnum eValue)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->SetParam(eType,eValue);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::EncryptData(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->EncryptData(srcInfo,destInfo);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    memset(destInfo.data, 0, sizeof(destInfo.data));
-    if(std::strcmp((const char*)srcInfo.data, "0000000000000000") == 0) {
-        std::strcpy((char*)destInfo.data, "EC6162E6E08C7279");
-        destInfo.dwSize = 16;
-    } else if(std::strcmp((const char*)srcInfo.data, "1234567890123456ff00ff001122334400000000000000001234567890123456ff00ff001122334400000000000000001234567890123456ff00ff001122334400000000000000001234567890123456ff00ff001122334400000000000000001234567890123456ff00ff001122334400000000000000001234567890123456") == 0) {
-        std::strcpy((char*)destInfo.data, "9DFE47D355F40F33FC634AF5BA511337DC36261313DDF70F6B7E5696EC55BDE4C39F7CE724AA864AC3074B2F4A51FC87C2A160A9102507E8126312B204392EB4BDA42A724E2F75FC9B87EE02B4CB47813A0F9A734EF5680D20D897CB2DB4EB2EF0D24B8AE2FA277F569F222AABE660AA2D276B9432D8941AAA64D1E62209ABFC");
-        destInfo.dwSize = 256;
-    } else {
-        err = Error_NotImpl;
-    }
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->MacEncrypt(srcInfo,destInfo);
-	/*
-    ErrorCodeEnum err = Error_NotImpl;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::GetPinBlock(PinBlock &block)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->GetPinBlock(block);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    std::strcpy((char*)block.data, "147DE54A44497DDB");
-    block.dwSize = 16;
-    return err;*/
-}
-
-ErrorCodeEnum PinPadClassImpl::SetAccNo(AccountInfo accInfo)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->SetAccNo(accInfo);
-	/*
-    ErrorCodeEnum err = Error_Succeed;
-    return err;*/
-}
-
-
-ErrorCodeEnum PinPadClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->GetLastErr(devErrInfo);
-	/*
-    TRACE4VTM_FUNCTION(&devErrInfo.dwErrMsgLen);
-    //strcpy(devErrInfo.szErrMsg, helloWorld());
-    //devErrInfo.dwErrMsgLen = strlen(helloWorld());
-    return Error_Succeed;
-	*/
-}
-
-int PinPadClassImpl::GetEncryptFunc()
-{
-	return ((CGrgPinPadImpl*)m_pDeviceImpl)->GetEncryptFunc();
-}
-
-DEVICEBASE_API ErrorCodeEnum  CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
-{
-    cmb::log_init_config config;
-    config.dev_name = "PinPad";
-#if defined(_MSC_VER)
-    config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-    config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-    std::string str;
-    cmb::log4vendor::init(config, str);
-    printf("init after: %s\n", str.c_str());
-
-    pOutDevAptObj = new PinPadClassImpl();
-    if(pOutDevAptObj == NULL)
-    {
-        return Error_Resource;
-    }
-
-    return Error_Succeed;
-}
-
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
-{
-    if(pInDevAptObj == NULL)
-    {
-        return Error_Param;
-    }
-    if(PinPadClassImpl* pTmp = dynamic_cast<PinPadClassImpl*>(pInDevAptObj))
-    {
-        delete pTmp;
-        pTmp = NULL;
-        return Error_Succeed;
-    }
-    return Error_Param;
-}

+ 0 - 48
DevAdapter/grg/pinpad.1.1/pinpad_impl.h

@@ -1,48 +0,0 @@
-//
-// Created by LocalUser on 2019/1/7.
-//
-
-#ifndef LIBFRAMEWORK_PINPAD_IMPL_H
-#define LIBFRAMEWORK_PINPAD_IMPL_H
-
-#include "PinPadClass.h"
-
-class PinPadClassImpl : public PinPadClass
-{
-public:
-    PinPadClassImpl();
-    ~PinPadClassImpl();
-
-    ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-    //PinPadClass
-    ErrorCodeEnum KeyRead(BYTE &ch);
-    ErrorCodeEnum PinRead(BYTE &ch);
-
-    ErrorCodeEnum StartPinInput(BYTE byLen);
-    ErrorCodeEnum StartPinInputConfirm(BYTE byLen);
-
-    ErrorCodeEnum StartPlainInput();
-    ErrorCodeEnum StopInput();
-    ErrorCodeEnum LoadMasterKey(MasterKeyParam masterKey);
-    ErrorCodeEnum LoadWorkingKey(WorkKeyParam wkKey);
-    ErrorCodeEnum ActiveWorkingKey(DWORD dwMkSN, DWORD dwWkSN);
-    ErrorCodeEnum SetParam(SetParamTypeEnum eType, SetParamValueEnum eValue);
-    ErrorCodeEnum EncryptData(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo);
-    ErrorCodeEnum MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo &destInfo);
-    ErrorCodeEnum GetPinBlock(PinBlock &block);
-    ErrorCodeEnum SetAccNo(AccountInfo accInfo);
-    int GetEncryptFunc();
-private:
-//    int m_mode;
-    class CGrgPinPadImpl *m_pDeviceImpl;
-};
-
-
-#endif //LIBFRAMEWORK_PINPAD_IMPL_H

+ 0 - 17
DevAdapter/grg/ups.1.1/CMakeLists.txt

@@ -1,17 +0,0 @@
-rvc_dev_define_module("Ups")
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-set(${MODULE_PREFIX}_SRCS SHARED
-	ups_impl.cpp
-)
-
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_LIB_DIR}/grg")
-
-target_link_libraries(${MODULE_FULL_NAME} grgUPSDevDll dl ${VENDOR_LOG_LIB_NAME})
-
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 256
DevAdapter/grg/ups.1.1/ups_impl.cpp

@@ -1,256 +0,0 @@
-#include "ups_impl.h"
-#include <cstring>
-#include <cstdio>
-#include "log4vendor.h"
-
-
-bool checkGrgComm();
-
-
-UpsClassImpl::UpsClassImpl()
-        :m_mode(0)
-{
-	pObj = new OUpsDev();
-}
-
-UpsClassImpl::~UpsClassImpl()
-{
-	if(pObj)
-		delete pObj;
-}
-
-void UpsClassImpl::ZeroDevErrorInfo()
-{
-	memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
-}
-
-ErrorCodeEnum UpsClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	ErrorCodeEnum err = Error_Succeed;
-	tDevReturn l_tDevReturn[8] = { 0 };
-	int ret = pObj->iSetCommPara(l_tDevReturn);
-	if(ret != 0)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "iSetCommPara Failed");
-		return Error_DevConnFailed;
-	}
-
-	memset(l_tDevReturn,0,sizeof(tDevReturn)*8);
-	ret = pObj->iInit(l_tDevReturn);
-	if(ret != 0)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "iInit Failed");
-		return Error_DevConnFailed;
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return err;
-}
-
-ErrorCodeEnum UpsClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	ErrorCodeEnum err = Error_Succeed;
-	const char *pType = "PVER=Cyber#MID=UT600Eb";
-	const char *pMode = "FWID=0";
-	const char *pVendor = "grg";
-	strcpy(devCategory.szType, pType);
-	strcpy(devCategory.szModel, pMode);
-	strcpy(devCategory.szVendor, pVendor);
-	devCategory.version.wMajor = 1;
-	devCategory.version.wMinor = 1;
-	devCategory.version.wRevision = 65535;
-	devCategory.version.wBuild = 1;
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return err;
-}
-
-ErrorCodeEnum UpsClassImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	ErrorCodeEnum err = Error_Succeed;
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return err;
-}
-
-ErrorCodeEnum UpsClassImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	ErrorCodeEnum err = Error_Succeed;
-	pObj->iCloseComm();
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return err;
-}
-
-ErrorCodeEnum UpsClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	memset(&devErrInfo, 0, sizeof(devErrInfo));
-	memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
-	return Error_Succeed;
-}
-
- //
- //	Get device status
- //
-ErrorCodeEnum UpsClassImpl::GetDevStatus(UpsStatusEnum& eStatus)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	tUpsDevStatus status;
-	tDevReturn l_tDevReturn[8] = { 0 };
-	int ret = pObj->iGetDevStatus(l_tDevReturn,&status);
-	if(ret != 0){
-		eStatus = UPS_STATUS_ERROR_TO_GET_STATUS;
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "iGetDevStatus Failed");
-		printf("GetDevStatus ret = %d,errcode = %d\n",ret,l_tDevReturn[0].iLogicCode);
-	}else{
-		if(!status.bCityPower){
-			eStatus = UPS_STATUS_NORMAL;
-		}else{
-			eStatus = UPS_STATUS_NO_ELECTOR;
-		}
-	}
-	LOG4VTM(INFO,__FUNCTION__<<" bCityPower = "<<status.bCityPower);
-	LOG4VTM(INFO,__FUNCTION__<<" bBatteryVolt = "<<status.bBatteryVolt);
-	LOG4VTM(INFO,__FUNCTION__<<" bByPass = "<<status.bByPass);
-	LOG4VTM(INFO,__FUNCTION__<<" bUpsDevFail = "<<status.bUpsDevFail);
-	LOG4VTM(INFO,__FUNCTION__<<" bUpsType = "<<status.bUpsType);
-	LOG4VTM(INFO,__FUNCTION__<<" bTestStatus = "<<status.bTestStatus);
-	LOG4VTM(INFO,__FUNCTION__<<" bTurnOff = "<<status.bTurnOff);
-	LOG4VTM(INFO,__FUNCTION__<<" bBuzzer = "<<status.bBuzzer);
-/*	
-	printf("bCityPower = %d\n",status.bCityPower);
-	printf("bBatteryVolt = %d\n",status.bBatteryVolt);
-	printf("bByPass = %d\n",status.bByPass);
-	printf("bUpsDevFail = %d\n",status.bUpsDevFail);
-	printf("bUpsType = %d\n",status.bUpsType);
-	printf("bTestStatus = %d\n",status.bTestStatus);
-	printf("bTurnOff = %d\n",status.bTurnOff);
-	printf("bBuzzer = %d\n",status.bBuzzer);
-*/	
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}	 
-//
-//	Shutdown ups and restart it in minutes.
-//	Arguments:
-//	- dwShutTime:time to shutdown (in minutes)
-// 	- dwRestartTime:time to restart (in minutes)
-//
-ErrorCodeEnum UpsClassImpl::Shutdown(DWORD dwShutTime, DWORD dwRestartTime)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,__FUNCTION__);
-	tDevReturn l_tDevReturn[8] = { 0 };
-	int ret = 0;
-	//exception handling
-	LOG4VTM(INFO,"dwShutTime = "<<dwShutTime<<" dwRestartTime = "<<dwRestartTime);
-	if(dwShutTime > 5 || dwRestartTime > 5)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, Error_Param, "timeout > 5");
-		return Error_Param;
-	}
-	ret = pObj->iDelayTurnOff(l_tDevReturn,dwShutTime*60);
-	if(ret != 0)
-	{
-		FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "iDelayTurnOff Failed");
-		return Error_Unexpect;
-	}
-
-/*
-	if(dwRestartTime >=0)
-	{
-		ret = pObj->iTurnOn(l_tDevReturn);
-		if(ret != 0)
-		{
-			FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "iTurnOn Failed");
-			return Error_IgnoreAll;
-		}
-	}
-*/			 
-	LOG4VTM(INFO,__FUNCTION__<<" OK");
-	return Error_Succeed;
-}
-
-void UpsClassImpl::FormatDevErrorInfo(const char* funcname, int line, int errCode,char* errStr)
-{
-	ZeroDevErrorInfo();
-	//snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
-	snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "{\"ErrCode\":0x%x,\"Description\":\"Func:%s,Line:%d,Msg:%s\"}", errCode, funcname, line, errStr);
-	m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
-	LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
-}
-
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-	baseObj = new UpsClassImpl();
-	if(baseObj == NULL) {
-		return Error_Resource;
-	} else {
-		cmb::log_init_config config;
-		config.dev_name = "Ups";
-		config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-		config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-		config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-		std::string str;
-		cmb::log4vendor::init(config, str);
-		printf("init after: %s\n", str.c_str());
-
-		bool cmd = checkGrgComm();
-
-		return Error_Succeed;
-	}
-}
-
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-	if(pBaseObj == NULL) {
-		return Error_Param;
-	}
-	if(UpsClassImpl* pTmp = dynamic_cast<UpsClassImpl*>(pBaseObj))
-	{
-		delete pTmp;
-		pTmp = NULL;
-		return Error_Succeed;
-	}
-	return Error_Param;
-}
-
-//bhj
-bool checkGrgComm()
-{
-	LOG4VTM_FUNCTION();
-	//判断GrgComm底层服务是否已经启动,如果已启动则返回true,否则重新启动 参考autorunsetGrgCommManager.sh
-	//ret=`ps aux |grep -w GrgCommManager | grep -v grep | wc -l`
-	FILE *cmdfp = NULL;
-	char cmdData[256] = {'0'};
-	cmdfp = popen("ps aux |grep -w GrgCommManager | grep -v grep","r");
-	if(cmdfp==NULL)
-	{
-		LOG4VTM(INFO,"checkGrgComm::popen Error");
-	}else
-	{
-		LOG4VTM(INFO,"checkGrgComm::popen Succeed");
-		if(fgets(cmdData,sizeof(cmdData),cmdfp)!=NULL)
-		{
-			LOG4VTM(INFO,cmdData);
-		}
-	}
-	if(strlen(cmdData)>10)
-	{
-        LOG4VTM(INFO,"GrgCommManager GrgCommManager Aready start");
-	}else
-	{
-		LOG4VTM(INFO,"Start GrgCommManager");
-		std::string grgstart = "cd /home/grg/grg/lib && ./runGrgCommManger.sh";
-        int ret = system(grgstart.c_str());
-	}
-	return true;
-}

+ 0 - 48
DevAdapter/grg/ups.1.1/ups_impl.h

@@ -1,48 +0,0 @@
-#ifndef LIBFRAMEWORK_UPS_IMPL_H
-#define LIBFRAMEWORK_UPS_IMPL_H
-
-#include "UpsClass.h"
-#include "OUpsDev.h"
-
-class UpsClassImpl : public UpsClass
-{
-public:
-    UpsClassImpl();
-    ~UpsClassImpl();
-
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-    //
-    //	Device open.
-    //	Arguments:
-    //	- dwPort[in]		com port number
-    //	- dwBaudRate[in]	Baud rate
-    //
-    virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
-    //
-    //	Get device status
-    //
-    virtual ErrorCodeEnum GetDevStatus(UpsStatusEnum& eStatus);
-    //
-    //	Shutdown ups and restart it in minutes.
-    //	Arguments:
-    //	- dwShutTime:time to shutdown (in minutes)
-    // 	- dwRestartTime:time to restart (in minutes)
-    //
-    virtual ErrorCodeEnum Shutdown(DWORD dwShutTime, DWORD dwRestartTime);
-
-private:
-    int m_mode;
-	OUpsDev* pObj;
-	DevErrorInfo m_DevErrorInfo;
-	void ZeroDevErrorInfo();
-	void FormatDevErrorInfo(const char* funcname, int line, int errCode,char* errStr);
-};
-
-
-#endif //LIBFRAMEWORK_UPS_IMPL_H

+ 0 - 15
DevAdapter/grg/watchdog.1.1/CMakeLists.txt

@@ -1,15 +0,0 @@
-rvc_dev_define_module("WatchDog")
-set(${MODULE_PREFIX}_VENDOR "grg")
-set(${MODULE_PREFIX}_VERSION "1")
-set(${MODULE_PREFIX}_BATCH "1")
-
-set(${MODULE_PREFIX}_SRCS SHARED
-        watchdog_impl.cpp
-        )
-
-
-rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
-target_include_directories(${MODULE_FULL_NAME} PRIVATE "${VENDOR_CURRENT_INCLUDE_DIR}")
-target_link_libraries(${MODULE_FULL_NAME} ${VENDOR_LOG_LIB_NAME})
-
-rvc_dev_target_install(${MODULE_FULL_NAME})

+ 0 - 409
DevAdapter/grg/watchdog.1.1/watchdog_impl.cpp

@@ -1,409 +0,0 @@
-#include "watchdog_impl.h"
-#include<cstring>
-#include <cstdio>
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <linux/watchdog.h>
-
-#include <sys/times.h>
-#include <pthread.h>
-#include <stdio.h>
-
-#define WATCHDOG "/dev/watchdog"
-#define WATCHDOG0 "/dev/watchdog0"
-#define WATCHDOG1 "/dev/watchdog1"
-
-#include "log4vendor.h"
-
-
-int preset_timeout;
-int config_timeout;
-int delay_time;  //延迟时间
-int timeleft;
-int testcycle = 0;
-int dummy;
-int devnum = 0;
-int wfd;
-int config_testcycle;
-bool flag = false;
-bool TimeFlag = false;
-char stopmagic = 'V';
-
-
-
-//bhj
-std::string int2str(int nTemp)  
-{
-	std::stringstream stream;
-	stream << nTemp;
-    return stream.str();
-}
-
-
-//增加一个计时线程,主要用于处理delay参数
-void *TimeTiming(void *arg)
-{
-	LOG4VTM(INFO,"TimeTiming Thread Start");
-    TimeFlag = true;
-	sleep(delay_time);
-	//判断此时是否已经打开了看门狗
-	if (!flag)
-	{
-		wfd = open(WATCHDOG0, O_RDWR);
-		if (wfd == -1) 
-		{
-			printf("Unable to open %s \n", WATCHDOG0);
-			LOG4VTM(INFO,"Unable to open WATCHDOG0");
-		}else
-		{
-			flag = true;
-		}
-	}
-
-	if (ioctl(wfd, WDIOC_SETTIMEOUT, &config_timeout) == -1)
-	{
-		printf("Watchdog settimeout ioctl error %s\n", strerror(errno));
-		if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-		{
-			printf("Watchdog magic stop write error \n");
-			LOG4VTM(INFO,"Watchdog magic stop write error");
-		}
-		close(wfd);
-		flag = false;
-		LOG4VTM(INFO,"Watchdog settimeout ioctl error");
-	}
-    TimeFlag = false;
-    return NULL;
-}
-
-
-WatchDogClassImpl::WatchDogClassImpl():m_mode(0)
-{
-
-}
-
-WatchDogClassImpl::~WatchDogClassImpl()
-{
-
-}
-
-ErrorCodeEnum WatchDogClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : GetDevCategory");
-	
-	memset(&devCategory, 0, sizeof(devCategory));
-
-	char l_cVender[20]={0};
-	strcpy(l_cVender,"grg");
-
-	strcpy(devCategory.szVendor,l_cVender);
-
-	char l_acDevVer[20]={0};
-	strcpy(l_acDevVer,"V=V1.0");
-	strcpy(devCategory.szModel,l_acDevVer);
-
-
-	//设备类型 	
-	memset(devCategory.szType,0,sizeof(devCategory.szType));
-	strcpy(devCategory.szType,"PVER=GPL");
-	strcat(devCategory.szType,"#MID=");
-
-
-	//设备状态 device status
-	devCategory.eState = DEVICE_STATUS_NORMAL;
-
-	int l_iMajor=1, l_iMinor=1, l_iRevision=65535, l_iBuild=1;
-	//设备版本号 software version
-	devCategory.version.wMajor = l_iMajor;
-	devCategory.version.wMinor = l_iMinor;
-	devCategory.version.wRevision = l_iRevision;
-	devCategory.version.wBuild = l_iBuild;
-
-	LOG4VTM(INFO,"Leave : GetDevCategory");
-	
-	return Error_Succeed;
-
-
-
-	// ErrorCodeEnum err = Error_Succeed;
-	// std::strcpy(devCategory.szModel, "szModel");
-	// std::strcpy(devCategory.szType, "szCategory");
-	// std::strcpy(devCategory.szVendor, "szVendor");
-	// return err;
-}
-
-
-ErrorCodeEnum WatchDogClassImpl::DevOpen()
-{
-	LOG4VTM_FUNCTION();
-	wfd = open(WATCHDOG0, O_RDWR);
-	if (wfd == -1) 
-	{
-		printf("Unable to open %s \n", WATCHDOG0);
-		UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"DevOpen Error",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-	}
-	LOG4VTM(INFO,"Close");
-	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-	{
-		printf("Watchdog magic stop write error \n");
-		UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"write Error",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-	}
-
-	
-	close(wfd);
-	return Error_Succeed;
-
-}
-
-ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : StartWatch");
-	//判断此时是否已经打开了看门狗
-	// if (!flag)
-	// {
-	// 	wfd = open(WATCHDOG0, O_RDWR);
-	// 	if (wfd == -1) 
-	// 	{
-	// 		printf("Unable to open %s \n", WATCHDOG0);
-	// 		return Error_DevConnFailed;
-	// 	}else
-	// 	{
-	// 		flag = true;
-	// 	}
-	// }
-	
-	// config_timeout = dwTimeout;
-	// if (ioctl(wfd, WDIOC_SETTIMEOUT, &config_timeout) == -1)
-	// {
-	// 	printf("Watchdog settimeout ioctl error %s\n", strerror(errno));
-	// 	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-	// 	{
-	// 		printf("Watchdog magic stop write error \n");
-	// 	}
-	// 	close(wfd);
-	// 	flag = false;
-	// 	return Error_DevConnFailed;
-	// }
-
-	delay_time = dwDelay;
-	config_timeout = dwTimeout;
-
-	//std::thread threadObj(TimeTiming);
-	pthread_t tid;
-	pthread_create(&tid,NULL,TimeTiming,NULL);
-
-	LOG4VTM(INFO,"leave : StartWatch");
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum WatchDogClassImpl::StopWatch()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"Open");
-	if (!flag)
-	{
-		wfd = open(WATCHDOG0, O_RDWR);
-		if (wfd == -1) 
-		{
-			printf("Unable to open %s \n", WATCHDOG0);
-			UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"open Error",__FUNCTION__,__LINE__);
-			return Error_DevConnFailed;
-		}else
-		{
-			flag = true;
-		}
-	}
-	
-	LOG4VTM(INFO,"enter : StopWatch");
-	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-	{
-		printf("Watchdog magic stop write error \n");
-		UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"write Error",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-	}
-	close(wfd);
-	flag = false;
-	LOG4VTM(INFO,"leave : StopWatch");
-	return Error_Succeed;
-
-}
-
-
-ErrorCodeEnum WatchDogClassImpl::RefreshDog()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : RefreshDog");
-    
-    if(TimeFlag)
-    {
-       return Error_Succeed;
-    }
-
-	if (!flag)
-	{
-		wfd = open(WATCHDOG0, O_RDWR);
-		if (wfd == -1) 
-		{
-			printf("Unable to open %s \n", WATCHDOG0);
-			UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"open Error",__FUNCTION__,__LINE__);
-			return Error_DevConnFailed;
-		}else
-		{
-			flag = true;
-		}
-	}
-	
-
-	if (ioctl(wfd, WDIOC_KEEPALIVE, &dummy) == -1) 
-	{
-		printf("Watchdog keeplive ioctl error %s\n", strerror(errno));
-		if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-		{
-			printf("Watchdog magic stop write error \n");
-			LOG4VTM(ERROR,"Watchdog magic stop write error");
-
-		}
-		close(wfd);
-		flag = false;
-		UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"ioctl Error",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-	}
-	LOG4VTM(INFO,"leave : RefreshDog");
-	return Error_Succeed;
-
-}
-
-
-
-ErrorCodeEnum WatchDogClassImpl::Reset()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : Reset");
-	if (!flag)
-	{
-		wfd = open(WATCHDOG0, O_RDWR);
-		if (wfd == -1) 
-		{
-			printf("Unable to open %s \n", WATCHDOG0);
-			UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"open Error",__FUNCTION__,__LINE__);
-			return Error_DevConnFailed;
-		}else
-		{
-			flag = true;
-		}
-	}
-
-
-	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-	{
-		printf("Watchdog magic stop write error \n");
-		UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"write Error",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-	}
-	close(wfd);
-	flag = false;
-	LOG4VTM(INFO,"leave : Reset");
-	
-	ErrorCodeEnum err = Error_Succeed;
-	m_mode = 0;
-	return err;
-}
-
-ErrorCodeEnum WatchDogClassImpl::DevClose()
-{
-	LOG4VTM_FUNCTION();
-	LOG4VTM(INFO,"enter : DevClose");
-	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
-	{
-		printf("Watchdog magic stop write error \n");
-		UpdatalastErr(Error_DevConnFailed,Error_DevConnFailed,"write Error",__FUNCTION__,__LINE__);
-		return Error_DevConnFailed;
-	}
-	close(wfd);
-	LOG4VTM(INFO,"leave : DevClose");
-	
-	ErrorCodeEnum err = Error_Succeed;
-	m_mode = 0;
-	return err;
-}
-
-ErrorCodeEnum WatchDogClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
-{
-	LOG4VTM_FUNCTION();
-	devErrInfo.dwErrMsgLen = m_tDevErrorInfo.dwErrMsgLen;
-    memcpy(devErrInfo.szErrMsg,m_tDevErrorInfo.szErrMsg,m_tDevErrorInfo.dwErrMsgLen);
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    return Error_Succeed;
-}
-
-void WatchDogClassImpl::UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func,int line)
-{
-	LOG4VTM_FUNCTION();
-    memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
-    std::string lCode = int2str(logicCode);
-    std::string pCode = int2str(phyCode);
-	std::string sline = int2str(line);
-	//std::string msgError = "ErrCode: "+ pCode + "," + "Descprition: " + "Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg; //bhj
-	std::string msgError = "{\"ErrCode\": "+ pCode + "," + "\"Description\": " + "\"Func:"+func+"," + "Line:" + sline + "," + "msg:" + msg + "\"}";
-	LOG4VTM(ERROR,msgError.c_str());   //新增厂商日志输出
-    //防止溢出
-	if (msgError.length() > sizeof(m_tDevErrorInfo.szErrMsg))
-	{
-		msgError.resize(sizeof(m_tDevErrorInfo.szErrMsg));
-	}
-	m_tDevErrorInfo.dwErrMsgLen = msgError.length();
-    memcpy(m_tDevErrorInfo.szErrMsg,msgError.c_str(),msgError.length());
-}
-
-
-DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
-{
-
-	cmb::log_init_config config;
-	config.dev_name = "WatchDog";
-	config.log_level = CMB_LOG_LEVEL_TRACE;
-#if defined(_MSC_VER)
-	config.log_dir = ("C:\\rvc\\dbg\\");
-#else
-	config.log_dir = ("/opt/rvc/dbg/");
-#endif //_MSC_VER
-	std::string str;
-	cmb::log4vendor::init(config, str);
-	printf("init after: %s\n", str.c_str());
-
-
-	baseObj = new WatchDogClassImpl();
-	if(baseObj == NULL) 
-	{
-		return Error_Resource;
-	} else 
-	{
-		return Error_Succeed;
-	}
-}
-DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
-{
-	if(pBaseObj == NULL) 
-	{
-		return Error_Param;
-	}
-	if(WatchDogClassImpl* pTmp = dynamic_cast<WatchDogClassImpl*>(pBaseObj))
-	{
-		delete pTmp;
-		pTmp = NULL;
-		return Error_Succeed;
-	}
-	return Error_Param;
-}

+ 0 - 53
DevAdapter/grg/watchdog.1.1/watchdog_impl.h

@@ -1,53 +0,0 @@
-#ifndef LIBFRAMEWORK_WATCHDOG_IMPL_H
-#define LIBFRAMEWORK_WATCHDOG_IMPL_H
-
-#include "WatchDogClass.h"
-#include <iostream>
-
-class WatchDogClassImpl : public WatchDogClass
-{
-public:
-    WatchDogClassImpl();
-    ~WatchDogClassImpl();
-
-
-    //DeviceBaseClass
-    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
-    ErrorCodeEnum Reset();
-    ErrorCodeEnum DevClose();
-    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
-
-    //
-    //	Initialization,make preparation for working.
-    //
-    virtual ErrorCodeEnum DevOpen();
-
-    //
-    //	Conifgure watchdog.
-    //	Watchdog start to work in [dwDelay] second.It must be feed in every [dwTimeout]
-    //	period or it will restart the computer.
-    //	Arguments:
-    //	- dwDelay:time to start watching(in second)
-    // 	- dwTimeout:max time period to feed dog(in second)
-    //
-    virtual ErrorCodeEnum StartWatch(DWORD dwDelay, DWORD dwTimeout);
-
-    //
-    //	Stop watchdog.
-    //
-    virtual ErrorCodeEnum StopWatch();
-
-    //
-    //	Feed watchdog.
-    //
-    virtual ErrorCodeEnum RefreshDog();
-
-    void UpdatalastErr(DWORD logicCode,DWORD phyCode,std::string msg,const char* func = "defaultfunc",int line = 0);
-
-private:
-    int m_mode;
-    DevErrorInfo m_tDevErrorInfo;
-};
-
-
-#endif //LIBFRAMEWORK_WATCHDOG_IMPL_H