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

📄 serialport.h

📁 PC端
💻 H
字号:

#ifndef __SERIALPORT_H__
#define __SERIALPORT_H__

//用户消息定义
#define WM_COMM_BREAK_DETECTED		WM_USER+1	// 输入BREAK信号
#define WM_COMM_CTS_DETECTED		WM_USER+2	// 发送清除信号 
#define WM_COMM_DSR_DETECTED		WM_USER+3	// 数据准备好信号 
#define WM_COMM_ERR_DETECTED		WM_USER+4	// CE_FRAME, CE_OVERRUN, and CE_RXPARITY. 
#define WM_COMM_RING_DETECTED		WM_USER+5	// 振铃信号 
#define WM_COMM_RLSD_DETECTED		WM_USER+6	// RLSD信号 
#define WM_COMM_RXCHAR				WM_USER+7	// 一个字符被接受并置于输入缓冲 
#define WM_COMM_RXFLAG_DETECTED		WM_USER+8	// 一个事件字符被接受并置于输入缓冲  
#define WM_COMM_TXEMPTY_DETECTED	WM_USER+9	// 输出缓冲区尾字符被发送  

class CSerialPort
{														 
public:
	// 构造函数和析构函数
	CSerialPort();
	virtual		~CSerialPort();

	// 串行口初始化											
	BOOL		InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 115200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 4096);

	// 启动和停止串行口观察
	BOOL		StartMonitoring();
	BOOL		RestartMonitoring();
	BOOL		StopMonitoring();

	DWORD		GetWriteBufferSize();
	DWORD		GetCommEvents();
	DCB			GetDCB();

	void		WriteToPort(char* string);

protected:
	// 保护成员函数
	void   ProcessErrorMessage(char* ErrorText);
	static UINT	CommThread(LPVOID pParam); //线程函数
	static void	ReceiveChar(CSerialPort* port, COMSTAT comstat);
	static void	WriteChar(CSerialPort* port);

	// 线程
	CWinThread*			m_Thread;

	// 同步物体
	CRITICAL_SECTION	m_csCommunicationSync;
	BOOL				m_bThreadAlive;

	// 事件句柄
	HANDLE				m_hShutdownEvent;
	HANDLE				m_hComm;
	HANDLE				m_hWriteEvent;

	// 事件队列 
	// 队列的元素对应一个事件.每个串行口有两个事件句柄.
	// 写事件和读字符事件在结构"overlapped(m_ov.hEvent)"中指定.
	// 在串行口被关闭时有一个关闭事件. 
	HANDLE				m_hEventArray[3];

	// 结构定义
	OVERLAPPED			m_ov; //重叠事件结构
	COMMTIMEOUTS		m_CommTimeouts; //超时时间结构
	DCB					m_dcb; 

	// 串行口拥有者窗口
	CWnd*				m_pOwner;

	// 其他
	UINT				m_nPortNr;
	char*				m_szWriteBuffer; //发送缓冲区
	DWORD				m_dwCommEvents;
	DWORD				m_nWriteBufferSize; //发送缓冲区大小
};

#endif __SERIALPORT_H__


⌨️ 快捷键说明

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