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

📄 initdlg.cpp

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

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

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

/////////////////////////////////////////////////////////////////////////////
// initDlg dialog
initDlg::initDlg(CWnd* pParent /*=NULL*/)
	: CDialog(initDlg::IDD, pParent)
{	
	m_pView = NULL;
}

void initDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(initDlg)
	DDX_Control(pDX, IDC_EdtAMR1, m_edtAMR1);
	DDX_Control(pDX, IDC_EdtAMR0, m_edtAMR0);
	DDX_Control(pDX, IDC_EdtACR1, m_edtACR1);
	DDX_Control(pDX, IDC_EdtACR0, m_edtACR0);
	DDX_Text(pDX, IDC_EdtACR0, m_ACR0);
	DDV_MaxChars(pDX, m_ACR0, 2);
	DDX_Text(pDX, IDC_EdtACR1, m_ACR1);
	DDV_MaxChars(pDX, m_ACR1, 2);
	DDX_Text(pDX, IDC_EdtACR2, m_ACR2);
	DDV_MaxChars(pDX, m_ACR2, 2);
	DDX_Text(pDX, IDC_EdtACR3, m_ACR3);
	DDV_MaxChars(pDX, m_ACR3, 2);
	DDX_Text(pDX, IDC_EdtAMR0, m_AMR0);
	DDV_MaxChars(pDX, m_AMR0, 2);
	DDX_Text(pDX, IDC_EdtAMR1, m_AMR1);
	DDV_MaxChars(pDX, m_AMR1, 2);
	DDX_Text(pDX, IDC_EdtAMR2, m_AMR2);
	DDV_MaxChars(pDX, m_AMR2, 2);
	DDX_Text(pDX, IDC_EdtAMR3, m_AMR3);
	DDV_MaxChars(pDX, m_AMR3, 2);
	DDX_Check(pDX, IDC_ChkIRQRec, m_ChkIRQRec);
	DDX_Check(pDX, IDC_CHECK4, m_Check4);
	DDX_Check(pDX, IDC_CHECK3, m_Check3);
	DDX_Check(pDX, IDC_CHECK2, m_Check2);
	DDX_CBString(pDX, IDC_CmbFrame, m_strFrame);
	DDX_CBString(pDX, IDC_CmbFilter, m_strFilter);
	DDX_CBString(pDX, IDC_CmbBaudrate, m_strBaudrate);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(initDlg, CDialog)
	//{{AFX_MSG_MAP(initDlg)
	ON_BN_CLICKED(IDC_BtnOk, OnBtnOk)
	ON_BN_CLICKED(IDC_BtnCancel, OnBtnCancel)
	ON_CBN_SELCHANGE(IDC_CmbFrame, OnSelchangeCmbFrame)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

initDlg::initDlg(CView* pView)
        : CDialog(initDlg::IDD) // modeless constructor
 // modeless constructor
{
	//{{AFX_DATA_INIT(initDlg)
	m_ACR0 = _T("");
	m_ACR1 = _T("");
	m_ACR2 = _T("");
	m_ACR3 = _T("");
	m_AMR0 = _T("");
	m_AMR1 = _T("");
	m_AMR2 = _T("");
	m_AMR3 = _T("");
	m_ChkIRQRec = FALSE;
	m_Check4 = FALSE;
	m_Check3 = FALSE;
	m_Check2 = FALSE;
	m_strFrame = _T("");
	m_strFilter = _T("");
	m_strBaudrate = _T("");
	//}}AFX_DATA_INIT
	m_pView = pView;
}

// class initialize
BOOL initDlg::OnInitDialog() 
{	
	// Frame Type
	CComboBox* pLX;
	pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
	pLX->InsertString(-1,"标准帧");	
    pLX->InsertString(-1, "扩展帧");
    m_strFrame = "标准帧";
 
	// Baudrate
	pLX = (CComboBox*) GetDlgItem(IDC_CmbBaudrate);
    pLX->InsertString(-1,"5K");
	pLX->InsertString(-1,"10K");
	pLX->InsertString(-1,"20K");	
    pLX->InsertString(-1,"40K");   
	pLX->InsertString(-1,"50K");  
	pLX->InsertString(-1,"80K");	
	pLX->InsertString(-1,"100K");
    pLX->InsertString(-1,"125K");   
    pLX->InsertString(-1,"250K");   
    pLX->InsertString(-1,"500K");
	pLX->InsertString(-1,"1000K");
	
    m_strBaudrate = "5K";

	// filter type
    pLX = (CComboBox*) GetDlgItem(IDC_CmbFilter);
	pLX->InsertString(-1,"单滤波");	
    pLX->InsertString(-1,"双滤波");
    m_strFilter = "单滤波";
  
	CEdit* pLY;
	m_ACR0 = "00";
    m_ACR1 = "00";
    m_ACR2 = "00";	
	m_ACR3 = "00";
    // hide low two ACR
    pLY = (CEdit*)GetDlgItem(IDC_EdtACR0);
	pLY->ShowWindow(SW_HIDE);
	pLY = (CEdit*)GetDlgItem(IDC_EdtACR1);
	pLY->ShowWindow(SW_HIDE);	
  	
	m_AMR0 = "ff";
	m_AMR1 = "ff";
	m_AMR2 = "ff";	
	m_AMR3 = "ff";
    // hide low two AMR
    pLY = (CEdit*)GetDlgItem(IDC_EdtAMR0);
	pLY->ShowWindow(SW_HIDE);
	pLY = (CEdit*)GetDlgItem(IDC_EdtAMR1);
	pLY->ShowWindow(SW_HIDE);	

	m_ChkIRQRec = TRUE;
	m_Check2 = TRUE;
	m_Check3 = TRUE;
	m_Check4 = TRUE;

	//	default: standard frame
	m_workMode = 0x0;
	// Call after initialization
	return CDialog::OnInitDialog(); // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void initDlg::OnSelchangeCmbFrame() 
{
	// TODO: Add your control notification handler code here

	// work mode
	CComboBox*	pLX;
	pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
    // set ACR and AMR
	CEdit* pLY;
	if(pLX->GetCurSel())
	{
		// Extend Frame
		// show low two ACR
		pLY = (CEdit*)GetDlgItem(IDC_EdtACR0);
		pLY->ShowWindow(SW_SHOW);
		pLY = (CEdit*)GetDlgItem(IDC_EdtACR1);
		pLY->ShowWindow(SW_SHOW);

		// show low two AMR
		pLY = (CEdit*)GetDlgItem(IDC_EdtAMR0);
		pLY->ShowWindow(SW_SHOW);
		pLY = (CEdit*)GetDlgItem(IDC_EdtAMR1);
		pLY->ShowWindow(SW_SHOW);
	}
	else
	{
		// Standard Frame
		// hide low two ACR
		pLY = (CEdit*)GetDlgItem(IDC_EdtACR0);
		pLY->ShowWindow(SW_HIDE);
		pLY = (CEdit*)GetDlgItem(IDC_EdtACR1);
		pLY->ShowWindow(SW_HIDE);

			// hide low two AMR
		pLY = (CEdit*)GetDlgItem(IDC_EdtAMR0);
		pLY->ShowWindow(SW_HIDE);
		pLY = (CEdit*)GetDlgItem(IDC_EdtAMR1);
		pLY->ShowWindow(SW_HIDE);
	}	
}


/////////////////////////////////////////////////////////////////////////////
void initDlg::OnBtnOk() 
{
	// TODO: Add your control notification handler code here
	unsigned char baudrate[11*2] = {0x3f,0xff,  //5k
		                            0x1f,0xff,  //10k
		                            0x0f,0xff,  //20k
									0x07,0xff,  //40k
									0x07,0x2f,  //50k
									0x03,0xff,  //80k
                                    0x03,0x2f,  //100k 
		                            0x03,0x1c,  //125k
                                    0x01,0x1c,  //250k
	           					    0x00,0x1c,  //500k
									0x00,0x14   //1000k
	}; 

	unsigned int     baudIndex;
    unsigned int     retVal;
	unsigned long    ACR,AMR;
	UpdateData(TRUE);
    
	ptrStruct.card = 0x0;
	ptrStruct.channel = 0x0;
	// work mode
	CComboBox*	pLX;
	pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
    // set ACR and AMR
	if(pLX->GetCurSel())
	{
	    ptrConfig.workMode = 0x1;
	    ACR = (StringToInt(m_ACR3) * 256 * 256 * 256 + StringToInt(m_ACR2) * 256 * 256
			  + StringToInt(m_ACR1) * 256  + StringToInt(m_ACR0))/8;

 	    AMR = (StringToInt(m_AMR3) * 256 * 256 * 256 + StringToInt(m_AMR2) * 256 * 256
			  + StringToInt(m_AMR1) * 256  + StringToInt(m_AMR0))/8;
	    //AMR = 0xffffffff;
		ptrConfig.accCode = ACR;
	    ptrConfig.accMask = AMR;
		// Extend frame
		m_workMode = 0x01;
	}
	else
	{
		ptrConfig.workMode = 0x0;
		ACR = (StringToInt(m_ACR3) * 256 + StringToInt(m_ACR2))/32;
		AMR = (StringToInt(m_AMR3) * 256 + StringToInt(m_AMR2))/32;	    
		//AMR = 0xffffffff;
		ptrConfig.accCode = ACR;
	    ptrConfig.accMask = AMR;
		
		// stand frame
		m_workMode = 0x0;
	}

	// filter mode
    pLX = (CComboBox*) GetDlgItem(IDC_CmbFilter);
    if(pLX->GetCurSel())
	{
	   ptrConfig.filterMode = 0x1;
	}
	else
	{
		ptrConfig.filterMode = 0x0;
	}

    // baudrate
	pLX = (CComboBox*) GetDlgItem(IDC_CmbBaudrate);   
	baudIndex = pLX->GetCurSel();
	if(baudIndex >= 0)
	{
       ptrConfig.timer0 = baudrate[baudIndex*2 + 0];
	   ptrConfig.timer1 = baudrate[baudIndex*2 + 1];	
	}
	
	// Interrupt
	if(m_ChkIRQRec)
	{
	    ptrConfig.control = 0x01;
	}
	else
	{
		ptrConfig.control = 0x0;
	}
    // 初始化通道1
	retVal = CAN_Init(&ptrStruct,&ptrConfig);


	if((m_pView != NULL)&&(retVal > 0))
	{
		// modeless case -- do not call base class OnCancel
		m_pView->PostMessage(WM_INIT, IDCANCEL);
	}
	else
	{
		CDialog::OnCancel(); // modal case
	}
	CDialog::OnOK();
}

void initDlg::OnBtnCancel() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnCancel(); // modal case	
}

unsigned long initDlg::multi(unsigned int x,unsigned int y)
{
    unsigned int loopX;
	if(y == 0)
	{
		return 1;
	}

	if(y == 1)
	{
		return x;
	}

	for(loopX = 1; loopX < y; loopX++)
	{
       x = x*x;
	}
    return x;
}

unsigned long initDlg::StringToInt( CString xx)
{
    
    int loopX;
	unsigned long temp = 0;
	unsigned char ascnum;
	for(loopX = 0; loopX < xx.GetLength(); loopX++)
	{
		ascnum = xx.GetAt(loopX);
        if((ascnum >= 0x30) && (ascnum <= 0x39))
		{
			temp = temp + (ascnum - 0x30) * multi(16,(xx.GetLength()  - loopX-1));
		}
		else if((ascnum >= 0x41) && (ascnum <= 0x46))
		{

           temp = temp + (10 + (ascnum - 0x41)) * multi(16,(xx.GetLength()  - loopX-1));
		}
		else if((ascnum >= 0x61) && (ascnum <= 0x66))
		{	
           temp = temp + (10 + (ascnum - 0x61)) * multi(16,(xx.GetLength()  - loopX-1));
		}
	}	
	return temp;
}


⌨️ 快捷键说明

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