📄 uartconfigdlg.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 + -