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

📄 uartdlg.cpp

📁 串口程序检测
💻 CPP
📖 第 1 页 / 共 3 页
字号:

///////////Head Files///////////////
#include "stdafx.h"

#include "Macro.h"
#include "Global.h"
#include "Functions.h"

#include "Uart.h"
#include "UartDlg.h"
#include "DlgOption.h"

#include "PICDlg.h"
#include "PICDlg2.h"
///////////////////////////////////

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




/////////////////////////////////////////////////////////////////////////////
// CUartDlg dialog

CUartDlg::CUartDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUartDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUartDlg)
	m_iCountRxByte = 0;
	m_iCountTxByte = 0;
	m_iErrCycleNum = 0;
	m_bErrDetect = FALSE;
	m_iErrBitNum = 0;
	m_fErrBitRate = 0.0f;
	m_strRxEdit = _T("");
	m_bRxHex = FALSE;
	m_bTxAutoSpan = FALSE;
	m_iTxAutoSpan = 0;
	m_bTxAutoCts = FALSE;
	m_bTxCycle = FALSE;
	m_iTxCycleNum = 0;
	m_strTxEdit = _T("");
	m_bTxHex = FALSE;
	m_iTxStopByte = 0;
	m_bStatusBreak = FALSE;
	m_bStatusCts = FALSE;
	m_bStatusDcd = FALSE;
	m_bStatusDsr = FALSE;
	m_bStatusDtr = FALSE;
	m_bStatusRing = FALSE;
	m_bStatusRts = FALSE;
	m_bTxStopAuto = FALSE;
	m_fErrPacketRate = 0.0f;
	m_iErrPacketNum = 0;
	m_iRxBitNum = 0;
	m_iRxPacketNum = 0;
	m_strPicPath = _T("");
	m_bTxPicAutoCts = FALSE;
	m_strPicSavePath = _T("");
	m_strPicLength = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_ICON_STONE); 
}

void CUartDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUartDlg)
	DDX_Text(pDX, IDC_COUNT_RX_BYTE, m_iCountRxByte);
	DDX_Text(pDX, IDC_COUNT_TX_BYTE, m_iCountTxByte);
	DDX_Text(pDX, IDC_ERR_CYCLE_NUM, m_iErrCycleNum);
	DDX_Check(pDX, IDC_ERR_DETECT, m_bErrDetect);
	DDX_Text(pDX, IDC_ERR_BIT_NUM, m_iErrBitNum);
	DDX_Text(pDX, IDC_ERR_BIT_RATE, m_fErrBitRate);
	DDX_Text(pDX, IDC_RX_EDIT, m_strRxEdit);
	DDX_Check(pDX, IDC_RX_HEX, m_bRxHex);
	DDX_Check(pDX, IDC_TX_AUTO_SPAN_SEL, m_bTxAutoSpan);
	DDX_Text(pDX, IDC_TX_AUTO_SPAN, m_iTxAutoSpan);
	DDX_Check(pDX, IDC_TX_AUTO_CTS, m_bTxAutoCts);
	DDX_Check(pDX, IDC_TX_CYCLE, m_bTxCycle);
	DDX_Text(pDX, IDC_TX_CYCLE_NUM, m_iTxCycleNum);
	DDX_Text(pDX, IDC_TX_EDIT, m_strTxEdit);
	DDX_Check(pDX, IDC_TX_HEX, m_bTxHex);
	DDX_Text(pDX, IDC_TX_STOP_BYTE, m_iTxStopByte);
	DDX_Check(pDX, IDC_STATUS_BREAK, m_bStatusBreak);
	DDX_Check(pDX, IDC_STATUS_CTS, m_bStatusCts);
	DDX_Check(pDX, IDC_STATUS_DCD, m_bStatusDcd);
	DDX_Check(pDX, IDC_STATUS_DSR, m_bStatusDsr);
	DDX_Check(pDX, IDC_STATUS_DTR, m_bStatusDtr);
	DDX_Check(pDX, IDC_STATUS_RING, m_bStatusRing);
	DDX_Check(pDX, IDC_STATUS_RTS, m_bStatusRts);
	DDX_Check(pDX, IDC_TX_STOP_AUTO, m_bTxStopAuto);
	DDX_Control(pDX, IDC_MSCOMM, m_mscomm);
	DDX_Text(pDX, IDC_ERR_PACKET_RATE, m_fErrPacketRate);
	DDX_Text(pDX, IDC_ERR_PACKET_NUM, m_iErrPacketNum);
	DDX_Text(pDX, IDC_RX_BIT_NUM, m_iRxBitNum);
	DDX_Text(pDX, IDC_RX_PACKET_NUM, m_iRxPacketNum);
	DDX_Text(pDX, IDC_EDIT_PIC_PATH, m_strPicPath);
	DDX_Check(pDX, IDC_TX_PIC_CTS, m_bTxPicAutoCts);
	DDX_Text(pDX, IDC_PIC_SAVE_PATH, m_strPicSavePath);
	DDX_Text(pDX, IDC_EDIT_PIC_LENGTH, m_strPicLength);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CUartDlg, CDialog)
	//{{AFX_MSG_MAP(CUartDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_OPEN_PORT, OnOpenPort)
	ON_BN_CLICKED(IDC_RX_FRESH, OnRxFresh)
	ON_BN_CLICKED(IDC_TX_CYCLE, OnTxCycle)
	ON_WM_TIMER()
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDC_RX_SHOW_PAUSE, OnRxShowPause)
	ON_BN_CLICKED(IDC_TX_AUTO_SPAN_SEL, OnTxModeTimer)
	ON_BN_CLICKED(IDC_TX_MANUAL, OnTxModeManual)
	ON_BN_CLICKED(IDC_COUNT_CLR, OnCountClr)
	ON_BN_CLICKED(IDC_ERR_DETECT, OnErrDetect)
	ON_BN_CLICKED(IDC_ERR_CLR, OnErrClr)
	ON_BN_CLICKED(IDC_ERR_CYCLE_RST, OnErrCycleRst)
	ON_BN_CLICKED(IDC_TX_SHOW_CLR, OnTxShowClr)
	ON_BN_CLICKED(IDC_STATUS_RTS, OnStatusRts)
	ON_BN_CLICKED(IDC_STATUS_DTR, OnStatusDtr)
	ON_BN_CLICKED(IDC_STATUS_BREAK, OnStatusBreak)
	ON_BN_CLICKED(IDC_TX_CYCLE_RST, OnTxCycleRst)
	ON_BN_CLICKED(IDC_RX_SHOW_CLR, OnRxShowClr)
	ON_BN_CLICKED(IDC_TX_AUTO_CTS, OnTxModeCts)
	ON_BN_CLICKED(IDC_RESET, OnReset)
	ON_BN_CLICKED(IDC_OPTION, OnOption)	
	ON_BN_CLICKED(IDC_BUTTON_STORE_FILE_NAME, OnButtonSaveFile)
	ON_BN_CLICKED(IDC_BUTTON_STORE_RESULT, OnButtonStoreResult)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BUTTON_PICBROWSE, OnButtonPicbrowse)
	ON_BN_CLICKED(IDC_BUTTON_SENDPIC, OnButtonSendPic)
	ON_BN_CLICKED(IDC_BUTTON_SAVEPIC, OnButtonSavepic)
	ON_BN_CLICKED(IDC_BUTTON_PIC_SAVE_PATH, OnButtonPicSavePath)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUartDlg message handlers

void CUartDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CUartDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

