📄 hk-cantesterdlg.cpp
字号:
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CHKCANTesterDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CHKCANTesterDlg::OnBnClickedOpenboardbt()
{
// TODO: 在此添加控件通知处理程序代码
BOOL Opened_Flag = FALSE;
BOOL Init0 = FALSE;
BOOL Init1 = FALSE;
WORD CanBPS = 0xc0a3;
UpdateData(TRUE);
g_RecPortNo = m_iRecPort;
g_SendPortNo = m_iSendPort;
g_RecMode = m_iRecMode;
g_ShowProcess = m_blShowProcess;
g_SendTotalCount=0;
g_SendOKCount=0;
g_SendFailCount=0;
m_ullSendTotalCount=0;
m_ullSendOKCount=0;
m_ullSendFailCount=0;
m_uiSendFreq =0 ;
char * sTemp =m_sBoardType.GetBuffer();
if(!g_blOpenStatus)
{
Opened_Flag = HKCanOpen(&g_devicehandle,sTemp,m_iDrvType,0);
}
else
{
Opened_Flag=true;
AfxMessageBox("CAN 卡已经打开!");
return;
}
if(!Opened_Flag)
{
g_blOpenStatus=0;
AfxMessageBox("CAN 卡打开失败!");
m_sBoardStatus = "CAN卡打开失败!";
return;
}
else
{
g_blOpenStatus=1;
m_sBoardStatus = "CAN卡打开成功!";
}
UpdateData(FALSE);
switch( m_iCanBPS)
{
case 0 :// 1M
CanBPS = 0xc0a3;
break;
case 1://500K
CanBPS = 0xc1a3;
break;
case 2 ://250K
CanBPS = 0xc3a3;
break;
case 3 ://125K
CanBPS = 0xc7a3;
break;
case 4 ://50K
CanBPS = 0xc7af;
break;
case 5 ://20K
CanBPS = 0xD3AF;
break;
case 6 ://10K
CanBPS = 0xE7AF;
break;
case 7 ://5K
CanBPS = 0xffff;
break;
}
g_blOpenStatus=true;
if((g_RecPortNo ==0) ||(g_SendPortNo==0))
{
//Init0 = HKCanInitState(&g_devicehandle,0,CanBPS,0,0xff,g_hReadEvent_port[0]);//orient
Init0 = HKCanInitState(&g_devicehandle,0,CanBPS,0x0,0xff,g_hReadEvent_port[0]);//
if(!Init0)
{
g_blOpenStatus=false;
AfxMessageBox("初始化CAN卡端口 1 失败!!");
}
else
{
//启动线程
if(g_RecPortNo ==0)
ResumeThread(g_hReadFrameThread);
if(g_SendPortNo==0)
ResumeThread(g_hSendFrameThread);
}
}
if((g_RecPortNo ==1) ||(g_SendPortNo==1))
{
if(m_sBoardType!="HKCAN20"&&m_sBoardType!="HKCAN50")//CAN20C 、CAN50只有一个端口
{
//Init1 = HKCanInitState(&g_devicehandle,1,CanBPS,0,0xff,g_hReadEvent_port[1]);//orient
Init1 = HKCanInitState(&g_devicehandle,1,CanBPS,0x0,0xff,g_hReadEvent_port[1]);
if(!Init1)
{
g_blOpenStatus=false;
AfxMessageBox("初始化CAN卡端口 2 失败!!");
}
else
{
//启动线程
if(g_RecPortNo ==1)
ResumeThread(g_hReadFrameThread);
if(g_SendPortNo==1)
ResumeThread(g_hSendFrameThread);
}
}
}
}
void CHKCANTesterDlg::OnBnClickedCloseboardbt()
{
// TODO: 在此添加控件通知处理程序代码
//close device
if(g_blOpenStatus)
{
g_blOpenStatus = false;
SuspendThread(g_hReadFrameThread);
SuspendThread(g_hSendFrameThread);
int x=HKCanClose(&g_devicehandle);
if(!x)
{
AfxMessageBox("CAN卡关闭失败!");
m_sBoardStatus = "CAN卡关闭失败!";
}
else
{
m_sBoardStatus = "CAN卡关闭成功!" ;
}
UpdateData(FALSE);
}
}
void CHKCANTesterDlg::OnCbnSelchangeComboBoardtype()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
//CAN20C只有一个端口
if(m_sBoardType == "HKCAN20"||m_sBoardType == "HKCAN50")
{
m_iSendPort = 0;
m_iRecPort =0 ;
UpdateData(FALSE);
CWnd *hwndSdPort = GetDlgItem(IDC_COMBO_SdPort);
hwndSdPort->EnableWindow(FALSE);
CWnd *hwndRecPort = GetDlgItem(IDC_COMBO_RecPort);
hwndRecPort->EnableWindow(FALSE);
}
else
{
CWnd *hwndSdPort = GetDlgItem(IDC_COMBO_SdPort);
hwndSdPort->EnableWindow(TRUE);
CWnd *hwndRecPort = GetDlgItem(IDC_COMBO_RecPort);
hwndRecPort->EnableWindow(TRUE);
}
}
void CHKCANTesterDlg::OnBnClickedStartsendbt()
{
// TODO: 在此添加控件通知处理程序代码
if(!g_blOpenStatus)
{
AfxMessageBox("CAN卡还未初始化!");
return;
}
//ResetEvent(g_hStartSendEvent);
//SetEvent(g_hReadEvent_port[0]);
//SetEvent(g_hReadEvent_port[1]);
UpdateData(TRUE);
g_blCycleSend = m_blCycleSend;
g_TryCount = m_iTryCount;
g_SendFrame.nPort = g_SendPortNo;
if(m_sSendFrame=="")
return;
//g_SendFrame.mFrame[0] = 0x0a;
//g_SendFrame.mFrame[1] = 0x88;
////////////////
//gao
//g_SendFrame.mFrame[0] = 0x6c;
//g_SendFrame.mFrame[1] = 0x64;
g_SendFrame.mFrame[0] = 0x6c;
g_SendFrame.mFrame[1] = 0x70;
//g_SendFrame.mFrame[0] = 0x20;//table left
//g_SendFrame.mFrame[1] = 0xe8;
//g_SendFrame.mFrame[0] = 0xd6;
//g_SendFrame.mFrame[1] = 0xe8;
////////////////
int sLen = m_sSendFrame.GetLength();
if(sLen >8)
sLen =8;
//for(int i=0;i<sLen;i++)
//{
// g_SendFrame.mFrame[i+2] = m_sSendFrame.GetAt(i);
//}
////////////////
//gao
// g_SendFrame.mFrame[2] =0x0;
// g_SendFrame.mFrame[3] =0x0;
// g_SendFrame.mFrame[4] =0x0;
// g_SendFrame.mFrame[5] =0xda;
// g_SendFrame.mFrame[6] =0x03;
// g_SendFrame.mFrame[7] =0x86;
// g_SendFrame.mFrame[8] =0x98;
// g_SendFrame.mFrame[9] =0x0;
g_SendFrame.mFrame[2] =0x7;
g_SendFrame.mFrame[3] =0x01;
g_SendFrame.mFrame[4] =0x7;
g_SendFrame.mFrame[5] =0x8;
g_SendFrame.mFrame[6] =0x08;
g_SendFrame.mFrame[7] =0x2;
g_SendFrame.mFrame[8] =0x00;
g_SendFrame.mFrame[9] =0xa;
////////////////
g_SendTotalCount=0;
g_SendOKCount=0;
g_SendFailCount=0;
m_ullSendTotalCount=0;
m_ullSendOKCount=0;
m_ullSendFailCount=0;
m_uiSendFreq =0 ;
UpdateData(FALSE);
SetEvent(g_hStartSendEvent);
g_SendStarTime = GetTickCount();
}
void CHKCANTesterDlg::OnBnClickedStopsendbt()
{
DWORD MdTime;
char temp[10];
CString sreaddata;
// TODO: 在此添加控件通知处理程序代码
ResetEvent(g_hStartSendEvent);
Sleep(100); //等待发送线程将最后一帧发送完
MdTime = GetTickCount() - g_SendStarTime;
m_uiSendFreq = DWORD(1000*g_SendOKCount/MdTime);
m_ullSendTotalCount=g_SendTotalCount;
m_ullSendOKCount=g_SendOKCount;
m_ullSendFailCount=g_SendFailCount;
m_ullRecCount =g_RecCount;
memcpy(temp,&g_RecFrame.mFrame[2],8);
temp[8]='\0';
//sreaddata.Format("%s",temp);
sreaddata.Format("%x",temp);
m_sReadFram=sreaddata;
UpdateData(FALSE);
}
void CHKCANTesterDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
//exit readthread for wait infinite
g_ReadThreadFlag=0;
g_SendThreadFlag=0;
SetEvent(g_hReadEvent_port[1]);
SetEvent(g_hReadEvent_port[0]);
//stop send thread
SetEvent(g_hStartSendEvent);
Sleep(300); //用于等待发送、接收线程的关闭
//close all handle
CloseHandle(g_hReadEvent_port[0]);
CloseHandle(g_hReadEvent_port[1]);
CloseHandle(g_hStartSendEvent);
CloseHandle(g_hReadFrameThread);
//close device
if(g_blOpenStatus)
{
g_blOpenStatus = false;
HKCanClose(&g_devicehandle);
}
}
void CHKCANTesterDlg::OnBnClickedClearsendcount()
{
// TODO: 在此添加控件通知处理程序代码
g_SendTotalCount=0;
g_SendOKCount=0;
g_SendFailCount=0;
m_ullSendTotalCount=0;
m_ullSendOKCount=0;
m_ullSendFailCount=0;
m_uiSendFreq =0 ;
UpdateData(FALSE);
}
void CHKCANTesterDlg::OnBnClickedClearreccount()
{
// TODO: 在此添加控件通知处理程序代码
g_RecCount =0;
m_ullRecCount =0;
UpdateData(FALSE);
}
void CHKCANTesterDlg::OnBnClickedProcesscheck()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
g_ShowProcess = m_blShowProcess;
}
void CHKCANTesterDlg::OnBnClickedRddevstatus()
{
DWORD status;
// TODO: 在此添加控件通知处理程序代码
HKCanGetLastError(&g_devicehandle,&status);
m_DevStatus = status;
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -