|
@@ -1,4 +1,4 @@
|
|
|
-#include "idcertificate.h"
|
|
|
+#include "idcertificate.h"
|
|
|
#include <stdarg.h>
|
|
|
#include "log4vendor.h"
|
|
|
#include "stdafx.h"
|
|
@@ -67,7 +67,9 @@ m_bDevOpen(false)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
SecDeviceNum = 0;
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NOT_READY;
|
|
|
}
|
|
|
+
|
|
|
IDCerClassImpl::~IDCerClassImpl()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
@@ -75,6 +77,7 @@ IDCerClassImpl::~IDCerClassImpl()
|
|
|
DevClose();
|
|
|
SecDeviceNum = 0;
|
|
|
std::string tmpPath = "";
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NOT_READY;
|
|
|
if( GetDllPathLocal(tmpPath) == Error_Succeed )
|
|
|
{
|
|
|
}
|
|
@@ -127,29 +130,29 @@ IDCerClassImpl::~IDCerClassImpl()
|
|
|
|
|
|
int getFileVer(char* sFile, short &ch1, short &ch2)
|
|
|
{
|
|
|
- ch1 = 0;
|
|
|
- ch2 = 0;
|
|
|
- char* pFind = strstr(sFile, ".so");
|
|
|
- char* pTemp = pFind;
|
|
|
- while(pTemp)
|
|
|
- {
|
|
|
- pFind = pTemp;
|
|
|
- pTemp = strstr(pFind + 3, ".so");
|
|
|
- }
|
|
|
- if(pFind == nullptr) return 0;
|
|
|
+ ch1 = 0;
|
|
|
+ ch2 = 0;
|
|
|
+ char* pFind = strstr(sFile, ".so");
|
|
|
+ char* pTemp = pFind;
|
|
|
+ while(pTemp)
|
|
|
+ {
|
|
|
+ pFind = pTemp;
|
|
|
+ pTemp = strstr(pFind + 3, ".so");
|
|
|
+ }
|
|
|
+ if(pFind == nullptr) return 0;
|
|
|
|
|
|
- pTemp = pFind - 1;
|
|
|
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
|
|
|
- if(*pTemp == '.')
|
|
|
- ch2 = atoi(pTemp + 1);
|
|
|
+ pTemp = pFind - 1;
|
|
|
+ while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
|
|
|
+ if(*pTemp == '.')
|
|
|
+ ch2 = atoi(pTemp + 1);
|
|
|
|
|
|
- pTemp--;
|
|
|
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
|
|
|
+ pTemp--;
|
|
|
+ while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
|
|
|
|
|
|
- if(*pTemp == '.')
|
|
|
- ch1 = atoi(pTemp + 1);
|
|
|
+ if(*pTemp == '.')
|
|
|
+ ch1 = atoi(pTemp + 1);
|
|
|
|
|
|
- return 1;
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
|
|
@@ -159,10 +162,27 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
|
|
|
memset(devCategory.szType, 0, MAX_DEV_TYPE_LEN);
|
|
|
memset(devCategory.szModel, 0, MAX_DEV_MODEL_LEN);
|
|
|
memset(devCategory.szVendor, 0, MAX_DEV_VENDOR_LEN);
|
|
|
- memcpy(devCategory.szType, "PVER=SNBC#MID=ID8101", strlen("PVER=SNBC#MID=ID8101"));
|
|
|
+ memcpy(devCategory.szType, "BSID81S", strlen("BSID81S"));
|
|
|
memcpy(devCategory.szVendor, "keba", strlen("keba"));
|
|
|
- devCategory.eState = DEVICE_STATUS_NORMAL;
|
|
|
|
|
|
+ DEVSTATUS m_DeviceStatus;
|
|
|
+ memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
|
|
|
+
|
|
|
+ int nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ sleep(1);
|
|
|
+ DevOpen(SecDeviceNum);
|
|
|
+ nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
+ LogM("DeviceStatus(), 通讯异常, nRet=%d,line=%d", nRet, __LINE__);
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ devCategory.eState = (DevStateEnum)m_wDevStatus;
|
|
|
char sPath[256], sFile[128] = {0};
|
|
|
GetCurModulePath(sPath, sFile);
|
|
|
short v1,v2;
|
|
@@ -195,30 +215,39 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
|
|
|
devCategory.szModel);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
+
|
|
|
// Reset device.
|
|
|
// Do the cleaning work and initialize device again in order to return to
|
|
|
// the normal condition.
|
|
|
ErrorCodeEnum IDCerClassImpl::Reset()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- LogM("Reset() Entry.");
|
|
|
- if(!m_bDevOpen)
|
|
|
+ LogM("Reset() Entry,line=%d", __LINE__);
|
|
|
+
|
|
|
+ if (DevOpen(0) != Error_Succeed)
|
|
|
{
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- LogM("Reset(), 设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
+ sleep(1);
|
|
|
+ if (DevOpen(0) != Error_Succeed)
|
|
|
+ {
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NOT_READY;
|
|
|
+ SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
+ LogM("Reset(), 设备未打开, nRet=%d,line=%d", Error_DevNotAvailable, __LINE__);
|
|
|
+ return Error_DevNotAvailable;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
int nRet = m_cBS_ID81IDCImpl.ResetWithAction(SecDeviceNum, 0);//复位模式,0---退卡,1---吞卡,2---退卡并持卡,3---无动作。
|
|
|
if (IDDIGITALCOPIER_NO_ERROR != nRet)
|
|
|
{
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
SaveErrorInfo("设备通信异常", Error_DevConnFailed);
|
|
|
- LogM("Reset() 复位模式, 0-- 退卡 动作失败");
|
|
|
+ LogM("Reset() 复位模式, 0-- 退卡 动作失败,line=%d", __LINE__);
|
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NORMAL;
|
|
|
m_bAuthed = false;
|
|
|
m_iCardType = -1;
|
|
|
- LogM("Reset() 复位模式, 0-- 退卡 动作成功");
|
|
|
+ LogM("Reset() 复位模式, 0-- 退卡 动作成功,line=%d", __LINE__);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
//
|
|
@@ -228,34 +257,30 @@ ErrorCodeEnum IDCerClassImpl::DevClose()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
LogM("DevClose() Entry.");
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NOT_READY;
|
|
|
int nRet = m_cBS_ID81IDCImpl.CloseDev(SecDeviceNum);
|
|
|
- if (IDDIGITALCOPIER_NO_ERROR != nRet)
|
|
|
- {
|
|
|
- SaveErrorInfo("设备通信异常", Error_DevConnFailed);
|
|
|
- LogM("DevClose(), 设备通信异常, nRet=%d", nRet);
|
|
|
- return Error_DevConnFailed;
|
|
|
- }
|
|
|
|
|
|
m_bDevOpen = false;
|
|
|
m_bAuthed = false;
|
|
|
m_iCardType = -1;
|
|
|
- LogM("DevClose(), nRet=%d", nRet);
|
|
|
+ LogM("DevClose(SecDeviceNum = %d), nRet=%d,line=%d", SecDeviceNum, nRet, __LINE__);
|
|
|
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)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- LogM("IDCerClassImpl::Entry->IDCerClassImpl GetLastErr()!");
|
|
|
+ LogM("IDCerClassImpl::Entry->IDCerClassImpl GetLastErr()! line=%d", __LINE__);
|
|
|
devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
|
|
|
memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
|
|
|
|
|
|
memcpy(devErrInfo.szErrMsg, m_szErrMsg, MIN(devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
|
|
|
LogM("GetLastErr() return:\n\
|
|
|
- devErrInfo.szErrMsg = %s, \n\
|
|
|
- devErrInfo.dwErrMsgLen = %d", devErrInfo.szErrMsg, devErrInfo.dwErrMsgLen);
|
|
|
+ devErrInfo.szErrMsg = %s, \n\
|
|
|
+ devErrInfo.dwErrMsgLen = %d,line=%d", devErrInfo.szErrMsg, devErrInfo.dwErrMsgLen, __LINE__);
|
|
|
|
|
|
return Error_Succeed;
|
|
|
}
|
|
@@ -266,16 +291,18 @@ ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
|
|
|
ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- LogM("DevOpen(dwPort = %d) Entry.", dwPort);
|
|
|
+ LogM("DevOpen(dwPort = %d) Entry,line=%d", dwPort, __LINE__);
|
|
|
unsigned int DevNumber = 8; //统计当前设备数量
|
|
|
ScannerInfoRec ScannerInfo[8] = {0}; //设备信息
|
|
|
m_bAuthed = false;
|
|
|
m_iCardType = -1;
|
|
|
|
|
|
+ DevClose();
|
|
|
int nRet = m_cBS_ID81IDCImpl.EnumScannerDev(ScannerInfo, &DevNumber);
|
|
|
if (DevNumber <= 0)
|
|
|
{
|
|
|
m_bDevOpen = false;
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NOT_READY;
|
|
|
SaveErrorInfo("未找到设备", Error_DevNotAvailable);
|
|
|
SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
|
|
|
SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
|
|
@@ -291,19 +318,21 @@ ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
|
|
|
if (IDDIGITALCOPIER_NO_ERROR == nRet)
|
|
|
{
|
|
|
m_bDevOpen = true;
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NORMAL;
|
|
|
SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
|
|
|
SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
|
|
|
SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
|
|
|
- LogM("DevOpen(), nRet=%d.", nRet);
|
|
|
+ LogM("DevOpen(), SecDeviceNum = %d, nRet=%d,line=%d", SecDeviceNum, nRet, __LINE__);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
}
|
|
|
m_bDevOpen = false;
|
|
|
+ m_wDevStatus = DEVICE_STATUS_NOT_READY;
|
|
|
SaveErrorInfo("设备通信异常", Error_DevConnFailed);
|
|
|
SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
|
|
|
SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
|
|
|
SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
|
|
|
- LogE("DevOpen, 设备通信异常, nRet = %d. ", nRet);
|
|
|
+ LogE("DevOpen, 设备通信异常, nRet = %d,line=%d ", nRet, __LINE__);
|
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
|
//
|
|
@@ -316,12 +345,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
LogM("IDCerRFControl(), bControl = %d", bControl);
|
|
|
- if(!m_bDevOpen)
|
|
|
- {
|
|
|
- //g_pLog->Print("IDCerRFControl(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
|
|
|
- LogE("IDCerRFControl(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
if (bControl)
|
|
|
{
|
|
|
/*
|
|
@@ -408,9 +431,10 @@ ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
|
|
|
{
|
|
|
ForceIDEject();
|
|
|
}
|
|
|
- LogM("IDCerRFControl(), nRet = %d", Error_Succeed);
|
|
|
+ LogM("IDCerRFControl(), nRet = %d,line=%d", Error_Succeed, __LINE__);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
+
|
|
|
//
|
|
|
// Optional.
|
|
|
// Certificate authentication.
|
|
@@ -419,93 +443,27 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
LogM("IDCerAuthenticate() Entry.");
|
|
|
- if(!m_bDevOpen)
|
|
|
+ int nRet = 0;
|
|
|
+ ErrorCodeEnum nRetErr =OnCheckCard();
|
|
|
+ if (nRetErr != Error_Succeed)
|
|
|
{
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- LogE("IDCerAuthenticate(), !m_bDevOpen, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
- DWORD dwStart = GetTickCount();
|
|
|
- DWORD dwNow = dwStart;
|
|
|
- DEVSTATUS m_DeviceStatus;
|
|
|
- int pos = -1;
|
|
|
- int nRet;
|
|
|
- bool bCard = false;
|
|
|
- while ((dwNow - dwStart) <= 1000)
|
|
|
- {
|
|
|
- pos = -1;
|
|
|
- memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
|
|
|
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
- if (nRet != IDDIGITALCOPIER_NO_ERROR)
|
|
|
- {
|
|
|
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
- sprintf(err, "通讯异常%d", nRet);
|
|
|
- SaveErrorInfo(err, Error_DevCommFailed);
|
|
|
- LogE("IDCerAuthenticate(), 通讯异常%d, nRet=%d", nRet, Error_DevCommFailed);
|
|
|
- return Error_DevCommFailed;
|
|
|
- }
|
|
|
- if ((m_DeviceStatus.iStatusInputSensorHaveCard == 1) &&
|
|
|
- (m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
|
|
|
- (m_DeviceStatus.iStatusScanSensorHaveCard ==0))
|
|
|
- {
|
|
|
- pos = 2;
|
|
|
- }
|
|
|
- else if ((m_DeviceStatus.iStatusMiddleSensorHaveCard == 1) ||
|
|
|
- (m_DeviceStatus.iStatusScanSensorHaveCard ==1))
|
|
|
- {
|
|
|
- pos = 1;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- pos = 0;
|
|
|
- }
|
|
|
- if (pos <= 0)
|
|
|
- {
|
|
|
- usleep(100*1000);
|
|
|
- dwNow = GetTickCount();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- bCard = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!bCard)
|
|
|
- {
|
|
|
- SaveErrorInfo("未检测到卡", Error_Unexpect);
|
|
|
- LogE("IDCerAuthenticate(),未检测到卡, nRet=%d", Error_Unexpect);
|
|
|
- return Error_Unexpect;
|
|
|
+ return nRetErr;
|
|
|
}
|
|
|
+ LogM("IDCerAuthenticate():CheckIdCard检测到卡并已吸入, nRet=%d,line=%d", nRetErr, __LINE__);
|
|
|
|
|
|
- nRet = m_cBS_ID81IDCImpl.CheckIdCard(SecDeviceNum, 100);
|
|
|
- if ((IDDIGITALCOPIER_TIMEOUT_ERROR == nRet) ||
|
|
|
- (IDDIGITALCOPIER_NO_CARD == nRet))
|
|
|
- {
|
|
|
- SaveErrorInfo("未检测到卡", Error_Unexpect);
|
|
|
- LogE("IDCerAuthenticate(),未检测到卡, nRet=%d", Error_Unexpect);
|
|
|
- return Error_Unexpect;
|
|
|
- }
|
|
|
- else if (IDDIGITALCOPIER_NO_ERROR != nRet)
|
|
|
- {
|
|
|
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
- sprintf(err, "通讯失败%d", nRet);
|
|
|
- SaveErrorInfo(err, Error_DevConnFailed);
|
|
|
- LogE("IDCerAuthenticate(),通讯失败,nRet=%d", nRet, Error_DevConnFailed);
|
|
|
- return Error_DevConnFailed;
|
|
|
- }
|
|
|
int iCardType = -1;
|
|
|
memset(&m_IDInfoEx, 0x00, sizeof(IDInfoEx));
|
|
|
memset(&m_IDForeignInfo, 0x00, sizeof(IDInfoForeign));
|
|
|
memset(&m_IDInfoGAT, 0x00, sizeof(IDInfoGAT));
|
|
|
memset(PhotoPath, 0, MAX_FILE_PATH);
|
|
|
- std::string dllPath;
|
|
|
+ std::string dllPath = "";
|
|
|
int bRet = GetDllPathLocal(dllPath);
|
|
|
memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
|
|
|
dllPath += "zp.bmp";
|
|
|
char FileName0[256]={0};
|
|
|
memcpy(FileName0, dllPath.c_str(), dllPath.length());
|
|
|
std::string strLog = "IDCerAuthenticate(),PhotoPath=[" + dllPath + "]";
|
|
|
- LogM("%s",strLog.c_str());
|
|
|
+ LogM("%s,line=%d",strLog.c_str(), __LINE__);
|
|
|
nRet = m_cBS_ID81IDCImpl.GetMyIDCardType(SecDeviceNum, &iCardType);
|
|
|
if(nRet == IDDIGITALCOPIER_NO_ERROR)
|
|
|
{
|
|
@@ -514,14 +472,22 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
|
|
|
else if (nRet == IDDIGITALCOPIER_IDDATA_PROCESS_ERROR)
|
|
|
{
|
|
|
SaveErrorInfo("无效卡", Error_DevMedia);
|
|
|
- LogE("IDCerAuthenticate(),无效卡, nRet=%d", Error_DevMedia);
|
|
|
- //m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
|
|
|
+ LogE("IDCerAuthenticate(),无效卡, nRet=%d,line=%d", Error_DevMedia, __LINE__);
|
|
|
return Error_DevMedia;
|
|
|
}
|
|
|
+ else if (IDDIGITALCOPIER_STATUS_PASSAGE_JAM == nRet)
|
|
|
+ {
|
|
|
+ char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
+ sprintf(err, "塞卡%d", nRet);
|
|
|
+ SaveErrorInfo(err, Error_Unexpect);
|
|
|
+ LogE("IDCerAuthenticate(),塞卡,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
|
|
|
+ return Error_Unexpect;
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
- LogE("IDCerAuthenticate(),通讯异常%d,nRet=%d", nRet, Error_DevCommFailed);
|
|
|
+ LogE("IDCerAuthenticate(),通讯异常%d,nRet=%d,line=%d", nRet, Error_DevCommFailed, __LINE__);
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
return Error_DevCommFailed;
|
|
|
}
|
|
|
|
|
@@ -555,27 +521,35 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
|
|
|
|
|
|
if(nRet == IDDIGITALCOPIER_NO_ERROR)
|
|
|
{
|
|
|
- LogM("IDCerAuthenticate(),认证成功");
|
|
|
+ LogM("IDCerAuthenticate(),认证成功,line=%d", __LINE__);
|
|
|
}
|
|
|
else if ((nRet == IDDIGITALCOPIER_NO_ERROR) ||
|
|
|
(nRet == IDDIGITALCOPIER_IDDATA_PROCESS_ERROR)) //身份证电子信息处理错误
|
|
|
{
|
|
|
SaveErrorInfo("无效卡", Error_DevMedia);
|
|
|
- LogE("IDCerAuthenticate(),无效卡, nRet=%d", Error_DevMedia);
|
|
|
- m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
|
|
|
+ LogE("IDCerAuthenticate(),无效卡, nRet=%d,line=%d", Error_DevMedia, __LINE__);
|
|
|
return Error_DevMedia;
|
|
|
}
|
|
|
+ else if (IDDIGITALCOPIER_STATUS_PASSAGE_JAM == nRet)
|
|
|
+ {
|
|
|
+ char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
+ sprintf(err, "塞卡%d", nRet);
|
|
|
+ SaveErrorInfo(err, Error_Unexpect);
|
|
|
+ LogE("IDCerAuthenticate(),塞卡,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
|
|
|
+ return Error_Unexpect;
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
sprintf(err, "通讯失败%d", nRet);
|
|
|
SaveErrorInfo(err, Error_DevConnFailed);
|
|
|
- LogE("IDCerAuthenticate()通讯失败, nRet=%d", Error_DevCommFailed);
|
|
|
+ LogE("IDCerAuthenticate()通讯失败, nRet=%d,line=%d", Error_DevCommFailed, __LINE__);
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
|
m_bAuthed = true; // true:认证成功;
|
|
|
m_iCardType = iCardType; // 认证成功后,卡的类型;
|
|
|
- LogM("IDCerAuthenticate(), nRet=%d", Error_Succeed);
|
|
|
+ LogM("IDCerAuthenticate(), nRet=%d,line=%d", Error_Succeed, __LINE__);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
// 获取证件信息,包括二代身份证、外国人永久居留证
|
|
@@ -584,21 +558,16 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
|
|
|
ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- LogM("IDCerGetData() Entry.");
|
|
|
- if(!m_bDevOpen)
|
|
|
- {
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- LogE("IDCerGetData(),设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
+ LogM("IDCerGetData() Entry,line=%d", __LINE__);
|
|
|
+
|
|
|
if (!m_bAuthed)
|
|
|
{
|
|
|
SaveErrorInfo("未认证成功。", Error_DevMedia);
|
|
|
- LogE("IDCerGetData(),未认证成功, nRet=%d", Error_DevMedia);
|
|
|
+ LogE("IDCerGetData(),未认证成功, nRet=%d,line=%d", Error_DevMedia, __LINE__);
|
|
|
return Error_DevMedia;
|
|
|
}
|
|
|
m_bAuthed = false; //认证成功只能读一次,下次必须重新认证;
|
|
|
- std::string dllPath;
|
|
|
+ std::string dllPath = "";
|
|
|
int bRet = GetDllPathLocal(dllPath);
|
|
|
std::string ckStr = dllPath + "ck.bmp";
|
|
|
std::string zpStr = dllPath + "zp.bmp";
|
|
@@ -914,12 +883,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
|
|
|
ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- if(!m_bDevOpen)
|
|
|
- {
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- LogE("IDCerGetDataEx(),设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
+
|
|
|
if (!m_bAuthed)
|
|
|
{
|
|
|
SaveErrorInfo("未认证成功。", Error_DevMedia);
|
|
@@ -928,7 +892,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
|
|
|
}
|
|
|
m_bAuthed = false; //认证成功只能读一次,下次必须重新认证;
|
|
|
|
|
|
- std::string dllPath;
|
|
|
+ std::string dllPath = "";
|
|
|
int bRet = GetDllPathLocal(dllPath);
|
|
|
|
|
|
std::string ckStr = dllPath + "ck.bmp";
|
|
@@ -1432,44 +1396,33 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
|
|
|
ErrorCodeEnum IDCerClassImpl::ForceIDEject()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- LogM("ForceIDEject() Entry.");
|
|
|
- if(!m_bDevOpen)
|
|
|
- {
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- //g_pLog->Print("ForceIDEject(), 设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- LogM("ForceIDEject(), 设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
+ LogM("ForceIDEject() Entry,line=%d", __LINE__);
|
|
|
+
|
|
|
int pos = -1;
|
|
|
ErrorCodeEnum nRet = QueryCardPos(pos);
|
|
|
if ((nRet == Error_Succeed) && pos == 0)
|
|
|
{
|
|
|
SaveErrorInfo("未检测到卡", Error_DevMedia);
|
|
|
- LogM("ForceIDEject(), 未检测到卡, nRet=%d", Error_DevMedia);
|
|
|
- return Error_DevMedia;
|
|
|
+ LogM("ForceIDEject(), 未检测到卡, nRet=%d,line=%d", Error_DevMedia, __LINE__);
|
|
|
+ //return Error_DevMedia;
|
|
|
}
|
|
|
int bRet = m_cBS_ID81IDCImpl.EjectIdCard(SecDeviceNum);
|
|
|
if (bRet != IDDIGITALCOPIER_NO_ERROR)
|
|
|
{
|
|
|
SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
- LogM("ForceIDEject(), 通讯异常, nRet=%d", Error_DevCommFailed);
|
|
|
+ LogM("ForceIDEject(), 通讯异常, nRet=%d, SecDeviceNum = %d,line=%d", bRet, SecDeviceNum, __LINE__);
|
|
|
return Error_DevCommFailed;
|
|
|
}
|
|
|
- LogM("ForceIDEject(), nRet=%d", Error_Succeed);
|
|
|
+ LogM("ForceIDEject(), nRet=%d, SecDeviceNum = %d,line=%d", bRet, SecDeviceNum, __LINE__);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
|
|
|
ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- if(!m_bDevOpen)
|
|
|
- {
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- LogM("ScanIDAndSaveImage(), 设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
+
|
|
|
memset(PhotoPath, 0, MAX_FILE_PATH);
|
|
|
- std::string dllPath;
|
|
|
+ std::string dllPath = "";
|
|
|
GetDllPathLocal(dllPath);
|
|
|
memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
|
|
|
char FileNamefront[256] = {0};
|
|
@@ -1478,13 +1431,33 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
|
|
|
strcat_s(FileNamefront, "idfront.bmp");
|
|
|
strcpy_s(FileNameback, PhotoPath);
|
|
|
strcat_s(FileNameback, "idback.bmp");
|
|
|
- int nRet = m_cBS_ID81IDCImpl.StartScan(SecDeviceNum);
|
|
|
+
|
|
|
+ DEVSTATUS m_DeviceStatus;
|
|
|
+ memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
|
|
|
+ int nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ sleep(1);
|
|
|
+ DevOpen(SecDeviceNum);
|
|
|
+ nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
+ LogM("DeviceStatus(), 通讯异常, nRet=%d,line=%d", nRet, __LINE__);
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ LogM("DeviceStatus()正常, nRet=%d, line=%d", nRet, __LINE__);
|
|
|
+ nRet = m_cBS_ID81IDCImpl.StartScan(SecDeviceNum);
|
|
|
if (nRet != IDDIGITALCOPIER_NO_ERROR)
|
|
|
{
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
- LogM("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
|
|
|
+ LogM("StartScan(), 通讯异常, nRet=%d, line=%d", nRet, __LINE__);
|
|
|
return Error_DevCommFailed;
|
|
|
}
|
|
|
+ LogM("StartScan()正常, nRet=%d, line=%d", nRet, __LINE__);
|
|
|
int iFrontLen;
|
|
|
int iRearLen;
|
|
|
//--------------改为与厂家DEMO相似,采用NEW方式申请数组空间;
|
|
@@ -1497,27 +1470,27 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
|
|
|
if (nRet != IDDIGITALCOPIER_NO_ERROR)
|
|
|
{
|
|
|
SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
- nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
|
|
|
- LogM("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
|
|
|
+ LogM("SaveToFile(), 通讯异常, nRet=%d,line=%d", Error_DevCommFailed, __LINE__);
|
|
|
delete []cFrontImgBuf;
|
|
|
delete []cRearImgBuf;
|
|
|
return Error_DevCommFailed;
|
|
|
}
|
|
|
+ LogM("SaveToFile()正常, nRet=%d, iFrontLen=%d, line=%d", nRet, iFrontLen, __LINE__);
|
|
|
}
|
|
|
+ LogM("ReadCard()正常, nRet=%d, iFrontLen = %d, line=%d", nRet, iFrontLen, __LINE__);
|
|
|
if (iRearLen>0)
|
|
|
{
|
|
|
nRet = m_cBS_ID81IDCImpl.SaveToFile(SecDeviceNum,cRearImgBuf,iRearLen,FileNameback,1);
|
|
|
if (nRet != IDDIGITALCOPIER_NO_ERROR)
|
|
|
{
|
|
|
SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
- nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
|
|
|
- LogM("ScanIDAndSaveImage(), 通讯异常, nRet=%d", Error_DevCommFailed);
|
|
|
+ LogM("SaveToFile(), 通讯异常, nRet=%d, iRearLen = %d, line=%d", Error_DevCommFailed, iRearLen, __LINE__);
|
|
|
delete []cFrontImgBuf;
|
|
|
delete []cRearImgBuf;
|
|
|
return Error_DevCommFailed;
|
|
|
}
|
|
|
+ LogM("SaveToFile()正常, nRet=%d, iRearLen = %d, line=%d", nRet, iRearLen, __LINE__);
|
|
|
}
|
|
|
- nRet = m_cBS_ID81IDCImpl.BackAndHoldCard(SecDeviceNum);
|
|
|
LogM("ScanIDAndSaveImage(), nRet=%d", Error_Succeed);
|
|
|
delete []cFrontImgBuf;
|
|
|
delete []cRearImgBuf;
|
|
@@ -1527,23 +1500,24 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
|
|
|
ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- LogM("QueryCardPos() Entry.");
|
|
|
- if(!m_bDevOpen)
|
|
|
- {
|
|
|
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
|
|
|
- LogM("QueryCardPos(), 设备未打开, nRet=%d", Error_DevNotAvailable);
|
|
|
- return Error_DevNotAvailable;
|
|
|
- }
|
|
|
+ LogM("QueryCardPos() Entry,line=%d", __LINE__);
|
|
|
|
|
|
DEVSTATUS m_DeviceStatus;
|
|
|
memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
|
|
|
|
|
|
int nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
- if (nRet != IDDIGITALCOPIER_NO_ERROR)
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
{
|
|
|
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
- LogM("QueryCardPos(), 通讯异常, nRet=%d", Error_DevCommFailed);
|
|
|
- return Error_DevCommFailed;
|
|
|
+ sleep(1);
|
|
|
+ DevOpen(SecDeviceNum);
|
|
|
+ nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
+ LogM("DeviceStatus(), 通讯异常, nRet=%d,line=%d", nRet, __LINE__);
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if ((m_DeviceStatus.iStatusInputSensorHaveCard == 1) &&
|
|
@@ -1551,22 +1525,22 @@ ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
|
|
|
(m_DeviceStatus.iStatusScanSensorHaveCard ==0))
|
|
|
{
|
|
|
pos = 2;
|
|
|
- LogM("QueryCardPos(), pos=2, 证件在进卡口");
|
|
|
+ LogM("QueryCardPos(), pos=2, 证件在进卡口,line=%d", __LINE__);
|
|
|
}
|
|
|
if ((m_DeviceStatus.iStatusMiddleSensorHaveCard == 1) ||
|
|
|
(m_DeviceStatus.iStatusScanSensorHaveCard ==1))
|
|
|
{
|
|
|
pos = 1;
|
|
|
- LogM("QueryCardPos(), pos=1, 证件在读卡器内部");
|
|
|
+ LogM("QueryCardPos(), pos=1, 证件在读卡器内部,line=%d", __LINE__);
|
|
|
}
|
|
|
if ((m_DeviceStatus.iStatusInputSensorHaveCard == 0) &&
|
|
|
(m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
|
|
|
(m_DeviceStatus.iStatusScanSensorHaveCard ==0))
|
|
|
{
|
|
|
pos = 0;
|
|
|
- LogM("QueryCardPos(), pos=0, 未检测到任何证件");
|
|
|
+ LogM("QueryCardPos(), pos=0, 未检测到任何证件,line=%d", __LINE__);
|
|
|
}
|
|
|
- LogM("QueryCardPos(), nRet=%d", Error_Succeed);
|
|
|
+ LogM("QueryCardPos(), nRet=%d,line=%d", Error_Succeed, __LINE__);
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
|
|
@@ -1578,6 +1552,7 @@ void IDCerClassImpl::SaveErrorInfo(CHAR* errMsg, int errCode)
|
|
|
memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
|
|
|
sprintf(m_szErrMsg, "%s[%d]", errMsg, errCode);
|
|
|
}
|
|
|
+
|
|
|
int IDCerClassImpl::string_format(std::string &str, const std::string fmt, ...)
|
|
|
{
|
|
|
char *buf;
|
|
@@ -1636,3 +1611,51 @@ std::string& IDCerClassImpl::trim(std::string &sStr, std::string sPatten)
|
|
|
sStr.erase(sStr.find_last_not_of(sPatten) + 1);
|
|
|
return sStr;
|
|
|
}
|
|
|
+
|
|
|
+ErrorCodeEnum IDCerClassImpl::OnCheckCard()
|
|
|
+{
|
|
|
+ int nRet = IDDIGITALCOPIER_NO_ERROR;
|
|
|
+ DEVSTATUS m_DeviceStatus;
|
|
|
+
|
|
|
+ memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
|
|
|
+ nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ sleep(1);
|
|
|
+ DevOpen(SecDeviceNum);
|
|
|
+ nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
|
|
|
+ if (nRet == IDDIGITALCOPIER_PORT_ERROR)
|
|
|
+ {
|
|
|
+ SaveErrorInfo("通讯异常", Error_DevCommFailed);
|
|
|
+ LogM("DeviceStatus(), 通讯异常, nRet=%d", nRet);
|
|
|
+ m_wDevStatus = DEVICE_STATUS_FAULT;
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ nRet = m_cBS_ID81IDCImpl.CheckIdCard(SecDeviceNum, 3000);
|
|
|
+ if ((IDDIGITALCOPIER_TIMEOUT_ERROR == nRet) ||
|
|
|
+ (IDDIGITALCOPIER_NO_CARD == nRet))
|
|
|
+ {
|
|
|
+ SaveErrorInfo("未检测到卡", Error_Unexpect);
|
|
|
+ LogE("IDCerAuthenticate(),未检测到卡, nRet=%d, SecDeviceNum=%d", nRet, SecDeviceNum);
|
|
|
+ return Error_Unexpect;
|
|
|
+ }
|
|
|
+ else if (IDDIGITALCOPIER_STATUS_PASSAGE_JAM == nRet)
|
|
|
+ {
|
|
|
+ char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
+ sprintf(err, "塞卡%d", nRet);
|
|
|
+ SaveErrorInfo(err, Error_Unexpect);
|
|
|
+ m_cBS_ID81IDCImpl.ResetWithAction(SecDeviceNum, 3);
|
|
|
+ LogE("IDCerAuthenticate(),塞卡后软复位,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
|
|
|
+ return Error_Unexpect;
|
|
|
+ }
|
|
|
+ else if (IDDIGITALCOPIER_NO_ERROR != nRet)
|
|
|
+ {
|
|
|
+ char err[MAX_DEV_ERROR_MSG_LEN] = {0};
|
|
|
+ sprintf(err, "通讯失败%d", nRet);
|
|
|
+ SaveErrorInfo(err, Error_DevConnFailed);
|
|
|
+ LogE("IDCerAuthenticate(),通讯失败,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
|
|
|
+ return Error_DevConnFailed;
|
|
|
+ }
|
|
|
+ return Error_Succeed;
|
|
|
+}
|