<p>This module defines an abstract interface for I/O channels by extending the <code><aclass="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>
<tr><tdclass="mdescLeft"> </td><tdclass="mdescRight">Channel blocking byte read with timeout. <ahref="#gace21d03c2ffbae1bf56b8a0b612421ba"></a><br/></td></tr>
<tr><tdclass="memItemLeft"align="right"valign="top">#define </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="group__io__channels.html#ga432c7fbf8b1109bba566986143e9da21">chIOWriteTimeout</a>(ip, bp, n, time) ((ip)->vmt->writet(ip, bp, n, time))</td></tr>
<tr><tdclass="mdescLeft"> </td><tdclass="mdescRight">Channel blocking write with timeout. <ahref="#ga432c7fbf8b1109bba566986143e9da21"></a><br/></td></tr>
<tr><tdclass="memItemLeft"align="right"valign="top">#define </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="group__io__channels.html#ga98c9dc44ce78e6ac026235eea93b6911">chIOReadTimeout</a>(ip, bp, n, time) ((ip)->vmt->readt(ip, bp, n, time))</td></tr>
<tr><tdclass="mdescLeft"> </td><tdclass="mdescRight">Channel blocking read with timeout. <ahref="#ga98c9dc44ce78e6ac026235eea93b6911"></a><br/></td></tr>
<b>Value:</b><divclass="fragment"><preclass="fragment"><aclass="code"href="group__data__streams.html#ga5323b44ccf2eee6e0f3ef7b22fb55eeb"title="BaseSequentialStream specific methods.">_base_sequential_stream_methods</a> \
<aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a> (*getwouldblock)(<spanclass="keywordtype">void</span> *instance); \
<spanclass="comment">/* Channel put method with timeout specification.*/</span> \
<aclass="code"href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3"title="Message, use signed pointer equivalent.">msg_t</a> (*put)(<spanclass="keywordtype">void</span> *instance, <aclass="code"href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> b, <aclass="code"href="group__types.html#gae3e32a98d431a02106616da3071832dd"title="System Time, recommended fastest unsigned.">systime_t</a> time); \
<spanclass="comment">/* Channel get method with timeout specification.*/</span> \
<aclass="code"href="group__types.html#ga35bcb0c321cd7bc45bf1a11fa17ebdd3"title="Message, use signed pointer equivalent.">msg_t</a> (*<spanclass="keyword">get</span>)(<spanclass="keywordtype">void</span> *instance, <aclass="code"href="group__types.html#gae3e32a98d431a02106616da3071832dd"title="System Time, recommended fastest unsigned.">systime_t</a> time); \
<spanclass="comment">/* Channel write method with timeout specification.*/</span> \
<spanclass="keywordtype">size_t</span> n, <aclass="code"href="group__types.html#gae3e32a98d431a02106616da3071832dd"title="System Time, recommended fastest unsigned.">systime_t</a> time); \
<spanclass="comment">/* Channel read method with timeout specification.*/</span> \
size_t (*readt)(<spanclass="keywordtype">void</span> *instance, <aclass="code"href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> *bp, <spanclass="keywordtype">size_t</span> n, <aclass="code"href="group__types.html#gae3e32a98d431a02106616da3071832dd"title="System Time, recommended fastest unsigned.">systime_t</a> time);
</pre></div>
<p><code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> specific methods. </p>
<p>Definition at line <aclass="el"href="chioch_8h_source.html#l00051">51</a> of file <aclass="el"href="chioch_8h_source.html">chioch.h</a>.</p>
<p><code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> specific data. </p>
<dlclass="note"><dt><b>Note:</b></dt><dd>It is empty because <code><aclass="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 <aclass="el"href="chioch_8h_source.html#l00072">72</a> of file <aclass="el"href="chioch_8h_source.html">chioch.h</a>.</p>
<p>This function verifies if a subsequent put/write operation would block.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<p>This function verifies if a subsequent get/read operation would block.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><tdvalign="top"></td><tdvalign="top"><em>FALSE</em> </td><td>if the input queue contains data and would not block a read operation. </td></tr>
<tr><tdvalign="top"></td><tdvalign="top"><em>TRUE</em> </td><td>if the input queue is empty and would block a read operation. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <aclass="el"href="chioch_8h_source.html#l00121">121</a> of file <aclass="el"href="chioch_8h_source.html">chioch.h</a>.</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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>b</em> </td><td>the byte value to be written to the channel </td></tr>
<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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>b</em> </td><td>the byte value to be written to the channel </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>time</em> </td><td>the number of ticks before the operation timeouts, the following special values are allowed:</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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dlclass="return"><dt><b>Returns:</b></dt><dd>A byte value from the queue or: </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"></td><tdvalign="top"><em>Q_RESET</em> </td><td>if the channel associated queue (if any) was reset. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <aclass="el"href="chioch_8h_source.html#l00164">164</a> of file <aclass="el"href="chioch_8h_source.html">chioch.h</a>.</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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>time</em> </td><td>the number of ticks before the operation timeouts, the following special values are allowed:</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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><tdvalign="top"><tt>[out]</tt> </td><tdvalign="top"><em>bp</em> </td><td>pointer to the data buffer </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>n</em> </td><td>the maximum amount of data to be transferred </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>time</em> </td><td>the number of ticks before the operation timeouts, the following special values are allowed:</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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_channel.html"title="Base channel class.">BaseChannel</a></code> or derived class </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>bp</em> </td><td>pointer to the data buffer </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>n</em> </td><td>the maximum amount of data to be transferred </td></tr>
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>time</em> </td><td>the number of ticks before the operation timeouts, the following special values are allowed:</p>
<b>Value:</b><divclass="fragment"><preclass="fragment"><aclass="code"href="group__io__channels.html#gad2be0fba8350d51490b557900062a949"title="BaseChannel specific data.">_base_channel_data</a> \
<spanclass="comment">/* Data Available EventSource.*/</span> \
<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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_asynchronous_channel.html"title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dlclass="return"><dt><b>Returns:</b></dt><dd>A pointer to an <code><aclass="el"href="struct_event_source.html"title="Event Source structure.">EventSource</a></code> object. </dd></dl>
<p>Definition at line <aclass="el"href="chioch_8h_source.html#l00266">266</a> of file <aclass="el"href="chioch_8h_source.html">chioch.h</a>.</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>
<tableborder="0"cellspacing="2"cellpadding="0">
<tr><tdvalign="top"><tt>[in]</tt> </td><tdvalign="top"><em>ip</em> </td><td>pointer to a <code><aclass="el"href="struct_base_asynchronous_channel.html"title="Base asynchronous channel class.">BaseAsynchronousChannel</a></code> or derived class </td></tr>
</table>
</dd>
</dl>
<dlclass="return"><dt><b>Returns:</b></dt><dd>A pointer to an <code><aclass="el"href="struct_event_source.html"title="Event Source structure.">EventSource</a></code> object. </dd></dl>
<p>Definition at line <aclass="el"href="chioch_8h_source.html#l00278">278</a> of file <aclass="el"href="chioch_8h_source.html">chioch.h</a>.</p>
Generated on Sun Oct 24 2010 09:40:46 for ChibiOS/RT by <ahref="http://www.doxygen.org/index.html"><imgsrc="doxygen.png"alt="doxygen"align="middle"border="0"></a> 1.7.1</small></address>