esp32-s2_dfu/0.4/group___keyboard___device.html

431 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: Device</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___keyboard___device.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">Device<div class="ingroups"><a class="el" href="group___class_driver___h_i_d___keyboard.html">Keyboard</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:gadf674819657d0a75be8c4b94fb6163da"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___keyboard___device.html#gadf674819657d0a75be8c4b94fb6163da">tusbd_hid_keyboard_is_busy</a> (uint8_t coreid)</td></tr>
<tr class="memdesc:gadf674819657d0a75be8c4b94fb6163da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the interface is currently busy or not. <a href="#gadf674819657d0a75be8c4b94fb6163da">More...</a><br/></td></tr>
<tr class="separator:gadf674819657d0a75be8c4b94fb6163da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga392b2206c03d7e5a92d84e289d50fcdb"><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___keyboard___device.html#ga392b2206c03d7e5a92d84e289d50fcdb">tusbd_hid_keyboard_send</a> (uint8_t coreid, <a class="el" href="structhid__keyboard__report__t.html">hid_keyboard_report_t</a> const *p_report)</td></tr>
<tr class="memdesc:ga392b2206c03d7e5a92d84e289d50fcdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Submit USB transfer. <a href="#ga392b2206c03d7e5a92d84e289d50fcdb">More...</a><br/></td></tr>
<tr class="separator:ga392b2206c03d7e5a92d84e289d50fcdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0a2c21e286542d07224076d421c77381"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___keyboard___device.html#ga0a2c21e286542d07224076d421c77381">tusbd_hid_keyboard_mounted_cb</a> (uint8_t coreid)</td></tr>
<tr class="memdesc:ga0a2c21e286542d07224076d421c77381"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that will be invoked when this interface is mounted (configured) by USB host. <a href="#ga0a2c21e286542d07224076d421c77381">More...</a><br/></td></tr>
<tr class="separator:ga0a2c21e286542d07224076d421c77381"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc3bc3b71df89affd07d569aba9d8ca1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___keyboard___device.html#gadc3bc3b71df89affd07d569aba9d8ca1">tusbd_hid_keyboard_unmounted_cb</a> (uint8_t coreid)</td></tr>
<tr class="memdesc:gadc3bc3b71df89affd07d569aba9d8ca1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that will be invoked when this interface is unmounted (bus reset/unplugged) <a href="#gadc3bc3b71df89affd07d569aba9d8ca1">More...</a><br/></td></tr>
<tr class="separator:gadc3bc3b71df89affd07d569aba9d8ca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga325f15f403ee3572057fd6a55e28868e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___keyboard___device.html#ga325f15f403ee3572057fd6a55e28868e">tusbd_hid_keyboard_cb</a> (uint8_t coreid, tusb_event_t event, uint32_t xferred_bytes)</td></tr>
<tr class="memdesc:ga325f15f403ee3572057fd6a55e28868e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that is invoked when an transferring event occurred after invoking <a class="el" href="group___keyboard___device.html#ga392b2206c03d7e5a92d84e289d50fcdb">tusbd_hid_keyboard_send</a>. <a href="#ga325f15f403ee3572057fd6a55e28868e">More...</a><br/></td></tr>
<tr class="separator:ga325f15f403ee3572057fd6a55e28868e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf8345eebc7540356d9598554b91b1d4b"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___keyboard___device.html#gaf8345eebc7540356d9598554b91b1d4b">tusbd_hid_keyboard_get_report_cb</a> (uint8_t coreid, <a class="el" href="group___class_driver___h_i_d___common.html#gade40a5ae3c180ad9f543927d12d69fc8">hid_request_report_type_t</a> report_type, void **pp_report, uint16_t requested_length)</td></tr>
<tr class="memdesc:gaf8345eebc7540356d9598554b91b1d4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that is invoked when USB host request <a class="el" href="group___class_driver___h_i_d___common.html#gga40b25478e300d37659ba4fae7685ee8ba2c2c8443516b3761605658c1a6bc92fb">HID_REQUEST_CONTROL_GET_REPORT</a> via control endpoint. <a href="#gaf8345eebc7540356d9598554b91b1d4b">More...</a><br/></td></tr>
<tr class="separator:gaf8345eebc7540356d9598554b91b1d4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf62354ad819d8e71894b7f096b8fc34"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___keyboard___device.html#gacf62354ad819d8e71894b7f096b8fc34">tusbd_hid_keyboard_set_report_cb</a> (uint8_t coreid, <a class="el" href="group___class_driver___h_i_d___common.html#gade40a5ae3c180ad9f543927d12d69fc8">hid_request_report_type_t</a> report_type, uint8_t p_report_data[], uint16_t length)</td></tr>
<tr class="memdesc:gacf62354ad819d8e71894b7f096b8fc34"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that is invoked when USB host request <a class="el" href="group___class_driver___h_i_d___common.html#gga40b25478e300d37659ba4fae7685ee8ba1def1e3a8c89ba771e946318c5678efc">HID_REQUEST_CONTROL_SET_REPORT</a> via control endpoint. <a href="#gacf62354ad819d8e71894b7f096b8fc34">More...</a><br/></td></tr>
<tr class="separator:gacf62354ad819d8e71894b7f096b8fc34"><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="ga325f15f403ee3572057fd6a55e28868e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbd_hid_keyboard_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</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">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 after invoking <a class="el" href="group___keyboard___device.html#ga392b2206c03d7e5a92d84e289d50fcdb">tusbd_hid_keyboard_send</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">coreid</td><td>USB Controller ID </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">event</td><td>an value from tusb_event_t </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></dl>
</div>
</div>
<a class="anchor" id="gaf8345eebc7540356d9598554b91b1d4b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint16_t tusbd_hid_keyboard_get_report_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___class_driver___h_i_d___common.html#gade40a5ae3c180ad9f543927d12d69fc8">hid_request_report_type_t</a>&#160;</td>
<td class="paramname"><em>report_type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void **&#160;</td>
<td class="paramname"><em>pp_report</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>requested_length</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 USB host request <a class="el" href="group___class_driver___h_i_d___common.html#gga40b25478e300d37659ba4fae7685ee8ba2c2c8443516b3761605658c1a6bc92fb">HID_REQUEST_CONTROL_GET_REPORT</a> via control endpoint. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">coreid</td><td>USB Controller ID </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">report_type</td><td>specify which report (INPUT, OUTPUT, FEATURE) that host requests </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pp_report</td><td>pointer to buffer that application need to update, value 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">requested_length</td><td>number of bytes that host requested </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">non-zero</td><td>Actual number of bytes in the response's buffer. </td></tr>
<tr><td class="paramname">zero</td><td>indicates the current request is not supported. Tinyusb device stack will reject the request by sending STALL in the data phase. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>After this callback, the request is silently executed by the tinyusb stack, thus the completion of this control request will not be reported to application. For Keyboard, USB host often uses this to turn on/off the LED for CAPLOCKS, NUMLOCK (<a class="el" href="group___class_driver___h_i_d___keyboard.html#ga7cef2aea3178da2aa5fe0d4bf298c5b7">hid_keyboard_led_bm_t</a>) </dd></dl>
</div>
</div>
<a class="anchor" id="gadf674819657d0a75be8c4b94fb6163da"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool tusbd_hid_keyboard_is_busy </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</em></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">coreid</td><td>USB Controller ID </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 host </td></tr>
<tr><td class="paramname">false</td><td>if the interface is not busy meaning the stack successfully transferred data from/to host </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This function is primarily used for polling/waiting result after <a class="el" href="group___keyboard___device.html#ga392b2206c03d7e5a92d84e289d50fcdb">tusbd_hid_keyboard_send</a>. </dd></dl>
</div>
</div>
<a class="anchor" id="ga0a2c21e286542d07224076d421c77381"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbd_hid_keyboard_mounted_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback function that will be invoked when this interface is mounted (configured) by USB host. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">coreid</td><td>USB Controller ID of the interface </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This callback should be used by Application to <b>set-up</b> interface-related data </dd></dl>
</div>
</div>
<a class="anchor" id="ga392b2206c03d7e5a92d84e289d50fcdb"></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> tusbd_hid_keyboard_send </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structhid__keyboard__report__t.html">hid_keyboard_report_t</a> const *&#160;</td>
<td class="paramname"><em>p_report</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Submit USB transfer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">coreid</td><td>USB Controller ID </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">p_report</td><td>address that is used to store data from device. Must be accessible by usb controller (see <a class="el" href="group__group__configuration.html#ga977f8e429c64d2ea49ea42b5dac8a88c">TUSB_CFG_ATTR_USBRAM</a>) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___group___error.html#ga225612897c510054ef4026586562f716">tusb_error_t</a> type to indicate success or error condition. </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. Data will be transferred when USB Host work with this interface. The result of usb transfer will be reported by the interface's callback function </dd></dl>
</div>
</div>
<a class="anchor" id="gacf62354ad819d8e71894b7f096b8fc34"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbd_hid_keyboard_set_report_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___class_driver___h_i_d___common.html#gade40a5ae3c180ad9f543927d12d69fc8">hid_request_report_type_t</a>&#160;</td>
<td class="paramname"><em>report_type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>p_report_data</em>[], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>length</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 USB host request <a class="el" href="group___class_driver___h_i_d___common.html#gga40b25478e300d37659ba4fae7685ee8ba1def1e3a8c89ba771e946318c5678efc">HID_REQUEST_CONTROL_SET_REPORT</a> via control endpoint. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">coreid</td><td>USB Controller ID </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">report_type</td><td>specify which report (INPUT, OUTPUT, FEATURE) that host requests </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">p_report_data</td><td>buffer containing the report's data </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>number of bytes in the <em>p_report_data</em> </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>By the time this callback is invoked, the USB control transfer is already completed in the hardware side. Application are free to handle data at its own will. </dd></dl>
</div>
</div>
<a class="anchor" id="gadc3bc3b71df89affd07d569aba9d8ca1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbd_hid_keyboard_unmounted_cb </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>coreid</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback function that will be invoked when this interface is unmounted (bus reset/unplugged) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">coreid</td><td>USB Controller ID of the interface </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>This callback should be used by Application to <b>tear-down</b> interface-related data </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 Thu Apr 17 2014 13:05: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>