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

📄 uartconfigdlg.cpp

📁 F340+CP2200的汉化版NETFINDER源代码,增加了串口设置
💻 CPP
字号:
// UartConfigDlg.cpp : implementation file
//

#include "stdafx.h"
#include "netfinder.h"
#include "UartConfigDlg.h"

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

extern CNetfinderApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CUartConfigDlg dialog


CUartConfigDlg::CUartConfigDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUartConfigDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUartConfigDlg)
	m_answer = _T("");
	//}}AFX_DATA_INIT
}


void CUartConfigDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUartConfigDlg)
	DDX_Control(pDX, IDOK, m_ok_button);
	DDX_Control(pDX, IDC_COMBO3, m_datalength);
	DDX_Control(pDX, IDC_COMBO4, m_parity);
	DDX_Control(pDX, IDC_COMBO5, m_stopbit);
	DDX_Control(pDX, IDC_COMBO2, m_baudrate);
	DDX_Text(pDX, IDC_EDIT1, m_answer);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUartConfigDlg, CDialog)
	//{{AFX_MSG_MAP(CUartConfigDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUartConfigDlg message handlers

BOOL CUartConfigDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//-----------------------------------------------------------------
	// Add pointer to this dialog to <theApp> to provide global access
	//-----------------------------------------------------------------
	theApp.pUartDlg = this;
	//-----------------------------------------------------------------
	// Register the Operation to allow packets to be received
	//-----------------------------------------------------------------
	theApp.m_operation = UARTCOM;//登记允许包接收的操作
	
	m_baudrate.SetCurSel(theApp.pMainDlg->m_netdisplay.GetBaudrate());

	if(theApp.pMainDlg->m_netdisplay.GetBaudrateMode() & 0x10)
	{
		switch(theApp.pMainDlg->m_netdisplay.GetBaudrateMode() & 0x60){
		case 0x00:
			m_parity.SetCurSel(1);
			break;
		case 0x20:
			m_parity.SetCurSel(2);
			break;
		case 0x40:
			m_parity.SetCurSel(3);
			break;
		default:
			m_parity.SetCurSel(4);
			break;
		}
	}			
	else
		m_parity.SetCurSel(0);

	switch(theApp.pMainDlg->m_netdisplay.GetBaudrateMode() & 0x0C){
		case 0x00:
			m_datalength.SetCurSel(0);
			break;
		case 0x04:
			m_datalength.SetCurSel(1);
			break;
		case 0x08:
			m_datalength.SetCurSel(2);
			break;
		default:
			m_datalength.SetCurSel(3);
			break;
		}
	if(theApp.pMainDlg->m_netdisplay.GetBaudrateMode() & 0x01)
		m_stopbit.SetCurSel(1);
	else
		m_stopbit.SetCurSel(0);
	m_answer="点箭头选择,确认写入";
	UpdateData(FALSE);
	m_error = 0;
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//DEL void CUartConfigDlg::OnTimer(UINT nIDEvent) 
//DEL {
//DEL 	// TODO: Add your message handler code here and/or call default
//DEL 	// Adjust Progress Bar
//DEL 	m_progress.StepIt();
//DEL 	CDialog::OnTimer(nIDEvent);
//DEL }

void CUartConfigDlg::OnOK() 
{
	// TODO: Add extra validation here
	if(!m_error){

		unsigned char UART_buff[6]={0,0,0,0,0,0};
		m_rand = rand();
		UART_buff[0] = 0x04;
		UART_buff[1] = 0x00;
		UART_buff[2] = (m_rand >> 8);
		UART_buff[3] = (m_rand & 0x00FF);
		UART_buff[4] = m_baudrate.GetCurSel();
		unsigned char baudratemode=0;
		if(m_parity.GetCurSel()){

			baudratemode |= 0x10;
			switch(m_parity.GetCurSel()){
			case 2:
				baudratemode |= 0x20;
				break;
			case 3:
				baudratemode |= 0x40;
				break;
			case 4:
				baudratemode |= 0x60;
				break;
			default:
				break;
			}
		}
		switch(m_datalength.GetCurSel()){
			case 1:
				baudratemode |= 0x04;
				break;
			case 2:
				baudratemode |= 0x08;
				break;
			case 3:
				baudratemode |= 0x0C;
				break;
			default:
				break;
		}
		if(m_stopbit.GetCurSel())
			baudratemode |= 0x01;
		UART_buff[5] = baudratemode;

		CString temp_str;
		unsigned char IP[4]; // contains the old IP address
		//-----------------------------------------------------------------
		// Send the packet directly to the device's MAC address (use old IP address)
		//-----------------------------------------------------------------
		theApp.pMainDlg->m_netdisplay.GetIPAddress(&IP[0]);

		temp_str.Format("%i.%i.%i.%i ", IP[0], IP[1], IP[2], IP[3]);

		if(SOCKET_ERROR == theApp.m_socket.SendTo(UART_buff, 6, theApp.pMainDlg->m_netdisplay.GetPort(),temp_str)){
				
			CString str;
			str.Format("%i", GetLastError());			
			AfxMessageBox(str + " Unable To Send");
		}
	}else {
		
		// Handle OK pressed after timeout
		theApp.m_operation = PORT_CLOSED;
		CDialog::OnOK();
	}
	
}

void CUartConfigDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	theApp.m_operation = PORT_CLOSED;
	CDialog::OnCancel();
}

void CUartConfigDlg::ReceivePacket()
{
	unsigned char buffer[4096] = {0};
	int num_bytes;
	
	//---------------------------------------------------------------
	// Receive Packet from Buffer
	//---------------------------------------------------------------

	// IP and Port of sender.
	CString destIP;
	UINT destPort;

	num_bytes = theApp.m_socket.ReceiveFrom(buffer, 4096, destIP, destPort);

	// Check for errors
	if(num_bytes >= 10000){
		
		// Handle Error
		AfxMessageBox("接受数据错误!");
		return;

	} else {
		
		// Handle Error
		//AfxMessageBox("Received Packet");
	
	}
	if( (num_bytes == 4) && (buffer[0] == 0x05) &&
		(buffer[2] == (m_rand >> 8)) && (buffer[3] == (m_rand & 0x00FF)))
	{
		m_answer = "成功 -- 装置写入";
		UpdateData(FALSE);
		m_error = 1;			// Set error flag to close window on OK
		m_ok_button.SetWindowText("关闭");
		m_ok_button.EnableWindow();
	}else

	{
		AfxMessageBox("接受无效设置包");
	
	}	
}

⌨️ 快捷键说明

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