FEDRA emulsion software from the OPERA Collaboration
serialport.h
Go to the documentation of this file.
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 
7 Copyright (c) 1999 by PJ Naughter.
8 All rights reserved.
9 
10 */
11 #ifndef __CINT__
12 
13 
15 
16 #ifndef __SERIALPORT_H__
17 #define __SERIALPORT_H__
18 
19 #include "stdafx.h"
20 
21 
22 
23 
25 
26 
28 
29 void AfxThrowSerialException(DWORD dwError = 0);
30 
31 class CSerialException : public CException
32 {
33 public:
34 //Constructors / Destructors
35  CSerialException(DWORD dwError);
37 
38 //Methods
39 #ifdef _DEBUG
40  virtual void Dump(CDumpContext& dc) const;
41 #endif
42  virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError, PUINT pnHelpContext = NULL);
43  CString GetErrorMessage();
44 
45 //Data members
46  DWORD m_dwError;
47 
48 protected:
49  DECLARE_DYNAMIC(CSerialException)
50 };
51 
52 
53 
55 
56 class CSerialPort : public CObject
57 {
58 public:
59 //Enums
61  {
68  };
69 
70  enum Parity
71  {
77  };
78 
79  enum StopBits
80  {
84  };
85 
86 //Constructors / Destructors
87  CSerialPort();
88  ~CSerialPort();
89 
90 //General Methods
91  void Open(int nPort, DWORD dwBaud = 9600, Parity parity = NoParity, BYTE DataBits = 8,
92  StopBits stopbits = OneStopBit, FlowControl fc = NoFlowControl, BOOL bOverlapped = FALSE);
93  void Close();
94  void Attach(HANDLE hComm);
95  HANDLE Detach();
96  operator HANDLE() const { return m_hComm; };
97  BOOL IsOpen() const { return m_hComm != INVALID_HANDLE_VALUE; };
98 #ifdef _DEBUG
99  void CSerialPort::Dump(CDumpContext& dc) const;
100 #endif
101 
102 //Reading / Writing Methods
103  DWORD Read(void* lpBuf, DWORD dwCount);
104  BOOL Read(void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped);
105  void ReadEx(void* lpBuf, DWORD dwCount);
106  DWORD Write(const void* lpBuf, DWORD dwCount);
107  BOOL Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped);
108  void WriteEx(const void* lpBuf, DWORD dwCount);
109  void TransmitChar(char cChar);
110  void GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait);
111  void CancelIo();
112 
113 //Configuration Methods
114  void GetConfig(COMMCONFIG& config);
115  static void GetDefaultConfig(int nPort, COMMCONFIG& config);
116  void SetConfig(COMMCONFIG& Config);
117  static void SetDefaultConfig(int nPort, COMMCONFIG& config);
118 
119 //Misc RS232 Methods
120  void ClearBreak();
121  void SetBreak();
122  void ClearError(DWORD& dwErrors);
123  void GetStatus(COMSTAT& stat);
124  void GetState(DCB& dcb);
125  void SetState(DCB& dcb);
126  void Escape(DWORD dwFunc);
127  void ClearDTR();
128  void ClearRTS();
129  void SetDTR();
130  void SetRTS();
131  void SetXOFF();
132  void SetXON();
133  void GetProperties(COMMPROP& properties);
134  void GetModemStatus(DWORD& dwModemStatus);
135 
136 //Timeouts
137  void SetTimeouts(COMMTIMEOUTS& timeouts);
138  void GetTimeouts(COMMTIMEOUTS& timeouts);
139  void Set0Timeout();
140  void Set0WriteTimeout();
141  void Set0ReadTimeout();
142 
143 //Event Methods
144  void SetMask(DWORD dwMask);
145  void GetMask(DWORD& dwMask);
146  void WaitEvent(DWORD& dwMask);
147  void WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped);
148 
149 //Queue Methods
150  void Flush();
151  void Purge(DWORD dwFlags);
154  void ClearWriteBuffer();
155  void ClearReadBuffer();
156  void Setup(DWORD dwInQueue, DWORD dwOutQueue);
157 
158 //Overridables
159  virtual void OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped);
160 
161 protected:
162  HANDLE m_hComm; //Handle to the comms port
163  BOOL m_bOverlapped; //Is the port open in overlapped IO
164 
165  static void WINAPI _OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped);
166 
167  DECLARE_DYNAMIC(CSerialPort)
168 };
169 
170 
171 #endif //__SERIALPORT_H__
172 
173 #endif //__CINT__
Definition: serialport.h:32
~CSerialException()
Definition: serialport.cpp:135
CString GetErrorMessage()
Definition: serialport.cpp:121
CSerialException(DWORD dwError)
Definition: serialport.cpp:130
DWORD m_dwError
Definition: serialport.h:46
Definition: serialport.h:57
void Purge(DWORD dwFlags)
Definition: serialport.cpp:708
void TransmitChar(char cChar)
Definition: serialport.cpp:476
void Escape(DWORD dwFunc)
Definition: serialport.cpp:612
void GetStatus(COMSTAT &stat)
Definition: serialport.cpp:578
void TerminateOutstandingWrites()
Definition: serialport.cpp:719
void Set0WriteTimeout()
Definition: serialport.cpp:784
void GetModemStatus(DWORD &dwModemStatus)
Definition: serialport.cpp:664
void Setup(DWORD dwInQueue, DWORD dwOutQueue)
Definition: serialport.cpp:739
void SetBreak()
Definition: serialport.cpp:511
HANDLE m_hComm
Definition: serialport.h:162
DWORD Read(void *lpBuf, DWORD dwCount)
Definition: serialport.cpp:322
void Open(int nPort, DWORD dwBaud=9600, Parity parity=NoParity, BYTE DataBits=8, StopBits stopbits=OneStopBit, FlowControl fc=NoFlowControl, BOOL bOverlapped=FALSE)
Definition: serialport.cpp:179
void GetProperties(COMMPROP &properties)
Definition: serialport.cpp:653
void SetTimeouts(COMMTIMEOUTS &timeouts)
Definition: serialport.cpp:750
void WaitEvent(DWORD &dwMask)
Definition: serialport.cpp:803
StopBits
Definition: serialport.h:80
@ TwoStopBits
Definition: serialport.h:83
@ OnePointFiveStopBits
Definition: serialport.h:82
@ OneStopBit
Definition: serialport.h:81
virtual void OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped)
Definition: serialport.cpp:420
HANDLE Detach()
Definition: serialport.cpp:315
void GetMask(DWORD &dwMask)
Definition: serialport.cpp:686
CSerialPort()
Definition: serialport.cpp:156
void ClearReadBuffer()
Definition: serialport.cpp:734
void ClearDTR()
Definition: serialport.cpp:623
void ClearBreak()
Definition: serialport.cpp:522
void WriteEx(const void *lpBuf, DWORD dwCount)
Definition: serialport.cpp:446
BOOL IsOpen() const
Definition: serialport.h:97
void SetDTR()
Definition: serialport.cpp:633
void GetConfig(COMMCONFIG &config)
Definition: serialport.cpp:487
void Attach(HANDLE hComm)
Definition: serialport.cpp:309
static void SetDefaultConfig(int nPort, COMMCONFIG &config)
Definition: serialport.cpp:561
BOOL m_bOverlapped
Definition: serialport.h:163
FlowControl
Definition: serialport.h:61
@ DsrRtsFlowControl
Definition: serialport.h:65
@ NoFlowControl
Definition: serialport.h:62
@ XonXoffFlowControl
Definition: serialport.h:67
@ CtsRtsFlowControl
Definition: serialport.h:63
@ CtsDtrFlowControl
Definition: serialport.h:64
@ DsrDtrFlowControl
Definition: serialport.h:66
void SetMask(DWORD dwMask)
Definition: serialport.cpp:675
void SetRTS()
Definition: serialport.cpp:638
Parity
Definition: serialport.h:71
@ NoParity
Definition: serialport.h:74
@ MarkParity
Definition: serialport.h:73
@ OddParity
Definition: serialport.h:75
@ EvenParity
Definition: serialport.h:72
@ SpaceParity
Definition: serialport.h:76
void Flush()
Definition: serialport.cpp:697
void ClearRTS()
Definition: serialport.cpp:628
void GetTimeouts(COMMTIMEOUTS &timeouts)
Definition: serialport.cpp:761
void CancelIo()
Definition: serialport.cpp:429
void ClearWriteBuffer()
Definition: serialport.cpp:729
void SetConfig(COMMCONFIG &Config)
Definition: serialport.cpp:499
void Set0ReadTimeout()
Definition: serialport.cpp:793
void GetOverlappedResult(OVERLAPPED &overlapped, DWORD &dwBytesTransferred, BOOL bWait)
Definition: serialport.cpp:390
DWORD Write(const void *lpBuf, DWORD dwCount)
Definition: serialport.cpp:356
void Close()
Definition: serialport.cpp:297
void GetState(DCB &dcb)
Definition: serialport.cpp:590
void SetState(DCB &dcb)
Definition: serialport.cpp:601
~CSerialPort()
Definition: serialport.cpp:162
static void GetDefaultConfig(int nPort, COMMCONFIG &config)
Definition: serialport.cpp:544
void ClearError(DWORD &dwErrors)
Definition: serialport.cpp:533
void SetXOFF()
Definition: serialport.cpp:643
void TerminateOutstandingReads()
Definition: serialport.cpp:724
void ReadEx(void *lpBuf, DWORD dwCount)
Definition: serialport.cpp:461
void Set0Timeout()
Definition: serialport.cpp:772
static void WINAPI _OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped)
Definition: serialport.cpp:407
void SetXON()
Definition: serialport.cpp:648
#define NULL
Definition: nidaqmx.h:84
#define FALSE
Definition: nidaqmx.h:81
void AfxThrowSerialException(DWORD dwError=0)
Definition: serialport.cpp:85