gnuk/ChibiOS_2.0.8/docs/html/group__io__channels.html
2010-11-30 13:54:43 +09:00

636 lines
38 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>ChibiOS/RT: I/O Channels</title>
<link href="custom.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<table style="text-align: center; width: 100%;" border="0"
cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="width: 80px;"><img alt="ChibiOS/RT Logo" src="logo_small.png"></td>
<td><big><big>ChibiOS/RT</big></big><br><br>Architecture - Reference Manual - Guides</td>
<td style="width: 80px;"></td>
</tr>
</tbody>
</table>
<hr size="1">
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> </div>
<div class="headertitle">
<h1>I/O Channels<br/>
<small>
[<a class="el" href="group__io__support.html">I/O Support</a>]</small>
</h1> </div>
</div>
<div class="contents">
<p><div class="dynheader">
Collaboration diagram for I/O Channels:</div>
<div class="dyncontent">
<center><table><tr><td><img src="group__io__channels.png" border="0" alt="" usemap="#group____io____channels"/>
<map name="group____io____channels" id="group____io____channels">
<area shape="rect" id="node1" href="group__io__support.html" title="I/O Support" alt="" coords="7,5,81,32"/>
</map>
</td></tr></table></center>
</div>
</p>
<hr/><a name="_details"></a><h2>Description</h2>
<p>This module defines an abstract interface for I/O channels by extending the <code><a class="el" href="struct_base_sequential_stream.html" title="Base stream class.">BaseSequentialStream</a></code> interface. Note that no code is present, I/O channels are just abstract interface like structures, you should look at the systems as to a set of abstract C++ classes (even if written in C). Specific device drivers can use/extend the interface and implement them.<br/>
This system has the advantage to make the access to channels independent from the implementation logic. </p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_base_channel_v_m_t.html">BaseChannelVMT</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> virtual methods table. <a href="struct_base_channel_v_m_t.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_base_channel.html">BaseChannel</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Base channel class. <a href="struct_base_channel.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_base_asynchronous_channel_v_m_t.html">BaseAsynchronousChannelVMT</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> virtual methods table. <a href="struct_base_asynchronous_channel_v_m_t.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_base_asynchronous_channel.html">BaseAsynchronousChannel</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Base asynchronous channel class. <a href="struct_base_asynchronous_channel.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#gaf5bd1e46b2d488dca8f3793b52a4c5f8">_base_channel_methods</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> specific methods. <a href="#gaf5bd1e46b2d488dca8f3793b52a4c5f8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#gad2be0fba8350d51490b557900062a949">_base_channel_data</a>&nbsp;&nbsp;&nbsp;_base_sequential_stream_data</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> specific data. <a href="#gad2be0fba8350d51490b557900062a949"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga248725580f06efca2b9222ac1780bdee">chIOPutWouldBlock</a>(ip)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;putwouldblock(ip))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel output check. <a href="#ga248725580f06efca2b9222ac1780bdee"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga389778a4742ae65edbfb7b1a7f8f832b">chIOGetWouldBlock</a>(ip)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;getwouldblock(ip))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel input check. <a href="#ga389778a4742ae65edbfb7b1a7f8f832b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga5b8537016d3027eedd3e63b708b57bf7">chIOPut</a>(ip, b)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;put(ip, b, TIME_INFINITE))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel blocking byte write. <a href="#ga5b8537016d3027eedd3e63b708b57bf7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#gac0117cf153fb3e08743aa8fe1b5487da">chIOPutTimeout</a>(ip, b, time)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;put(ip, b, time))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel blocking byte write with timeout. <a href="#gac0117cf153fb3e08743aa8fe1b5487da"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga9ebccb48ead8398cf97ca7a564fe0a25">chIOGet</a>(ip)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;get(ip, TIME_INFINITE))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel blocking byte read. <a href="#ga9ebccb48ead8398cf97ca7a564fe0a25"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#gace21d03c2ffbae1bf56b8a0b612421ba">chIOGetTimeout</a>(ip, time)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;get(ip, time))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel blocking byte read with timeout. <a href="#gace21d03c2ffbae1bf56b8a0b612421ba"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga432c7fbf8b1109bba566986143e9da21">chIOWriteTimeout</a>(ip, bp, n, time)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;writet(ip, bp, n, time))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel blocking write with timeout. <a href="#ga432c7fbf8b1109bba566986143e9da21"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga98c9dc44ce78e6ac026235eea93b6911">chIOReadTimeout</a>(ip, bp, n, time)&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;readt(ip, bp, n, time))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel blocking read with timeout. <a href="#ga98c9dc44ce78e6ac026235eea93b6911"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#gaf23d5351675080d08be4cac30c5de151">_base_asynchronous_channel_methods</a>&nbsp;&nbsp;&nbsp;_base_channel_methods</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> specific methods. <a href="#gaf23d5351675080d08be4cac30c5de151"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga6c1762f0b3873dd09f9e655c951b9300">_base_asynchronous_channel_data</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> specific data. <a href="#ga6c1762f0b3873dd09f9e655c951b9300"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga1cdb36c296d20ee411fcf041a1ad80d1">chIOGetWriteEventSource</a>(ip)&nbsp;&nbsp;&nbsp;(&amp;((ip)-&gt;vmt-&gt;oevent))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the write event source. <a href="#ga1cdb36c296d20ee411fcf041a1ad80d1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__io__channels.html#ga763229d3f6ded408f4126dcf121f0baf">chIOGetReadEventSource</a>(ip)&nbsp;&nbsp;&nbsp;(&amp;((ip)-&gt;vmt-&gt;ievent))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the read event source. <a href="#ga763229d3f6ded408f4126dcf121f0baf"></a><br/></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="gaf5bd1e46b2d488dca8f3793b52a4c5f8"></a><!-- doxytag: member="chioch.h::_base_channel_methods" ref="gaf5bd1e46b2d488dca8f3793b52a4c5f8" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _base_channel_methods</td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__data__streams.html#ga5323b44ccf2eee6e0f3ef7b22fb55eeb" title="BaseSequentialStream specific methods.">_base_sequential_stream_methods</a> \
<span class="comment">/* Channel output check.*/</span> \
<a class="code" href="group__types.html#ga7556af1cb61728b53228fa3af1c851de" title="Boolean, recommended the fastest signed.">bool_t</a> (*putwouldblock)(<span class="keywordtype">void</span> *instance); \
<span class="comment">/* Channel input check.*/</span> \
<a class="code" href="group__types.html#ga7556af1cb61728b53228fa3af1c851de" title="Boolean, recommended the fastest signed.">bool_t</a> (*getwouldblock)(<span class="keywordtype">void</span> *instance); \
<span class="comment">/* Channel put method with timeout specification.*/</span> \
<a class="code" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3" title="Message, use signed pointer equivalent.">msg_t</a> (*put)(<span class="keywordtype">void</span> *instance, <a class="code" href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> b, <a class="code" href="group__types.html#gae3e32a98d431a02106616da3071832dd" title="System Time, recommended fastest unsigned.">systime_t</a> time); \
<span class="comment">/* Channel get method with timeout specification.*/</span> \
<a class="code" href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3" title="Message, use signed pointer equivalent.">msg_t</a> (*<span class="keyword">get</span>)(<span class="keywordtype">void</span> *instance, <a class="code" href="group__types.html#gae3e32a98d431a02106616da3071832dd" title="System Time, recommended fastest unsigned.">systime_t</a> time); \
<span class="comment">/* Channel write method with timeout specification.*/</span> \
size_t (*writet)(<span class="keywordtype">void</span> *instance, <span class="keyword">const</span> <a class="code" href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> *bp, \
<span class="keywordtype">size_t</span> n, <a class="code" href="group__types.html#gae3e32a98d431a02106616da3071832dd" title="System Time, recommended fastest unsigned.">systime_t</a> time); \
<span class="comment">/* Channel read method with timeout specification.*/</span> \
size_t (*readt)(<span class="keywordtype">void</span> *instance, <a class="code" href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> *bp, <span class="keywordtype">size_t</span> n, <a class="code" href="group__types.html#gae3e32a98d431a02106616da3071832dd" title="System Time, recommended fastest unsigned.">systime_t</a> time);
</pre></div>
<p><code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> specific methods. </p>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00051">51</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="gad2be0fba8350d51490b557900062a949"></a><!-- doxytag: member="chioch.h::_base_channel_data" ref="gad2be0fba8350d51490b557900062a949" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _base_channel_data&nbsp;&nbsp;&nbsp;_base_sequential_stream_data</td>
</tr>
</table>
</div>
<div class="memdoc">
<p><code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> specific data. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>It is empty because <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> is only an interface without implementation. </dd></dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00072">72</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga248725580f06efca2b9222ac1780bdee"></a><!-- doxytag: member="chioch.h::chIOPutWouldBlock" ref="ga248725580f06efca2b9222ac1780bdee" args="(ip)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOPutWouldBlock</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;putwouldblock(ip))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel output check. </p>
<p>This function verifies if a subsequent put/write operation would block.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The output queue status: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>FALSE</em>&nbsp;</td><td>if the output queue has space and would not block a write operation. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TRUE</em>&nbsp;</td><td>if the output queue is full and would block a write operation. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00107">107</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga389778a4742ae65edbfb7b1a7f8f832b"></a><!-- doxytag: member="chioch.h::chIOGetWouldBlock" ref="ga389778a4742ae65edbfb7b1a7f8f832b" args="(ip)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOGetWouldBlock</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;getwouldblock(ip))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel input check. </p>
<p>This function verifies if a subsequent get/read operation would block.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The input queue status: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>FALSE</em>&nbsp;</td><td>if the input queue contains data and would not block a read operation. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TRUE</em>&nbsp;</td><td>if the input queue is empty and would block a read operation. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00121">121</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga5b8537016d3027eedd3e63b708b57bf7"></a><!-- doxytag: member="chioch.h::chIOPut" ref="ga5b8537016d3027eedd3e63b708b57bf7" args="(ip, b)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOPut</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">b</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;put(ip, b, TIME_INFINITE))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel blocking byte write. </p>
<p>This function writes a byte value to a channel. If the channel is not ready to accept data then the calling thread is suspended.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>b</em>&nbsp;</td><td>the byte value to be written to the channel </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The operation status: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>Q_OK</em>&nbsp;</td><td>if the operation succeeded. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Q_RESET</em>&nbsp;</td><td>if the channel associated queue (if any) was reset. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00134">134</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="gac0117cf153fb3e08743aa8fe1b5487da"></a><!-- doxytag: member="chioch.h::chIOPutTimeout" ref="gac0117cf153fb3e08743aa8fe1b5487da" args="(ip, b, time)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOPutTimeout</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">b, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">time</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;put(ip, b, time))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel blocking byte write with timeout. </p>
<p>This function writes a byte value to a channel. If the channel is not ready to accept data then the calling thread is suspended.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>b</em>&nbsp;</td><td>the byte value to be written to the channel </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>time</em>&nbsp;</td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<ul>
<li><em>TIME_IMMEDIATE</em> immediate timeout.</li>
<li><em>TIME_INFINITE</em> no timeout.</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The operation status: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>Q_OK</em>&nbsp;</td><td>if the operation succeeded. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Q_TIMEOUT</em>&nbsp;</td><td>if the specified time expired. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Q_RESET</em>&nbsp;</td><td>if the channel associated queue (if any) was reset. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00153">153</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga9ebccb48ead8398cf97ca7a564fe0a25"></a><!-- doxytag: member="chioch.h::chIOGet" ref="ga9ebccb48ead8398cf97ca7a564fe0a25" args="(ip)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOGet</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;get(ip, TIME_INFINITE))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel blocking byte read. </p>
<p>This function reads a byte value from a channel. If the data is not available then the calling thread is suspended.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A byte value from the queue or: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>Q_RESET</em>&nbsp;</td><td>if the channel associated queue (if any) was reset. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00164">164</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="gace21d03c2ffbae1bf56b8a0b612421ba"></a><!-- doxytag: member="chioch.h::chIOGetTimeout" ref="gace21d03c2ffbae1bf56b8a0b612421ba" args="(ip, time)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOGetTimeout</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">time</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;get(ip, time))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel blocking byte read with timeout. </p>
<p>This function reads a byte value from a channel. If the data is not available then the calling thread is suspended.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>time</em>&nbsp;</td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<ul>
<li><em>TIME_IMMEDIATE</em> immediate timeout.</li>
<li><em>TIME_INFINITE</em> no timeout.</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A byte value from the queue or: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>Q_TIMEOUT</em>&nbsp;</td><td>if the specified time expired. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Q_RESET</em>&nbsp;</td><td>if the channel associated queue (if any) was reset. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00181">181</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga432c7fbf8b1109bba566986143e9da21"></a><!-- doxytag: member="chioch.h::chIOWriteTimeout" ref="ga432c7fbf8b1109bba566986143e9da21" args="(ip, bp, n, time)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOWriteTimeout</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">bp, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">n, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">time</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;writet(ip, bp, n, time))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel blocking write with timeout. </p>
<p>The function writes data from a buffer to a channel. If the channel is not ready to accept data then the calling thread is suspended.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>bp</em>&nbsp;</td><td>pointer to the data buffer </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the maximum amount of data to be transferred </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>time</em>&nbsp;</td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<ul>
<li><em>TIME_IMMEDIATE</em> immediate timeout.</li>
<li><em>TIME_INFINITE</em> no timeout.</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The number of bytes transferred. </dd></dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00198">198</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga98c9dc44ce78e6ac026235eea93b6911"></a><!-- doxytag: member="chioch.h::chIOReadTimeout" ref="ga98c9dc44ce78e6ac026235eea93b6911" args="(ip, bp, n, time)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOReadTimeout</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">bp, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">n, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">time</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td>&nbsp;&nbsp;&nbsp;((ip)-&gt;vmt-&gt;readt(ip, bp, n, time))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Channel blocking read with timeout. </p>
<p>The function reads data from a channel into a buffer. If the data is not available then the calling thread is suspended.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_channel.html" title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>bp</em>&nbsp;</td><td>pointer to the data buffer </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the maximum amount of data to be transferred </td></tr>
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>time</em>&nbsp;</td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<ul>
<li><em>TIME_IMMEDIATE</em> immediate timeout.</li>
<li><em>TIME_INFINITE</em> no timeout.</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The number of bytes transferred. </dd></dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00216">216</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="gaf23d5351675080d08be4cac30c5de151"></a><!-- doxytag: member="chioch.h::_base_asynchronous_channel_methods" ref="gaf23d5351675080d08be4cac30c5de151" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _base_asynchronous_channel_methods&nbsp;&nbsp;&nbsp;_base_channel_methods</td>
</tr>
</table>
</div>
<div class="memdoc">
<p><code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> specific methods. </p>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00223">223</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga6c1762f0b3873dd09f9e655c951b9300"></a><!-- doxytag: member="chioch.h::_base_asynchronous_channel_data" ref="ga6c1762f0b3873dd09f9e655c951b9300" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _base_asynchronous_channel_data</td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__io__channels.html#gad2be0fba8350d51490b557900062a949" title="BaseChannel specific data.">_base_channel_data</a> \
<span class="comment">/* Data Available EventSource.*/</span> \
<a class="code" href="struct_event_source.html" title="Event Source structure.">EventSource</a> ievent; \
<span class="comment">/* Data Transmitted EventSource.*/</span> \
<a class="code" href="struct_event_source.html" title="Event Source structure.">EventSource</a> oevent;
</pre></div>
<p><code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> specific data. </p>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00229">229</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga1cdb36c296d20ee411fcf041a1ad80d1"></a><!-- doxytag: member="chioch.h::chIOGetWriteEventSource" ref="ga1cdb36c296d20ee411fcf041a1ad80d1" args="(ip)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOGetWriteEventSource</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;(&amp;((ip)-&gt;vmt-&gt;oevent))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns the write event source. </p>
<p>The write event source is broadcasted when the channel is ready for write operations. This usually happens when the internal output queue becomes empty.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A pointer to an <code><a class="el" href="struct_event_source.html" title="Event Source structure.">EventSource</a></code> object. </dd></dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00266">266</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga763229d3f6ded408f4126dcf121f0baf"></a><!-- doxytag: member="chioch.h::chIOGetReadEventSource" ref="ga763229d3f6ded408f4126dcf121f0baf" args="(ip)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define chIOGetReadEventSource</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname">ip</td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;(&amp;((ip)-&gt;vmt-&gt;ievent))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns the read event source. </p>
<p>The read event source is broadcasted when the channel is ready for read operations. This usually happens when the internal input queue becomes non-empty.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ip</em>&nbsp;</td><td>pointer to a <code><a class="el" href="struct_base_asynchronous_channel.html" title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A pointer to an <code><a class="el" href="struct_event_source.html" title="Event Source structure.">EventSource</a></code> object. </dd></dl>
<p>Definition at line <a class="el" href="chioch_8h_source.html#l00278">278</a> of file <a class="el" href="chioch_8h_source.html">chioch.h</a>.</p>
</div>
</div>
</div>
<hr size="1"><address style="text-align: right;"><small>
Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.7.1</small></address>
</body>
</html>