📄 embest_scommdlg.cpp
字号:
// Embest_SCOMMDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Embest_SCOMM.h"
#include "Embest_SCOMMDlg.h"
#include <atlconv.h>
#include <stdio.h>
#include "CSerial.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//****************************************************//
BOOL m_bVisible; //程序是否浮在最上面 用于图钉按钮功能
BOOL m_bStopDispRXData; //是否显示接收字符
CString m_strTempSendFilePathName; //发送文件路径名
long m_nFileLength; //文件长度
BOOL m_bSendFile; //是否发送文件
HICON m_hIconRed; //串口打开时的红灯图标句柄
HICON m_hIconOff; //串口关闭时的指示图标句柄
HICON m_hIconGreen;
DWORD m_nBaud; //波特率
UINT m_nCom; //串口号
BYTE m_cParity; //校验
BYTE m_nDatabits; //数据位
BYTE m_nStopbits; //停止位
CSerial m_Port; //CSerial类对象
BOOL m_bOpenPort;
//********************************************************//
/////////////////////////////////////////////////////////////////////////////
// CEmbest_SCOMMDlg dialog
CEmbest_SCOMMDlg::CEmbest_SCOMMDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEmbest_SCOMMDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEmbest_SCOMMDlg)
m_strSendData = _T("");
m_ReceiveData = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// m_bAutoSend=FALSE;
m_bVisible=FALSE;
m_bSendFile=FALSE;
m_bStopDispRXData=FALSE;
// m_bOpenPort=FALSE;
m_bOpenPort=FALSE;
// m_nCycleTime=1000;
// m_strCurPath="C:\\COMDATA";
// m_strSendFilePathName="还没有选择文件";//"No File Selected!";
m_nFileLength=0;
}
void CEmbest_SCOMMDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEmbest_SCOMMDlg)
DDX_Control(pDX, IDC_STATIC_STATUS, m_ctrlPortStatus);
DDX_Control(pDX, IDC_EDIT_SEND, m_ctrlEditSend);
DDX_Control(pDX, IDC_EDIT_RECIVE, m_ctrlReceiveData);
DDX_Control(pDX, IDC_COMBO_STOPBITS, m_StopBits);
DDX_Control(pDX, IDC_COMBO_SPEED, m_Speed);
DDX_Control(pDX, IDC_COMBO_PARITY, m_Parity);
DDX_Control(pDX, IDC_COMBO_DATABITS, m_DataBits);
DDX_Control(pDX, IDC_COMBO_COMSELECT, m_Com);
DDX_Control(pDX, IDC_BUTTON_OPENPORT, m_ctrlOpenPort);
DDX_Control(pDX, IDC_BUTTON_MANUALSEND, m_ctrlManualSend);
DDX_Text(pDX, IDC_EDIT_SEND, m_strSendData);
DDX_Text(pDX, IDC_EDIT_RECIVE, m_ReceiveData);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEmbest_SCOMMDlg, CDialog)
//{{AFX_MSG_MAP(CEmbest_SCOMMDlg)
ON_BN_CLICKED(IDC_BUTTON_CLEAR_RECI_AREA, OnButtonClearReciArea)
ON_CBN_SELCHANGE(IDC_COMBO_COMSELECT, OnSelchangeComboComselect)
ON_CBN_SELCHANGE(IDC_COMBO_DATABITS, OnSelchangeComboDatabits)
ON_CBN_SELCHANGE(IDC_COMBO_PARITY, OnSelchangeComboParity)
ON_CBN_SELCHANGE(IDC_COMBO_SPEED, OnSelchangeComboSpeed)
ON_CBN_SELCHANGE(IDC_COMBO_STOPBITS, OnSelchangeComboStopbits)
ON_BN_CLICKED(IDC_BUTTON_OPENPORT, OnButtonOpenport)
ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
ON_BN_CLICKED(IDC_BUTTON_CLEANSEND, OnButtonCleansend)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEmbest_SCOMMDlg message handlers
BOOL CEmbest_SCOMMDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
m_Com.SetCurSel(0);//串口号
m_Speed.SetCurSel(11);//波特率
m_Parity.SetCurSel(0);//校验
m_DataBits.SetCurSel(0);//数据位
m_StopBits.SetCurSel(0);//停止位
m_nBaud = 115200; //波特率
m_nCom = 1; //串口号
m_cParity = 0; //校验
m_nDatabits = 8; //数据位
m_nStopbits = 0; //停止位
m_bOpenPort = TRUE;
m_ctrlPortStatus.SetWindowText(_T("STATUS:COM Port Closed!"));
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CEmbest_SCOMMDlg::OnButtonClearReciArea()
{
// TODO: Add your control notification handler code here
UpdateData();
m_ReceiveData.Empty();
UpdateData(FALSE);
}
void CEmbest_SCOMMDlg::OnSelchangeComboComselect()
{
// TODO: Add your control notification handler code here
if(m_Port.m_hComm!=NULL)
{
m_Port.ClosePort();
}
m_nCom=m_Com.GetCurSel()+1;
}
void CEmbest_SCOMMDlg::OnSelchangeComboDatabits()
{
// TODO: Add your control notification handler code here
int i=m_DataBits.GetCurSel();
switch(i)
{
case 0:
i=8;
break;
case 1:
i=7;
break;
case 2:
i=6;
break;
}
m_nDatabits=i;
}
void CEmbest_SCOMMDlg::OnSelchangeComboParity()
{
// TODO: Add your control notification handler code here
BYTE temp;
int i=m_Parity.GetCurSel();
switch(i)
{
case 0:
temp=0;
break;
case 1:
temp=1;
break;
case 2:
temp=2;
break;
}
m_cParity=temp;
}
void CEmbest_SCOMMDlg::OnSelchangeComboSpeed()
{
// TODO: Add your control notification handler code here
int i=m_Speed.GetCurSel();
switch(i)
{
case 0:
i=300;
break;
case 1:
i=600;
break;
case 2:
i=1200;
break;
case 3:
i=2400;
break;
case 4:
i=4800;
break;
case 5:
i=9600;
break;
case 6:
i=19200;
break;
case 7:
i=38400;
break;
case 8:
i=43000;
break;
case 9:
i=56000;
break;
case 10:
i=57600;
break;
case 11:
i=115200;
break;
default:
break;
}
m_nBaud=i;
}
void CEmbest_SCOMMDlg::OnSelchangeComboStopbits()
{
// TODO: Add your control notification handler code here
int i=m_StopBits.GetCurSel();
switch(i)
{
case 0:
i=0;
break;
case 1:
i=2;
break;
}
m_nStopbits=i;
}
//类中回调函数的定义
void CEmbest_SCOMMDlg::response(BYTE* buf,int bufLen)
{
UpdateData(TRUE);
m_ReceiveData = buf+m_ReceiveData;
UpdateData(FALSE);
}
void CEmbest_SCOMMDlg::OnButtonOpenport()
{
// TODO: Add your control notification handler code here
CString strStatus;
m_bOpenPort=(!m_bOpenPort);
if(m_bOpenPort) //关闭串口
{
m_ctrlOpenPort.SetWindowText(_T("Open Port"));
UpdateData();
strStatus.Format(_T("STATUS:COM%d CLOSED,%d,%d,%d,%d"),m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
m_ctrlPortStatus.SetWindowText(strStatus);
// m_ctrlPortStatus.SetWindowText(_T("STATUS:COM Port Opened Success!"));
UpdateData(FALSE);
m_Port.ClosePort();//关闭串口
}
else //打开串口
{
m_ctrlOpenPort.SetWindowText(_T("Close Port"));
UpdateData();
m_ctrlPortStatus.SetWindowText(_T("STATUS:COM Port Opened!"));
UpdateData(FALSE);
if (m_Port.OpenPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits))
{
UpdateData();
strStatus.Format(_T("STATUS:COM%d OPENED,%d,%d,%d,%d"),m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
m_ctrlPortStatus.SetWindowText(strStatus);
// m_ctrlPortStatus.SetWindowText(_T("STATUS:COM Port Opened Success!"));
UpdateData(FALSE);
}
else
{
UpdateData();
m_ctrlPortStatus.SetWindowText(_T("STATUS:OPEN PORT ERROR!"));
UpdateData(FALSE);
AfxMessageBox(_T("Open port error!"));
}
}
}
void CEmbest_SCOMMDlg::OnButtonManualsend()
{
// TODO: add your control notification handler code here
BYTE *buffer=NULL;
BYTE *change=NULL;
DWORD mLength;
DWORD temp;
if (m_bOpenPort)//打开端口
{
AfxMessageBox(_T("Please open port first!!"));
}
else
{
UpdateData(TRUE);
change=(BYTE*)(LPCTSTR)m_strSendData;
mLength=m_strSendData.GetLength();
buffer=new BYTE[mLength];
for(temp=0;temp<mLength;temp++)
{
(*buffer)=(*change);
change=change+2;
buffer=buffer+1;
}
buffer=buffer-mLength;
m_Port.WritePort(buffer,mLength);
UpdateData(FALSE);
}
}
void CEmbest_SCOMMDlg::OnButtonCleansend()
{
// TODO: Add your control notification handler code here
UpdateData();
m_strSendData.Empty();
UpdateData(FALSE);
}
void CEmbest_SCOMMDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
m_Port.ClosePort();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -