libctru/dsp_8h.html
2024-11-03 20:36:34 +00:00

921 lines
51 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libctru: include/3ds/services/dsp.h File Reference</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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></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 cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libctru
&#160;<span id="projectnumber">v2.4.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_d475325f6a9fe3bfc3a495c72a9e475e.html">3ds</a></li><li class="navelem"><a class="el" href="dir_0e005207343684f6967052d1f51a7e66.html">services</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">dsp.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>DSP Service to access the DSP processor commands (sound)
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;<a class="el" href="types_8h_source.html">3ds/types.h</a>&gt;</code><br />
</div>
<p><a href="dsp_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdspHookCookie.html">dspHookCookie</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">DSP hook cookie. <a href="structdspHookCookie.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a0524d9af6690dcf81759f84e820b60e5"><td class="memItemLeft" align="right" valign="top"><a id="a0524d9af6690dcf81759f84e820b60e5"></a>
typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a0524d9af6690dcf81759f84e820b60e5">dspHookFn</a>) (<a class="el" href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149">DSP_HookType</a> hook)</td></tr>
<tr class="memdesc:a0524d9af6690dcf81759f84e820b60e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">DSP hook function. <br /></td></tr>
<tr class="separator:a0524d9af6690dcf81759f84e820b60e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ab0628a987bd913080b9aaf672737061e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#ab0628a987bd913080b9aaf672737061e">DSP_InterruptType</a> { <a class="el" href="dsp_8h.html#ab0628a987bd913080b9aaf672737061eaac8d6062e2ce93a63bf9098955b04046">DSP_INTERRUPT_PIPE</a> = 2
}</td></tr>
<tr class="memdesc:ab0628a987bd913080b9aaf672737061e"><td class="mdescLeft">&#160;</td><td class="mdescRight">DSP interrupt types. <a href="dsp_8h.html#ab0628a987bd913080b9aaf672737061e">More...</a><br /></td></tr>
<tr class="separator:ab0628a987bd913080b9aaf672737061e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1a0e08bb66aa1b6bfefd1e586db2149"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149">DSP_HookType</a> { <br />
&#160;&#160;<a class="el" href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149a683e68506808fbb4cd057972f5b878be">DSPHOOK_ONSLEEP</a> = 0
, <br />
&#160;&#160;<a class="el" href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149ac0e23de4d01222d11f9cf3ae5045a633">DSPHOOK_ONWAKEUP</a> = 1
, <br />
&#160;&#160;<a class="el" href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149a7e0e9212bb8a48bcfe85782714e51e0b">DSPHOOK_ONCANCEL</a> = 2
<br />
}</td></tr>
<tr class="memdesc:ac1a0e08bb66aa1b6bfefd1e586db2149"><td class="mdescLeft">&#160;</td><td class="mdescRight">DSP hook types. <a href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149">More...</a><br /></td></tr>
<tr class="separator:ac1a0e08bb66aa1b6bfefd1e586db2149"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a2722008d6a077f5d444acf4b74a16ba4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a2722008d6a077f5d444acf4b74a16ba4">dspInit</a> (void)</td></tr>
<tr class="memdesc:a2722008d6a077f5d444acf4b74a16ba4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the dsp service. <a href="dsp_8h.html#a2722008d6a077f5d444acf4b74a16ba4">More...</a><br /></td></tr>
<tr class="separator:a2722008d6a077f5d444acf4b74a16ba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a59e493df3a168b5724bff5e88f03250b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a59e493df3a168b5724bff5e88f03250b">dspExit</a> (void)</td></tr>
<tr class="memdesc:a59e493df3a168b5724bff5e88f03250b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Closes the dsp service. <a href="dsp_8h.html#a59e493df3a168b5724bff5e88f03250b">More...</a><br /></td></tr>
<tr class="separator:a59e493df3a168b5724bff5e88f03250b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af041b7eff2bc87f266687b5879fb36a3"><td class="memItemLeft" align="right" valign="top"><a id="af041b7eff2bc87f266687b5879fb36a3"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#af041b7eff2bc87f266687b5879fb36a3">dspIsComponentLoaded</a> (void)</td></tr>
<tr class="memdesc:af041b7eff2bc87f266687b5879fb36a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if a component is loaded, false otherwise. <br /></td></tr>
<tr class="separator:af041b7eff2bc87f266687b5879fb36a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fa3c1e0eee06626b86e53c0953165ba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a8fa3c1e0eee06626b86e53c0953165ba">dspHook</a> (<a class="el" href="structdspHookCookie.html">dspHookCookie</a> *cookie, <a class="el" href="dsp_8h.html#a0524d9af6690dcf81759f84e820b60e5">dspHookFn</a> callback)</td></tr>
<tr class="memdesc:a8fa3c1e0eee06626b86e53c0953165ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up a DSP status hook. <a href="dsp_8h.html#a8fa3c1e0eee06626b86e53c0953165ba">More...</a><br /></td></tr>
<tr class="separator:a8fa3c1e0eee06626b86e53c0953165ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a867964a36a9985dee363cbf31be9621c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a867964a36a9985dee363cbf31be9621c">dspUnhook</a> (<a class="el" href="structdspHookCookie.html">dspHookCookie</a> *cookie)</td></tr>
<tr class="memdesc:a867964a36a9985dee363cbf31be9621c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes a DSP status hook. <a href="dsp_8h.html#a867964a36a9985dee363cbf31be9621c">More...</a><br /></td></tr>
<tr class="separator:a867964a36a9985dee363cbf31be9621c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd1bc0605288e307586d0e9535e3c8e4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#acd1bc0605288e307586d0e9535e3c8e4">DSP_GetHeadphoneStatus</a> (bool *is_inserted)</td></tr>
<tr class="memdesc:acd1bc0605288e307586d0e9535e3c8e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a headphone is inserted. <a href="dsp_8h.html#acd1bc0605288e307586d0e9535e3c8e4">More...</a><br /></td></tr>
<tr class="separator:acd1bc0605288e307586d0e9535e3c8e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0668b4d621800adab729d50a616e09d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a0668b4d621800adab729d50a616e09d1">DSP_FlushDataCache</a> (const void *address, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> size)</td></tr>
<tr class="memdesc:a0668b4d621800adab729d50a616e09d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flushes the cache. <a href="dsp_8h.html#a0668b4d621800adab729d50a616e09d1">More...</a><br /></td></tr>
<tr class="separator:a0668b4d621800adab729d50a616e09d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab964b185704e2e92200d69e9cec9efeb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#ab964b185704e2e92200d69e9cec9efeb">DSP_InvalidateDataCache</a> (const void *address, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> size)</td></tr>
<tr class="memdesc:ab964b185704e2e92200d69e9cec9efeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invalidates the cache. <a href="dsp_8h.html#ab964b185704e2e92200d69e9cec9efeb">More...</a><br /></td></tr>
<tr class="separator:ab964b185704e2e92200d69e9cec9efeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad02522bc41ec6161a24b6aee6fd30b17"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#ad02522bc41ec6161a24b6aee6fd30b17">DSP_GetSemaphoreHandle</a> (<a class="el" href="types_8h.html#ab6d744c6b5de129f12937e482dc674fb">Handle</a> *semaphore)</td></tr>
<tr class="memdesc:ad02522bc41ec6161a24b6aee6fd30b17"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieves the handle of the DSP semaphore. <a href="dsp_8h.html#ad02522bc41ec6161a24b6aee6fd30b17">More...</a><br /></td></tr>
<tr class="separator:ad02522bc41ec6161a24b6aee6fd30b17"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9dffd384a71ffa4a3b4c85fddb0392e6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a9dffd384a71ffa4a3b4c85fddb0392e6">DSP_SetSemaphore</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> value)</td></tr>
<tr class="memdesc:a9dffd384a71ffa4a3b4c85fddb0392e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the DSP hardware semaphore value. <a href="dsp_8h.html#a9dffd384a71ffa4a3b4c85fddb0392e6">More...</a><br /></td></tr>
<tr class="separator:a9dffd384a71ffa4a3b4c85fddb0392e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a376cfd4e6487ef063bf2b73e1c028188"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a376cfd4e6487ef063bf2b73e1c028188">DSP_SetSemaphoreMask</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> mask)</td></tr>
<tr class="memdesc:a376cfd4e6487ef063bf2b73e1c028188"><td class="mdescLeft">&#160;</td><td class="mdescRight">Masks the DSP hardware semaphore value. <a href="dsp_8h.html#a376cfd4e6487ef063bf2b73e1c028188">More...</a><br /></td></tr>
<tr class="separator:a376cfd4e6487ef063bf2b73e1c028188"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5a7a4f0bf256694245ce0c4bb58194b9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a5a7a4f0bf256694245ce0c4bb58194b9">DSP_LoadComponent</a> (const void *component, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> size, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> prog_mask, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> data_mask, bool *is_loaded)</td></tr>
<tr class="memdesc:a5a7a4f0bf256694245ce0c4bb58194b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads a DSP binary and starts the DSP. <a href="dsp_8h.html#a5a7a4f0bf256694245ce0c4bb58194b9">More...</a><br /></td></tr>
<tr class="separator:a5a7a4f0bf256694245ce0c4bb58194b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbe3be0f80719eee26aa3e894fd7496f"><td class="memItemLeft" align="right" valign="top"><a id="abbe3be0f80719eee26aa3e894fd7496f"></a>
<a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#abbe3be0f80719eee26aa3e894fd7496f">DSP_UnloadComponent</a> (void)</td></tr>
<tr class="memdesc:abbe3be0f80719eee26aa3e894fd7496f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stops the DSP by unloading the binary. <br /></td></tr>
<tr class="separator:abbe3be0f80719eee26aa3e894fd7496f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c88b0c126dd6839f24d2ea05d2b174f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a1c88b0c126dd6839f24d2ea05d2b174f">DSP_RegisterInterruptEvents</a> (<a class="el" href="types_8h.html#ab6d744c6b5de129f12937e482dc674fb">Handle</a> handle, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> interrupt, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> channel)</td></tr>
<tr class="memdesc:a1c88b0c126dd6839f24d2ea05d2b174f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers an event handle with the DSP through IPC. <a href="dsp_8h.html#a1c88b0c126dd6839f24d2ea05d2b174f">More...</a><br /></td></tr>
<tr class="separator:a1c88b0c126dd6839f24d2ea05d2b174f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86dec214011d3a9d11c7b25a68ca787d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a86dec214011d3a9d11c7b25a68ca787d">DSP_ReadPipeIfPossible</a> (<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> channel, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> peer, void *buffer, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> length, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *length_read)</td></tr>
<tr class="memdesc:a86dec214011d3a9d11c7b25a68ca787d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a pipe if possible. <a href="dsp_8h.html#a86dec214011d3a9d11c7b25a68ca787d">More...</a><br /></td></tr>
<tr class="separator:a86dec214011d3a9d11c7b25a68ca787d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1eab85acd5e8b238695723405517e5a1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a1eab85acd5e8b238695723405517e5a1">DSP_WriteProcessPipe</a> (<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> channel, const void *buffer, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> length)</td></tr>
<tr class="memdesc:a1eab85acd5e8b238695723405517e5a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes to a pipe. <a href="dsp_8h.html#a1eab85acd5e8b238695723405517e5a1">More...</a><br /></td></tr>
<tr class="separator:a1eab85acd5e8b238695723405517e5a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fdd9cc055ccd78a709e725d9c4eda59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a6fdd9cc055ccd78a709e725d9c4eda59">DSP_ConvertProcessAddressFromDspDram</a> (<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> dsp_address, <a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> *arm_address)</td></tr>
<tr class="memdesc:a6fdd9cc055ccd78a709e725d9c4eda59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a DSP memory address to a virtual address usable by the process. <a href="dsp_8h.html#a6fdd9cc055ccd78a709e725d9c4eda59">More...</a><br /></td></tr>
<tr class="separator:a6fdd9cc055ccd78a709e725d9c4eda59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad15502e5eab6c13e41e84a64650a205"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#aad15502e5eab6c13e41e84a64650a205">DSP_RecvData</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> regNo, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *value)</td></tr>
<tr class="memdesc:aad15502e5eab6c13e41e84a64650a205"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a DSP register. <a href="dsp_8h.html#aad15502e5eab6c13e41e84a64650a205">More...</a><br /></td></tr>
<tr class="separator:aad15502e5eab6c13e41e84a64650a205"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c5cfac7298789b5c2153a55a5f72609"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a5c5cfac7298789b5c2153a55a5f72609">DSP_RecvDataIsReady</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> regNo, bool *is_ready)</td></tr>
<tr class="memdesc:a5c5cfac7298789b5c2153a55a5f72609"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if you can read a DSP register. <a href="dsp_8h.html#a5c5cfac7298789b5c2153a55a5f72609">More...</a><br /></td></tr>
<tr class="separator:a5c5cfac7298789b5c2153a55a5f72609"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3212e65ccea959f36726ffbdc632e536"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#a3212e65ccea959f36726ffbdc632e536">DSP_SendData</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> regNo, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> value)</td></tr>
<tr class="memdesc:a3212e65ccea959f36726ffbdc632e536"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes to a DSP register. <a href="dsp_8h.html#a3212e65ccea959f36726ffbdc632e536">More...</a><br /></td></tr>
<tr class="separator:a3212e65ccea959f36726ffbdc632e536"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab21632f764ffae7fb282325ee4f95d50"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dsp_8h.html#ab21632f764ffae7fb282325ee4f95d50">DSP_SendDataIsEmpty</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> regNo, bool *is_empty)</td></tr>
<tr class="memdesc:ab21632f764ffae7fb282325ee4f95d50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if you can write to a DSP register ? <a href="dsp_8h.html#ab21632f764ffae7fb282325ee4f95d50">More...</a><br /></td></tr>
<tr class="separator:ab21632f764ffae7fb282325ee4f95d50"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>DSP Service to access the DSP processor commands (sound) </p>
<p>The DSP has access to the Linear memory region, and to the DSP memory region if allowed in the exheader. </p>
</div><h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ac1a0e08bb66aa1b6bfefd1e586db2149"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1a0e08bb66aa1b6bfefd1e586db2149">&#9670;&nbsp;</a></span>DSP_HookType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="dsp_8h.html#ac1a0e08bb66aa1b6bfefd1e586db2149">DSP_HookType</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>DSP hook types. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac1a0e08bb66aa1b6bfefd1e586db2149a683e68506808fbb4cd057972f5b878be"></a>DSPHOOK_ONSLEEP&#160;</td><td class="fielddoc"><p>DSP is going to sleep. </p>
</td></tr>
<tr><td class="fieldname"><a id="ac1a0e08bb66aa1b6bfefd1e586db2149ac0e23de4d01222d11f9cf3ae5045a633"></a>DSPHOOK_ONWAKEUP&#160;</td><td class="fielddoc"><p>DSP is waking up. </p>
</td></tr>
<tr><td class="fieldname"><a id="ac1a0e08bb66aa1b6bfefd1e586db2149a7e0e9212bb8a48bcfe85782714e51e0b"></a>DSPHOOK_ONCANCEL&#160;</td><td class="fielddoc"><p>DSP was sleeping and the app was cancelled. </p>
</td></tr>
</table>
</div>
</div>
<a id="ab0628a987bd913080b9aaf672737061e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0628a987bd913080b9aaf672737061e">&#9670;&nbsp;</a></span>DSP_InterruptType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="dsp_8h.html#ab0628a987bd913080b9aaf672737061e">DSP_InterruptType</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>DSP interrupt types. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ab0628a987bd913080b9aaf672737061eaac8d6062e2ce93a63bf9098955b04046"></a>DSP_INTERRUPT_PIPE&#160;</td><td class="fielddoc"><p>Pipe interrupt. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="a6fdd9cc055ccd78a709e725d9c4eda59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fdd9cc055ccd78a709e725d9c4eda59">&#9670;&nbsp;</a></span>DSP_ConvertProcessAddressFromDspDram()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_ConvertProcessAddressFromDspDram </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>dsp_address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> *&#160;</td>
<td class="paramname"><em>arm_address</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts a DSP memory address to a virtual address usable by the process. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dsp_address</td><td>Address to convert. </td></tr>
<tr><td class="paramname">arm_address</td><td>Pointer to output the converted address to. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a0668b4d621800adab729d50a616e09d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0668b4d621800adab729d50a616e09d1">&#9670;&nbsp;</a></span>DSP_FlushDataCache()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_FlushDataCache </td>
<td>(</td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flushes the cache. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">address</td><td>Beginning of the memory range to flush, inside the Linear or DSP memory regions </td></tr>
<tr><td class="paramname">size</td><td>Size of the memory range to flush</td></tr>
</table>
</dd>
</dl>
<p>Flushes the cache for the specified memory range and invalidates the cache </p>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="audio_2filters_2source_2main_8c-example.html#a0">audio/filters/source/main.c</a>, and <a class="el" href="audio_2streaming_2source_2main_8c-example.html#a0">audio/streaming/source/main.c</a>.</dd>
</dl>
</div>
</div>
<a id="acd1bc0605288e307586d0e9535e3c8e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd1bc0605288e307586d0e9535e3c8e4">&#9670;&nbsp;</a></span>DSP_GetHeadphoneStatus()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_GetHeadphoneStatus </td>
<td>(</td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>is_inserted</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if a headphone is inserted. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">is_inserted</td><td>Pointer to output the insertion status to. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ad02522bc41ec6161a24b6aee6fd30b17"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad02522bc41ec6161a24b6aee6fd30b17">&#9670;&nbsp;</a></span>DSP_GetSemaphoreHandle()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_GetSemaphoreHandle </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ab6d744c6b5de129f12937e482dc674fb">Handle</a> *&#160;</td>
<td class="paramname"><em>semaphore</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Retrieves the handle of the DSP semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">semaphore</td><td>Pointer to output the semaphore to. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab964b185704e2e92200d69e9cec9efeb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab964b185704e2e92200d69e9cec9efeb">&#9670;&nbsp;</a></span>DSP_InvalidateDataCache()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_InvalidateDataCache </td>
<td>(</td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Invalidates the cache. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">address</td><td>Beginning of the memory range to invalidate, inside the Linear or DSP memory regions </td></tr>
<tr><td class="paramname">size</td><td>Size of the memory range to flush</td></tr>
</table>
</dd>
</dl>
<p>Invalidates the cache for the specified memory range </p>
</div>
</div>
<a id="a5a7a4f0bf256694245ce0c4bb58194b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5a7a4f0bf256694245ce0c4bb58194b9">&#9670;&nbsp;</a></span>DSP_LoadComponent()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_LoadComponent </td>
<td>(</td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>component</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>prog_mask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>data_mask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>is_loaded</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Loads a DSP binary and starts the DSP. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">component</td><td>The program file address in memory </td></tr>
<tr><td class="paramname">size</td><td>The size of the program </td></tr>
<tr><td class="paramname">prog_mask</td><td>DSP memory block related ? Default is 0xff. </td></tr>
<tr><td class="paramname">data_mask</td><td>DSP memory block related ? Default is 0xff. </td></tr>
<tr><td class="paramname">is_loaded</td><td>Indicates if the DSP was succesfully loaded.</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>The binary must be signed (<a href="http://3dbrew.org/wiki/DSP_Binary">http://3dbrew.org/wiki/DSP_Binary</a>) </dd>
<dd>
Seems to be called when the 3ds leaves the Sleep mode </dd></dl>
</div>
</div>
<a id="a86dec214011d3a9d11c7b25a68ca787d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86dec214011d3a9d11c7b25a68ca787d">&#9670;&nbsp;</a></span>DSP_ReadPipeIfPossible()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_ReadPipeIfPossible </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>channel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>peer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *&#160;</td>
<td class="paramname"><em>length_read</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a pipe if possible. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">channel</td><td>unknown. Usually 2 </td></tr>
<tr><td class="paramname">peer</td><td>unknown. Usually 0 </td></tr>
<tr><td class="paramname">buffer</td><td>The buffer that will store the values read from the pipe </td></tr>
<tr><td class="paramname">length</td><td>Length of the buffer </td></tr>
<tr><td class="paramname">length_read</td><td>Number of bytes read by the command </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aad15502e5eab6c13e41e84a64650a205"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad15502e5eab6c13e41e84a64650a205">&#9670;&nbsp;</a></span>DSP_RecvData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_RecvData </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>regNo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a DSP register. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">regNo</td><td>Offset of the hardware register, base address is 0x1EC40000 </td></tr>
<tr><td class="paramname">value</td><td>Pointer to read the register value to. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5c5cfac7298789b5c2153a55a5f72609"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c5cfac7298789b5c2153a55a5f72609">&#9670;&nbsp;</a></span>DSP_RecvDataIsReady()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_RecvDataIsReady </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>regNo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>is_ready</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if you can read a DSP register. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">regNo</td><td>Offset of the hardware register, base address is 0x1EC40000 </td></tr>
<tr><td class="paramname">is_ready</td><td>Pointer to write the ready status to.</td></tr>
</table>
</dd>
</dl>
<dl class="section warning"><dt>Warning</dt><dd>This call might hang if the data is not ready. See <a class="el" href="dsp_8h.html#ab21632f764ffae7fb282325ee4f95d50">DSP_SendDataIsEmpty</a>. </dd></dl>
</div>
</div>
<a id="a1c88b0c126dd6839f24d2ea05d2b174f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c88b0c126dd6839f24d2ea05d2b174f">&#9670;&nbsp;</a></span>DSP_RegisterInterruptEvents()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_RegisterInterruptEvents </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ab6d744c6b5de129f12937e482dc674fb">Handle</a>&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>interrupt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>channel</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Registers an event handle with the DSP through IPC. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Event handle to register. </td></tr>
<tr><td class="paramname">interrupt</td><td>The type of interrupt that will trigger the event. Usual value is DSP_INTERRUPT_PIPE. </td></tr>
<tr><td class="paramname">channel</td><td>The pipe channel. Usual value is 2</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>It is possible that interrupt are inverted </dd></dl>
</div>
</div>
<a id="a3212e65ccea959f36726ffbdc632e536"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3212e65ccea959f36726ffbdc632e536">&#9670;&nbsp;</a></span>DSP_SendData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_SendData </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>regNo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes to a DSP register. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">regNo</td><td>Offset of the hardware register, base address is 0x1EC40000 </td></tr>
<tr><td class="paramname">value</td><td>Value to write.</td></tr>
</table>
</dd>
</dl>
<dl class="section warning"><dt>Warning</dt><dd>This call might hang if the SendData is not empty. See <a class="el" href="dsp_8h.html#ab21632f764ffae7fb282325ee4f95d50">DSP_SendDataIsEmpty</a>. </dd></dl>
</div>
</div>
<a id="ab21632f764ffae7fb282325ee4f95d50"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab21632f764ffae7fb282325ee4f95d50">&#9670;&nbsp;</a></span>DSP_SendDataIsEmpty()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_SendDataIsEmpty </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>regNo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>is_empty</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if you can write to a DSP register ? </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">regNo</td><td>Offset of the hardware register, base address is 0x1EC40000 </td></tr>
<tr><td class="paramname">is_empty</td><td>Pointer to write the empty status to. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a9dffd384a71ffa4a3b4c85fddb0392e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9dffd384a71ffa4a3b4c85fddb0392e6">&#9670;&nbsp;</a></span>DSP_SetSemaphore()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_SetSemaphore </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the DSP hardware semaphore value. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value</td><td>Value to set. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a376cfd4e6487ef063bf2b73e1c028188"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a376cfd4e6487ef063bf2b73e1c028188">&#9670;&nbsp;</a></span>DSP_SetSemaphoreMask()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_SetSemaphoreMask </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>mask</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Masks the DSP hardware semaphore value. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">mask</td><td>Mask to apply. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a1eab85acd5e8b238695723405517e5a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1eab85acd5e8b238695723405517e5a1">&#9670;&nbsp;</a></span>DSP_WriteProcessPipe()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> DSP_WriteProcessPipe </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#160;</td>
<td class="paramname"><em>channel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>&#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>Writes to a pipe. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">channel</td><td>unknown. Usually 2 </td></tr>
<tr><td class="paramname">buffer</td><td>The message to send to the DSP process </td></tr>
<tr><td class="paramname">length</td><td>Length of the message </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a59e493df3a168b5724bff5e88f03250b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a59e493df3a168b5724bff5e88f03250b">&#9670;&nbsp;</a></span>dspExit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void dspExit </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Closes the dsp service. </p>
<dl class="section note"><dt>Note</dt><dd>This will also unload the DSP binary. </dd></dl>
</div>
</div>
<a id="a8fa3c1e0eee06626b86e53c0953165ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8fa3c1e0eee06626b86e53c0953165ba">&#9670;&nbsp;</a></span>dspHook()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void dspHook </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structdspHookCookie.html">dspHookCookie</a> *&#160;</td>
<td class="paramname"><em>cookie</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="dsp_8h.html#a0524d9af6690dcf81759f84e820b60e5">dspHookFn</a>&#160;</td>
<td class="paramname"><em>callback</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets up a DSP status hook. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cookie</td><td>Hook cookie to use. </td></tr>
<tr><td class="paramname">callback</td><td>Function to call when DSP's status changes. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a2722008d6a077f5d444acf4b74a16ba4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2722008d6a077f5d444acf4b74a16ba4">&#9670;&nbsp;</a></span>dspInit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> dspInit </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes the dsp service. </p>
<p>Call this before calling any DSP_* function. </p><dl class="section note"><dt>Note</dt><dd>This will also unload any previously loaded DSP binary. It is done this way since you have to provide your binary when the 3DS leaves sleep mode anyway. </dd></dl>
</div>
</div>
<a id="a867964a36a9985dee363cbf31be9621c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a867964a36a9985dee363cbf31be9621c">&#9670;&nbsp;</a></span>dspUnhook()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void dspUnhook </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structdspHookCookie.html">dspHookCookie</a> *&#160;</td>
<td class="paramname"><em>cookie</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Removes a DSP status hook. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cookie</td><td>Hook cookie to remove. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>