📄 serialport.h
字号:
// SerialPort.h: interface for the CSerialPort class.
#ifndef __SERIALPORT_H__
#define __SERIALPORT_H__
//---定义消息名称
#define WM_COMM_BREAK_DETECTED WM_USER+1 // 输入产生中断
#define WM_COMM_CTS_DETECTED WM_USER+2 // The CTS (clear-to-send) signal changed state.
#define WM_COMM_DSR_DETECTED WM_USER+3 // The DSR (data-set-ready) signal changed state.
#define WM_COMM_ERR_DETECTED WM_USER+4 // A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
#define WM_COMM_RING_DETECTED WM_USER+5 // A ring indicator was detected.
#define WM_COMM_RLSD_DETECTED WM_USER+6 // The RLSD (receive-line-signal-detect) signal changed state.
#define WM_COMM_RXCHAR WM_USER+7 // 缓冲区接收到一个字符
#define WM_COMM_RXFLAG_DETECTED WM_USER+8 // 事件标志
#define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // 输出缓冲区最后一个的字符已经发送
#define CR 0x0D
#define LF 0x0A
/*
* 摘 要:采用API编写的串口类,适合多线程的应用
作 者:杨帆
完成时间:2004.6.15
*/
class CSerialPort
{
public:
CSerialPort();
virtual ~CSerialPort();
protected:
//---定义一个辅助线程
CWinThread* m_pThread;
//
CRITICAL_SECTION m_csCommunicationSync;
BOOL m_bThreadAlive;
//---定义句柄
HANDLE m_hWriteEvent;
HANDLE m_hShutdownEvent;
HANDLE m_hComm;
//---定义一个事件数组,因为对于每个串口在重叠式读写中存在两个事件句柄
HANDLE m_hEventArray[3];
//---定义关于串口的结构体
OVERLAPPED m_ov;
COMMTIMEOUTS m_CommTimeouts;
DCB m_hDcb;
//---定义辅助窗体,作为消息的句柄
CWnd* m_hWnd;
//
UINT m_nPortID; //the number of the serial port
UINT m_nBaud; //daud rate
char* m_szWriteBuffer; //buffer of writing
char* m_szReadBuffer;
DWORD m_dwCommEvents;
DWORD m_dwWriteBufferSize;
DWORD m_dwReadBufferSize;
int m_nWriteSize;
// int m_nReadSize;
//Implemention
public:
int InitialPort(CWnd* pPortwnd,
UINT nMinPort, UINT nMaxPort,
UINT baud,
char parity,
UINT databits,
UINT stopbits,
DWORD dwCommEvents,
UINT writebuffersize,
UINT readbuffersize);
//---串口的打开与关闭
BOOL InitialPort(CWnd* pPortwnd,
UINT portnr ,
UINT baud,
char parity,
UINT databits,
UINT stopbits,
DWORD dwCommEvents,
UINT writebuffersize,
UINT readbuffersize);
// BOOL InitialPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopbits = 1, DWORD dwCommEvents = EV_RXCHAR, UINT writebuffersize = 1024);
void ClosePort(); //close the serial port
//---线程的操作
BOOL StartThread();
BOOL RestartThread();
BOOL PauseThread();
BOOL IsThreadAlive();
//----
DWORD GetWriteBufferSize();
DWORD GetCommEvents();
DCB GetDCB();
inline UINT GetPortID(void); //get the ID of the serial port
inline UINT GetBaudrate(void); //get the baud rate of the serial port
//---发送字符串
void SendString(CString str);
void WriteToPort(LPCTSTR string);
char ConvertHexChar(char ch);
void String2Hex(CString str, CString &senddata);
protected:
void ProcessErrorMessage(char* ErrorText);
static UINT CommThread(LPVOID lParam);
static void ReadComm(CSerialPort* port, COMSTAT ComStat);
static void WriteComm(CSerialPort* port);
};
inline UINT CSerialPort::GetBaudrate(){ return m_nBaud; }
inline UINT CSerialPort::GetPortID(){ return m_nPortID; }
inline BOOL CSerialPort::IsThreadAlive() { return m_bThreadAlive; }
#endif __SERIALPORT_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -