FEDRA emulsion software from the OPERA Collaboration
serialport.h
Go to the documentation of this file.
1/*
2Module : SERIALPORT.H
3Purpose: Declaration for an MFC wrapper class for serial ports
4Created: PJN / 31-05-1999
5History: None
6
7Copyright (c) 1999 by PJ Naughter.
8All 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
29void AfxThrowSerialException(DWORD dwError = 0);
30
31class CSerialException : public CException
32{
33public:
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
48protected:
49 DECLARE_DYNAMIC(CSerialException)
50};
51
52
53
55
56class CSerialPort : public CObject
57{
58public:
59//Enums
61 {
68 };
69
70 enum Parity
71 {
77 };
78
80 {
84 };
85
86//Constructors / Destructors
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
161protected:
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