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

📄 serialport.h

📁 本程序是一个宾馆程控电话系统
💻 H
字号:
/*
**	文件名称:			CSerialPort.h
**
**	描述:				这个类能读,写和监视一个端口
**						当端口发生事件时他能给所有者发送消息
**						这个类创建一个线程来读和写,因此,主程序不会阻塞
**
**	作者:				李洋
*/


#ifndef __SERIALPORT_H__
#define __SERIALPORT_H__

#define WM_COMM_BREAK_DETECTED		WM_USER+1	//	检测到一个输入中断
												
#define WM_COMM_CTS_DETECTED		WM_USER+2	//	CTS信号改变(clear-to-send)
												//	指可以传输了
												
#define WM_COMM_DSR_DETECTED		WM_USER+3	//	DSR信号改变(data-set-ready)
												
#define WM_COMM_ERR_DETECTED		WM_USER+4	//	发生行状态错误
												
#define WM_COMM_RING_DETECTED		WM_USER+5	//	检测到振铃信号
												
#define WM_COMM_RLSD_DETECTED		WM_USER+6	//	RLSD信号改变(receive-line-signal-detect)
												
#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:
	// contruction and destruction
	//	构造函数和析构函数
	CSerialPort();
	virtual		~CSerialPort();

	// port initialisation
	//	端口初始化
	BOOL		InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 4800, 
						char parity = 'N', UINT databits = 8, UINT stopsbits = 1,
						DWORD dwCommEvents = EV_RXCHAR| EV_CTS , UINT nBufferSize = 2048);

	//	开始/停止 监视
	BOOL		StartMonitoring();	//	开始监视线程
	BOOL		RestartMonitoring();	//
	BOOL		StopMonitoring();	//	停止监视线程

	DWORD		GetWriteBufferSize();	//	返回输出缓冲区大小
	DWORD		GetCommEvents();	//	返回事件的代码
	DCB			GetDCB();	//	返回DCB配置

	void		WriteToPort(char* string);	//	向串口写一个字符串

protected:
	// protected memberfunctions
	//	保护成员函数
	void		ProcessErrorMessage(char* ErrorText);	//	处理错误信息
	static UINT	CommThread(LPVOID pParam);	//	线程函数
	static void	ReceiveChar(CSerialPort* port, COMSTAT comstat);	//	收到一个字符
	static void	WriteChar(CSerialPort* port);	//	写一个字符
	
	BYTE*		ReadBlock(CSerialPort* port,int &readLen);
	// thread
	//	线程
	CWinThread*			m_Thread;

	// synchronisation objects
	//	同步对象
	CRITICAL_SECTION	m_csCommunicationSync;	//	同步对象
	BOOL				m_bThreadAlive;	//	线程是否还在

	// handles
	//	句柄
	HANDLE				m_hShutdownEvent;	//	关闭事件
	HANDLE				m_hComm;	//	com口句柄
	HANDLE				m_hWriteEvent;	//	写事件

	// Event array. 
	// One element is used for each event. There are two event handles for each port.
	// A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).
	// There is a general shutdown when the port is closed. 
	//	事件数组
	//	一个元素被用作一个事件 ,这每一个端口有两个事件句柄
	//	一个写事件和收到一个字符事件,哪个事件位于在结构体overlapped中(m_ov.hEvent)
	//	当端口关闭时,正常的shutdown.
	HANDLE				m_hEventArray[3];

	//结构
	OVERLAPPED			m_ov;	//	异步结构对象
	COMMTIMEOUTS		m_CommTimeouts;	//	超时设置结构对象
	DCB					m_dcb;	//	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 + -