SerialPort.h
资源名称:停车场管理系统.zip [点击查看]
上传用户:trilite
上传日期:2007-04-24
资源大小:261k
文件大小:3k
源码类别:
酒店行业
开发平台:
Visual C++
- /*
- ** 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_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.
- class CSerialPort
- {
- public:
- BOOL ClearRXBuffer();
- // contruction and destruction
- CSerialPort();
- virtual ~CSerialPort();
- // port initialisation
- BOOL InitPort(CWnd* pPortOwner, UINT portnr = 3, UINT baud = 1200, char parity = 'E', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);
- // start/stop comm watching
- BOOL StartMonitoring();
- BOOL RestartMonitoring();
- BOOL StopMonitoring();
- DWORD GetWriteBufferSize();
- DWORD GetCommEvents();
- DCB GetDCB();
- void WriteToPort(char* string);
- protected:
- // protected memberfunctions
- void ProcessErrorMessage(char* ErrorText);
- static UINT CommThread(LPVOID pParam);
- static void ReceiveChar(CSerialPort* port, COMSTAT comstat);
- static void WriteChar(CSerialPort* port);
- // thread
- CWinThread* m_Thread;
- // 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
- CWnd* m_pOwner;
- // misc
- UINT m_nPortNr;
- char* m_szWriteBuffer;
- DWORD m_dwCommEvents;
- DWORD m_nWriteBufferSize;
- };
- #endif __SERIALPORT_H__