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

📄 yscomm.h

📁 VisualC++通信编程工程实例精解 Chapter 2 Example 1 MSCOMM控件编程实例 Example 2 基于Windows API的虚拟终端实现 Example 3
💻 H
字号:
// YsAT.h: interface for the CYsComm class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_YSAT_H__D43071E4_C7CF_11D5_971D_0050BADA81C3__INCLUDED_)
#define AFX_YSAT_H__D43071E4_C7CF_11D5_971D_0050BADA81C3__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/****************************************************************
名称:				重叠操作串口类
作者:				广州暨南大学97计算机 姚舜
EMAIL:				ycatx@ycatx.net
创建时间:			2001.10.23
最近修改时间:		2003.5.21
功能:				对串口操作进行全面的封装
等级:				☆☆☆☆☆
****************************************************************/

#define TYPE_READ		1
#define TYPE_WRITE		0
//#define BAUDRATE 1200//定义baudrate
//定义串口事件
#define WM_YSCOMM_MESSAGE WM_USER+2998
#define	WM_EV_BREAK		WM_USER+2999	//A break was detected on input. 
#define	WM_EV_CTS		WM_EV_BREAK+1	//The CTS (clear-to-send) signal changed state. 
#define	WM_EV_DSR		WM_EV_BREAK+2	//The DSR (data-set-ready) signal changed state. 
#define	WM_EV_ERR		WM_EV_BREAK+3	//A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. 
#define	WM_EV_RING		WM_EV_BREAK+4	//A ring indicator was detected. 
#define	WM_EV_RLSD		WM_EV_BREAK+5	//The RLSD (receive-line-signal-detect) signal changed state. 
#define	WM_EV_RXCHAR	WM_EV_BREAK+6	//A character was received and placed in the input buffer. 
#define	WM_EV_RXFLAG	WM_EV_BREAK+7	//The event character was received and placed in the input buffer. The event character is specified in the device's DCB structure, which is applied to a serial port by using the SetCommState function. 
#define	WM_EV_TXEMPTY	WM_EV_BREAK+8	//The last character in the output buffer was sent. 


#define PURGE_ALL PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR
class CYsComm
{
private:
	BOOL m_bSemiduplex;
protected:
	OVERLAPPED	m_overlappedWrite;
	OVERLAPPED	m_overlappedRead;
	OVERLAPPED	m_overlappedEvent;
	HWND		m_hWnd;//用来接收消息的窗口
	HANDLE		m_hFileHandle;//存在comm句柄
	HANDLE		m_hStopReadEvent;
	HANDLE		m_hStopWriteEvent;
public:
	BOOL		IsConnect(){return m_hFileHandle!=NULL;}
	UINT		m_nPort;//端口号
	int			m_iBaud;
////////////////////
	BOOL StopRead();
	BOOL StopWrite();

	CYsComm();
	virtual ~CYsComm();

	BOOL Create(UINT port,BOOL bSemiduplex=0,HWND hWnd=NULL);
	void StopComm();//退出
//////Write & Read //////////////
	int ReadIn(PBYTE  lpszInputBuffer,
			DWORD dwNumberOfBytesToRead,
			DWORD dwReadTimeOut);//内部使用使用

	int ReadComm(PBYTE lpszInputBuffer,
			DWORD dwCountoByte,
			DWORD* dwHaveReaded,
			DWORD dwReadTimeOut);

	int ReadComm(PBYTE buffer,//缓冲区
			DWORD dwRead,//希望读的长度
			LPDWORD pdwReaded,//读到的长度
			DWORD dwStartTimeOut,//最大的开始读数等待时间
			DWORD dwInterTimeOut//读每个字符之间的等待时间
			);//读出缓冲区里的数据

	int WriteComm(PBYTE lpszStringToWrite,
			DWORD dwNumberOfBytesToWrite);//写操作
	
	BOOL Purge(DWORD nType);//清除串口

///////// State /////////

	//查询缓冲区内的字符数
	//nType=1 表示查输入缓冲区,nType=0表示输出缓冲区
	BOOL GetBufferCount(int nType,LPDWORD lpNumberInBuffer);

	BOOL SetComm(int iBaud);//设置Comm口

////// Event Operation/////////////

	BOOL SetEvent(DWORD dwEvent);

	int WaitEvent(DWORD* pwdEvent,DWORD dwTimeOut);//设置并响应comm事件

	virtual BOOL DoStateEvent(DWORD dwEvent);//用来对串口事件进行处理
};

#endif // !defined(AFX_YSAT_H__D43071E4_C7CF_11D5_971D_0050BADA81C3__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -