|
@@ -2,11 +2,12 @@
|
|
|
#include "ContactlessFSM.h"
|
|
|
#include "EventCode.h"
|
|
|
#include "GetDevInfoHelper.h"
|
|
|
-#include "ContactlessCard_msg_g.h"
|
|
|
#include "ModuleMix.h"
|
|
|
#include "ContactlessCard_UserErrorCode.h"
|
|
|
#include "CommDevEntityErrorCode.h"
|
|
|
|
|
|
+using namespace SP::Module::Comm;
|
|
|
+
|
|
|
const int GET_DEV_STATUS_COUNT = 3;
|
|
|
const int MAX_RESET_TIMES_PERIOD = 1000;//oiltest configure to ini file?
|
|
|
const int MAX_RESET_TIMEROUT = 5000;
|
|
@@ -239,19 +240,8 @@ unsigned int CContactlessCardFSM::s4_on_event(FSMEvent* pEvt)
|
|
|
}
|
|
|
case USER_EVT_EXIT:
|
|
|
case USER_EVT_EJECT:
|
|
|
- //case USER_EVT_ACCEPT:
|
|
|
{
|
|
|
pEvt->SetHandled();
|
|
|
- //if (pEvt->iEvt == USER_EVT_ACCEPT)
|
|
|
- //{
|
|
|
- // CardAcceptEvent *pCAE = dynamic_cast<CardAcceptEvent*>(pEvt);
|
|
|
- // pCAE->ctx->Answer(Error_Duplication);
|
|
|
- // return 0;
|
|
|
- //}
|
|
|
- //if ((pEvt->iEvt == USER_EVT_EXIT) && m_bIssued)
|
|
|
- //{
|
|
|
- // return 1;
|
|
|
- //}
|
|
|
CardEjectEvent *cee;
|
|
|
if (pEvt->iEvt == USER_EVT_EJECT)
|
|
|
cee = dynamic_cast<CardEjectEvent*>(pEvt);
|
|
@@ -306,44 +296,8 @@ unsigned int CContactlessCardFSM::s5_on_event(FSMEvent* pEvt)
|
|
|
Dbg("s5 event(%d)",pEvt->iEvt);
|
|
|
switch(pEvt->iEvt)
|
|
|
{
|
|
|
- //case USER_EVT_READFINISHED:
|
|
|
- // {
|
|
|
- // pEvt->SetHandled();
|
|
|
- // CardReadFinishedEvent *pCRFE = dynamic_cast<CardReadFinishedEvent *>(pEvt);
|
|
|
- // int err = pCRFE->param1;
|
|
|
- // Dbg("readfinish(%d)",err);
|
|
|
- // if (err == 0)
|
|
|
- // {
|
|
|
- // pCRFE->ctx->Answer(Error_Succeed);
|
|
|
- // return 0;
|
|
|
- // }else if (err == 2)
|
|
|
- // return 2;
|
|
|
- // else
|
|
|
- // return 1;
|
|
|
- // }
|
|
|
- // break;
|
|
|
- //case USER_EVT_READ_FINISHED:
|
|
|
- // {
|
|
|
- // pEvt->SetHandled();
|
|
|
- // CardReadFinishedEvent *pCRFE = dynamic_cast<CardReadFinishedEvent *>(pEvt);
|
|
|
- // int err = pCRFE->param1;
|
|
|
- // Dbg("read finish(%d)",err);
|
|
|
- // if (err == 0)
|
|
|
- // {
|
|
|
- // pCRFE->ctx->Answer(Error_Succeed);
|
|
|
- // return 0;
|
|
|
- // }else if (err == 2)
|
|
|
- // return 2;
|
|
|
- // else
|
|
|
- // {
|
|
|
- // pCRFE->ctx->Answer(Error_Unexpect);
|
|
|
- // return 1;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // break;
|
|
|
case USER_EVT_EXIT:
|
|
|
{
|
|
|
- //CardEjectEvent *cee = dynamic_cast<CardEjectEvent*>(pEvt);
|
|
|
EjectTask *task= new EjectTask(this);
|
|
|
task->ctx = NULL;
|
|
|
GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
|
|
@@ -542,16 +496,15 @@ unsigned int CContactlessCardFSM::s9_on_event(FSMEvent* pEvt)
|
|
|
ErrorCodeEnum CContactlessCardFSM::OnInit()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- /*------2020-02-27------*/
|
|
|
- //modify by LZM
|
|
|
- VendorLogControler(this,"ContactlessCard");
|
|
|
- /*---------------------*/
|
|
|
+ GET_DEV_ENTITY_BASE_POINTER()->InitializeVendorLogSwitch();
|
|
|
+
|
|
|
m_pCardProcess = new CCardProcess();
|
|
|
if (m_pCardProcess == NULL)//almost no use...
|
|
|
{
|
|
|
Dbg("create card process failed.");
|
|
|
return Error_Resource;
|
|
|
}
|
|
|
+
|
|
|
ErrorCodeEnum errCode = Load();
|
|
|
if (errCode != Error_Succeed)
|
|
|
{
|
|
@@ -561,23 +514,14 @@ ErrorCodeEnum CContactlessCardFSM::OnInit()
|
|
|
devStatus.eMediaPos = CI_MEDIA_NOTPRESENT;
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
+
|
|
|
ErrorCodeEnum CContactlessCardFSM::OnExit()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
ErrorCodeEnum eExit;
|
|
|
- if (m_pRFIC != NULL)
|
|
|
+ if (m_hDevHelper)
|
|
|
{
|
|
|
- eExit = m_pRFIC->GetDevStatus(devStatus);
|
|
|
- if (eExit == Error_Succeed)
|
|
|
- {
|
|
|
- if (devStatus.eMediaPos == CI_MEDIA_PRESENT){
|
|
|
- }
|
|
|
- }
|
|
|
- eExit = m_pRFIC->DevClose();
|
|
|
- if (eExit == Error_Succeed)
|
|
|
- Dbg("读卡器关闭成功");
|
|
|
- else
|
|
|
- Dbg("读卡器关闭失败(%d)",eExit);
|
|
|
+ m_hDevHelper.TearDown();
|
|
|
}
|
|
|
FSMImpl<CContactlessCardFSM>::OnExit();
|
|
|
return Error_Succeed;
|
|
@@ -585,61 +529,48 @@ ErrorCodeEnum CContactlessCardFSM::OnExit()
|
|
|
|
|
|
ErrorCodeEnum CContactlessCardFSM::Load()
|
|
|
{
|
|
|
- // MessageBoxA(0,0,0,0);
|
|
|
LOG_FUNCTION();
|
|
|
- HRESULT hr;
|
|
|
+
|
|
|
int initTries = 0;
|
|
|
bool bClosePort = false;
|
|
|
- ErrorCodeEnum eErrDev;
|
|
|
+ ErrorCodeEnum errDev;
|
|
|
CSimpleStringA dllName;
|
|
|
- eErrDev = SpGetDevAdaptorPath(m_pEntity,GetEntityBase()->GetEntityName(),dllName);
|
|
|
- if (eErrDev != Error_Succeed)
|
|
|
+
|
|
|
+ auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
|
|
|
+ errDev = pEntity->ExtractVendorLibFullPath(dllName);
|
|
|
+
|
|
|
+ Dbg("dllName = %s", dllName.GetData());
|
|
|
+ if (errDev != Error_Succeed)
|
|
|
{
|
|
|
- Dbg("load vendor dll(%s) failed.",(LPCTSTR)dllName);
|
|
|
+ Dbg("load vendor lib failed");
|
|
|
return Error_DevLoadFileFailed;
|
|
|
}
|
|
|
- Dbg("%s",(LPCTSTR)dllName);
|
|
|
+
|
|
|
+ errDev = m_hDevHelper.LoadUp(dllName);
|
|
|
+ if (Error_Succeed != errDev)
|
|
|
+ {
|
|
|
+ Dbg("load vendorlib or create DevAdapterObject failed.");
|
|
|
+ return Error_DevLoadFileFailed;
|
|
|
+ }
|
|
|
+
|
|
|
CSmartPointer<IEntityFunction> spEntityFunction = GetEntityBase()->GetFunction();
|
|
|
CSmartPointer<IConfigInfo> spConfig;
|
|
|
- eErrDev = spEntityFunction->OpenConfig(Config_Root, spConfig);
|
|
|
- if (eErrDev != Error_Succeed) {
|
|
|
+ errDev = spEntityFunction->OpenConfig(Config_Root, spConfig);
|
|
|
+ if (errDev != Error_Succeed) {
|
|
|
Dbg("open cfg file failed!");
|
|
|
- return eErrDev;
|
|
|
+ return errDev;
|
|
|
}
|
|
|
- CSimpleStringA csBinPath,csBackslash("\\");
|
|
|
+
|
|
|
+ CSimpleStringA csBinPath;
|
|
|
ErrorCodeEnum eErrPath = GetEntityBase()->GetFunction()->GetPath("Bin", csBinPath);
|
|
|
if (eErrPath != Error_Succeed)
|
|
|
{
|
|
|
Dbg("GetBasePath failed (%d).",eErrPath);
|
|
|
return Error_Param;
|
|
|
}
|
|
|
- m_hVerdorDll = LoadLibraryA(dllName);
|
|
|
- if (m_hVerdorDll == NULL)
|
|
|
- {
|
|
|
- Dbg("Load dll failed.%d",GetLastError());
|
|
|
- return Error_DevLoadFileFailed;
|
|
|
- }
|
|
|
- if ((CreateDevComponent = (lpCreateDevCom)GetProcAddress(m_hVerdorDll,"CreateDevComponent")) == NULL)
|
|
|
- {
|
|
|
- Dbg("Get CreateDevComponent failed.");
|
|
|
- return Error_DevLoadFileFailed;
|
|
|
- }
|
|
|
- if ((ReleaseDevComponent = (lpReleaseDevCom)GetProcAddress(m_hVerdorDll,"ReleaseDevComponent")) == NULL)
|
|
|
- {
|
|
|
- Dbg("Get ReleaseDevComponent failed.");
|
|
|
- return Error_DevLoadFileFailed;
|
|
|
- }
|
|
|
+
|
|
|
do{
|
|
|
- if (m_pRFIC == NULL)
|
|
|
- {
|
|
|
- if (CreateDevComponent((DeviceBaseClass *&)m_pRFIC) != Error_Succeed)
|
|
|
- {
|
|
|
- LOG_TRACE("创建读卡器设备模块失败");
|
|
|
- initTries++;
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
- // CardIssuerInitParam ciInitParam;
|
|
|
+ //CardIssuerInitParam ciInitParam;
|
|
|
int baudRate,port,smflag,onlineOnly;
|
|
|
|
|
|
spConfig->ReadConfigValueInt("Device.ContactlessCard","Baudrate",baudRate);
|
|
@@ -650,47 +581,49 @@ ErrorCodeEnum CContactlessCardFSM::Load()
|
|
|
m_bOnlineOnly = onlineOnly;
|
|
|
|
|
|
Dbg("open card issuer [%d][%d]",port,baudRate);
|
|
|
- hr = m_pRFIC->DevOpen(port,baudRate);
|
|
|
- Dbg("open[%d]",hr);
|
|
|
- if (hr == Error_Succeed)
|
|
|
+ errDev = m_hDevHelper->DevOpen(port, baudRate);
|
|
|
+ if (errDev == Error_Succeed)
|
|
|
{
|
|
|
+ Dbg("读卡器打开成功!");
|
|
|
bClosePort = true;
|
|
|
- LOG_TRACE("读卡器打开成功");
|
|
|
- //hr = m_pRFIC->Reset();
|
|
|
- //Dbg("cardreader reset(%d)",hr);
|
|
|
- //if (hr != Error_Succeed)
|
|
|
- //{
|
|
|
- // DevErrorInfo devErrInfo;
|
|
|
- // m_pRFIC->GetLastErr(devErrInfo);
|
|
|
- // Dbg("reset err[%s]",devErrInfo.szErrMsg);
|
|
|
- //}
|
|
|
+#ifdef RVC_OS_WIN
|
|
|
CSimpleStringA csCMBPrint("CMBPrint.dll");
|
|
|
- csCMBPrint = csBinPath + csBackslash + csCMBPrint;
|
|
|
- Dbg("cmbpath %s",(LPCTSTR)csCMBPrint);
|
|
|
- HMODULE hr = LoadLibraryA(csCMBPrint);
|
|
|
- if (hr == NULL)
|
|
|
+#else
|
|
|
+ CSimpleStringA csCMBPrint("CMBPrint.so");
|
|
|
+#endif // RVC_OS_WIN
|
|
|
+
|
|
|
+ csCMBPrint = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s",
|
|
|
+ csBinPath.GetData(), csCMBPrint.GetData());
|
|
|
+ Dbg("cmbpath %s",csCMBPrint.GetData());
|
|
|
+
|
|
|
+ toolkit_lib_t dlOpen;
|
|
|
+ int res = toolkit_dlopen(csCMBPrint, &dlOpen);
|
|
|
+ if (res != 0)
|
|
|
{
|
|
|
- Dbg("Load CMBPrint failed(%d).",hr);
|
|
|
+ Dbg("Load CMBPrint failed with error %s.", toolkit_dlerror(&dlOpen));
|
|
|
return Error_DevLoadFileFailed;
|
|
|
}
|
|
|
- if ((cmdDecodeMag2=(lpCMBdecodeMag2)GetProcAddress(hr, "CMBdecodeMag2")) == NULL)
|
|
|
+
|
|
|
+ if ((res = toolkit_dlsym(&dlOpen, "CMBdecodeMag2", (void**)& cmdDecodeMag2)) != 0)
|
|
|
{
|
|
|
Dbg("Get Mag2 address failed.");
|
|
|
return Error_DevLoadFileFailed;
|
|
|
}
|
|
|
- if ((cmdDecodeEx=(lpCMBdecodeEx)GetProcAddress(hr, "CMBdecodeEx")) == NULL)
|
|
|
+
|
|
|
+ if ((res = toolkit_dlsym(&dlOpen, "CMBdecodeEx", (void**)& cmdDecodeEx)) != 0)
|
|
|
{
|
|
|
Dbg("Get Mag23Ex address failed.");
|
|
|
return Error_DevLoadFileFailed;
|
|
|
}
|
|
|
+
|
|
|
initTries = 0;
|
|
|
break;
|
|
|
}
|
|
|
else {
|
|
|
- DevErrorInfo devErrInfo;
|
|
|
- m_pRFIC->GetLastErr(devErrInfo);
|
|
|
- Dbg("%s",devErrInfo.szErrMsg);
|
|
|
- Dbg("读卡器 DevOpen (%d)",hr);
|
|
|
+ WORD devErrCode = errDev;
|
|
|
+ CSimpleStringA errMsg = "";
|
|
|
+ GetAndSplitDevErrInfo(errMsg, devErrCode, "DevOpen");
|
|
|
+ Dbg("ContactlessCard DevOpen failed (%s)", SpStrError(errDev));
|
|
|
initTries++;
|
|
|
}
|
|
|
}while(initTries < INIT_TRY_NUM);
|
|
@@ -698,16 +631,16 @@ ErrorCodeEnum CContactlessCardFSM::Load()
|
|
|
if (initTries != 0)
|
|
|
{
|
|
|
if (bClosePort)
|
|
|
- m_pRFIC->DevClose();
|
|
|
- LOG_TRACE("读卡器打开失败");
|
|
|
+ m_hDevHelper->DevClose();
|
|
|
+ Dbg("读卡器打开失败");
|
|
|
return Error_DevCommFailed;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- eErrDev = spEntityFunction->OpenConfig(Config_Run, spConfig);
|
|
|
- if (eErrDev != Error_Succeed) {
|
|
|
+ errDev = spEntityFunction->OpenConfig(Config_Run, spConfig);
|
|
|
+ if (errDev != Error_Succeed) {
|
|
|
Dbg("open run cfg file failed!");
|
|
|
- return eErrDev;
|
|
|
+ return errDev;
|
|
|
}
|
|
|
int ret = 0,isIssue = 0;
|
|
|
if ((spConfig->ReadConfigValueInt("RunInfo","CardRemains",m_CardRemains) == Error_Succeed)
|
|
@@ -720,72 +653,58 @@ ErrorCodeEnum CContactlessCardFSM::Load()
|
|
|
{
|
|
|
Dbg("in %d cycle",isIssue);
|
|
|
m_bIssued = isIssue;
|
|
|
- //ret = UnAcceptCard();
|
|
|
- }
|
|
|
- else
|
|
|
- return Error_IO;
|
|
|
- if (ret == 0)
|
|
|
- {
|
|
|
- //m_pGUIConsoleClient = new GUIConsoleService_ClientBase(dynamic_cast<CCardIssuerEntity*>(GetEntityBase()));
|
|
|
- //ErrorCodeEnum eConn = m_pGUIConsoleClient->Connect();
|
|
|
- //if (eConn != Error_Succeed)
|
|
|
- //{
|
|
|
- // m_pGUIConsoleClient->SafeDelete();
|
|
|
- // m_pGUIConsoleClient = NULL;
|
|
|
- //}
|
|
|
- //else
|
|
|
- // Dbg("GUIConsole connected.");
|
|
|
+
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
else
|
|
|
- return Error_Unexpect;
|
|
|
+ return Error_IO;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
int CContactlessCardFSM::Initial()
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
bool CContactlessCardFSM::GetDevStatus()
|
|
|
{
|
|
|
//LOG_FUNCTION();
|
|
|
int getDevInfoCount = 0;
|
|
|
ErrorCodeEnum err;
|
|
|
do{
|
|
|
- err = m_pRFIC->GetDevStatus(devStatus);
|
|
|
+ err = m_hDevHelper->GetDevStatus(devStatus);
|
|
|
if (Error_Succeed == err)
|
|
|
return true;
|
|
|
else
|
|
|
{
|
|
|
- //if (Reset())
|
|
|
- // continue;
|
|
|
- //Dbg("GetDevStatus failed(%d).",hr);
|
|
|
DevErrorInfo devErrInfo;
|
|
|
- m_pRFIC->GetLastErr(devErrInfo);
|
|
|
+ m_hDevHelper->GetLastErr(devErrInfo);
|
|
|
Dbg("GetDevStatus:[%s]",devErrInfo.szErrMsg);
|
|
|
getDevInfoCount++;
|
|
|
- Sleep(3000);
|
|
|
+ SLEEP(3000);
|
|
|
}
|
|
|
} while (getDevInfoCount < GET_DEV_STATUS_COUNT);
|
|
|
Dbg("getdevstatus to reset");
|
|
|
- err = m_pRFIC->Reset();
|
|
|
- Sleep(MAX_RESET_TIMEROUT);
|
|
|
+ err = m_hDevHelper->Reset();
|
|
|
+ SLEEP(MAX_RESET_TIMEROUT);
|
|
|
if (err == Error_Succeed)
|
|
|
{
|
|
|
- err = m_pRFIC->GetDevStatus(devStatus);
|
|
|
+ err = m_hDevHelper->GetDevStatus(devStatus);
|
|
|
if (err == Error_Succeed && devStatus.eMediaPos == CI_MEDIA_PRESENT)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
int CContactlessCardFSM::Reset()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
ErrorCodeEnum eErr;
|
|
|
- eErr = m_pRFIC->Reset();
|
|
|
+ eErr = m_hDevHelper->Reset();
|
|
|
if (eErr == Error_Succeed)
|
|
|
{
|
|
|
- if (Error_Succeed == m_pRFIC->GetDevStatus(devStatus))
|
|
|
+ if (Error_Succeed == m_hDevHelper->GetDevStatus(devStatus))
|
|
|
{
|
|
|
|
|
|
Dbg("media position %d",devStatus.eMediaPos);
|
|
@@ -836,7 +755,7 @@ int CContactlessCardFSM::InternalAcceptCard()
|
|
|
else
|
|
|
{
|
|
|
acceptTries++;
|
|
|
- Sleep(ACCEPT_TRY_INTERVAL);
|
|
|
+ SLEEP(ACCEPT_TRY_INTERVAL);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -895,21 +814,11 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
|
|
|
m_pCardProcess->DataInit();
|
|
|
LogEvent(Severity_Middle,LOG_EVT_CONTACTLESS_CARD_GREEN_ON,"ContactCard green on");
|
|
|
m_bWaitAccepteMore = false;
|
|
|
- //GpioService_Set_Req Req;
|
|
|
- //GpioService_Set_Ans Ans;
|
|
|
- //Req.devseq = CARDREADER;
|
|
|
- //Req.mode = 1;
|
|
|
- //Req.close = 0;
|
|
|
- //CCardReaderEntity* pEntity = dynamic_cast<CCardReaderEntity*>(m_pEntity);
|
|
|
- //pEntity->SetGpio(Req,Ans);
|
|
|
int rc = InternalAcceptCard();
|
|
|
- //Req.devseq = CARDREADER;
|
|
|
- //Req.mode = 1;
|
|
|
- //Req.close = 1;
|
|
|
- //pEntity->SetGpio(Req,Ans);
|
|
|
+
|
|
|
LogEvent(Severity_Middle,LOG_EVT_CONTACTLESS_CARD_GREEN_OFF,"ContactCard green off");
|
|
|
+
|
|
|
if (rc == 0) {
|
|
|
- //FSMSetIssueFlag(false);
|
|
|
if (ctx != NULL)
|
|
|
{
|
|
|
Dbg("insert error_succeed");
|
|
@@ -919,7 +828,7 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
|
|
|
|
|
|
ctx->Ans.ICData = "";
|
|
|
int activeCardType;
|
|
|
- bool bGetICData = m_pCardProcess->DetectAndReadICData(CARD_MACHINE_RFIC, m_pRFIC, "A000000333", activeCardType);
|
|
|
+ bool bGetICData = m_pCardProcess->DetectAndReadICData(CARD_MACHINE_RFIC, m_hDevHelper, "A000000333", activeCardType);
|
|
|
if (!bGetICData)
|
|
|
{
|
|
|
Dbg("DetectAndReadICData failed.");
|
|
@@ -933,7 +842,7 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
|
|
|
if (m_pCardProcess->FindTagValue(TAG_VECTOR_IC,track2,false,0) == -1)
|
|
|
{
|
|
|
Dbg("[ic]no track2 data");
|
|
|
- eErr = m_pRFIC->HaltCard();
|
|
|
+ eErr = m_hDevHelper->HaltCard();
|
|
|
ctx->Answer(Error_Unexpect);//can't find track2,retry 20150128
|
|
|
}
|
|
|
else
|
|
@@ -956,7 +865,6 @@ int CContactlessCardFSM::AcceptCard(SpReqAnsContext<ContactlessCardService_Inser
|
|
|
ctx->Ans.status = 0;
|
|
|
delete[]ddd;
|
|
|
delete[]pICTrack2;
|
|
|
- //m_pRFIC->DeactContactlessICCard();
|
|
|
}
|
|
|
ctx->Answer(Error_Succeed);
|
|
|
}
|
|
@@ -991,7 +899,6 @@ static CSimpleStringA GetStrData(TrackInfo trackInfo)
|
|
|
case CI_DATA_INVALID:
|
|
|
strRet = "无效数据";
|
|
|
break;
|
|
|
- //case CI_DATA_MISSING:
|
|
|
default:
|
|
|
strRet = "数据丢失";
|
|
|
}
|
|
@@ -1039,19 +946,16 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
|
|
|
m_pCardProcess->SplitBusinessData("DF690101",strlen("DF690101"));
|
|
|
}
|
|
|
int activeCardType;
|
|
|
- if (!m_pCardProcess->DetectAndReadICData(CARD_MACHINE_RFIC, m_pRFIC, "A000000333", activeCardType))//oiltest 20140915
|
|
|
+ if (!m_pCardProcess->DetectAndReadICData(CARD_MACHINE_RFIC, m_hDevHelper, "A000000333", activeCardType))//oiltest 20140915
|
|
|
{
|
|
|
ctx->Answer(Error_Unexpect);
|
|
|
return 0;
|
|
|
}
|
|
|
- //if (m_cardType == CI_CARDTYPE_IC)
|
|
|
- //{
|
|
|
- // ProcessRestrict();
|
|
|
- // CardholderVerify();
|
|
|
+
|
|
|
m_pCardProcess->TermRiskManage();
|
|
|
CSimpleStringA taaResult;
|
|
|
BYTE bt9f27 = 0;
|
|
|
- int retTAA = m_pCardProcess->TermActionAnalyze(CARD_MACHINE_RFIC,m_pRFIC,taaResult,m_bOnlineOnly,m_bCDA,bt9f27);
|
|
|
+ int retTAA = m_pCardProcess->TermActionAnalyze(CARD_MACHINE_RFIC, m_hDevHelper,taaResult,m_bOnlineOnly,m_bCDA,bt9f27);
|
|
|
Dbg("TermActionAnalyze %d",retTAA);
|
|
|
switch(retTAA)
|
|
|
{//to be added oiltest 20140929
|
|
@@ -1065,8 +969,7 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
|
|
|
break;
|
|
|
}
|
|
|
ctx->Ans.result = taaResult;
|
|
|
- // Dbg("[%d,%d,%d,%d]",m_TVR[0],m_TVR[1],m_TVR[2],m_TVR[3]);
|
|
|
- //}
|
|
|
+
|
|
|
if (ctx->Ans.result.GetLength() == 0)
|
|
|
{
|
|
|
ctx->Answer(Error_Succeed);
|
|
@@ -1074,10 +977,6 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
|
|
|
}
|
|
|
Dbg("term action analyze result[%s]",(const char*)ctx->Ans.result);
|
|
|
|
|
|
- //char tmpResult[1024,]result[1024];
|
|
|
- //ZeroMemory(tmpResult,sizeof(tmpResult));
|
|
|
- //ZeroMemory(result,sizeof(result));
|
|
|
- //memcpy(tmpResult,ctx->Ans.result,ctx->Ans.result.GetLength());
|
|
|
string tmpResult, actionType, result = "", baseICData = "";
|
|
|
tmpResult = ctx->Ans.result;
|
|
|
char *pSomeICData = new char[1024];
|
|
@@ -1089,7 +988,12 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
|
|
|
|
|
|
char arqcLen[8];
|
|
|
ZeroMemory(arqcLen,sizeof(arqcLen));
|
|
|
- itoa(lenRet,arqcLen,10);
|
|
|
+#ifdef RVC_OS_WIN
|
|
|
+ itoa(lenRet, arqcLen, 10);
|
|
|
+#else
|
|
|
+ sprintf(arqcLen, "%d", lenRet);
|
|
|
+#endif // RVC_OS_WIN
|
|
|
+
|
|
|
ICData appExpiryDate(false,0x5f,0x24);
|
|
|
if (m_pCardProcess->FindTagValue(TAG_VECTOR_IC,appExpiryDate,false,0) == -1)
|
|
|
{
|
|
@@ -1115,7 +1019,6 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
|
|
|
if (m_pCardProcess->FindTagValue(TAG_VECTOR_IC,track2,false,0) == -1)
|
|
|
{
|
|
|
Dbg("[ic]no track2 data");
|
|
|
- //eErr = m_pRFIC->ReleaseIC();
|
|
|
Dbg("ic failed,release it %d",eErr);
|
|
|
}
|
|
|
else
|
|
@@ -1223,11 +1126,11 @@ int CContactlessCardFSM::PostOnline(SpReqAnsContext<ContactlessCardService_PostO
|
|
|
Dbg("post online data[%s]",(LPCTSTR)ctx->Req.data);
|
|
|
m_pCardProcess->SplitOnlineReplyData(ctx->Req.data,strlen(ctx->Req.data));
|
|
|
|
|
|
- int issBnkAuth = m_pCardProcess->IssueBankAuth(CARD_MACHINE_RFIC,m_pRFIC);
|
|
|
+ int issBnkAuth = m_pCardProcess->IssueBankAuth(CARD_MACHINE_RFIC, m_hDevHelper);
|
|
|
CSimpleStringA csTransEnd;
|
|
|
if (issBnkAuth == 0)
|
|
|
{
|
|
|
- int transEnd = m_pCardProcess->TransEnd(CARD_MACHINE_RFIC,m_pRFIC,m_bCDA);
|
|
|
+ int transEnd = m_pCardProcess->TransEnd(CARD_MACHINE_RFIC, m_hDevHelper,m_bCDA);
|
|
|
if (transEnd == 0)
|
|
|
csTransEnd = "TRANSEND,0";
|
|
|
else if (transEnd == 1)
|
|
@@ -1236,16 +1139,6 @@ int CContactlessCardFSM::PostOnline(SpReqAnsContext<ContactlessCardService_PostO
|
|
|
else
|
|
|
csTransEnd = "TRANSEND,1";
|
|
|
ctx->Ans.result = csTransEnd;
|
|
|
- //PBYTE pData = new BYTE[MAX_IC_BUFFER_SIZE];
|
|
|
- //ZeroMemory(pData,MAX_IC_BUFFER_SIZE);
|
|
|
- //int size = StrBuf2HexBuf(ctx->Req.data,&pData);
|
|
|
- //if (size > 0)
|
|
|
- //m_pCardProcess->ExecuteIssuerScript(CARD_MACHINE_ISSUER,m_pRFIC);
|
|
|
- //else
|
|
|
- //{
|
|
|
- // Dbg("Wrong post on line data[%s]",ctx->Req.data);
|
|
|
- // ctx->Answer(Error_Unexpect);
|
|
|
- //}
|
|
|
ctx->Answer(Error_Succeed);
|
|
|
return 0;
|
|
|
}
|
|
@@ -1256,7 +1149,7 @@ int CContactlessCardFSM::EjectCard(SpReqAnsContext<ContactlessCardService_Eject_
|
|
|
//eErr = MachineMoveCardFrontGate();
|
|
|
m_pCardProcess->DataInit();
|
|
|
int ret = 0;
|
|
|
- DWORD dwStart = GetTickCount();
|
|
|
+ ULLINT dwStart = RVCGetTickCount();
|
|
|
DWORD dwEnd = dwStart;
|
|
|
while(1)
|
|
|
{
|
|
@@ -1265,13 +1158,13 @@ int CContactlessCardFSM::EjectCard(SpReqAnsContext<ContactlessCardService_Eject_
|
|
|
ret = 2;
|
|
|
break;
|
|
|
}
|
|
|
- dwEnd = GetTickCount();
|
|
|
+ dwEnd = RVCGetTickCount();
|
|
|
if ((dwEnd-dwStart) > 58*1000)
|
|
|
{
|
|
|
ret = 2;
|
|
|
break;
|
|
|
}
|
|
|
- ErrorCodeEnum eErr = m_pRFIC->GetDevStatus(devStatus);
|
|
|
+ ErrorCodeEnum eErr = m_hDevHelper->GetDevStatus(devStatus);
|
|
|
if (eErr == Error_Succeed)
|
|
|
{
|
|
|
Dbg("devStatus.eMedia %d",devStatus.eMediaPos);
|
|
@@ -1284,7 +1177,7 @@ int CContactlessCardFSM::EjectCard(SpReqAnsContext<ContactlessCardService_Eject_
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- Sleep(100);
|
|
|
+ SLEEP(100);
|
|
|
}
|
|
|
Dbg("oiltest eject");
|
|
|
if (ctx != NULL)
|
|
@@ -1299,7 +1192,7 @@ int CContactlessCardFSM::WaitFetchingCard()
|
|
|
do {
|
|
|
if (GetDevStatus()){
|
|
|
if (devStatus.eMediaPos == CI_MEDIA_RF){
|
|
|
- Sleep(WAIT_INTERVAL);
|
|
|
+ SLEEP(WAIT_INTERVAL);
|
|
|
waitTries++;
|
|
|
}
|
|
|
else if (devStatus.eMediaPos == CI_MEDIA_NOTPRESENT){
|
|
@@ -1319,7 +1212,7 @@ int CContactlessCardFSM::WaitFetchingCard()
|
|
|
int CContactlessCardFSM::QueryCardInfo(SpReqAnsContext<ContactlessCardService_QueryCardInfo_Req, ContactlessCardService_QueryCardInfo_Ans>::Pointer ctx)
|
|
|
{
|
|
|
RFICReaderStatus devStatus;
|
|
|
- ErrorCodeEnum eErr = m_pRFIC->GetDevStatus(devStatus);
|
|
|
+ ErrorCodeEnum eErr = m_hDevHelper->GetDevStatus(devStatus);
|
|
|
if (eErr != Error_Succeed)
|
|
|
{
|
|
|
Dbg("GetDevStatus failed(%d).",eErr);
|
|
@@ -1351,7 +1244,7 @@ int CContactlessCardFSM::QueryCardInfo(SpReqAnsContext<ContactlessCardService_Qu
|
|
|
void CContactlessCardFSM::LogErrInfo(const char* msgHead)
|
|
|
{
|
|
|
DevErrorInfo errInfo;
|
|
|
- ErrorCodeEnum eErr = m_pRFIC->GetLastErr(errInfo);
|
|
|
+ ErrorCodeEnum eErr = m_hDevHelper->GetLastErr(errInfo);
|
|
|
if (eErr == Error_Succeed)
|
|
|
Dbg("%s,%s",msgHead,errInfo.szErrMsg);
|
|
|
}
|