|
|
@@ -0,0 +1,694 @@
|
|
|
+#include "contactless_impl.h"
|
|
|
+#include <cstring>
|
|
|
+#include <cstdio>
|
|
|
+#include <iostream>
|
|
|
+#include <string>
|
|
|
+#include <stdio.h>
|
|
|
+#include "log4vendor.h"
|
|
|
+
|
|
|
+extern char ** environ;
|
|
|
+//using namespace std;
|
|
|
+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)
|
|
|
+{
|
|
|
+
|
|
|
+ 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");
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ 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(INFO,"enter GetDevStatus ");
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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()
|
|
|
+{
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum ContactlessCardImpl::ActiveContactlessICCard(char fstType,char scdType,char thdType,char &outType)
|
|
|
+{
|
|
|
+ LOG4VTM(INFO,"enter : ActiveContactlessICCard");
|
|
|
+ outType = '0';
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+ 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(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)
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"iChipPower 7: fail");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"iChipPower 7: success");
|
|
|
+ }
|
|
|
+
|
|
|
+ tIDCStatusInfoEx l_srStatusInfo = {0};
|
|
|
+ l_srStatusInfo.byIssueCard = 0xFF; // 不获取发卡器状态
|
|
|
+
|
|
|
+ int l_iResult2 = m_pCardRFIDCDev->iGetDevStatus(&l_srStatusInfo, l_asReturn);
|
|
|
+ if (SUCCESS != l_iResult2)
|
|
|
+ {
|
|
|
+ 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
|
|
|
+ {
|
|
|
+ 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(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)
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"iChipPower 7 : fail");
|
|
|
+ }
|
|
|
+
|
|
|
+ tIDCStatusInfoEx l_srStatusInfo = {0};
|
|
|
+ l_srStatusInfo.byIssueCard = 0xFF; // 不获取发卡器状态
|
|
|
+
|
|
|
+ int l_iResult2 = m_pCardRFIDCDev->iGetDevStatus(&l_srStatusInfo, l_asReturn);
|
|
|
+ if (SUCCESS != l_iResult2)
|
|
|
+ {
|
|
|
+ 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
|
|
|
+ {
|
|
|
+
|
|
|
+ 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)
|
|
|
+{
|
|
|
+ return Error_NotImpl;
|
|
|
+}
|
|
|
+////禁用非接触式IC卡
|
|
|
+ErrorCodeEnum ContactlessCardImpl::DeactContactlessICCard()
|
|
|
+{
|
|
|
+ LOG4VTM(INFO,"enter : DeactContactlessICCard");
|
|
|
+
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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");
|
|
|
+
|
|
|
+ return Error_DevCommFailed;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum ContactlessCardImpl::WarmReset()
|
|
|
+{
|
|
|
+ LOG4VTM(INFO,"enter : WarmReset");
|
|
|
+ RFICReaderStatus devStatus;
|
|
|
+ if(GetDevStatus(devStatus)!=Error_Succeed)
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"GetDevStatus : fail");
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
+ if(devStatus.eMediaPos == CI_MEDIA_NOTPRESENT)
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"GetDevStatus : devStatus.eMediaPos == CI_MEDIA_NOTPRESENT");
|
|
|
+ return Error_NoTarget;
|
|
|
+ }
|
|
|
+
|
|
|
+ return Reset();
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum ContactlessCardImpl::MifareCommand(MifareFuctionEnum eFunType,CmdInfo sendBuf,CmdInfo &recvBuf)
|
|
|
+{
|
|
|
+//
|
|
|
+// 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)
|
|
|
+{
|
|
|
+
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+
|
|
|
+ recvBuf.dwSize = 0;
|
|
|
+ memset(&recvBuf,0,sizeof(recvBuf));
|
|
|
+
|
|
|
+
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
+ 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(INFO,"enter : HaltCard");
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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");
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum ContactlessCardImpl::GetDevCategory(DevCategoryInfo &devCategory)
|
|
|
+{
|
|
|
+ LOG4VTM(INFO,"enter : GetDevCategory");
|
|
|
+ if(m_pCardRFIDCDev == NULL)
|
|
|
+ {
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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=0, l_iMinor=1, l_iRevision=1, l_iBuild=65536;
|
|
|
+ //设备版本号 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(INFO,"enter : Reset");
|
|
|
+ if(m_pCardRFIDCDev==NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"iInit : fail");
|
|
|
+ return Error_DevCommFailed;
|
|
|
+ }
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum ContactlessCardImpl::DevClose()
|
|
|
+{
|
|
|
+ int l_iResult = m_pCardRFIDCDev->iCloseComm();//关闭通信
|
|
|
+ if(l_iResult != SUCCESS)
|
|
|
+ {
|
|
|
+ LOG4VTM(INFO,"iCloseComm : fail");
|
|
|
+ }
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum ContactlessCardImpl::GetLastErr(DevErrorInfo &devErrInfo)
|
|
|
+{
|
|
|
+ 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)
|
|
|
+{
|
|
|
+ memset(&m_tDevErrorInfo,0,sizeof(m_tDevErrorInfo));
|
|
|
+
|
|
|
+ std::string lCode ;//= int2str(logicCode);
|
|
|
+ std::string pCode ;//= int2str(phyCode);
|
|
|
+
|
|
|
+
|
|
|
+ std::string slCode = "{lastErrorCode:(logicCode: ";
|
|
|
+ std::string spCode = " PhyCode: ";
|
|
|
+ std::string strPhyCode = slCode + lCode + spCode + pCode+")}";
|
|
|
+
|
|
|
+ std::string msgError = msg + strPhyCode;
|
|
|
+ m_tDevErrorInfo.dwErrMsgLen = phyCode << 16;
|
|
|
+ memcpy(m_tDevErrorInfo.szErrMsg,msgError.c_str(),msgError.length());
|
|
|
+ m_tDevErrorInfo.dwErrMsgLen += (msgError.length() & 0x0000FFFF);
|
|
|
+
|
|
|
+}
|