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