SerialPort.h
上传用户:trilite
上传日期:2007-04-24
资源大小:261k
文件大小:3k
源码类别:

酒店行业

开发平台:

Visual C++

  1. /*
  2. ** FILENAME CSerialPort.h
  3. **
  4. ** PURPOSE This class can read, write and watch one serial port.
  5. ** It sends messages to its owner when something happends on the port
  6. ** The class creates a thread for reading and writing so the main
  7. ** program is not blocked.
  8. **
  9. ** CREATION DATE 15-09-1997
  10. ** LAST MODIFICATION 12-11-1997
  11. **
  12. ** AUTHOR Remon Spekreijse
  13. **
  14. **
  15. */
  16. #ifndef __SERIALPORT_H__
  17. #define __SERIALPORT_H__
  18. #define WM_COMM_BREAK_DETECTED WM_USER+1 // A break was detected on input.
  19. #define WM_COMM_CTS_DETECTED WM_USER+2 // The CTS (clear-to-send) signal changed state. 
  20. #define WM_COMM_DSR_DETECTED WM_USER+3 // The DSR (data-set-ready) signal changed state. 
  21. #define WM_COMM_ERR_DETECTED WM_USER+4 // A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. 
  22. #define WM_COMM_RING_DETECTED WM_USER+5 // A ring indicator was detected. 
  23. #define WM_COMM_RLSD_DETECTED WM_USER+6 // The RLSD (receive-line-signal-detect) signal changed state. 
  24. #define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer. 
  25. #define WM_COMM_RXFLAG_DETECTED WM_USER+8 // The event character was received and placed in the input buffer.  
  26. #define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in the output buffer was sent.  
  27. class CSerialPort
  28. {  
  29. public:
  30. BOOL ClearRXBuffer();
  31. // contruction and destruction
  32. CSerialPort();
  33. virtual ~CSerialPort();
  34. // port initialisation
  35. 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);
  36. // start/stop comm watching
  37. BOOL StartMonitoring();
  38. BOOL RestartMonitoring();
  39. BOOL StopMonitoring();
  40. DWORD GetWriteBufferSize();
  41. DWORD GetCommEvents();
  42. DCB GetDCB();
  43. void WriteToPort(char* string);
  44. protected:
  45. // protected memberfunctions
  46. void ProcessErrorMessage(char* ErrorText);
  47. static UINT CommThread(LPVOID pParam);
  48. static void ReceiveChar(CSerialPort* port, COMSTAT comstat);
  49. static void WriteChar(CSerialPort* port);
  50. // thread
  51. CWinThread* m_Thread;
  52. // synchronisation objects
  53. CRITICAL_SECTION m_csCommunicationSync;
  54. BOOL m_bThreadAlive;
  55. // handles
  56. HANDLE m_hShutdownEvent;
  57. HANDLE m_hComm;
  58. HANDLE m_hWriteEvent;
  59. // Event array. 
  60. // One element is used for each event. There are two event handles for each port.
  61. // A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).
  62. // There is a general shutdown when the port is closed. 
  63. HANDLE m_hEventArray[3];
  64. // structures
  65. OVERLAPPED m_ov;
  66. COMMTIMEOUTS m_CommTimeouts;
  67. DCB m_dcb;
  68. // owner window
  69. CWnd* m_pOwner;
  70. // misc
  71. UINT m_nPortNr;
  72. char* m_szWriteBuffer;
  73. DWORD m_dwCommEvents;
  74. DWORD m_nWriteBufferSize;
  75. };
  76. #endif __SERIALPORT_H__