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

📄 serialport.h

📁 SerialPort_C++Builder
💻 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 SerialPortH
#define SerialPortH

#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_RXCHAR				WM_USER+7	// A character was received and placed in the input buffer. 
#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 WM_COMM_MODEM_STATUS		WM_USER+10


class TSerialPort
{ 
public:
	void ReportModemStat(TSerialPort *port,BOOL bUpDataNow);
	BOOL ClrRTS();
	BOOL SetRTS();
	BOOL ClrDTR();
	BOOL SetDTR();
	BOOL IsOpen();
	void WriteToPort(LPCTSTR string);
	void WriteToPort(char* string);
	void WriteToPort(UCHAR*,int);
	void Close();
	// contruction and destruction
	TSerialPort();
	virtual ~TSerialPort();
	
	// port initialisation
	BOOL InitPort(TForm* pPortOwner,
                UINT portnr = 1,
                UINT baud = 19200,
                char parity = 'N',
                UINT databits = 8,
                UINT stopbits = 1,
                DWORD dwCommEvents = EV_RXCHAR | EV_CTS,
                UINT writebuffersize =1024);

	// start/stop comm watching
	BOOL StartMonitoring();
	BOOL RestartMonitoring();
	BOOL StopMonitoring();
	
	DWORD GetWriteBufferSize();
	DWORD GetCommEvents();
	DCB GetDCB();

protected:
	// protected memberfunctions
	void ProcessErrorMessage(char* ErrorText);
	static DWORD _stdcall CommThread(LPVOID pParam);
	static void ReceiveChar(TSerialPort* port, COMSTAT comstat);
	static void WriteChar(TSerialPort* port);
	
	// thread
	HANDLE m_HThread;
	
	// synchronisation objects
	CRITICAL_SECTION m_csCommunicationSync;
	BOOL m_bThreadAlive;
	
	// handles
	HANDLE m_hShutdownEvent;
	HANDLE m_hComm;
	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.
	HANDLE m_hEventArray[3];
	
	// structures
	OVERLAPPED m_ov;
	COMMTIMEOUTS m_CommTimeouts;
	DCB m_dcb;
	
	// owner window 
	TForm *m_pOwner;
	
	// misc
	UINT m_nPortNr;
	char* m_szWriteBuffer;
	DWORD m_dwCommEvents;
	DWORD m_nWriteBufferSize;
	int m_nWriteSize;
	BOOL m_bCommStatus;

};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -