13.6 自定义串口类
为了使用方便,在本实例中将串口的属性及操作封装成一个类。对串口的操作可直接调用这个串口类提供的几个函数接口即可。自定义串口类定义如下:
- 01 class CMySerial
- 02 {
- 03 public:
- 04 CMySerial();
- 05 virtual ~CMySerial();
- 06 public:
- 07 bool OpenSerialPort(CWnd* pParent, UINT portnr, UINT baud, char 08 parity, UINT databits, UINT stopbits, DWORD dwCommEvents,
- 09 UINT writebuffersize); //打开串口函数
- 10 void ClosePort(); //关闭串口函数
- 11 //串口监控线程的控制函数
- 12 BOOL StartMonitoring();
- 13 BOOL RestartMonitoring();
- 14 BOOL StopMonitoring();
- 15 DWORD GetWriteBufferSize(); //获取写缓冲区大小
- 16 DWORD GetCommEvents(); //获取串口事件
- 17 DCB GetDCB(); //获取串口配置信息
- 18 //获取并保存将要发送的数据,并触发发送事件
- 19 void WriteToPort(char* string);
- 20 void WriteToPort(char* string,int n);
- 21 void WriteToPort(LPCTSTR string);
- 22 void WriteToPort(LPCTSTR string,int n);
- 23 protected:
- 24 void ProcessErrorMessage(char* ErrorText); //错误事件处理
- 25 static UINT CommThread(LPVOID pParam); //串口线程处理函数
- 26 static void ReceiveChar(CMySerial* port,
- 27 COMSTAT comstat); //读取串口数据
- 28 static void WriteChar(CMySerial* port); //向串口写入数据
- 29 public:
- 30 HANDLE m_hComm; //串口操作句柄
- 31 int m_nWriteSize; //发送数据
- 32 protected:
- 33 CWinThread* m_Thread; //线程指针
- 34 CRITICAL_SECTION m_csCommunicationSync; //临界资源
- 35 BOOL m_bThreadAlive; //线程活动状态
- 36 //串口事件
- 37 HANDLE m_hWriteEvent; //写事件
- 38 HANDLE m_hShutdownEvent; //关闭事件
- 39 HANDLE m_hEventArray[3]; //事件数组.
- 40 DWORD m_dwCommEvents; //串口事件掩码
- 41 OVERLAPPED m_ov; //设置异步I/O操作
- 42 COMMTIMEOUTS m_CommTimeouts; //串口超时结构体
- 43 DCB m_dcb; //串口通信中的DCB结构 .
- 44 CWnd* m_pParent; //包含串口操作的窗体指针
- 45 UINT m_nPortNr; //串口号
- 46 char* m_szWriteBuffer; //写缓冲区
- 47 DWORD m_nWriteBufferSize; //写缓冲区大小
- 48 };
【代码解析】
在这个类中事件数组m_hEventArray中的每个数组元素都对应着一个事件. 这个数组有3个元素:一个是写事件、一个是收事件,还有一个是串口关闭事件。其他的成员变量都已加注释,在此不再一一解释,下面讲解这个自定义类成员函数的功能及实现方法。