BEGIN_EVENTSINK_MAP(CUartDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CUartDlg)
	ON_EVENT(CUartDlg, IDC_MSCOMM, 1 /* OnComm */, OnOnCommMscomm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()


HBRUSH CUartDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	


	COLORREF ColorRGB;
	ColorRGB = RGB(255,0,0);

	if( pWnd->GetDlgCtrlID() == IDC_STATIC_OPEN ||          //修改IDC_STATIC_OPEN对应控件的颜色 	
		pWnd->GetDlgCtrlID() == IDC_STATIC_RUN ||           //修改IDC_STATIC_RUN对应控件的颜色 
		pWnd->GetDlgCtrlID() == IDC_STATIC_BIT_RATE_SHOW ) //修改IDC_STATIC_BIT_RATE_SHOW对应控件的颜色
		
		pDC->SetTextColor(ColorRGB);
	
	ColorRGB = RGB(128,64,64);

	if( pWnd->GetDlgCtrlID() == IDC_STATIC_INI_PORT_NUM ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_INI_BAUD_RATE ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_INI_DATA_BIT ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_INI_CHECK_BIT ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_INI_STOP_BIT ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_INI_FRAME	)

		pDC->SetTextColor(ColorRGB);

	ColorRGB = RGB(128,64,0);

	if( pWnd->GetDlgCtrlID() == IDC_STATIC_COUNT_TX_BYTE ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_COUNT_RX_BYTE ||
		//pWnd->GetDlgCtrlID() == IDC_COUNT_CLR ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_COUNT_FRAME )

		pDC->SetTextColor(ColorRGB);

	ColorRGB = RGB(0,128,64);

	if( pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_DETECT ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_CYCLE_NUM ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_RX_BIT_NUM ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_BIT_NUM ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_BIT_RATE ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_RX_PACKET_NUM ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_PACKET_NUM ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_PACKET_RATE ||		
		//pWnd->GetDlgCtrlID() == IDC_ERR_CLR ||
		//pWnd->GetDlgCtrlID() == IDC_ERR_CYCLE_RST ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_ERR_FRAME	)

		pDC->SetTextColor(ColorRGB);

	ColorRGB = RGB(64,128,128);

	if( pWnd->GetDlgCtrlID() == IDC_STATIC_RTS ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_CTS ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_DTR ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_DSR ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_RING ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_DCD ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_BREAK ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_STATUS_FRAME	)

		pDC->SetTextColor(ColorRGB);

	ColorRGB = RGB(128,0,128);

	if( pWnd->GetDlgCtrlID() == IDC_STATIC_TX_HEX ||
		//pWnd->GetDlgCtrlID() == IDC_TX_SHOW_CLR ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_TX_CYCLE ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_TX_CYCLE_NUM ||
		//pWnd->GetDlgCtrlID() == IDC_TX_CYCLE_RST ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_TX_AUTO_SPAN_SEL ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_AUTO_SPAN_UNIT ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_TX_AUTO_CTS ||
		//pWnd->GetDlgCtrlID() == IDC_TX_MANUAL ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_TX_STOP_AUTO ||
		pWnd->GetDlgCtrlID() == IDC_STATIC_RX_HEX 
		//pWnd->GetDlgCtrlID() == IDC_RX_SHOW_PAUSE ||
		//pWnd->GetDlgCtrlID() == IDC_RX_SHOW_CLR ||
		//pWnd->GetDlgCtrlID() == IDC_RX_FRESH	
		)

		pDC->SetTextColor(ColorRGB);

	// TODO: Return a different brush if the default is not desired
	return hbr;
}


BOOL CUartDlg::OnInitDialog()
{
	int i;

	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
	
	SetWindowText( _T("串口程序V3.5") );


	g_iTxThreadPriority = 3;             
	m_pThread = NULL;	
	m_bOpen = false;
	m_bRxShowPause = true;
	m_cTxCycleIndex = 0;	
	m_cErrCycleIndex = 0;

	m_iPicIndex = 0;       //============

	for(i=0;i<RX_BUF_SIZE;i++)	m_RxBuf[i] = 0;          //将发送接收缓冲区置为空   其中RX_BUF_SIZE = 1024 *31
	for(i=0;i<TX_BUF_SIZE;i++)	m_TxBuf[i] = 0;          // TX_BUF_SIZE = 1024*4;
	m_iTxByteCounterConv = 0;		

	m_hEventTxCts = CreateEvent(NULL,   // default security attributes 
					TRUE,  // auto reset event 
					FALSE,  // not signaled 
					NULL    
					);

	/*
	m_font.CreateFont(
	12,                        // nHeight
	0,                         // nWidth
	0,                         // nEscapement
	0,                         // nOrientation
	FW_NORMAL,                 // nWeight
	FALSE,                     // bItalic
	FALSE,                     // bUnderline
	0,                         // cStrikeOut
	ANSI_CHARSET,              // nCharSet
	OUT_DEFAULT_PRECIS,        // nOutPrecision
	CLIP_DEFAULT_PRECIS,       // nClipPrecision
	DEFAULT_QUALITY,           // nQuality
	DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
	"Arial");                 // lpszFacename
	//m_tx_cyclerst.SetFont(&font);
	//m_brush.CreateSolidBrush(RGB(0, 255, 0)); 
	*/
	m_iIniPortNum = 0;
	m_iIniBaudRate = 1;
	m_iIniDataBit = 4;
	m_iIniCheckBit = 0;
	m_iIniStopBit = 0; 
	m_iIniPicStyle = 0;   //88888888888888888888888888

	m_iCountRxByte = 0;			
	m_iCountTxByte = 0;			

	m_bErrDetect = true;
	m_iErrCycleNum = 180;
	m_iRxBitNum = 0;			
	m_iErrBitNum = 0;			
	m_fErrBitRate = 0.0;		
	m_iRxPacketNum = 0;			
	m_iErrPacketNum = 0;		
	m_fErrPacketRate = 0.0;		


	m_strRxEdit.Empty();
	m_bRxHex = true;

	m_strTxEdit.Empty();
	m_bTxHex = true;
	m_bTxCycle = true;
	m_iTxCycleNum = 180;

	m_bTxAutoSpan = false;
	m_iTxAutoSpan = 1000;
	m_bTxAutoCts = false;
	m_bTxStopAuto = true;
	m_iTxStopByte = 100000;

	m_bStatusBreak = false;
	m_bStatusCts = false;
	m_bStatusDcd = false;
	m_bStatusDsr = false;
	m_bStatusDtr = false;
	m_bStatusRing = false;
	m_bStatusRts = false;

	char var_string[256] = {0};
	GetEnvironmentVariable("TEMP", var_string, 256);
	m_strIniFileName = strcat(var_string, _T("\\Uart.ini") );
	
	CFileFind fFind;
    if( fFind.FindFile(m_strIniFileName) ) 
	{
		IniFileLoad(m_strIniFileName);	
	}

	m_strFileName.Empty();


	((CComboBox*)GetDlgItem(IDC_INI_PORT_NUM))->SetCurSel(m_iIniPortNum);//设置串口号
	((CComboBox*)GetDlgItem(IDC_INI_BAUD_RATE))->SetCurSel(m_iIniBaudRate);//设置波特率
	((CComboBox*)GetDlgItem(IDC_INI_DATA_BIT))->SetCurSel(m_iIniDataBit);//设置数据位
	((CComboBox*)GetDlgItem(IDC_INI_CHECK_BIT))->SetCurSel(m_iIniCheckBit);//2 Even parity. 3 Mark parity. 0 No parity. 1 Odd parity. 4 Space parity. 
	((CComboBox*)GetDlgItem(IDC_INI_STOP_BIT))->SetCurSel(m_iIniStopBit);//0=1 stop bit. 1=1.5 stop bits. 2=2 stop bits. 
	((CComboBox*)GetDlgItem(IDC_INI_PIC_STYLE))->SetCurSel(m_iIniPicStyle);

	GetDlgItem(IDC_STATIC_OPEN)->ShowWindow(SW_HIDE);			

	((CEdit *)GetDlgItem(IDC_STATUS_RTS))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_STATUS_DTR))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_STATUS_BREAK))->EnableWindow(false);

	((CEdit *)GetDlgItem(IDC_STATUS_CTS))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_STATUS_DSR))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_STATUS_RING))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_STATUS_DCD))->EnableWindow(false);

	((CEdit *)GetDlgItem(IDC_TX_EDIT))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_TX_HEX))->EnableWindow(false);

	((CEdit *)GetDlgItem(IDC_TX_AUTO_SPAN_SEL))->EnableWindow(false);	
	((CEdit *)GetDlgItem(IDC_TX_AUTO_CTS))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_TX_MANUAL))->EnableWindow(false);
	((CEdit *)GetDlgItem(IDC_RX_FRESH))->EnableWindow(false);
	/////

	UpdateData(false);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CUartDlg::OnOpenPort() 
{
	if(!m_bOpen)
	{//open port
		m_bOpen = true;
		CString setstr;

		UpdateData(true);
		
		m_iIniPortNum = ((CComboBox*)GetDlgItem(IDC_INI_PORT_NUM))->GetCurSel();//设置串口号
		m_iIniBaudRate = ((CComboBox*)GetDlgItem(IDC_INI_BAUD_RATE))->GetCurSel();//设置波特率

⌨️ 快捷键说明

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