esp32-s2_dfu/0.4/group___c_d_c___serial___ho...

446 lines
24 KiB
HTML

<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>tinyusb: Host</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table width="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">tinyusb
&#160;<span id="projectnumber">0.4</span>
</div>
</td>
<td align="right">
<a href="https://pledgie.com/campaigns/24694"><img border="0" src="https://pledgie.com/campaigns/24694.png?skin_name=chrome" alt="Click here to lend your support to tinyusb donation and make a donation at pledgie.com"></a>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group___c_d_c___serial___host.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Host<div class="ingroups"><a class="el" href="group___c_d_c___serial.html">Serial</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaff61982f980eb8092a0e0b661bbd38c7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#gaff61982f980eb8092a0e0b661bbd38c7">tusbh_cdc_serial_is_mounted</a> (uint8_t dev_addr) <a class="el" href="group___group___func_attr.html#ga477faefde32bfd89d5b5b40d70b1a998">ATTR_PURE</a> <a class="el" href="group___group___func_attr.html#gaa61f3d1a169c3d97d95072b1ee6493fd">ATTR_WARN_UNUSED_RESULT</a></td></tr>
<tr class="memdesc:gaff61982f980eb8092a0e0b661bbd38c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if device support CDC Serial interface or not. <a href="#gaff61982f980eb8092a0e0b661bbd38c7">More...</a><br/></td></tr>
<tr class="separator:gaff61982f980eb8092a0e0b661bbd38c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1d7354ed6ba18e9f9ed24b014890bf81"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#ga1d7354ed6ba18e9f9ed24b014890bf81">tusbh_cdc_is_busy</a> (uint8_t dev_addr, <a class="el" href="group___class_driver___c_d_c___common.html#ga8664e955870c947f08f6601901243b6f">cdc_pipeid_t</a> pipeid) <a class="el" href="group___group___func_attr.html#ga477faefde32bfd89d5b5b40d70b1a998">ATTR_PURE</a> <a class="el" href="group___group___func_attr.html#gaa61f3d1a169c3d97d95072b1ee6493fd">ATTR_WARN_UNUSED_RESULT</a></td></tr>
<tr class="memdesc:ga1d7354ed6ba18e9f9ed24b014890bf81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the interface is currently busy or not. <a href="#ga1d7354ed6ba18e9f9ed24b014890bf81">More...</a><br/></td></tr>
<tr class="separator:ga1d7354ed6ba18e9f9ed24b014890bf81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9a78d2b7d93d02e7004b13e26f52a38b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___group___error.html#ga225612897c510054ef4026586562f716">tusb_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#ga9a78d2b7d93d02e7004b13e26f52a38b">tusbh_cdc_send</a> (uint8_t dev_addr, void const *p_data, uint32_t length, bool is_notify)</td></tr>
<tr class="memdesc:ga9a78d2b7d93d02e7004b13e26f52a38b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform USB OUT transfer to device. <a href="#ga9a78d2b7d93d02e7004b13e26f52a38b">More...</a><br/></td></tr>
<tr class="separator:ga9a78d2b7d93d02e7004b13e26f52a38b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5fe5da6809a8a2688c9941fd99aaebd0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___group___error.html#ga225612897c510054ef4026586562f716">tusb_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#ga5fe5da6809a8a2688c9941fd99aaebd0">tusbh_cdc_receive</a> (uint8_t dev_addr, void *p_buffer, uint32_t length, bool is_notify)</td></tr>
<tr class="memdesc:ga5fe5da6809a8a2688c9941fd99aaebd0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform USB IN transfer to get data from device. <a href="#ga5fe5da6809a8a2688c9941fd99aaebd0">More...</a><br/></td></tr>
<tr class="separator:ga5fe5da6809a8a2688c9941fd99aaebd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9128eb9c5b0d166c384b222b565373f9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#ga9128eb9c5b0d166c384b222b565373f9">tusbh_cdc_mounted_cb</a> (uint8_t dev_addr)</td></tr>
<tr class="memdesc:ga9128eb9c5b0d166c384b222b565373f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that will be invoked when a device with CDC Abstract Control Model interface is mounted. <a href="#ga9128eb9c5b0d166c384b222b565373f9">More...</a><br/></td></tr>
<tr class="separator:ga9128eb9c5b0d166c384b222b565373f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7b2511d2b53dfa6a519d92be254c04c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#ga7b2511d2b53dfa6a519d92be254c04c6">tusbh_cdc_unmounted_cb</a> (uint8_t dev_addr)</td></tr>
<tr class="memdesc:ga7b2511d2b53dfa6a519d92be254c04c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that will be invoked when a device with CDC Abstract Control Model interface is unmounted. <a href="#ga7b2511d2b53dfa6a519d92be254c04c6">More...</a><br/></td></tr>
<tr class="separator:ga7b2511d2b53dfa6a519d92be254c04c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1e01c08cf3873049116ae8f5aadff78c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___c_d_c___serial___host.html#ga1e01c08cf3873049116ae8f5aadff78c">tusbh_cdc_xfer_isr</a> (uint8_t dev_addr, tusb_event_t event, <a class="el" href="group___class_driver___c_d_c___common.html#ga8664e955870c947f08f6601901243b6f">cdc_pipeid_t</a> pipe_id, uint32_t xferred_bytes)</td></tr>
<tr class="memdesc:ga1e01c08cf3873049116ae8f5aadff78c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that is invoked when an transferring event occurred. <a href="#ga1e01c08cf3873049116ae8f5aadff78c">More...</a><br/></td></tr>
<tr class="separator:ga1e01c08cf3873049116ae8f5aadff78c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga1d7354ed6ba18e9f9ed24b014890bf81"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool tusbh_cdc_is_busy </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___class_driver___c_d_c___common.html#ga8664e955870c947f08f6601901243b6f">cdc_pipeid_t</a>&#160;</td>
<td class="paramname"><em>pipeid</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the interface is currently busy or not. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>device address </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pipeid</td><td>value from <a class="el" href="group___class_driver___c_d_c___common.html#ga8664e955870c947f08f6601901243b6f">cdc_pipeid_t</a> to indicate target pipe. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">true</td><td>if the interface is busy, meaning the stack is still transferring/waiting data from/to device </td></tr>
<tr><td class="paramname">false</td><td>if the interface is not busy, meaning the stack successfully transferred data from/to device </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This function is used to check if previous transfer is complete (success or error), so that the next transfer can be scheduled. User needs to make sure the corresponding interface is mounted (by <a class="el" href="group___c_d_c___serial___host.html#gaff61982f980eb8092a0e0b661bbd38c7">tusbh_cdc_serial_is_mounted</a>) before calling this function. </dd></dl>
</div>
</div>
<a class="anchor" id="ga9128eb9c5b0d166c384b222b565373f9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbh_cdc_mounted_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback function that will be invoked when a device with CDC Abstract Control Model interface is mounted. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>Address of newly mounted device </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This callback should be used by Application to set-up interface-related data </dd></dl>
</div>
</div>
<a class="anchor" id="ga5fe5da6809a8a2688c9941fd99aaebd0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___group___error.html#ga225612897c510054ef4026586562f716">tusb_error_t</a> tusbh_cdc_receive </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>p_buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>is_notify</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Perform USB IN transfer to get data from device. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>device address </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">p_buffer</td><td>Buffer containing received data. Must be accessible by USB controller (see <a class="el" href="group__group__configuration.html#ga977f8e429c64d2ea49ea42b5dac8a88c">TUSB_CFG_ATTR_USBRAM</a>) </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Number of bytes to be transferred via USB bus </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">TUSB_ERROR_NONE</td><td>on success </td></tr>
<tr><td class="paramname">TUSB_ERROR_INTERFACE_IS_BUSY</td><td>if the interface is already transferring data with device </td></tr>
<tr><td class="paramname">TUSB_ERROR_DEVICE_NOT_READY</td><td>if device is not yet configured (by SET CONFIGURED request) </td></tr>
<tr><td class="paramname">TUSB_ERROR_INVALID_PARA</td><td>if input parameters are not correct </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This function is non-blocking and returns immediately. The result of USB transfer will be reported by the interface's callback function. <em>p_data</em> must be declared with <a class="el" href="group__group__configuration.html#ga977f8e429c64d2ea49ea42b5dac8a88c">TUSB_CFG_ATTR_USBRAM</a>. </dd></dl>
</div>
</div>
<a class="anchor" id="ga9a78d2b7d93d02e7004b13e26f52a38b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___group___error.html#ga225612897c510054ef4026586562f716">tusb_error_t</a> tusbh_cdc_send </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void const *&#160;</td>
<td class="paramname"><em>p_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>is_notify</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Perform USB OUT transfer to device. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>device address </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">p_data</td><td>Buffer containing data. Must be accessible by USB controller (see <a class="el" href="group__group__configuration.html#ga977f8e429c64d2ea49ea42b5dac8a88c">TUSB_CFG_ATTR_USBRAM</a>) </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Number of bytes to be transferred via USB bus </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">TUSB_ERROR_NONE</td><td>on success </td></tr>
<tr><td class="paramname">TUSB_ERROR_INTERFACE_IS_BUSY</td><td>if the interface is already transferring data with device </td></tr>
<tr><td class="paramname">TUSB_ERROR_DEVICE_NOT_READY</td><td>if device is not yet configured (by SET CONFIGURED request) </td></tr>
<tr><td class="paramname">TUSB_ERROR_INVALID_PARA</td><td>if input parameters are not correct </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This function is non-blocking and returns immediately. The result of USB transfer will be reported by the interface's callback function. <em>p_data</em> must be declared with <a class="el" href="group__group__configuration.html#ga977f8e429c64d2ea49ea42b5dac8a88c">TUSB_CFG_ATTR_USBRAM</a>. </dd></dl>
</div>
</div>
<a class="anchor" id="gaff61982f980eb8092a0e0b661bbd38c7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool tusbh_cdc_serial_is_mounted </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if device support CDC Serial interface or not. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>device address </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">true</td><td>if device supports </td></tr>
<tr><td class="paramname">false</td><td>if device does not support or is not mounted </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga7b2511d2b53dfa6a519d92be254c04c6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbh_cdc_unmounted_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback function that will be invoked when a device with CDC Abstract Control Model interface is unmounted. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>Address of newly unmounted device </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This callback should be used by Application to tear-down interface-related data </dd></dl>
</div>
</div>
<a class="anchor" id="ga1e01c08cf3873049116ae8f5aadff78c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbh_cdc_xfer_isr </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>dev_addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">tusb_event_t&#160;</td>
<td class="paramname"><em>event</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___class_driver___c_d_c___common.html#ga8664e955870c947f08f6601901243b6f">cdc_pipeid_t</a>&#160;</td>
<td class="paramname"><em>pipe_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>xferred_bytes</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback function that is invoked when an transferring event occurred. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">dev_addr</td><td>Address of device </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">event</td><td>an value from tusb_event_t </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pipe_id</td><td>value from <a class="el" href="group___class_driver___c_d_c___common.html#ga8664e955870c947f08f6601901243b6f">cdc_pipeid_t</a> indicate the pipe </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">xferred_bytes</td><td>Number of bytes transferred via USB bus </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>event can be one of following<ul>
<li>TUSB_EVENT_XFER_COMPLETE : previously scheduled transfer completes successfully.</li>
<li>TUSB_EVENT_XFER_ERROR : previously scheduled transfer encountered a transaction error.</li>
<li>TUSB_EVENT_XFER_STALLED : previously scheduled transfer is stalled by device. </li>
</ul>
</dd>
<dd>
</dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Tue Apr 15 2014 10:49:28 for tinyusb by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
</ul>
</div>
</body>
</html>