serialport.h
上传用户:hxj5298
上传日期:2007-01-03
资源大小:18k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2. Module : SERIALPORT.H
  3. Purpose: Declaration for an MFC wrapper class for serial ports
  4. Created: PJN / 31-05-1999
  5. History: None
  6. Copyright (c) 1999 by PJ Naughter.  
  7. All rights reserved.
  8. */
  9. ///////////////////// Macros / Structs etc //////////////////////////
  10. #ifndef __SERIALPORT_H__
  11. #define __SERIALPORT_H__
  12. /////////////////////////// Classes ///////////////////////////////////////////
  13. ////// Serial port exception class ////////////////////////////////////////////
  14. void AfxThrowSerialException(DWORD dwError = 0);
  15. class CSerialException : public CException
  16. {
  17. public:
  18. //Constructors / Destructors
  19. CSerialException(DWORD dwError);
  20. ~CSerialException();
  21. //Methods
  22. #ifdef _DEBUG
  23. virtual void Dump(CDumpContext& dc) const;
  24. #endif
  25. virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError, PUINT pnHelpContext = NULL);
  26. CString GetErrorMessage();
  27. //Data members
  28. DWORD m_dwError;
  29. protected:
  30. DECLARE_DYNAMIC(CSerialException)
  31. };
  32. //// The actual serial port class /////////////////////////////////////////////
  33. class CSerialPort : public CObject
  34. {
  35. public:
  36. //Enums
  37.   enum FlowControl
  38.   {
  39.     NoFlowControl,
  40.     CtsRtsFlowControl,
  41.     CtsDtrFlowControl,
  42.     DsrRtsFlowControl,
  43.     DsrDtrFlowControl,
  44.     XonXoffFlowControl
  45.   };
  46.   enum Parity
  47.   {    
  48.     EvenParity,
  49.     MarkParity,
  50.     NoParity,
  51.     OddParity,
  52.     SpaceParity
  53.   };
  54.   enum StopBits
  55.   {
  56.     OneStopBit,
  57.     OnePointFiveStopBits,
  58.     TwoStopBits
  59.   };
  60. //Constructors / Destructors
  61.   CSerialPort();
  62.   ~CSerialPort();
  63. //General Methods
  64.   void Open(int nPort, DWORD dwBaud = 9600, Parity parity = NoParity, BYTE DataBits = 8, 
  65.             StopBits stopbits = OneStopBit, FlowControl fc = NoFlowControl, BOOL bOverlapped = FALSE);
  66.   void Close();
  67.   void Attach(HANDLE hComm);
  68.   HANDLE Detach();
  69.   operator HANDLE() const { return m_hComm; };
  70.   BOOL IsOpen() const { return m_hComm != INVALID_HANDLE_VALUE; };
  71. #ifdef _DEBUG
  72.   void CSerialPort::Dump(CDumpContext& dc) const;
  73. #endif
  74. //Reading / Writing Methods
  75.   DWORD Read(void* lpBuf, DWORD dwCount);
  76.   BOOL Read(void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped);
  77.   void ReadEx(void* lpBuf, DWORD dwCount);
  78.   DWORD Write(const void* lpBuf, DWORD dwCount);
  79.   BOOL Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped);
  80.   void WriteEx(const void* lpBuf, DWORD dwCount);
  81.   void TransmitChar(char cChar);
  82.   void GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait);
  83.   void CancelIo();
  84. //Configuration Methods
  85.   void GetConfig(COMMCONFIG& config);
  86.   static void GetDefaultConfig(int nPort, COMMCONFIG& config);
  87.   void SetConfig(COMMCONFIG& Config);
  88.   static void SetDefaultConfig(int nPort, COMMCONFIG& config);
  89. //Misc RS232 Methods
  90.   void ClearBreak();
  91.   void SetBreak();
  92.   void ClearError(DWORD& dwErrors);
  93.   void GetStatus(COMSTAT& stat);
  94.   void GetState(DCB& dcb);
  95.   void SetState(DCB& dcb);
  96.   void Escape(DWORD dwFunc);
  97.   void ClearDTR();
  98.   void ClearRTS();
  99.   void SetDTR();
  100.   void SetRTS();
  101.   void SetXOFF();
  102.   void SetXON();
  103.   void GetProperties(COMMPROP& properties);
  104.   void GetModemStatus(DWORD& dwModemStatus); 
  105. //Timeouts
  106.   void SetTimeouts(COMMTIMEOUTS& timeouts);
  107.   void GetTimeouts(COMMTIMEOUTS& timeouts);
  108.   void Set0Timeout();
  109.   void Set0WriteTimeout();
  110.   void Set0ReadTimeout();
  111. //Event Methods
  112.   void SetMask(DWORD dwMask);
  113.   void GetMask(DWORD& dwMask);
  114.   void WaitEvent(DWORD& dwMask);
  115.   void WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped);
  116.   
  117. //Queue Methods
  118.   void Flush();
  119.   void Purge(DWORD dwFlags);
  120.   void TerminateOutstandingWrites();
  121.   void TerminateOutstandingReads();
  122.   void ClearWriteBuffer();
  123.   void ClearReadBuffer();
  124.   void Setup(DWORD dwInQueue, DWORD dwOutQueue);
  125. //Overridables
  126.   virtual void OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped);
  127. protected:
  128.   HANDLE m_hComm;       //Handle to the comms port
  129.   BOOL   m_bOverlapped; //Is the port open in overlapped IO
  130.   static void WINAPI _OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped); 
  131. DECLARE_DYNAMIC(CSerialPort)
  132. };
  133. #endif //__SERIALPORT_H__