esp32-s2_dfu/0.4/group___m_s_c___device.html

389 lines
23 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___m_s_c___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___m_s_c.html">MassStorage (MSC)</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:ga73fc3dfbef73f24f29481ef419eb35e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_s_c___device.html#ga73fc3dfbef73f24f29481ef419eb35e5">tusbd_msc_mounted_cb</a> (uint8_t coreid)</td></tr>
<tr class="memdesc:ga73fc3dfbef73f24f29481ef419eb35e5"><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="#ga73fc3dfbef73f24f29481ef419eb35e5">More...</a><br/></td></tr>
<tr class="separator:ga73fc3dfbef73f24f29481ef419eb35e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab4dbb5340eeaab5cdb4c0b4b03019880"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_s_c___device.html#gab4dbb5340eeaab5cdb4c0b4b03019880">tusbd_msc_unmounted_cb</a> (uint8_t coreid)</td></tr>
<tr class="memdesc:gab4dbb5340eeaab5cdb4c0b4b03019880"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function that will be invoked when this interface is unmounted (bus reset/unplugged) <a href="#gab4dbb5340eeaab5cdb4c0b4b03019880">More...</a><br/></td></tr>
<tr class="separator:gab4dbb5340eeaab5cdb4c0b4b03019880"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaeb64ba2734e3400a0f73f1a140584e5f"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_s_c___device.html#gaeb64ba2734e3400a0f73f1a140584e5f">tusbd_msc_read10_cb</a> (uint8_t coreid, uint8_t lun, void **pp_buffer, uint32_t lba, uint16_t block_count)</td></tr>
<tr class="memdesc:gaeb64ba2734e3400a0f73f1a140584e5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback that is invoked when tinyusb stack received <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a896bb16014025d5ee9c30767c37bb429">SCSI_CMD_READ_10</a> command from host. <a href="#gaeb64ba2734e3400a0f73f1a140584e5f">More...</a><br/></td></tr>
<tr class="separator:gaeb64ba2734e3400a0f73f1a140584e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5bc4dcb7613a9cfd56ea2da35a4d7944"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_s_c___device.html#ga5bc4dcb7613a9cfd56ea2da35a4d7944">tusbd_msc_write10_cb</a> (uint8_t coreid, uint8_t lun, void **pp_buffer, uint32_t lba, uint16_t block_count)</td></tr>
<tr class="memdesc:ga5bc4dcb7613a9cfd56ea2da35a4d7944"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback that is invoked when tinyusb stack received <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a64f64e86275d0618cc06512cac43e5e0">SCSI_CMD_WRITE_10</a> command from host. <a href="#ga5bc4dcb7613a9cfd56ea2da35a4d7944">More...</a><br/></td></tr>
<tr class="separator:ga5bc4dcb7613a9cfd56ea2da35a4d7944"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa5a5d2d6181e947f02e2790113b84aeb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___class_driver___m_s_c___common.html#gab78ea3586ce0c7a8bb2680d7fbcca3ae">msc_csw_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___m_s_c___device.html#gaa5a5d2d6181e947f02e2790113b84aeb">tusbd_msc_scsi_cb</a> (uint8_t coreid, uint8_t lun, uint8_t scsi_cmd[16], void const **pp_buffer, uint16_t *p_length)</td></tr>
<tr class="memdesc:gaa5a5d2d6181e947f02e2790113b84aeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback that is invoked when tinyusb stack received an SCSI command other than <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a64f64e86275d0618cc06512cac43e5e0">SCSI_CMD_WRITE_10</a> and <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a896bb16014025d5ee9c30767c37bb429">SCSI_CMD_READ_10</a> command from host. <a href="#gaa5a5d2d6181e947f02e2790113b84aeb">More...</a><br/></td></tr>
<tr class="separator:gaa5a5d2d6181e947f02e2790113b84aeb"><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="ga73fc3dfbef73f24f29481ef419eb35e5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbd_msc_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="gaeb64ba2734e3400a0f73f1a140584e5f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint16_t tusbd_msc_read10_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">uint8_t&#160;</td>
<td class="paramname"><em>lun</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void **&#160;</td>
<td class="paramname"><em>pp_buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>lba</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>block_count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback that is invoked when tinyusb stack received <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a896bb16014025d5ee9c30767c37bb429">SCSI_CMD_READ_10</a> command from 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 </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">lun</td><td>Targeted Logical Unit </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pp_buffer</td><td>Pointer to buffer which application need to update with the response data's address. 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">lba</td><td>Starting Logical Block Address to be read </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">block_count</td><td>Number of requested block </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 block that application processed, must be less than or equal to <em><b>block_count</b>.</em> </td></tr>
<tr><td class="paramname">zero</td><td>Indicate error in retrieving data from application. Tinyusb device stack will <b>STALL</b> the corresponding endpoint and return failed status in command status wrapper phase. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Host can request dozens of Kbytes in one command e.g <em><b>block_count</b> =</em> 128, it is insufficient to require application to have that much of buffer. Instead, application can return the number of blocks it can processed, the stack after transferred that amount of data will continue to invoke this callback with adjusted <em><b>lba</b> and</em> <em><b>block_count</b>.</em> <br/>
<br/>
Although this callback is called by tinyusb device task (non-isr context), however as all the classes share the same task (to save resource), any delay in this callback will cause delay in reponse on other classes. </dd></dl>
</div>
</div>
<a class="anchor" id="gaa5a5d2d6181e947f02e2790113b84aeb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___class_driver___m_s_c___common.html#gab78ea3586ce0c7a8bb2680d7fbcca3ae">msc_csw_status_t</a> tusbd_msc_scsi_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">uint8_t&#160;</td>
<td class="paramname"><em>lun</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>scsi_cmd</em>[16], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void const **&#160;</td>
<td class="paramname"><em>pp_buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>p_length</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback that is invoked when tinyusb stack received an SCSI command other than <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a64f64e86275d0618cc06512cac43e5e0">SCSI_CMD_WRITE_10</a> and <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a896bb16014025d5ee9c30767c37bb429">SCSI_CMD_READ_10</a> command from 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 </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">lun</td><td>Targeted Logical Unit </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">scsi_cmd</td><td>SCSI command contents, application should examine this command block to know which command host requested </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pp_buffer</td><td>Pointer to buffer which application need to update with the address to transfer data with host. The buffer address can be anywhere since the stack will copy its contents to a internal USB-accessible buffer. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">p_length</td><td>length </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 block that application can receive and must be less than or equal to <em><b>block_count</b>.</em> </td></tr>
<tr><td class="paramname">zero</td><td>Indicate error in retrieving data from application. Tinyusb device stack will <b>STALL</b> the corresponding endpoint and return failed status in command status wrapper phase. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Although this callback is called by tinyusb device task (non-isr context), however as all the classes share the same task (to save resource), any delay in this callback will cause delay in reponse on other classes. </dd></dl>
</div>
</div>
<a class="anchor" id="gab4dbb5340eeaab5cdb4c0b4b03019880"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tusbd_msc_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>
<a class="anchor" id="ga5bc4dcb7613a9cfd56ea2da35a4d7944"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint16_t tusbd_msc_write10_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">uint8_t&#160;</td>
<td class="paramname"><em>lun</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void **&#160;</td>
<td class="paramname"><em>pp_buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>lba</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>block_count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback that is invoked when tinyusb stack received <a class="el" href="group___class_driver___m_s_c___common.html#ggad5f995e6aa7f3c4cf01e369dae83ddd4a64f64e86275d0618cc06512cac43e5e0">SCSI_CMD_WRITE_10</a> command from 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 </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">lun</td><td>Targeted Logical Unit </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pp_buffer</td><td>Pointer to buffer which application need to update with the address to hold data from host 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">lba</td><td>Starting Logical Block Address to be write </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">block_count</td><td>Number of requested block </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 block that application can receive and must be less than or equal to <em><b>block_count</b>.</em> </td></tr>
<tr><td class="paramname">zero</td><td>Indicate error in retrieving data from application. Tinyusb device stack will <b>STALL</b> the corresponding endpoint and return failed status in command status wrapper phase. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Host can request dozens of Kbytes in one command e.g <em><b>block_count</b> =</em> 128, it is insufficient to require application to have that much of buffer. Instead, application can return the number of blocks it can processed, the stack after transferred that amount of data will continue to invoke this callback with adjusted <em><b>lba</b> and</em> <em><b>block_count</b>.</em> <br/>
<br/>
Although this callback is called by tinyusb device task (non-isr context), however as all the classes share the same task (to save resource), any delay in this callback will cause delay in reponse on other classes. </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>