📄 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_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -