📄 serialport.h
字号:
/*
** FILENAME CSerialPort.h
**
** PURPOSE This class can read, write and watch one serial port.
** It sends messages to its owner when something happends on the port
** The class creates a thread for reading and writing so the main
** program is not blocked.
**
** CREATION DATE 15-09-1997
** LAST MODIFICATION 12-11-1997
**
** AUTHOR Remon Spekreijse
**
**
*/
#ifndef __SERIALPORT_H__
#define __SERIALPORT_H__
#define WM_COMM_BREAK_DETECTED WM_USER+1 // A break was detected on input.
#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_RXFLAG_DETECTED WM_USER+8 // The event character was received and placed in the input buffer.
#define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in the output buffer was sent.
#define BUFSIZE 4096 //数据读写缓存
//class __declspec(dllexport) CSerialPort
//class __declspec(dllexport) CSerialPort
//#ifdef DLL_FILE
// class __declspec(dllexport) CSerialPort
//#else
// class __declspec(dllimport) CSerialPort
//#endif
//##ModelId=4652869D02DE
class __declspec(dllimport) CSerialPort
{
public:
// contruction and destruction
//##ModelId=4652869D02EE
CSerialPort();
//##ModelId=4652869D02EF
virtual ~CSerialPort();
// port initialisation
//##ModelId=4652869D02F1
BOOL InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);
// start/stop comm watching
//##ModelId=4652869D0340
BOOL StartMonitoring();
//##ModelId=4652869D0341
BOOL RestartMonitoring();
//##ModelId=4652869D034B
BOOL StopMonitoring();
//##ModelId=4652869D034C
DWORD GetWriteBufferSize();
//##ModelId=4652869D034D
DWORD GetCommEvents();
//##ModelId=4652869D034E
DCB GetDCB();
//##ModelId=4652869D034F
BOOL SetDCB(CSerialPort* port,LPDCB dcb);
//##ModelId=4652869D035D
COMMTIMEOUTS GetCommTimeOut();
//##ModelId=4652869D035E
BOOL SetCommTimeOut(CSerialPort* port,LPCOMMTIMEOUTS commtime);
//##ModelId=4652869D036B
void WriteToPort(BYTE bWriteBuffer[],int nWriteBufferSize);
//##ModelId=4652869D036E
int Write(CString strSend);
//##ModelId=4652869D0370
int Read(CString &strRead , int nLength );
//##ModelId=4652869D037B
int Read(char* buf, int len);
//##ModelId=4652869D037E
int Write(char * buf , int len);
protected:
// protected memberfunctions
//##ModelId=4652869D038B
void ProcessErrorMessage(char* ErrorText);
//##ModelId=4652869D038D
static UINT CommThread(LPVOID pParam);
//##ModelId=4652869D039B
static void ReceiveChar(CSerialPort* port, COMSTAT comstat);
//##ModelId=4652869D03A9
static void WriteChar(CSerialPort* port);
// thread
//##ModelId=4652869D03AD
CWinThread *m_Thread;
// synchronisation objects
//##ModelId=4652869D03BC
CRITICAL_SECTION m_csCommunicationSync;
//##ModelId=4652869D03BD
BOOL m_bThreadAlive;
// handles
//##ModelId=4652869D03C8
HANDLE m_hShutdownEvent;
//##ModelId=4652869D03C9
HANDLE m_hComm;
//##ModelId=4652869D03D8
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.
//##ModelId=4652869D03D9
HANDLE m_hEventArray[3];
// structures
//##ModelId=4652869E0001
OVERLAPPED m_ov;
//##ModelId=4652869E0010
COMMTIMEOUTS m_CommTimeouts;
//##ModelId=4652869E0020
DCB m_dcb;
// owner window
//##ModelId=4652869E002F
CWnd* m_pOwner;
// misc
//##ModelId=4652869E0033
UINT m_nPortNr;
//##ModelId=4652869E004E
char m_bWriteBuffer[BUFSIZE];
//##ModelId=4652869E004F
DWORD m_dwCommEvents;
//##ModelId=4652869E005D
DWORD m_nWriteBufferSize;
public:
// 关闭端口
//##ModelId=4652869E006D
BOOL ClosePort(void);
// 打开串口
//##ModelId=4652869E006F
BOOL OpenPort(int iPort, UINT unBaud,CWnd* pPortOwner);
//##ModelId=4652869E007F
int m_port;
// 端口打开状态
//##ModelId=4652869E008C
BOOL OpenStatus;
// 关闭监测线程
//##ModelId=4652869E009C
BOOL CloseMonitoring(void);
// 配置参数
//BOOL Config(CString strPara);
//##ModelId=4652869E009E
BOOL Config(UINT baud,char parity,UINT databits,UINT stopsbits);
// 询问设备长度
//##ModelId=4652869E00AD
int AskCom(char * cBuf, int iLen);
};
#endif __SERIALPORT_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -