📄 serialport.htm
字号:
<html>
<head>
<title>CSerialPort v1.03</title>
</head>
<body bgcolor="#FFFFFF">
<p><strong><font
face="Arial"><big><big><img border="0" src="serialport.gif" alt="serialport.gif" width="40" height="38"></big></big><font size="6">CSerialPort
v1.03</font></font></strong></p>
<p><font face="Arial" size="3">Welcome to CSerialPort, a freeware MFC class to wrap access
to the Win32 APIs dealing with serial ports. </font></p>
<p> </p>
<table>
<TBODY>
<tr>
<td><font face="Arial"><a href="#Features">Features</a></font></td>
</tr>
<tr>
<td><font face="Arial"><a href="#Usage">Usage</a></font></td>
</tr>
<tr>
<td><font face="Arial"><a href="#History">History</a></font></td>
</tr>
<tr>
<td><font face="Arial"><a href="#APIReference">API Reference</a></font></td>
</tr>
<tr>
<td><font face="Arial"><a href="#Enhancements">Planned Enhancements</a></font></td>
</tr>
<tr>
<td><font face="Arial"><a href="#Contact">Contacting the Author</a></font></td>
</tr>
</TBODY>
</table>
<p> </p>
<p> </p>
<p> </p>
<p><font face="Arial"><a name="Features"></a><big><strong><big>Features</big></strong></big>
</font>
<ul>
<li><font color="#000000" face="Arial" size="3">Simple and clean C++ interface. </font></li>
<li><font color="#000000" face="Arial" size="3">Uses C++ exceptions in preference to the
normal win32 return value mechanism. This ensures that code which uses CSerialPort is more
robust.</font> </li>
<li><font color="#000000" face="Arial" size="3">Unicode enabled, supports linking to MFC
statically and all code compiles cleanly at warning level 4.</font> </li>
<li><font color="#000000" face="Arial" size="3">Supports overlapped, blocking
and callback usage models of the serial port. (Callback is only supported on
NT).</font> </li>
</ul>
<p> </p>
<p> </p>
<p> </p>
<p><font face="Arial"><a name="Usage"></a><big><big><strong>Usage</strong></big></big></font>
<ul>
<li><font color="#000000" face="Arial" size="3">To use the class in your code simply include
serialport.cpp in your project and #include serialport.h in which ever of your modules
needs to make calls to the class. </font></li>
<li><font face="Arial">To see the code in action have a look at the module
"app.cpp" in the sample app.</font> </li>
</ul>
<p> </p>
<p> </p>
<p> </p>
<p><font face="Arial"><big><a name="History"></a></big><font color="#000000" size="5"><strong>History</strong></font></font></p>
<p><strong><font color="#000000" size="3" face="Arial">V1.0 (31st May 1999)</font></strong>
<ul>
<li><font color="#000000" face="Arial" size="3">Initial public release.</font> </li>
</ul>
<p><strong><font color="#000000" size="3" face="Arial">V1.01 (3rd June 1999)</font></strong>
<ul>
<li><font color="#000000" face="Arial" size="3">Fixed problem with code using CancelIo
function which does not exist on 95.</font></li>
<li><font color="#000000" face="Arial" size="3">Fixed leaks which can occur in sample app when an exception is thrown</font></li>
</ul>
<p><strong><font color="#000000" size="3" face="Arial">V1.02 (16th June 1999)</font></strong>
<ul>
<li><font face="Arial">Fixed a bug whereby CString::ReleaseBuffer was not being called in CSerialException::GetErrorMessage</font></li>
</ul>
<p><strong><font color="#000000" size="3" face="Arial">V1.03 (29th September 1999)</font></strong>
<ul>
<li><font face="Arial"> Fixed a simple copy and paste bug in CSerialPort::SetDTR</font></li>
</ul>
<p> </p>
<p> </p>
<p> </p>
<p><font face="Arial"><a name="APIReference"></a><big><big><strong>API
Reference</strong></big></big></font></p>
<p><font face="Arial">The API consists of the classes: CSerialException and the CSerialPort
class. They have the following member functions and variables:</font></p>
<p><font face="Arial"><strong><a href="#CSerialException">CSerialException::CSerialException</a><br>
<a href="#GetErrorMessage">
CSerialException::GetErrorMessage</a><br>
<a href="#m_dwError">
CSerialException::m_dwError</a><br>
<a href="#CSerialPort">
CSerialPort::CSerialPort</a><br>
<a href="#~CSerialPort">CSerialPort::~CSerialPort</a><br>
<a href="#Open">
CSerialPort::Open</a><br>
<a href="#Close">
CSerialPort::Close</a><br>
<a href="#Attach">
CSerialPort::Attach</a><br>
<a href="#Detach">
CSerialPort::Detach</a><br>
<a href="#operator HANDLE">
CSerialPort::operator HANDLE()</a><br>
<a href="#IsOpen">
CSerialPort::IsOpen</a><br>
<a href="#Dump">
CSerialPort::Dump</a><br>
<a href="#Read">
CSerialPort::Read</a><br>
<a href="#Read">
CSerialPort::ReadEx</a><br>
<a href="#Write">
CSerialPort::Write</a><br>
<a href="#Write">
CSerialPort::WriteEx</a><br>
<a href="#TransmitChar">
CSerialPort::TransmitChar</a><br>
<a href="#GetOverlappedResult">
CSerialPort::GetOverlappedResult</a><br>
<a href="#CancelIo">
CSerialPort::CancelIo</a><br>
<a href="#GetConfig">
CSerialPort::GetConfig</a><br>
<a href="#GetDefaultConfig">
CSerialPort::GetDefaultConfig</a><br>
<a href="#SetConfig">
CSerialPort::SetConfig</a><br>
<a href="#SetDefaultConfig">
CSerialPort::SetDefaultConfig</a><br>
<a href="#ClearBreak">
CSerialPort::ClearBreak</a><br>
<a href="#SetBreak">
CSerialPort::SetBreak</a><br>
<a href="#ClearError">
CSerialPort::ClearError</a><br>
<a href="#GetStatus">
CSerialPort::GetStatus</a><br>
<a href="#GetState">
CSerialPort::GetState</a><br>
<a href="#SetState">
CSerialPort::SetState</a><br>
<a href="#Escape">
CSerialPort::Escape</a><br>
<a href="#ClearDTR">
CSerialPort::ClearDTR</a><br>
<a href="#ClearRTS">
CSerialPort::ClearRTS</a><br>
<a href="#SetDTR">
CSerialPort::SetDTR</a><br>
<a href="#SetRTS">
CSerialPort::SetRTS</a><br>
<a href="#SetXOFF">
CSerialPort::SetXOFF</a><br>
<a href="#SetXON">
CSerialPort::SetXON</a><br>
<a href="#GetProperties">
CSerialPort::GetProperties</a><br>
<a href="#GetModemStatus">
CSerialPort::GetModemStatus</a><br>
<a href="#SetTimeouts">
CSerialPort::SetTimeouts</a><br>
<a href="#GetTimeouts">
CSerialPort::GetTimeouts</a><br>
<a href="#Set0Timeout">
CSerialPort::Set0Timeout</a><br>
<a href="#Set0WriteTimeout">
CSerialPort::Set0WriteTimeout</a><br>
<a href="#Set0ReadTimeout">
CSerialPort::Set0ReadTimeout</a><br>
<a href="#SetMask">CSerialPort::SetMask</a><br>
<a href="#GetMask">
CSerialPort::GetMask</a><br>
<a href="#WaitEvent">
CSerialPort::WaitEvent</a><br>
<a href="#Flush">
CSerialPort::Flush</a><br>
<a href="#Purge">
CSerialPort::Purge</a><br>
<a href="#TerminateOutstandingWrites">
CSerialPort::TerminateOutstandingWrites</a><br>
<a href="#TerminateOutstandingReads">
CSerialPort::TerminateOutstandingReads</a><br>
<a href="#ClearWriteBuffer">
CSerialPort::ClearWriteBuffer</a><br>
<a href="#ClearReadBuffer">
CSerialPort::ClearReadBuffer</a><br>
<a href="#Setup">
CSerialPort::Setup</a><br>
<a href="#OnCompletion">
CSerialPort::OnCompletion</a></strong></font></p>
<p> </p>
<p> </p>
<p><b><font face="Arial" size="4">CSerialException::CSerialException</font></b></p>
<p><font face="Arial"><b><span class="op">CSerialException( DWORD </span></b><i><span class="p">dwError</span></i><span class="op"><i>
</i><b>= 0);</b></span></font></p>
<p><b><font face="Arial">Parameters</font></b></p>
<p><font face="Arial"><span class="p"><i>dwError</i></span> The
error that caused the exception.</font></p>
<p><b><font face="Arial">Remarks</font></b></p>
<p><font face="Arial">This member function is called when a <span class="op">CSerialException</span>
object is created. To throw a CSerialException, call the global function
AfxThrowSerialException. If you call if using the default value for dwError,
then internally it will call GetLastError for you.</font></p>
<p> </p>
<p><b><font face="Arial" size="4">CSerialException::GetErrorMessage</font></b></p>
<p><font face="Arial"><b><span class="op">virtual BOOL GetErrorMessage( LPTSTR </span></b><span class="p"><i>lpszError</i></span><b><span class="op">,
UINT </span></b><span class="p"><i>nMaxError</i></span><b><span class="op">,
PUINT </span></b><i><span class="p">pnHelpContext</span></i><span class="op"><i>
</i><b>= NULL );<br>
</b></span><b>CString GetErrorMessage();</b></font></p>
<p><b><font face="Arial">Return Value</font></b></p>
<p><font face="Arial">1) Nonzero if the function is successful; otherwise 0 if
no error message text is available.</font></p>
<p><font face="Arial">2) A CString representation of the error</font></p>
<p><b><font face="Arial">Parameters</font></b></p>
<p><font face="Arial"><span class="p"><i>lpszError</i></span> A
pointer to a buffer that will receive an error message.</font></p>
<p><font face="Arial"><span class="p"><i>nMaxError</i></span> The
maximum number of characters the buffer can hold, including the <span class="op">NULL</span>
terminator.</font></p>
<p><font face="Arial"><i><span class="p">pnHelpContext</span> </i> The
address of a <span class="op">UINT</span> that will receive the help context ID.
If <span class="op">NULL</span>, no ID will be returned.</font></p>
<p><b><font face="Arial">Remarks</font></b></p>
<p><font face="Arial">Call this member function to provide text about an error
that has occurred.</font></p>
<p> </p>
<p><b><font face="Arial" size="4">CSerialException::m_dwError</font></b></p>
<p><b><font face="Arial">Remarks</font></b></p>
<p><font face="Arial">The error that caused the exception. This error value is a
system error code as found in WINERROR.H.</font></p>
<p><font face="Arial">For a list of Win32 error codes, see Error Codes in the <span class="crbt">Win32
SDK</span>.</font></p>
<p> </p>
<p> </p>
<p><b><font face="Arial" size="4">CSerialPort::CSerialPort</font></b></p>
<p><font face="Arial"><span class="op"><b>CSerialPort();</b></span></font></p>
<p><b><font face="Arial">Remarks</font></b></p>
<p><font face="Arial">Standard C++ constructor for the class. Internally it just
sets up the member variables to default values.</font></p>
<p> </p>
<p><b><font face="Arial" size="4">CSerialPort::~CSerialPort</font></b></p>
<p><font face="Arial"><span class="op"><b>~CSerialPort();</b></span></font></p>
<p><b><font face="Arial">Remarks</font></b></p>
<p><font face="Arial">Standard C++ destructor for the class. It will ensure that
the comms port is closed if it is open.</font></p>
<p> </p>
<p><b><font face="Arial" size="4">CSerialException::Open</font></b></p>
<p><font face="Arial"><span class="op"><b>void Open( </b></span><b>int </b><i>nPort</i><b>, DWORD
</b><i>dwBaud </i><b>= 9600, Parity </b><i>parity </i><b>= NoParity, BYTE </b><i>DataBits
</i><b>= 8, StopBits </b><i>stopbits </i><b>= OneStopBit, FlowControl
</b><i> fc</i><b> = NoFlowControl, BOOL </b><i>bOverlapped</i><b> = FALSE<span class="op">);<br>
</span></b><span class="op"><b> </b></span> <b><span class="op">throw(</span>
<span class="op">CSerialException</span> <span class="op">);</span></b></font></p>
<p><b><font face="Arial">Parameters</font></b></p>
<p><font face="Arial"><span class="p"><i>nPort</i></span> The
communications port to open.</font></p>
<p><font face="Arial"><i>dwBaud</i> The baud rate to use</font></p>
<p><font face="Arial"><i>parity</i> The parity to use. parity is an enum with
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -