⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialoglpt.cpp

📁 CAN通讯的测试软件,数据可发送及接收,并能设置时间
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// dialogLpt.cpp : implementation file
//

#include "stdafx.h"
#include "VcDemo.h"
#include "dialogLpt.h"
#include "initDlg.h"
#include "DataFrame.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CEvent g_eventStart; // creates autoreset events


/////////////////////////////////////////////////////////////////////////////
// dialogLpt dialog
dialogLpt::dialogLpt(CWnd* pParent /*=NULL*/)
	: CDialog(dialogLpt::IDD, pParent)
{	
	m_pView = NULL;
	m_sendNum = 0x0;
	bSendOne = 0x0;	
}

dialogLpt::dialogLpt(CView* pView)
         : CDialog(dialogLpt::IDD) // modeless constructor
{	
	//{{AFX_DATA_INIT(dialogLpt)
	m_intSendNum = 0;
	m_intRecNum = 0;
	m_intRecLap = 1;
	m_intSendLap = 50;
	//}}AFX_DATA_INIT
    m_sendTimer = 0;
	m_recTimer = 0;
    m_pView = pView;
	// 发送计数
	m_sendNum = 0x0;
}

void dialogLpt::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(dialogLpt)
	DDX_Control(pDX, IDC_LstRec, m_lstRec);
	DDX_Control(pDX, IDC_LstSend, m_lstSend);
	DDX_Control(pDX, IDC_OptSendOne, m_optSendOne);
	DDX_Control(pDX, IDC_ChkStatus, m_chkStatus);
	DDX_Control(pDX, IDC_ChkDisplaySend, m_chkDisplaySend);
	DDX_Control(pDX, IDC_ChkDisplayRec, m_chkDisplayRec);
	DDX_Control(pDX, IDC_BtnStopSend, m_btnStopSend);
	DDX_Control(pDX, IDC_BtnStopRec, m_btnStopRec);
	DDX_Control(pDX, IDC_BtnStartSend, m_btnStartSend);
	DDX_Control(pDX, IDC_BtnStartRec, m_btnStartRec);
	DDX_Control(pDX, IDC_BtnRxBufferCount, m_btnRxBufferCount);
	DDX_Control(pDX, IDC_BtnReset, m_btnReset);
	DDX_Control(pDX, IDC_BtnRecEnabled, m_btnRecEnabled);
	DDX_Control(pDX, IDC_BtnRecDisabled, m_btnRecDisabled);
	DDX_Control(pDX, IDC_BtnReadBuffer, m_btnReadBuffer);
	DDX_Control(pDX, IDC_BtnPauseSend, m_btnPauseSend);
	DDX_Control(pDX, IDC_BtnPauseRec, m_btnPauseRec);
	DDX_Control(pDX, IDC_BtnFrame, m_btnFrame);
	DDX_Control(pDX, IDC_BtnClearBuffer, m_btnClearBuffer);
    DDX_Control(pDX, IDC_Opt1, m_opt1);
	DDX_Control(pDX, IDC_Opt2, m_opt2);
	DDX_Control(pDX, IDC_Opt3, m_opt3);
	DDX_Control(pDX, IDC_Opt4, m_opt4);
	DDX_Control(pDX, IDC_Opt5, m_opt5);
	DDX_Control(pDX, IDC_Opt6, m_opt6);
	DDX_Control(pDX, IDC_Opt7, m_opt7);
	DDX_Control(pDX, IDC_Opt8, m_opt8);
	DDX_Text(pDX, IDC_EdtSendNum, m_intSendNum);
	DDX_Text(pDX, IDC_EdtRecNum, m_intRecNum);
	DDX_Text(pDX, IDC_EdtRecLap, m_intRecLap);
	DDV_MinMaxInt(pDX, m_intRecLap, 1, 1000);
	DDX_Text(pDX, IDC_EdtSendLap, m_intSendLap);
	DDV_MinMaxInt(pDX, m_intSendLap, 1, 1000);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(dialogLpt, CDialog)
	ON_MESSAGE(WM_RECEIVEDATA, OnReceiveData)
    //{{AFX_MSG_MAP(dialogLpt)
	ON_BN_CLICKED(IDC_BtnInit, OnBtnInit)
	ON_BN_CLICKED(IDC_BtnStartSend, OnBtnStartSend)
	ON_BN_CLICKED(IDC_BtnStartRec, OnBtnStartRec)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BtnFrame, OnBtnFrame)
	ON_BN_CLICKED(IDC_BtnStopRec, OnBtnStopRec)
	ON_BN_CLICKED(IDC_BtnStopSend, OnBtnStopSend)
	ON_BN_CLICKED(IDC_BtnPauseRec, OnBtnPauseRec)
	ON_BN_CLICKED(IDC_BtnPauseSend, OnBtnPauseSend)
	ON_BN_CLICKED(IDC_ChkStatus, OnChkStatus)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BtnReset, OnBtnReset)
	ON_BN_CLICKED(IDC_BtnRxBufferCount, OnBtnRxBufferCount)
	ON_BN_CLICKED(IDC_BtnClearBuffer, OnBtnClearBuffer)
	ON_EN_CHANGE(IDC_EdtSendLap, OnChangeEdtSendLap)
	ON_EN_CHANGE(IDC_EdtRecLap, OnChangeEdtRecLap)
	ON_BN_CLICKED(IDC_BtnRecEnabled, OnBtnRecEnabled)
	ON_BN_CLICKED(IDC_BtnRecDisabled, OnBtnRecDisabled)
	ON_BN_CLICKED(IDC_BtnReadBuffer, OnBtnReadBuffer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


UINT CAN_RECEIVE_DATA(LPVOID pParam)
{
    while(1)
	{
		if(WaitForSingleObject(g_eventStart, 1) == WAIT_OBJECT_0)
		{
			// Tell owner window we're finished
			::PostMessage((HWND) pParam, WM_RECEIVEDATA, 0, 0);
			
			//if (::WaitForSingleObject(g_eventKill, 0) == WAIT_OBJECT_0) {
			//	break;		
		}
	}
	return 0; // ends the thread
}

LRESULT  dialogLpt::OnReceiveData(WPARAM wParam, LPARAM lParam)
{
    //this->MessageBox("有接收数据...","VCDemo",MB_OK);
	dialogLpt::CAN_Rec(); 
	return 0;
}


/////////////////////////////////////////////////////////////////////////////
// dialogLpt message handlers
BOOL dialogLpt::OnInitDialog() 
{	
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
    m_btnStopSend.EnableWindow(FALSE);
	m_btnStopRec.EnableWindow(FALSE);
	m_btnStartSend.EnableWindow(FALSE);
	m_btnStartRec.EnableWindow(FALSE);
	m_btnRxBufferCount.EnableWindow(FALSE);
	m_btnReset.EnableWindow(FALSE);
	m_btnRecEnabled.EnableWindow(FALSE);
	m_btnRecDisabled.EnableWindow(FALSE);
	m_btnReadBuffer.EnableWindow(FALSE);
	m_btnPauseSend.EnableWindow(FALSE);
	m_btnPauseRec.EnableWindow(FALSE);
	m_btnFrame.EnableWindow(FALSE);
	m_btnClearBuffer.EnableWindow(FALSE);

	// check "Send One" option
	m_optSendOne.SetCheck(1);
	UpdateData(FALSE);

    // default: standard frame
	m_workMode = 0x0;
	m_bRecPaused = 0x0;
	m_bSendPaused = 0x0;

	// 启动线程
	m_pThread = AfxBeginThread(CAN_RECEIVE_DATA, GetSafeHwnd());
	m_pThread->SuspendThread();

	// 设置发送帧的格式和内容
	m_pDlgDataFrame = new CDataFrame();  
	
	return TRUE;//  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void dialogLpt::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}


void dialogLpt::OnBtnInit() 
{
	// TODO: Add your control notification handler code here  
	// 初始化时调用初始化设定界面
	m_pDlgInit = new initDlg(m_pView);
	// pass through some variable
	m_pDlgInit->ptrStruct.card = 0x0;	
	m_pDlgInit->DoModal();	
	// Get WorkMode
	m_workMode = m_pDlgInit->m_workMode;
	m_pDlgInit = NULL; 
}


void dialogLpt::OnBtnFrame() 
{
	// TODO: Add your control notification handler code here
	m_btnStartSend.EnableWindow(TRUE);
	m_btnPauseSend.EnableWindow(TRUE);
	m_btnStopSend.EnableWindow(TRUE);
	m_pDlgDataFrame->m_workMode = m_workMode;
	m_pDlgDataFrame->DoModal();
	//this->MessageBox(m_pDlgDataFrame->m_strFrame,"Test",MB_OK); 	
}


void dialogLpt::OnBtnStartRec() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_lstRec.ResetContent(); 
	
	m_recTimer = SetTimer(20,m_intRecLap,NULL);	
	/*
	// 启动线程
	m_pThread->ResumeThread();
    // 传递事件
    CAN_Intr_Attach((g_eventStart),0x0);
    */

	// 已接收数量
	m_intRecNum = 0x0;
	UpdateData(FALSE);
}

void dialogLpt::OnBtnPauseRec() 
{
	// TODO: Add your control notification handler code here
	KillTimer(m_recTimer);

	if(m_bRecPaused)
	{
		//m_pThread->ResumeThread();
		m_bRecPaused = 0x0;
	}
	else
	{
	   // Stop Thread
	   //m_pThread->SuspendThread();
	   m_bRecPaused = 0x01;
	}
}

void dialogLpt::OnBtnStopRec() 
{
	// TODO: Add your control notification handler code here
    KillTimer(m_recTimer);
	
    // Stop Thread
	//m_pThread->SuspendThread();   
}


void dialogLpt::OnBtnStartSend() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_lstSend.ResetContent(); 	
	m_sendTimer = SetTimer(10, m_intSendLap,NULL);
	// only send once
	bSendOne = 0x0;
	// 已发送数量
	m_intSendNum = 0x0;
	UpdateData(FALSE);
}

void dialogLpt::OnBtnPauseSend() 
{
	// TODO: Add your control notification handler code here
	if(m_bSendPaused)
	{
	   	m_sendTimer = SetTimer(10, m_intSendLap,NULL);
		m_bSendPaused = 0x0; 
	}
	else
	{
		KillTimer(m_sendTimer);
		m_bSendPaused = 0x1;	
	}
}

void dialogLpt::OnBtnStopSend() 
{
	// TODO: Add your control notification handler code here
	KillTimer(m_sendTimer);
}


void dialogLpt::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	// 发送定时器
	if(nIDEvent == 10)
	{   
		if(m_optSendOne.GetCheck() == 1)
		{
		   // already send, then no send
		   if(!bSendOne)
		   {
		      CAN_Send();
		   }
		   bSendOne = 1;
		}
		else
		{
			CAN_Send();
		}
	}
	
	// 接收定时器
	else if(nIDEvent == 20)
	{
		CAN_Rec();
	}
	
	// 查询状态定时器
	else if(nIDEvent == 30)
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -