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

248 lines
16 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/qtmc.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="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">qtmc.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>QTM Hardware Check service.
<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="qtmc_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="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a29ca5a1e78aa684045ad2e19a2988268"><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="qtmc_8h.html#a29ca5a1e78aa684045ad2e19a2988268">qtmcInit</a> (void)</td></tr>
<tr class="memdesc:a29ca5a1e78aa684045ad2e19a2988268"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes <code>qtm:c</code>. <a href="qtmc_8h.html#a29ca5a1e78aa684045ad2e19a2988268">More...</a><br /></td></tr>
<tr class="separator:a29ca5a1e78aa684045ad2e19a2988268"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2e225c0777b6a5cb76c2c8527c546fdd"><td class="memItemLeft" align="right" valign="top"><a id="a2e225c0777b6a5cb76c2c8527c546fdd"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qtmc_8h.html#a2e225c0777b6a5cb76c2c8527c546fdd">qtmcExit</a> (void)</td></tr>
<tr class="memdesc:a2e225c0777b6a5cb76c2c8527c546fdd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exits <code>qtm:c</code>. <br /></td></tr>
<tr class="separator:a2e225c0777b6a5cb76c2c8527c546fdd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c7833e1655236f88610243b984b8670"><td class="memItemLeft" align="right" valign="top"><a id="a8c7833e1655236f88610243b984b8670"></a>
<a class="el" href="types_8h.html#ab6d744c6b5de129f12937e482dc674fb">Handle</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qtmc_8h.html#a8c7833e1655236f88610243b984b8670">qtmcGetSessionHandle</a> (void)</td></tr>
<tr class="memdesc:a8c7833e1655236f88610243b984b8670"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to the current <code>qtm:c</code> session handle. <br /></td></tr>
<tr class="separator:a8c7833e1655236f88610243b984b8670"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7adfbb89df9b5d2c35e6359bbb61971"><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="qtmc_8h.html#ae7adfbb89df9b5d2c35e6359bbb61971">QTMC_StartHardwareCheck</a> (void)</td></tr>
<tr class="memdesc:ae7adfbb89df9b5d2c35e6359bbb61971"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts the QTM Hardware Check API. <a href="qtmc_8h.html#ae7adfbb89df9b5d2c35e6359bbb61971">More...</a><br /></td></tr>
<tr class="separator:ae7adfbb89df9b5d2c35e6359bbb61971"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed173ae4518d47a35a302de22345897c"><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="qtmc_8h.html#aed173ae4518d47a35a302de22345897c">QTMC_StopHardwareCheck</a> (void)</td></tr>
<tr class="memdesc:aed173ae4518d47a35a302de22345897c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stops the QTM Hardware Check API. <a href="qtmc_8h.html#aed173ae4518d47a35a302de22345897c">More...</a><br /></td></tr>
<tr class="separator:aed173ae4518d47a35a302de22345897c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad414222f6fab1d200d680c66a9d8149e"><td class="memItemLeft" align="right" valign="top"><a id="ad414222f6fab1d200d680c66a9d8149e"></a>
<a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><b>QTMC_SetBarrierPattern</b> (<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a> pattern)</td></tr>
<tr class="separator:ad414222f6fab1d200d680c66a9d8149e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac70768871e6841667643a561213fabc1"><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="qtmc_8h.html#ac70768871e6841667643a561213fabc1">QTMC_WaitAndCheckExpanderWorking</a> (bool *outWorking)</td></tr>
<tr class="memdesc:ac70768871e6841667643a561213fabc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits for the expander management thread to (re)initalize the TI TCA6416A I2C-&gt;Parallel expander, then checks if that expander is behaving as expected (responds with the port direction config it has been configured with): it checks whether all ports have been configured as outputs. <a href="qtmc_8h.html#ac70768871e6841667643a561213fabc1">More...</a><br /></td></tr>
<tr class="separator:ac70768871e6841667643a561213fabc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a12fd8146b599f1494deb7a1ff1ccf1"><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="qtmc_8h.html#a1a12fd8146b599f1494deb7a1ff1ccf1">QTMC_SetIrLedStatusOverride</a> (bool on)</td></tr>
<tr class="memdesc:a1a12fd8146b599f1494deb7a1ff1ccf1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Temporarily overrides IR LED state. <a href="qtmc_8h.html#a1a12fd8146b599f1494deb7a1ff1ccf1">More...</a><br /></td></tr>
<tr class="separator:a1a12fd8146b599f1494deb7a1ff1ccf1"><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>QTM Hardware Check service. </p>
<p>Allows direct control over the parallax barrier's pattern and polarity phase through the TI TCA6416A I2C-&gt;Parallel expander, as well as control over IR LED state even when camera is used by user.</p>
<p>TI TCA6416A I2C-&gt;Parallel expander is located on bus I2C1 (PA 0x10161000) device ID 0x40.</p>
<p>The top screen parallax barrier was covered by patent US20030234980A1. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a1a12fd8146b599f1494deb7a1ff1ccf1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a12fd8146b599f1494deb7a1ff1ccf1">&#9670;&nbsp;</a></span>QTMC_SetIrLedStatusOverride()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> QTMC_SetIrLedStatusOverride </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>on</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Temporarily overrides IR LED state. </p>
<p>Requires "manual control" from <code>qtm:u</code> to be disabled, and has lower priority than it. Same implementation as <a class="el" href="qtm_8h.html#a784e0f81a6591854ceaaaed71ee6c31d">QTMS_SetIrLedStatusOverride</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">on</td><td>Whether to turn the IR LED on or off. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>0xD82183F8</code> if API not started, <code>0xC8A18005</code> if manual control was enabled or if the operation failed, or <code>0xC8A18009</code> if QTM is unavailable (in particular, QTM is always unavailable on N2DSXL). Otherwise, 0 (success). </dd></dl>
</div>
</div>
<a id="ae7adfbb89df9b5d2c35e6359bbb61971"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7adfbb89df9b5d2c35e6359bbb61971">&#9670;&nbsp;</a></span>QTMC_StartHardwareCheck()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> QTMC_StartHardwareCheck </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Starts the QTM Hardware Check API. </p>
<p>This must be called before using any other <code>qtm:c</code> command, and causes barrier pattern to be overriden by what was last set in QTMC_SetBarrierPattern, <b>even in 2D mode</b>. Also allows IR LED state to be overridden even if user uses the inner camera. </p><dl class="section return"><dt>Returns</dt><dd><code>0xD82183F9</code> if already started, otherwise 0 (success). </dd></dl>
</div>
</div>
<a id="aed173ae4518d47a35a302de22345897c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed173ae4518d47a35a302de22345897c">&#9670;&nbsp;</a></span>QTMC_StopHardwareCheck()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> QTMC_StopHardwareCheck </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Stops the QTM Hardware Check API. </p>
<p>Restore normal barrier and IR LED management behavior. </p><dl class="section return"><dt>Returns</dt><dd><code>0xD82183F8</code> if API not started, otherwise 0 (success). </dd></dl>
</div>
</div>
<a id="ac70768871e6841667643a561213fabc1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac70768871e6841667643a561213fabc1">&#9670;&nbsp;</a></span>QTMC_WaitAndCheckExpanderWorking()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> QTMC_WaitAndCheckExpanderWorking </td>
<td>(</td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>outWorking</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Waits for the expander management thread to (re)initalize the TI TCA6416A I2C-&gt;Parallel expander, then checks if that expander is behaving as expected (responds with the port direction config it has been configured with): it checks whether all ports have been configured as outputs. </p>
<p>On N2DSXL, this function waits forever and never returns.</p>
<p>In detail, the hardware init procedure for the expander is as follows (as done by the expander mgmt. thread):</p><ul>
<li>configure enable expander pin on SoC: set GPIO3.bit11 to OUTPUT, then set to 1</li>
<li>on the expander (I2C1 deviceId 0x40), set all ports to OUTPUT (regId 0x06, 0x07)</li>
<li>on the expander, write 0 (all-transparent mask/2D) to the data registers (regId 0x02, 0x03)</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">outWorking</td><td>Where to write the working status to. If true, expander is present working. If false, the expander is present but is misbehaving. If the function does not return, then expander is missing (e.g. on N2DSXL). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>0xD82183F8</code> if API not started, otherwise 0 (success). </dd></dl>
</div>
</div>
<a id="a29ca5a1e78aa684045ad2e19a2988268"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a29ca5a1e78aa684045ad2e19a2988268">&#9670;&nbsp;</a></span>qtmcInit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> qtmcInit </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 <code>qtm:c</code>. </p>
<p>Only 3 sessions (2 until 9.3.0 sysupdate) for ALL services COMBINED, including the main services, can be open at a time. </p>
</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>