www.pudn.com > AtModem.rar > YsComm.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_)