这几天一直再看串口相关知识,对于其总结为如下串口类:
头文件声明如下:
1 #pragma once 2 3 // 声明当串口接收到线程的时候调用的函数指针 4 // 参数: 1,接收到的数据; 2,数据长度; 3,发送的目标地址 5 typedef void (*DataArriveProc)(char *data, int len, DWORD dest); 6 7 /*********************************** 8 1,实现一个串口类,用于进行串口的通信; 9 2,其中的特性是,主动发送数据,被动接受 10 做出响应,其中开辟一个线程进型串口读取; 11 3,线程函数响应时,应该将接受到的数据转 12 发给使用此串口的上层应用; 13 ************************************/ 14 class CSerialPort 15 { 16 public: 17 CSerialPort(void); 18 virtual ~CSerialPort(void); 19 20 // 串口操作函数 21 BOOL OpenPort(LPCTSTR portName, DWORD baudRate, int dataBits, int stopBits, int parity, DataArriveProc proc, DWORD dest); 22 BOOL ClosePort(); // 关闭串口 23 DWORD WritePort(char *data, DWORD size); // 往串口写数据 24 25 // 串口读操作线程的操作函数 26 static UINT AFX_CDECL ReadPortProc(LPVOID lpParam);// 往串口读数据的线程函数 27 BOOL Activate(); // 激活串口的读操作 28 BOOL Deactivate(); // 取消串口的读操作 29 BOOL IsActivate(); // 窗口是否已经准备好进行读操作 30 31 private: 32 HANDLE m_hPortHandle; // 串口句柄 33 HANDLE m_hReadThread; // 读线程 34 BOOL m_bReading; // 读线程是否处于工作状态 35 DCB m_dcbPort; // 串口的工作参数 36 COMMTIMEOUTS m_tmOut; // 串口通信超时参数 37 38 DataArriveProc m_pDataArriveProc; // 接收到数据后的调用的方法 39 DWORD m_dwDestAddress; // 数据发送的目的地址 40 };