📄 kdcardctl.cpp
字号:
{
SetEvent(hKillThread);
TraceDebug("关闭控件CloseDevice,发送退出线程信号:", mThreadRunning); //可能会出现弹卡失败,从此退出程序,却没关串口
}
if(FinishThreadFlag == 1)
{
if(WaitForSingleObject(hFinishThread, 4000) == WAIT_TIMEOUT)
{
TraceDebug("强迫杀死事件!", 0); //可能会出现弹卡失败,从此退出程序,却没关串口
TerminateThread(threadHandle,0L);
}
}
else
{
if(mThreadRunning==1)
{
if(WaitForSingleObject(hFinishThread, 4000) == WAIT_TIMEOUT)
{
TraceDebug("强迫杀死事件!", 0); //11月21日改,可能会出现弹卡失败,从此退出程序,却没关串口
TerminateThread(threadHandle,0L);
}
}
else
{
TraceDebug("线程未完全启动!", 0);
TerminateThread(threadHandle, 0L);
}
}
mThreadRunning = 0;
if(NULL != threadHandle)
{
CloseHandle(threadHandle);
threadHandle = NULL;
}
pCom->KD6006.gCom.AsynClose();
ret=pCom->kde4787.EjectCard(0);
pCom->InitingKDE = 0;
mDeviceCloseing = 1;
TraceDebug("关闭控件CloseDevice,退卡返回值:", ret); //可能会出现弹卡失败,从此退出程序,却没关串口
return 0;
}
short CKDCARDCtrl::GetDeviceStatus()
{
// TODO: Add your property handler here
return pCom->mDeviceType;
}
void CKDCARDCtrl::SetDeviceStatus(short nNewValue)
{
// TODO: Add your property handler here
SetModifiedFlag();
}
short CKDCARDCtrl::EjectCardKDE()
{
// TODO: Add your dispatch handler code here
if(mThreadRunning == 1)
{
SetEvent(hKillThread);
}
pCom->KD6006.gCom.AsynClose();
TraceDebug("ZT606 Close Com Ok", 0);
pCom->kde4787.EjectCard(0);
pCom->InitingKDE = 0;
return 0;
}
short CKDCARDCtrl::GetExtPortKD6006()
{
// TODO: Add your property handler here
return 0;
}
void CKDCARDCtrl::SetExtPortKD6006(short nNewValue)
{
// TODO: Add your property handler here
pCom->KD6006.zSetExtPort(nNewValue);
SetModifiedFlag();
}
short CKDCARDCtrl::GetExtPortKDE()
{
// TODO: Add your property handler here
return 0;
}
void CKDCARDCtrl::SetExtPortKDE(short nNewValue)
{
// TODO: Add your property handler here
pCom->kde4787.zSetExtPort(nNewValue);
SetModifiedFlag();
}
short CKDCARDCtrl::GetPortFromIni()
{
// TODO: Add your dispatch handler code here
short nPort;
nPort = GetPrivateProfileInt("KDE4787","SerialPort", 0, "KDDEV.INI");
pCom->kde4787.zSetPort(nPort);
nPort = GetPrivateProfileInt("KDE4787","ExtPort", 0, "KDDEV.INI");
pCom->kde4787.zSetExtPort(nPort);
nPort = GetPrivateProfileInt("KD6006","SerialPort", 0, "KDDEV.INI");
pCom->KD6006.zSetPort(nPort);
nPort = GetPrivateProfileInt("KD6006","ExtPort", 0, "KDDEV.INI");
pCom->KD6006.zSetExtPort(nPort);
return 0;
}
short CKDCARDCtrl::SendICC(LPCTSTR pchSendBuf, LPCTSTR pchRcvBuf, LPCTSTR pchICSW)
{
// TODO: Add your dispatch handler code here
return pCom->kde4787.SendICCommand((char *)pchSendBuf, (char *)pchRcvBuf, (char *)pchICSW);
}
short CKDCARDCtrl::GetSerialPortKD6006()
{
// TODO: Add your property handler here
return pCom->KD6006.mSerialPort;
}
void CKDCARDCtrl::SetSerialPortKD6006(short nNewValue)
{
// TODO: Add your property handler here
pCom->KD6006.zSetPort(nNewValue);
SetModifiedFlag();
}
short CKDCARDCtrl::GetSerialPortKDE()
{
// TODO: Add your property handler here
return pCom->kde4787.mSerialPort;
}
void CKDCARDCtrl::SetSerialPortKDE(short nNewValue)
{
// TODO: Add your property handler here
pCom->kde4787.zSetPort(nNewValue);
SetModifiedFlag();
}
short CKDCARDCtrl::TakeBackCard()
{
// TODO: Add your dispatch handler code here
pCom->kde4787.EjectCard(1);
return 0;
}
BSTR CKDCARDCtrl::GetTrack2()
{
CString strResult;
// TODO: Add your property handler here
strResult = pCom->chTrack2;
return strResult.AllocSysString();
}
void CKDCARDCtrl::SetTrack2(LPCTSTR lpszNewValue)
{
// TODO: Add your property handler here
SetModifiedFlag();
}
BSTR CKDCARDCtrl::GetTrack3()
{
CString strResult;
// TODO: Add your property handler here
strResult = pCom->chTrack3;
return strResult.AllocSysString();
}
void CKDCARDCtrl::SetTrack3(LPCTSTR lpszNewValue)
{
// TODO: Add your property handler here
SetModifiedFlag();
}
short CKDCARDCtrl::WaittingCard(short Mode)
{
// TODO: Add your dispatch handler code here
DWORD dwID;
int ret=-2;
TraceDebug("正在创建线程,开始WaittingCard...", 0);
//ICFlag是判别是否是IC卡
ICFlag = Mode;
if(mThreadRunning==1)
{
TerminateThread(threadHandle,0L);
CloseHandle(threadHandle);
threadHandle = NULL;
mThreadRunning=0;
}
// char KDEInfo[80];
/*
ret = pCom->KD6006.gOpenKD606Com();
if(ret)
{
pCom->KD6006.gCom.AsynClose();
memset(KDEInfo, '\0', 80);
sprintf(KDEInfo, "Open Zt606 COM error return=%d", ret);
TraceDebug(KDEInfo, 0);
TraceDebug("异常:Open Zt606COM error!未创建线程", 0);
return -2;
}
*/
threadHandle = CreateThread(NULL,NULL, //创建线程
(LPTHREAD_START_ROUTINE)ThreadProc,
(LPVOID)this,
NULL,
&dwID);
if(!threadHandle)
{
TraceDebug("异常:创建线程失败Create Thread Fail!", 0); //创建失败时取错误码
return -1;
}
mDeviceCloseing = 0;
TraceDebug("创建线程成功------★★『『『『", 0); //创建失败时取错误码
return 0;
}
LONG ThreadCheckProc(LPVOID pParam)
{
CKDCARDCtrl *pCtrl = (CKDCARDCtrl*)pParam;
unsigned long TimeOld,TimeCurr;
TimeCurr = GetTickCount();
TimeOld = pCtrl->TimeOut*1000;
while(1)
{
if(GetTickCount()-TimeCurr>TimeOld)
{
pCtrl->pCom->kde4787.EjectCard(1);
break;
}
Sleep(1000);
} // end while
PostMessage(pCtrl->hWndMsg ,WM_THREADTAKECARDEVENT,(WPARAM)NULL,(LPARAM)NULL);
pCtrl->mThreadCheckRun = 0;
return TRUE;
}
LONG ThreadProc(LPVOID pParam)
{
CKDCARDCtrl *pCtrl = (CKDCARDCtrl*)pParam;
short ret, ret1=0, ret2=-1;
int checktimes = 3;
pCtrl->pCom->mDeviceType = _DEV_NONE;
TraceDebug("线程中:开始运行------★★ 22222", 0);
ret2 = pCtrl->pCom->InitKDE4787();
if(ret2)
{
char KDEInfo[128];
memset(KDEInfo, '\0', 80);
sprintf(KDEInfo, "Open KDE COM error return=%d", ret2);
TraceDebug(KDEInfo, 0);
TraceDebug("线程中:异常:线程中读卡器Open KDE COM error!,只能手动刷卡", 0);
}
TraceDebug("Waitting Card OK",0);
pCtrl->mThreadRunning = 1;
TraceDebug("线程中:线程启动正常", 0);
ret = pCtrl->pCom->kde4787.KDMEnable(2);
TraceDebug("kdmenable return", ret);
ret = pCtrl->pCom->kde4787.KDM_EntryCard(0);
TraceDebug("kdm entry card return", ret);
/* if(ret == _KDE_CARD_INSIDE)
{
ret1 = kde4787.IcCardPower(1, ATR);
if(ret1 >= _DEV_OK)
mDeviceType = _DEV_KDE4787_OK;
}
else if(ret == _KDE_CARD_ATGATE)
{
ret1 = kde4787.KDM_EntryCard(2);
if(ret1 == _KDE_CARD_INSIDE)
{
ret1 = kde4787.IcCardPower(1, ATR);
if(ret1 >= _DEV_OK)
{
mDeviceType = _DEV_KDE4787_OK;
}
}
}
else
{
mDeviceType = _DEV_KDE4787_ERR;
}
*/
while(checktimes)
{
if(WaitForSingleObject(pCtrl->hKillThread, 300) == WAIT_OBJECT_0)
{
TraceDebug("线程中:收到信号通知,无刷卡,正常退出,★★』』』』』!", 0);
pCtrl->mThreadRunning = 0;
SetEvent(pCtrl->hFinishThread);
pCtrl->FinishThreadFlag = 1;
TraceDebug("Set Event hFinishTHread OK!", 0);
return FALSE;
}
/*
if(ret1==0)
{
ret = pCtrl->pCom->CheckKD6006(23);
if(ret == _OK_RCV)
{
pCtrl->pCom->KD6006.gCom.AsynClose();
break;
}
}
*/
Sleep((DWORD)100);
if(ret2==0)
{
TraceDebug("ret2 is 0!", 0);
if(pCtrl->ICFlag!=1)
{
TraceDebug("ic flag is not 0!", 0);
ret = pCtrl->pCom->CheckKDE4787();
if(ret == _DEV_OK)
{
// pCtrl->pCom->KD6006.gCom.AsynClose();
break;
}
if( ret == _ERR_KDE_MAGREAD1)
checktimes-- ;
TraceDebug("checkkde4787 return:", ret);
}
else
{
TraceDebug("ic flag is 0!", 0);
Sleep((DWORD)50);
ret = pCtrl->pCom->CheckICKDE4787();
if(ret == _KDE_CARD_INSIDE)
{
break;
}
}
}
} // end while
if(checktimes == 0)
{
// Sleep((DWORD)10000);
// pCtrl->pCom->mDeviceType = _DEV_KDE4787_ERR;
TraceDebug("线程中:线程收到刷卡,但读卡错误!", 0);
}
else
{
TraceDebug("线程中:线程收到刷卡,正常退出,★★』』』』", 0);
}
PostMessage(pCtrl->hWndMsg ,WM_THREADFIREEVENT,(WPARAM)NULL,(LPARAM)NULL);
pCtrl->mThreadRunning = 0;
SetEvent(pCtrl->hFinishThread);
pCtrl->FinishThreadFlag = 1;
/* if(checktimes == 0)
{
Sleep((DWORD)100);
pCtrl->pCom->kde4787.EjectCard(0);
TraceDebug("三次读卡不成功, 退卡!", 0);
}
*/ return TRUE;
}
void CKDCARDCtrl::FireClassEvent()
{
FireCardDataComming(pCom->mDeviceType);
}
void CKDCARDCtrl::FireTakeEvent()
{
FireTakeCardComming();
}
short CKDCARDCtrl::OpenKD6006Com()
{
// TODO: Add your dispatch handler code here
int ret;
ret = pCom->KD6006.gOpenKD606Com();
if(ret==-1)
{
pCom->KD6006.gCom.AsynClose();
}
return ret;
}
short CKDCARDCtrl::OpenKDECom()
{
// TODO: Add your dispatch handler code here
int ret;
ret = pCom->kde4787.gOpenKDMCom();
if(ret==-1)
{
pCom->kde4787.gCom.AsynClose();
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -