3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Serial port service requirements</title>
5 <link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
7 <link rel="home" href="../../boost_asio.html" title="Boost.Asio">
8 <link rel="up" href="../reference.html" title="Reference">
9 <link rel="prev" href="SeqPacketSocketService.html" title="Sequenced packet socket service requirements">
10 <link rel="next" href="Service.html" title="Service requirements">
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
15 <td align="center"><a href="../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../more/index.htm">More</a></td>
22 <div class="spirit-nav">
23 <a accesskey="p" href="SeqPacketSocketService.html"><img src="../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../boost_asio.html"><img src="../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="Service.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_asio.reference.SerialPortService"></a><a class="link" href="SerialPortService.html" title="Serial port service requirements">Serial port service
29 </h3></div></div></div>
31 A serial port service must meet the requirements for an <a class="link" href="IoObjectService.html" title="I/O object service requirements">I/O
32 object service</a> with support for movability, as well as the additional
33 requirements listed below.
36 In the table below, <code class="computeroutput"><span class="identifier">X</span></code> denotes
37 a serial port service class, <code class="computeroutput"><span class="identifier">a</span></code>
38 and <code class="computeroutput"><span class="identifier">ao</span></code> denote values of type
39 <code class="computeroutput"><span class="identifier">X</span></code>, <code class="computeroutput"><span class="identifier">d</span></code>
40 denotes a serial port device name of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>,
41 <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">c</span></code>
42 denote values of type <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">implementation_type</span></code>, <code class="computeroutput"><span class="identifier">n</span></code>
43 denotes a value of type <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">native_handle_type</span></code>,
44 <code class="computeroutput"><span class="identifier">ec</span></code> denotes a value of type
45 <code class="computeroutput"><span class="identifier">error_code</span></code>, <code class="computeroutput"><span class="identifier">s</span></code> denotes a value meeting <a class="link" href="SettableSerialPortOption.html" title="Settable serial port option requirements"><code class="computeroutput"><span class="identifier">SettableSerialPortOption</span></code></a> requirements,
46 <code class="computeroutput"><span class="identifier">g</span></code> denotes a value meeting
47 <a class="link" href="GettableSerialPortOption.html" title="Gettable serial port option requirements"><code class="computeroutput"><span class="identifier">GettableSerialPortOption</span></code></a> requirements,
48 <code class="computeroutput"><span class="identifier">mb</span></code> denotes a value satisfying
49 <a class="link" href="MutableBufferSequence.html" title="Mutable buffer sequence requirements">mutable buffer
50 sequence</a> requirements, <code class="computeroutput"><span class="identifier">rh</span></code>
51 denotes a value meeting <a class="link" href="ReadHandler.html" title="Read handler requirements"><code class="computeroutput"><span class="identifier">ReadHandler</span></code></a> requirements, <code class="computeroutput"><span class="identifier">cb</span></code> denotes a value satisfying <a class="link" href="ConstBufferSequence.html" title="Constant buffer sequence requirements">constant
52 buffer sequence</a> requirements, and <code class="computeroutput"><span class="identifier">wh</span></code>
53 denotes a value meeting <a class="link" href="WriteHandler.html" title="Write handler requirements"><code class="computeroutput"><span class="identifier">WriteHandler</span></code></a> requirements. and
54 <code class="computeroutput"><span class="identifier">u</span></code> and <code class="computeroutput"><span class="identifier">v</span></code>
58 <a name="boost_asio.reference.SerialPortService.t0"></a><p class="title"><b>Table 25. SerialPortService requirements</b></p>
59 <div class="table-contents"><table class="table" summary="SerialPortService requirements">
78 assertion/note<br> pre/post-condition
86 <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">native_handle_type</span></code>
93 The implementation-defined native representation of a serial port.
94 Must satisfy the requirements of <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>
95 types (C++ Std, 20.1.3), and the requirements of <code class="computeroutput"><span class="identifier">Assignable</span></code> types (C++ Std, 23.1).
102 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">construct</span><span class="special">(</span><span class="identifier">b</span><span class="special">);</span></code>
109 From <a class="link" href="IoObjectService.html" title="I/O object service requirements">IoObjectService</a>
110 requirements.<br> post: <code class="computeroutput"><span class="special">!</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
117 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">destroy</span><span class="special">(</span><span class="identifier">b</span><span class="special">);</span></code>
124 From <a class="link" href="IoObjectService.html" title="I/O object service requirements">IoObjectService</a>
125 requirements. Implicitly cancels asynchronous operations, as if
126 by calling <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">close</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
127 <span class="identifier">ec</span><span class="special">)</span></code>.
135 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">move_construct</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
144 From <a class="link" href="IoObjectService.html" title="I/O object service requirements">IoObjectService</a>
145 requirements. The underlying native representation is moved from
146 <code class="computeroutput"><span class="identifier">c</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>.
154 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">move_assign</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ao</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
163 From <a class="link" href="IoObjectService.html" title="I/O object service requirements">IoObjectService</a>
164 requirements. Implicitly cancels asynchronous operations associated
165 with <code class="computeroutput"><span class="identifier">b</span></code>, as if by
166 calling <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">close</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
167 <span class="identifier">ec</span><span class="special">)</span></code>.
168 Then the underlying native representation is moved from <code class="computeroutput"><span class="identifier">c</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>.
176 <pre class="programlisting"><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">;</span>
177 <span class="identifier">a</span><span class="special">.</span><span class="identifier">open</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">u</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
184 <code class="computeroutput"><span class="identifier">error_code</span></code>
189 pre: <code class="computeroutput"><span class="special">!</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br> post: <code class="computeroutput"><span class="special">!!</span><span class="identifier">ec</span> <span class="special">||</span>
190 <span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
198 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
205 <code class="computeroutput"><span class="identifier">error_code</span></code>
210 pre: <code class="computeroutput"><span class="special">!</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br> post: <code class="computeroutput"><span class="special">!!</span><span class="identifier">ec</span> <span class="special">||</span>
211 <span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
219 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">);</span>
226 <code class="computeroutput"><span class="keyword">bool</span></code>
236 <pre class="programlisting"><span class="keyword">const</span> <span class="identifier">X</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
237 <span class="keyword">const</span> <span class="identifier">X</span><span class="special">::</span><span class="identifier">implementation_type</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">b</span><span class="special">;</span>
238 <span class="identifier">u</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
245 <code class="computeroutput"><span class="keyword">bool</span></code>
255 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">close</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
262 <code class="computeroutput"><span class="identifier">error_code</span></code>
267 If <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">()</span></code>
268 is true, causes any outstanding asynchronous operations to complete
269 as soon as possible. Handlers for cancelled operations shall be
270 passed the error code <code class="computeroutput"><span class="identifier">error</span><span class="special">::</span><span class="identifier">operation_aborted</span></code>.<br>
271 post: <code class="computeroutput"><span class="special">!</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
279 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">native_handle</span><span class="special">(</span><span class="identifier">b</span><span class="special">);</span>
286 <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">native_handle_type</span></code>
296 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">cancel</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
303 <code class="computeroutput"><span class="identifier">error_code</span></code>
308 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br>
309 Causes any outstanding asynchronous operations to complete as soon
310 as possible. Handlers for cancelled operations shall be passed
311 the error code <code class="computeroutput"><span class="identifier">error</span><span class="special">::</span><span class="identifier">operation_aborted</span></code>.
319 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">set_option</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
326 <code class="computeroutput"><span class="identifier">error_code</span></code>
331 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
339 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">get_option</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
346 <code class="computeroutput"><span class="identifier">error_code</span></code>
351 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
359 <pre class="programlisting"><span class="keyword">const</span> <span class="identifier">X</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
360 <span class="keyword">const</span> <span class="identifier">X</span><span class="special">::</span><span class="identifier">implementation_type</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">b</span><span class="special">;</span>
361 <span class="identifier">u</span><span class="special">.</span><span class="identifier">get_option</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
368 <code class="computeroutput"><span class="identifier">error_code</span></code>
373 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
381 <pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">send_break</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ec</span><span class="special">);</span>
388 <code class="computeroutput"><span class="identifier">error_code</span></code>
393 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.
400 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">read_some</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
401 <span class="identifier">mb</span><span class="special">,</span>
402 <span class="identifier">ec</span><span class="special">);</span></code>
407 <code class="computeroutput"><span class="identifier">size_t</span></code>
412 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br>
413 <br> Reads one or more bytes of data from a serial port <code class="computeroutput"><span class="identifier">b</span></code>.<br> <br> The mutable buffer
414 sequence <code class="computeroutput"><span class="identifier">mb</span></code> specifies
415 memory where the data should be placed. The operation shall always
416 fill a buffer in the sequence completely before proceeding to the
417 next.<br> <br> If successful, returns the number of bytes read.
418 Otherwise returns <code class="computeroutput"><span class="number">0</span></code>.
419 If the total size of all buffers in the sequence <code class="computeroutput"><span class="identifier">mb</span></code> is <code class="computeroutput"><span class="number">0</span></code>,
420 the function shall return <code class="computeroutput"><span class="number">0</span></code>
421 immediately.<br> <br> If the operation completes due to graceful
422 connection closure by the peer, the operation shall fail with
423 <code class="computeroutput"><span class="identifier">error</span><span class="special">::</span><span class="identifier">eof</span></code>.
430 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">async_read_some</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
431 <span class="identifier">mb</span><span class="special">,</span>
432 <span class="identifier">rh</span><span class="special">);</span></code>
437 <code class="computeroutput"><span class="keyword">void</span></code>
442 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br>
443 <br> Initiates an asynchronous operation to read one or more
444 bytes of data from a serial port <code class="computeroutput"><span class="identifier">b</span></code>.
445 The operation is performed via the <code class="computeroutput"><span class="identifier">io_service</span></code>
446 object <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">get_io_service</span><span class="special">()</span></code>
447 and behaves according to <a class="link" href="asynchronous_operations.html" title="Requirements on asynchronous operations">asynchronous
448 operation</a> requirements.<br> <br> The mutable buffer
449 sequence <code class="computeroutput"><span class="identifier">mb</span></code> specifies
450 memory where the data should be placed. The operation shall always
451 fill a buffer in the sequence completely before proceeding to the
452 next.<br> <br> The implementation shall maintain one or more
453 copies of <code class="computeroutput"><span class="identifier">mb</span></code> until
454 such time as the read operation no longer requires access to the
455 memory specified by the buffers in the sequence. The program must
456 ensure the memory is valid until:<br> <br> — the last copy of
457 <code class="computeroutput"><span class="identifier">mb</span></code> is destroyed,
458 or<br> <br> — the handler for the asynchronous operation is invoked,<br>
459 <br> whichever comes first. If the total size of all buffers
460 in the sequence <code class="computeroutput"><span class="identifier">mb</span></code>
461 is <code class="computeroutput"><span class="number">0</span></code>, the asynchronous
462 read operation shall complete immediately and pass <code class="computeroutput"><span class="number">0</span></code> as the argument to the handler
463 that specifies the number of bytes read.<br> <br> If the operation
464 completes due to graceful connection closure by the peer, the operation
465 shall fail with <code class="computeroutput"><span class="identifier">error</span><span class="special">::</span><span class="identifier">eof</span></code>.<br>
466 <br> If the operation completes successfully, the <code class="computeroutput"><span class="identifier">ReadHandler</span></code> object <code class="computeroutput"><span class="identifier">rh</span></code> is invoked with the number
467 of bytes transferred. Otherwise it is invoked with <code class="computeroutput"><span class="number">0</span></code>.
474 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">write_some</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
475 <span class="identifier">cb</span><span class="special">,</span>
476 <span class="identifier">ec</span><span class="special">);</span></code>
481 <code class="computeroutput"><span class="identifier">size_t</span></code>
486 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br>
487 <br> Writes one or more bytes of data to a serial port <code class="computeroutput"><span class="identifier">b</span></code>.<br> <br> The constant
488 buffer sequence <code class="computeroutput"><span class="identifier">cb</span></code>
489 specifies memory where the data to be written is located. The operation
490 shall always write a buffer in the sequence completely before proceeding
491 to the next.<br> <br> If successful, returns the number of
492 bytes written. Otherwise returns <code class="computeroutput"><span class="number">0</span></code>.
493 If the total size of all buffers in the sequence <code class="computeroutput"><span class="identifier">cb</span></code> is <code class="computeroutput"><span class="number">0</span></code>,
494 the function shall return <code class="computeroutput"><span class="number">0</span></code>
502 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">async_write_some</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
503 <span class="identifier">cb</span><span class="special">,</span>
504 <span class="identifier">wh</span><span class="special">);</span></code>
509 <code class="computeroutput"><span class="keyword">void</span></code>
514 pre: <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>.<br>
515 <br> Initiates an asynchronous operation to write one or more
516 bytes of data to a serial port <code class="computeroutput"><span class="identifier">b</span></code>.
517 The operation is performed via the <code class="computeroutput"><span class="identifier">io_service</span></code>
518 object <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">get_io_service</span><span class="special">()</span></code>
519 and behaves according to <a class="link" href="asynchronous_operations.html" title="Requirements on asynchronous operations">asynchronous
520 operation</a> requirements.<br> <br> The constant buffer
521 sequence <code class="computeroutput"><span class="identifier">cb</span></code> specifies
522 memory where the data to be written is located. The operation shall
523 always write a buffer in the sequence completely before proceeding
524 to the next.<br> <br> The implementation shall maintain one
525 or more copies of <code class="computeroutput"><span class="identifier">cb</span></code>
526 until such time as the write operation no longer requires access
527 to the memory specified by the buffers in the sequence. The program
528 must ensure the memory is valid until:<br> <br> — the last copy
529 of <code class="computeroutput"><span class="identifier">cb</span></code> is destroyed,
530 or<br> <br> — the handler for the asynchronous operation is invoked,<br>
531 <br> whichever comes first. If the total size of all buffers
532 in the sequence <code class="computeroutput"><span class="identifier">cb</span></code>
533 is <code class="computeroutput"><span class="number">0</span></code>, the asynchronous
534 operation shall complete immediately and pass <code class="computeroutput"><span class="number">0</span></code>
535 as the argument to the handler that specifies the number of bytes
536 read.<br> <br> If the operation completes successfully, the
537 <code class="computeroutput"><span class="identifier">WriteHandler</span></code> object
538 <code class="computeroutput"><span class="identifier">wh</span></code> is invoked with
539 the number of bytes transferred. Otherwise it is invoked with
540 <code class="computeroutput"><span class="number">0</span></code>.
547 <br class="table-break">
549 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
550 <td align="left"></td>
551 <td align="right"><div class="copyright-footer">Copyright © 2003-2014 Christopher M. Kohlhoff<p>
552 Distributed under the Boost Software License, Version 1.0. (See accompanying
553 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
558 <div class="spirit-nav">
559 <a accesskey="p" href="SeqPacketSocketService.html"><img src="../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../boost_asio.html"><img src="../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="Service.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a>