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

📄 serialport.h

📁 MDF监控源码2
💻 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 + -