SerialPort.h
上传用户:guqin_vip
上传日期:2022-06-17
资源大小:1993k
文件大小:3k
源码类别:

串口编程

开发平台:

C/C++

  1. #ifndef __SERIALPORT_H__
  2. #define __SERIALPORT_H__
  3. #define WM_COMM_BREAK_DETECTED WM_USER+1 // A break was detected on input.
  4. #define WM_COMM_CTS_DETECTED WM_USER+2 // The CTS (clear-to-send) signal changed state. 
  5. #define WM_COMM_DSR_DETECTED WM_USER+3 // The DSR (data-set-ready) signal changed state. 
  6. #define WM_COMM_ERR_DETECTED WM_USER+4 // A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. 
  7. #define WM_COMM_RING_DETECTED WM_USER+5 // A ring indicator was detected. 
  8. #define WM_COMM_RLSD_DETECTED WM_USER+6 // The RLSD (receive-line-signal-detect) signal changed state. 
  9. #define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer. 
  10. #define WM_COMM_RXFLAG_DETECTED WM_USER+8 // The event character was received and placed in the input buffer.  
  11. #define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in the output buffer was sent.  
  12. class CSerialPort
  13. {  
  14. public:
  15. int m_nWriteSize;
  16. void ClosePort();
  17. // contruction and destruction
  18. CSerialPort();
  19. virtual ~CSerialPort();
  20. // port initialisation
  21. BOOL InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopbits = 1, DWORD dwCommEvents = EV_RXCHAR, UINT writebuffersize = 1024);
  22. HANDLE m_hComm;
  23. // start/stop comm watching
  24. BOOL StartMonitoring();
  25. BOOL RestartMonitoring();
  26. BOOL StopMonitoring();
  27. DWORD GetWriteBufferSize();
  28. DWORD GetCommEvents();
  29. DCB GetDCB();
  30. void WriteToPort(char* string);
  31. void WriteToPort(char* string,int n);
  32. void WriteToPort(unsigned char* string,int n);
  33. void WriteToPort(LPCTSTR string);
  34. void WriteToPort(LPCTSTR string,int n);
  35. protected:
  36. // protected memberfunctions
  37. void ProcessErrorMessage(char* ErrorText);
  38. static UINT CommThread(LPVOID pParam);
  39. static void ReceiveChar(CSerialPort* port, COMSTAT comstat);
  40. static void WriteChar(CSerialPort* port);
  41. // thread
  42. CWinThread* m_Thread;
  43. // synchronisation objects
  44. CRITICAL_SECTION m_csCommunicationSync;
  45. BOOL m_bThreadAlive;
  46. // handles
  47. HANDLE m_hWriteEvent;
  48. HANDLE m_hShutdownEvent;
  49. // Event array. 
  50. // One element is used for each event. There are two event handles for each port.
  51. // A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).
  52. // There is a general shutdown when the port is closed. 
  53. HANDLE m_hEventArray[3];
  54. // structures
  55. OVERLAPPED m_ov;
  56. COMMTIMEOUTS m_CommTimeouts;
  57. DCB m_dcb;
  58. // owner window
  59. CWnd* m_pOwner;
  60. // misc
  61. UINT m_nPortNr;
  62. char* m_szWriteBuffer;
  63. DWORD m_dwCommEvents;
  64. DWORD m_nWriteBufferSize;
  65. };
  66. #endif __SERIALPORT_H__