| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783 |
- #include "idcertimpl.h"
- #include "log4vendor.h"
- #include "idcertimpl.h"
- IDCertImpl::IDCertImpl()
- {
- m_id81Dev = new IDCertConn();
- memset(m_DevErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
- strcat(m_DevErrInfo.szErrMsg, "成功");
- m_DevErrInfo.dwErrMsgLen = strlen(m_DevErrInfo.szErrMsg);
- m_bOpen = FALSE;
- m_iCardType = -1; //证件类型
- m_sLibPath[0] = 0;
- m_bReInsert = false;
- }
- void IDCertImpl::DeleteBmp()
- {
- if (m_sLibPath[0])
- {
- char sFile[300];
- sprintf(sFile, "%s/idfront.bmp", m_sLibPath);
- remove(sFile);
- sprintf(sFile, "%s/idback.bmp", m_sLibPath);
- remove(sFile);
- sprintf(sFile, "%s/zp.bmp", m_sLibPath);
- remove(sFile);
- }
- }
- IDCertImpl::~IDCertImpl()
- {
- if(m_id81Dev)
- {
- delete m_id81Dev;
- m_id81Dev = NULL;
- DeleteBmp();
- }
- m_bOpen= false;
- }
- 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 == NULL) return 0;
- pTemp = pFind - 1;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if (*pTemp == '.')
- ch2 = atoi(pTemp+1);
- pTemp--;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if (*pTemp == '.')
- ch1 = atoi(pTemp+1);
- return 1;
- }
- ErrorCodeEnum IDCertImpl::GetDevCategory(DevCategoryInfo &devCategory)
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- memset(&devCategory, 0, sizeof(devCategory));
- strcpy(devCategory.szVendor , "cw");
- strcpy(devCategory.szType ,"PVER=SNBC#MID=ID81");
- char sPath[256], sFile[128] = {0};
- GetCurLibsPath(sPath, sFile);
- short v1,v2;
- getFileVer(sFile, v1, v2);
- devCategory.version.wMajor = v1;
- devCategory.version.wMinor = v2;
- devCategory.version.wRevision = 0xffff;
- devCategory.version.wBuild = FILE_VERSION;
- Sleep(800);
- int iRt = m_id81Dev->getFWVersion(sPath); //"Main Firmware:FV1.001.05
- if (Error_Succeed == iRt)
- {
- char* pSP = strstr(sPath, "FV");
- if (pSP)
- strcpy(sFile, pSP+2);
- else
- strcpy(sFile, sPath);
- devCategory.eState = DEVICE_STATUS_NORMAL;
- }
- else
- {
- strcpy(sFile, "00000000");
- LOG4VTM(INFO, "GetDevCategory getFWVersion error");
- devCategory.eState = DEVICE_STATUS_CONNECTING;
- }
- sprintf(devCategory.szModel , "FWID=%s#STYLE=IG#FUNCTION=ITF", sFile);
- return Error_Succeed;
- }
- // Reset device.
- ErrorCodeEnum IDCertImpl::Reset()
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- // SAutoLock lock(&m_MutexLock);
- CancelWaitMediaInsert();
- int iRt = Error_Succeed;
- iRt = m_id81Dev->Reset(2);
- return HandleDevError(iRt, __FUNCTION__);
- }
- //
- // Close device and do the cleaning work.
- // ex. close connection,close port,release memery and so on
- ErrorCodeEnum IDCertImpl::DevClose()
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- // SAutoLock lock(&m_MutexLock);
- CancelWaitMediaInsert();
- int iRt = Error_Succeed;
- Sleep(300);
- iRt = m_id81Dev->closeDevice();
- m_bOpen = FALSE;
- if(iRt == CWERR_IDCARD_SUCCESS)
- return Error_Succeed;
- return Error_Succeed;
- }
- ErrorCodeEnum IDCertImpl::DevOpen(DWORD dwPort)
- {
- LOG4VTM_FUNCTION();
- // SAutoLock lock(&m_MutexLock);
- int iRt = Error_Succeed;
- m_bOpen = FALSE;
- GetCurLibsPath(m_sLibPath, NULL);
- char cFilePath[300] = {0};
- sprintf(cFilePath, "DevOpen GetCurProcPath = %s", m_sLibPath);
- LOG4VTM(INFO, cFilePath);
- sprintf(cFilePath, "%s/cw/libID81M.cw.so", m_sLibPath); //usr symbolic link to point the real so
- iRt = m_id81Dev->openDevice(cFilePath);
- if(iRt == CWERR_IDCARD_SUCCESS)
- {
- m_id81Dev->setAutoFeedEnable(0);
- m_bOpen = TRUE;
- }
- return HandleDevError(iRt, __FUNCTION__);
- }
- // 吞入式身份证读卡器的适配器,
- // 1.检测到有卡片插入,但不是身份证时,IDCerAuthenticate返回Error_DevMedia;
- // 2.未检测到卡片插入,IDCerAuthenticate返回Error_Unexpect;
- // 3.检测到身份证且认证成功(注意:部分厂商不做卡认证直接返回成功,需要根据实际情况按照步骤1和2返回对应值),IDCerAuthenticate返回Error_Succeed。
- ErrorCodeEnum IDCertImpl:: IDCerAuthenticate()
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- // SAutoLock lock(&m_MutexLock);
- int nCardST = 0, iRt = Error_Succeed;
- ErrorCodeEnum eRt = Error_Unexpect;
- m_iCardType = -1;
- iRt = m_id81Dev->GetStatus(nCardST);
- if(CWERR_IDCARD_SUCCESS == iRt)
- {
- switch(nCardST)
- {
- case CWINF_IDCARD_NOCARD: //无卡
- eRt = Error_Unexpect;
- break;
- case CWINF_IDCARD_CARDMIDDLE: //在读卡位
- iRt = m_id81Dev->getIDCardType(&m_iCardType);
- if(Error_Succeed == iRt)
- {
- if(0 == m_iCardType || 1 == m_iCardType || 2 == m_iCardType) //0:二代证 1:外国人 2:港澳居住证
- {
- eRt = Error_Succeed;
- }
- }
- else
- {
- eRt = Error_DevMedia;
- }
- break;
- default:
- eRt = Error_Unexpect;
- break;
- }
- }
- return eRt;
- }
- //dep目录说明:应用在上层目录,动态库在dep目录,生成的临时文件也在dep目录
- //当前目录和进程所在目录为上层目录,动态库和临时文件目录为dep子目录
- ErrorCodeEnum IDCertImpl::IDCerGetData(IDCerInfo &idCerInfo)
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- memset(&idCerInfo,0,sizeof(IDCerInfo));
- int iRt = Error_Succeed;
- char strName[256]={0};
- char strNameENG[256]={0};
- char strSex[256]={0};
- char strNation[256]={0};
- char strBirthday[256]={0};
- char strAddress[256]={0};
- char strNumber[256]={0};
- char strDepartment[256]={0};
- char strTimeLimitStart[256]={0};
- char strTimeLimitEnd[256]={0};
- char strVersion[256]={0};
- char strTXZCode[256]={0};
- char strIssuedSN[256]={0};
- char strReserveItem[256]={0};
- char strHeadPath[256] = {0};
- sprintf(strHeadPath, "%s/zp.bmp", m_sLibPath);
- remove(strHeadPath);
- // iRt = m_id81Dev->GetStatus(nCardST);
- // if((CWERR_IDCARD_INIT == iRt) || (CWERR_IDCARD_PORT_ERROR == iRt))
- // {
- // //LOG4VTM(INFO, "GetStatus failed!");
- // return HandleDevError(iRt,"GetStatus-nCardST = %d",nCardST);
- // }
- // SAutoLock lock(&m_MutexLock);
- iRt = m_id81Dev->GetID2InfoAll(strHeadPath, strName, strNameENG,
- strSex, strNation, strBirthday,
- strAddress, strNumber, strDepartment,
- strTimeLimitStart, strTimeLimitEnd, strVersion,
- strTXZCode, strReserveItem, strIssuedSN,
- m_iCardType);
- if(iRt != 0)
- return HandleDevError(iRt, __FUNCTION__);
- if (CWERR_IDCARD_SUCCESS == iRt)
- {
- char WZBuffer[64] = {0};
- char strTmp[30] = {0};
- //姓名
- memcpy(idCerInfo.name.data,strName,strlen(strName));
- idCerInfo.name.dwSize = strlen(strName);
- //性别
- memcpy(idCerInfo.sex.data,strSex,strlen(strSex));
- idCerInfo.sex.dwSize = strlen(strSex);
- //民族
- memcpy(idCerInfo.nation.data,strNation,strlen(strNation));
- idCerInfo.nation.dwSize = strlen(strNation);
- //出生日期
- memset(WZBuffer, 0, 64);
- memset(strTmp, 0, 30);
- memcpy(WZBuffer,strBirthday,8);
- memcpy(idCerInfo.birthday.data,&WZBuffer[0],4);
- strcat(idCerInfo.birthday.data,"年");
- memcpy(strTmp,&WZBuffer[4],2);
- strcat(idCerInfo.birthday.data,strTmp);
- strcat(idCerInfo.birthday.data,"月");
- memcpy(strTmp,&WZBuffer[6],2);
- strcat(idCerInfo.birthday.data,strTmp);
- strcat(idCerInfo.birthday.data,"日");
- idCerInfo.birthday.dwSize = 14;
- //地址
- memcpy(idCerInfo.address.data,strAddress,strlen(strAddress));
- idCerInfo.address.dwSize = strlen(strAddress);
- //身份证号码
- memcpy(idCerInfo.idno.data,strNumber,strlen(strNumber));
- idCerInfo.idno.dwSize = strlen(strNumber);
- //发证机关
- memcpy(idCerInfo.department.data,strDepartment,strlen(strDepartment));
- idCerInfo.department.dwSize = strlen(strDepartment);
- //有效期始
- memset(WZBuffer, 0, 64);
- memset(strTmp, 0, 30);
- memcpy(WZBuffer,strTimeLimitStart,8);
- memcpy(idCerInfo.startDate.data,&WZBuffer[0],4);
- strcat(idCerInfo.startDate.data,".");
- memcpy(strTmp,&WZBuffer[4],2);
- strcat(idCerInfo.startDate.data,strTmp);
- strcat(idCerInfo.startDate.data,".");
- memcpy(strTmp,&WZBuffer[6],2);
- strcat(idCerInfo.startDate.data,strTmp);
- idCerInfo.startDate.dwSize = 10;
- //有效期止
- if(strlen(strTimeLimitEnd)<8) //长期身份证
- {
- memcpy(idCerInfo.endDate.data,&strTimeLimitEnd[0],6);
- idCerInfo.endDate.dwSize = 6;
- }
- else
- {
- memset(WZBuffer, 0, 64);
- memset(strTmp, 0, 30);
- memcpy(WZBuffer,strTimeLimitEnd,8);
- memcpy(idCerInfo.endDate.data,&WZBuffer[0],4);
- strcat(idCerInfo.endDate.data,".");
- memcpy(strTmp,&WZBuffer[4],2);
- strcat(idCerInfo.endDate.data,strTmp);
- strcat(idCerInfo.endDate.data,".");
- memcpy(strTmp,&WZBuffer[6],2);
- strcat(idCerInfo.endDate.data,strTmp);
- idCerInfo.endDate.dwSize = 10;
- }
- //set result
- memcmp(idCerInfo.photoPath.data, strHeadPath, strlen(strHeadPath));
- idCerInfo.photoPath.dwSize = strlen(idCerInfo.photoPath.data);
- }
- return Error_Succeed;
- }
- //dep目录说明:应用在上层目录,动态库在dep目录,生成的临时文件也在dep目录
- //当前目录和进程所在目录为上层目录,动态库和临时文件目录为dep子目录
- ErrorCodeEnum IDCertImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- memset(&idCerInfoEx,0,sizeof(IDCerInfoEx));
- int iRt = Error_Succeed;
- char strName[256]={0};
- char strNameENG[256]={0};
- char strSex[256]={0};
- char strNation[256]={0};
- char strBirthday[256]={0};
- char strAddress[256]={0};
- char strNumber[256]={0};
- char strDepartment[256]={0};
- char strTimeLimitStart[256]={0};
- char strTimeLimitEnd[256]={0};
- char strVersion[256]={0};
- char strTXZCode[256]={0};
- char strIssuedSN[256]={0};
- char strReserveItem[256]={0};
- char strHeadPath[256] = {0};
- sprintf(strHeadPath, "%s/zp.bmp", m_sLibPath);
- // iRt = m_id81Dev->GetStatus(nCardST);
- // if((CWERR_IDCARD_INIT == iRt) || (CWERR_IDCARD_PORT_ERROR == iRt))
- // {
- // //LOG4VTM(INFO, "GetStatus failed!");
- // return HandleDevError(iRt,"GetStatus-nCardST = %d",nCardST);
- // }
- // SAutoLock lock(&m_MutexLock);
- iRt = m_id81Dev->GetID2InfoAll(strHeadPath, strName, strNameENG,
- strSex, strNation, strBirthday,
- strAddress, strNumber, strDepartment,
- strTimeLimitStart, strTimeLimitEnd, strVersion,
- strTXZCode, strReserveItem, strIssuedSN,
- m_iCardType);
- if(iRt != 0)
- return HandleDevError(iRt, __FUNCTION__);
- char WZBuffer[64] = {0};
- char strTmp[30] = {0};
- sprintf(strTmp, "GetID2InfoAll type=%d",m_iCardType);
- LOG4VTM(INFO, strTmp);
- //姓名
- memcpy(idCerInfoEx.name.data,strName,strlen(strName));
- idCerInfoEx.name.dwSize = strlen(strName);
- //性别
- memcpy(idCerInfoEx.sex.data,strSex,strlen(strSex));
- idCerInfoEx.sex.dwSize = strlen(strSex);
- //出生日期
- memset(WZBuffer, 0, 64);
- memset(strTmp, 0, 30);
- memcpy(WZBuffer,strBirthday,8);
- memcpy(idCerInfoEx.birthday.data,&WZBuffer[0],4);
- strcat(idCerInfoEx.birthday.data,"年");
- memcpy(strTmp,&WZBuffer[4],2);
- strcat(idCerInfoEx.birthday.data,strTmp);
- strcat(idCerInfoEx.birthday.data,"月");
- memcpy(strTmp,&WZBuffer[6],2);
- strcat(idCerInfoEx.birthday.data,strTmp);
- strcat(idCerInfoEx.birthday.data,"日");
- idCerInfoEx.birthday.dwSize = 14;
- //身份证号码
- memcpy(idCerInfoEx.idno.data,strNumber,strlen(strNumber));
- idCerInfoEx.idno.dwSize = strlen(strNumber);
- //发证机关
- memcpy(idCerInfoEx.department.data,strDepartment,strlen(strDepartment));
- idCerInfoEx.department.dwSize = strlen(strDepartment);
- //有效期始
- memset(WZBuffer, 0, 64);
- memset(strTmp, 0, 30);
- memcpy(WZBuffer,strTimeLimitStart,8);
- memcpy(idCerInfoEx.startDate.data,&WZBuffer[0],4);
- strcat(idCerInfoEx.startDate.data,".");
- memcpy(strTmp,&WZBuffer[4],2);
- strcat(idCerInfoEx.startDate.data,strTmp);
- strcat(idCerInfoEx.startDate.data,".");
- memcpy(strTmp,&WZBuffer[6],2);
- strcat(idCerInfoEx.startDate.data,strTmp);
- idCerInfoEx.startDate.dwSize = 10;
- //有效期止
- if(strlen(strTimeLimitEnd)<8) //长期身份证
- {
- memcpy(idCerInfoEx.endDate.data,&strTimeLimitEnd[0],8);
- idCerInfoEx.endDate.dwSize = strlen(strTimeLimitEnd);
- }
- else
- {
- memset(WZBuffer, 0, 64);
- memset(strTmp, 0, 30);
- memcpy(WZBuffer,strTimeLimitEnd,8);
- memcpy(idCerInfoEx.endDate.data,&WZBuffer[0],4);
- strcat(idCerInfoEx.endDate.data,".");
- memcpy(strTmp,&WZBuffer[4],2);
- strcat(idCerInfoEx.endDate.data,strTmp);
- strcat(idCerInfoEx.endDate.data,".");
- memcpy(strTmp,&WZBuffer[6],2);
- strcat(idCerInfoEx.endDate.data,strTmp);
- idCerInfoEx.endDate.dwSize = 10;
- }
- //set result
- memcmp(idCerInfoEx.photoPath.data, strHeadPath, strlen(strHeadPath));
- idCerInfoEx.photoPath.dwSize = strlen(idCerInfoEx.photoPath.data);
- //不同证件类型字段区分开来
- switch(m_iCardType)
- {
- case 0://二代身份证
- {
- LOG4VTM(INFO, "证件类型为二代身份证");
- //类型:空
- memset(idCerInfoEx.idType.data, NULL, IDCER_EIGHT_BYTE_SIZE);
- //民族
- memcpy(idCerInfoEx.nation.data,strNation,strlen(strNation));
- idCerInfoEx.nation.dwSize = strlen(strNation);
- //地址
- memcpy(idCerInfoEx.address.data,strAddress,strlen(strAddress));
- idCerInfoEx.address.dwSize = strlen(strAddress);
- }
- break;
- case 1://外国人永久居留证
- {
- LOG4VTM(INFO, "IDCerGetDataEx 证件类型为外国人永久居留证");
- //类型:I
- memcpy(idCerInfoEx.idType.data, "I", 1);
- //英文姓名
- memcpy(idCerInfoEx.englishName.data,strNameENG,strlen(strNameENG));
- idCerInfoEx.englishName.dwSize = strlen(strNameENG);
- //国籍
- memcpy(idCerInfoEx.nationality.data,strNation,strlen(strNation));
- idCerInfoEx.nationality.dwSize = strlen(strNation);
- //证件版本号
- memcpy(idCerInfoEx.idVersion.data,strVersion,strlen(strVersion));
- idCerInfoEx.idVersion.dwSize = strlen(strVersion);
- //保留字段
- memcpy(idCerInfoEx.reserved.data,strReserveItem,strlen(strReserveItem));
- idCerInfoEx.reserved.dwSize = strlen(strReserveItem);
- }
- break;
- case 2://港澳台居民居住证
- {
- LOG4VTM(INFO, "IDCerGetDataEx 证件类型为港澳台居住证");
- //类型:J
- memcpy(idCerInfoEx.idType.data, "J", 1);
- //居住证号码
- memcpy(idCerInfoEx.txzCode.data,strTXZCode,strlen(strTXZCode));
- idCerInfoEx.txzCode.dwSize = strlen(strTXZCode);
- //签发次数
- memcpy(idCerInfoEx.issuedSN.data,strIssuedSN,strlen(strIssuedSN));
- idCerInfoEx.issuedSN.dwSize = strlen(strIssuedSN);
- //地址
- memcpy(idCerInfoEx.address.data,strAddress,strlen(strAddress));
- idCerInfoEx.address.dwSize = strlen(strAddress);
- }
- break;
- default:
- LOG4VTM(INFO, "IDCerGetDataEx 证件类型有误");
- break;
- }
- return Error_Succeed;
- }
- // 强制弹出身份证等证件
- // Force ID Card to eject。
- //
- ErrorCodeEnum IDCertImpl:: ForceIDEject()
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- // SAutoLock lock(&m_MutexLock);
- CancelWaitMediaInsert();
- Sleep(300);
- int nCardST = 0;
- int iRt = m_id81Dev->GetStatus(nCardST);
- if(iRt != CWERR_IDCARD_SUCCESS)
- return HandleDevError(iRt, "ForceIDEject GetStatus");
- iRt = m_id81Dev->Tackout();
- return HandleDevError(iRt, __FUNCTION__);
- }
- //dep目录说明:应用在上层目录,动态库在dep目录,生成的临时文件也在dep目录
- //当前目录和进程所在目录为上层目录,动态库和临时文件目录为dep子目录
- ErrorCodeEnum IDCertImpl:: ScanIDAndSaveImage()
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- char szIDFront[MAX_PATH] = {0};
- char szIDBack[MAX_PATH] = {0};
- sprintf(szIDFront, "%s/idfront.bmp", m_sLibPath);
- sprintf(szIDBack, "%s/idback.bmp", m_sLibPath);
- // SAutoLock lock(&m_MutexLock);
- if (m_bReInsert) Sleep(1000);//连续测试发热较大
- int iRt = m_id81Dev->DoScan(szIDFront,szIDBack);
- if(CWERR_IDCARD_SUCCESS != iRt)
- {
- return HandleDevError(iRt, __FUNCTION__);
- }
- // iRt = m_id81Dev->ejectToRerec();
- // if(CWERR_IDCARD_SUCCESS != iRt)
- // {
- // LOG4VTM(ERROR, "EjectToRerec Failed!");
- // }
- return HandleDevError(iRt, __FUNCTION__);
- }
- // 获取卡片是否插入或者取走
- // Query if ID Card have been inserted or fetched。
- // pos:
- // -- 0,未检测到任何证件;1,证件在读卡器内部;2,证件在进卡口
- ErrorCodeEnum IDCertImpl:: QueryCardPos(int &pos)
- {
- LOG4VTM_FUNCTION();
- if (!m_bOpen)
- HandleDevError(DEV_NOT_OPEN, __FUNCTION__);
- int iRt = Error_Succeed;
- int nCardST = 0;
- // SAutoLock lock(&m_MutexLock);
- iRt = m_id81Dev->GetStatus(nCardST);
- if(CWERR_IDCARD_SUCCESS == iRt)
- {
- switch(nCardST)
- {
- case CWINF_IDCARD_NOCARD:
- pos = 0;
- break;
- case CWINF_IDCARD_CARDMIDDLE:
- case CWINF_IDCARD_CARDSCAN:
- pos = 1;
- break;
- case CWINF_IDCARD_CARDENTRY:
- pos = 2;
- break;
- }
- char szRet[1024] = {0};
- sprintf(szRet, "QueryCardPos Card pos=%d Status(%d):NOCARD(1) SCAN(2) MIDDLE(3) ENTRY(4) JAM(5) UNKNOWN(9)",pos, nCardST);
- LOG4VTM(INFO, szRet);
- return Error_Succeed;
- }
- return HandleDevError(iRt, __FUNCTION__);
- }
- BOOL IDCertImpl::RecordSoftVersion(DevSoftVersion &devSoftVersion)
- {
- return TRUE;
- }
- // Get last error the device issued.
- // Error message must include explanatory memorandum ,the original error
- // code and anything in favour of location problem.
- ErrorCodeEnum IDCertImpl::GetLastErr(DevErrorInfo &devErrInfo)
- {
- ErrorCodeEnum eRt = Error_Succeed;
- devErrInfo.dwErrMsgLen = m_DevErrInfo.dwErrMsgLen;
- memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
- memcpy(devErrInfo.szErrMsg,m_DevErrInfo.szErrMsg,m_DevErrInfo.dwErrMsgLen&0x0000FFFF);
- return eRt;
- }
- ErrorCodeEnum IDCertImpl::HandleDevError(int nRt, LPCTSTR lpszFormat, ...)
- {
- ErrorCodeEnum eRt = Error_Succeed;
- WORD wHWErrorCode = DEC_SUCCESS; //硬件设备错误码
- char errMsg[300] = {0};
- va_list arglist;
- va_start(arglist, lpszFormat);
- _vsnprintf(errMsg, 128, lpszFormat, arglist);
- va_end(arglist);
- string m_strError;
- switch (nRt)
- {
- case 0:
- wHWErrorCode = DEC_SUCCESS;
- eRt = Error_Succeed;
- strcat(errMsg, " success");
- break;
- case CWERR_PUBLIC_TIMEOUT:
- wHWErrorCode = DEC_TIMEOUT;
- eRt = Error_TimeOut;
- strcat(errMsg, " TimeOut");
- break;
- case CWERR_PUBLIC_WINAPI:
- wHWErrorCode = DEC_FILE_NOT_FOUND;
- strcat(errMsg, " FILE_NOT_FOUND");
- eRt = Error_Stoped;
- break;
- case -1:
- wHWErrorCode = DEC_HARDWARE;
- strcat(errMsg, " device error");
- eRt = Error_Hardware;
- break;
- case DEV_NOT_OPEN:
- wHWErrorCode = DEC_DEV_NOT_OPENED;
- strcat(errMsg, " device not open");
- eRt = Error_Stoped;
- break;
- case CWERR_IDCARD_CARD_JAM:
- strcat(errMsg, " CARD_JAM");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_DevMedia;
- break;
- // case CWERR_IDCARD_NOT_CONNECTED:
- // strInfo += _T("-CWERR_IDCARD_NOT_CONNECTED");
- // wHWErrorCode = DEC_HARDWARE;
- // eRt = Error_Stoped;
- // break;
- case CWERR_IDCARD_PORT_ERROR:
- strcat(errMsg, " PORT_ERROR");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_Stoped;
- break;
- case CWERR_IDCARD_COVER_OPENED:
- strcat(errMsg, " COVER_OPENED");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_Stoped;
- break;
- case CWERR_IDCARD_NO_CARD:
- strcat(errMsg, " NO_CARD");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_Stoped;
- break;
- case CWERR_IDCARD_IDDATA_ERR:
- strcat(errMsg, " IDDATA_ERR");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_Stoped;
- break;
- case CWERR_IDCARD_NO_IDDATA:
- strcat(errMsg, " NO_IDDATA");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_Stoped;
- break;
- default:
- strcat(errMsg, " other error");
- wHWErrorCode = DEC_HARDWARE;
- eRt = Error_Stoped;
- break;
- }
- //if(!strInfo.IsEmpty())
- // strInfo = strInfo +_T("+") + strInfo;
- //对dwErrMsgLen字段进行拆分
- // 高两字节存储硬件设备错误码 (dwErrMsgLen & 0xFFFF0000)
- // 低两字节保留以前的作用即:存储错误信息字符串szErrMsg的实际有效长度
- memset(m_DevErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
- //int k = wcstombs(m_DevErrInfo.szErrMsg,wc,MAX_DEV_ERROR_MSG_LEN);
- //int nReturnlen=WideCharToMultiByte(CP_ACP,0,strInfo.GetBuffer(0),-1,m_DevErrInfo.szErrMsg,MAX_DEV_ERROR_MSG_LEN,NULL,NULL);
- sprintf(m_DevErrInfo.szErrMsg, "{\"ErrCode\":\"%04x\",\"Description\":\"%s\"}", eRt, errMsg);
- // memcpy(m_DevErrInfo.szErrMsg, strInfo.data(), strInfo.length());
- m_DevErrInfo.dwErrMsgLen = (wHWErrorCode<<16)&0xFFFF0000;
- m_DevErrInfo.dwErrMsgLen += strlen(m_DevErrInfo.szErrMsg)&0x0000FFFF;
- if (eRt != Error_Succeed)
- LOG4VTM(WARN, m_DevErrInfo.szErrMsg);
- else
- LOG4VTM(INFO, m_DevErrInfo.szErrMsg);
- return eRt;
- }
- void IDCertImpl::CancelWaitMediaInsert()
- {
- m_id81Dev->setAutoFeedEnable(0);
- }
- ErrorCodeEnum IDCertImpl:: IDCerRFControl(bool bControl)
- {
- LOG4VTM_FUNCTION();
- m_iCardType = -1;
- // SAutoLock lock(&m_MutexLock);
- // CancelWaitMediaInsert();
- // int nCardST = 0;
- // int iRt = m_id81Dev->GetStatus(nCardST);
- // if(iRt != CWERR_IDCARD_SUCCESS)
- // return HandleDevError(iRt, "IDCerRFControl GetStatus");
- int iRt = 0;
- if(bControl)
- {
- char sMsg[300] = {0};
- DeleteBmp();
- int iPos = 0;
- LOG4VTM(INFO, "IDCerRFControl enable");
- iRt = m_id81Dev->GetStatus(iPos);
- sprintf(sMsg, "IDCerRFControl enable ret %d pos %d", iRt, iPos);
- LOG4VTM(INFO, sMsg);
- if(iRt != CWERR_IDCARD_SUCCESS)
- return HandleDevError(iRt, "IDCerRFControl true GetStatus");
- if (iPos == CWINF_IDCARD_CARDJAM)
- {
- LOG4VTM(INFO, "IDCerRFControl CARDJAM");
- m_id81Dev->Reset(2);
- LOG4VTM(INFO, "IDCerRFControl GetStatus2");
- m_id81Dev->GetStatus(iPos);
- }
- if (iPos == CWINF_IDCARD_CARDENTRY)
- {
- /*
- m_id81Dev->doCardIn();
- m_id81Dev->GetStatus(iPos);
- if (iPos == CWINF_IDCARD_CARDENTRY)
- {
- iRt = m_id81Dev->BackInside();
- return HandleDevError(iRt, "IDCerRFControl true BackInside");
- }
- return HandleDevError(0, "IDCerRFControl true doCardIn ok");
- /*/
- m_bReInsert = true;
- LOG4VTM(INFO, "IDCerRFControl BackInside");
- iRt = m_id81Dev->BackInside();
- return HandleDevError(iRt, "IDCerRFControl true BackInside");
- //*/
- }
- else
- {
- m_bReInsert = false;
- iRt = m_id81Dev->setAutoFeedEnable(1);
- return HandleDevError(iRt, "IDCerRFControl true setAutoFeedEnable 1");
- }
- }
- else
- {
- m_id81Dev->setAutoFeedEnable(0);
- iRt = m_id81Dev->eject();
- return HandleDevError(iRt, "IDCerRFControl false setAutoFeedEnable 0");
- }
- }
- void IDCertImpl::ThreadRun()
- {
- }
- void IDCertImpl::Start()
- {
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
- pthread_create(&m_hThreadID, &attr, Proc, (void*) this);
- pthread_attr_destroy(&attr);
- }
- void* IDCertImpl::Proc(void* inPara)
- {
- IDCertImpl* pCtrl = (IDCertImpl*)inPara;
- pCtrl->ThreadRun();
- CloseThread(pCtrl->m_hThreadID);
- return 0;
- }
- void IDCertImpl::CloseThread(pthread_t& h)
- {
- pthread_exit(0);
- }
|