📄 serialportctrl.h
字号:
// SerialPortCtrl.h: interface for the CComOpAT class.
//
//////////////////////////////////////////////////////////////////////
#ifndef __SERIALPORTCTRL_H__
#define __SERIALPORTCTRL_H__
typedef unsigned char DTOUTB; //输出缓冲区数据类型
typedef const unsigned char* DTOUT; //输出缓冲区数据类型
typedef unsigned char DTIN; //输入缓冲区数据类型,
//在主线程中分配堆内存,字符数组
const DWORD INBUFSZ = 4096; //默认输入缓冲区大小
const DWORD OUTBUFSZ = 512; //默认输出缓冲区大小
//由监视线程向主线程发出的消息
#define WK_EVT_SPIN WM_USER+7
//****************串口操作类使用方法*******************//
//1.类构造时,并未打开任何端口,要使用,必须调用OpenCom函数,并指定要打开的端口号.
//2.端口刚打开时,使用默认的参数进行端口设置,
// 可在端口打开后,事先填充类成员,再调用SetCom进行端口设置.
//3.ReadCom的参数pinbuf应是一个字符数组名.
//4.类文件中,已经初步实现了端口监视线程,但需在主线程中启动或停止,
// 还需在主线程中定义一个COMWATINFO的全局变量,以便主线程与监视线程共享.
//5.主线程应建立一个消息处理函数,接收由监视线程向主线程发出的EV_COMREADIN消息,
// 并进行相应或所需的处理.
//****************串口操作类使用方法*******************//
class CSerialPortCtrl
{
public:
bool OpenCom(LPCTSTR port = "COM1"); //打开指定端口,默认为COM1
bool SetCom(); //设置端口
DWORD ReadCom(DTIN* pinbuf = NULL,DWORD toread = INBUFSZ); //读取端口
DWORD WriteCom(DTOUT outbuf,DWORD towrite); //写入端口
bool CloseCom(); //关闭端口
public:
HANDLE m_hCom; //端口句柄
CString m_strPort; //端口名称
DTIN* m_cInBuf;
DWORD m_InBufSz; //输入缓冲大小
DWORD m_OutBufSz; //输出缓冲大小
bool m_bComOpen; //端口是否处于打开状态,跟踪m_hCom的有效性
DWORD m_dwEvt; //通信事件掩膜
DCB m_Dcb; //端口设备控制块
COMMTIMEOUTS m_ComTimeOuts; //超时结构
OVERLAPPED m_OLRead; //异步(重叠)I状态结构
OVERLAPPED m_OLWrite; //异步(重叠)O状态结构
public:
CSerialPortCtrl(); //构造函数
virtual ~CSerialPortCtrl(); //析构函数
protected:
bool WriteComByte(DTOUTB uc);
};
typedef struct _SPWATCHINFO
{
HWND hParent; //含有界面的主线程窗口句柄
CSerialPortCtrl* pSP; //端口操作类的指针
HANDLE hEvt; //同步事件
// DWORD dwlen; //端口中的数据字节数
// DWORD dwEvtMask; //端口的事件掩膜,可由主线程判断并进行相应操作
} SPWATCHINFO;
//端口监视线程
UINT SPWatcher(LPVOID SPWatInfo);
#endif // !defined(__SERIALPORTCTRL_H__)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -