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

📄 embest_scommdlg.cpp

📁 WinCE 上串口通讯应用
💻 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 + -