libx52/group__libx52misc.html

318 lines
20 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>libx52: Miscellaneous</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">libx52
&#160;<span id="projectnumber">0.3.0</span>
</div>
<div id="projectbrief">Saitek X52/X52Pro drivers for Linux/Unix</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>
</div><!-- top -->
<!-- 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 class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Miscellaneous</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga93b777d9cea6e733b63c222e6115ccb7"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">libx52_error_code</a> { <br />
&#160;&#160;<a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a8c4729a9500f0b9032d874ca7942b708">LIBX52_SUCCESS</a> = 0
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a22d30938f3a413c16e9ab2e6c183daeb">LIBX52_ERROR_INIT_FAILURE</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7adc972428ef5695848c268f927a0974cc">LIBX52_ERROR_OUT_OF_MEMORY</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a049c93e363d70c5a6cc5a735371e5e3b">LIBX52_ERROR_INVALID_PARAM</a>
, <br />
&#160;&#160;<a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a97af04ffc3130e25c9eb03abaafbbaca">LIBX52_ERROR_NOT_SUPPORTED</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a9e4acff4906865192086c8957047b35f">LIBX52_ERROR_TRY_AGAIN</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ac329401de31cc6c50160c1fafcdc5efa">LIBX52_ERROR_OUT_OF_RANGE</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a85126a0081a32d7c4bd24738996da531">LIBX52_ERROR_USB_FAILURE</a>
, <br />
&#160;&#160;<a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a1dd2726f8ffacda63b180c68bdf1838f">LIBX52_ERROR_IO</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7acc31bdcda400b886e0ed914eb5a1a153">LIBX52_ERROR_PERM</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ad3e9a0e2e18b469ddc7135d73942e29a">LIBX52_ERROR_NO_DEVICE</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a5d77a34c39dfa1757553ecd073913844">LIBX52_ERROR_NOT_FOUND</a>
, <br />
&#160;&#160;<a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7afe5cd825cc2c26c9226025dcb5628f9d">LIBX52_ERROR_BUSY</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a691294d6e5876fd371f9e32686c548d4">LIBX52_ERROR_TIMEOUT</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ac331268731d911dfb16cd28c3d3abc3d">LIBX52_ERROR_OVERFLOW</a>
, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7acf7169c36418a1a43cd8f7bdbdb91325">LIBX52_ERROR_PIPE</a>
, <br />
&#160;&#160;<a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a1601986a5a57898997fde902f994b91d">LIBX52_ERROR_INTERRUPTED</a>
<br />
}</td></tr>
<tr class="memdesc:ga93b777d9cea6e733b63c222e6115ccb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">LibX52 Error codes. <a href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">More...</a><br /></td></tr>
<tr class="separator:ga93b777d9cea6e733b63c222e6115ccb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa32c12111de45ed00c51fd689fdd6699"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699">libx52_feature</a> { <a class="el" href="group__libx52misc.html#ggaa32c12111de45ed00c51fd689fdd6699a2ce41c87908ef0b8ff6d76ccf226dfd0">LIBX52_FEATURE_LED</a>
}</td></tr>
<tr class="memdesc:gaa32c12111de45ed00c51fd689fdd6699"><td class="mdescLeft">&#160;</td><td class="mdescRight">Feature support for libx52. <a href="group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699">More...</a><br /></td></tr>
<tr class="separator:gaa32c12111de45ed00c51fd689fdd6699"><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:ga5d1fdbcab1b1a6cf8a10c206f8e79f73"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__libx52misc.html#ga5d1fdbcab1b1a6cf8a10c206f8e79f73">libx52_update</a> (<a class="el" href="group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131">libx52_device</a> *x52)</td></tr>
<tr class="memdesc:ga5d1fdbcab1b1a6cf8a10c206f8e79f73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update the X52. <a href="group__libx52misc.html#ga5d1fdbcab1b1a6cf8a10c206f8e79f73">More...</a><br /></td></tr>
<tr class="separator:ga5d1fdbcab1b1a6cf8a10c206f8e79f73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac491f4fb8d37f477d83725cb472de030"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__libx52misc.html#gac491f4fb8d37f477d83725cb472de030">libx52_vendor_command</a> (<a class="el" href="group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131">libx52_device</a> *x52, uint16_t index, uint16_t value)</td></tr>
<tr class="memdesc:gac491f4fb8d37f477d83725cb472de030"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a raw vendor control packet. <a href="group__libx52misc.html#gac491f4fb8d37f477d83725cb472de030">More...</a><br /></td></tr>
<tr class="separator:gac491f4fb8d37f477d83725cb472de030"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga504ed71c3e543da1436ea99465289ceb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__libx52misc.html#ga504ed71c3e543da1436ea99465289ceb">libx52_check_feature</a> (<a class="el" href="group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131">libx52_device</a> *x52, <a class="el" href="group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699">libx52_feature</a> feature)</td></tr>
<tr class="memdesc:ga504ed71c3e543da1436ea99465289ceb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the device supports the given feature. <a href="group__libx52misc.html#ga504ed71c3e543da1436ea99465289ceb">More...</a><br /></td></tr>
<tr class="separator:ga504ed71c3e543da1436ea99465289ceb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Miscellaneous functionality </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga93b777d9cea6e733b63c222e6115ccb7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga93b777d9cea6e733b63c222e6115ccb7">&#9670;&nbsp;</a></span>libx52_error_code</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">libx52_error_code</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>LibX52 Error codes. </p>
<p>Error codes returned by libx52 </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a8c4729a9500f0b9032d874ca7942b708"></a>LIBX52_SUCCESS&#160;</td><td class="fielddoc"><p>No error, indicates success </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a22d30938f3a413c16e9ab2e6c183daeb"></a>LIBX52_ERROR_INIT_FAILURE&#160;</td><td class="fielddoc"><p>Initialization failure </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7adc972428ef5695848c268f927a0974cc"></a>LIBX52_ERROR_OUT_OF_MEMORY&#160;</td><td class="fielddoc"><p>Out of memory </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a049c93e363d70c5a6cc5a735371e5e3b"></a>LIBX52_ERROR_INVALID_PARAM&#160;</td><td class="fielddoc"><p>Invalid parameter(s) </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a97af04ffc3130e25c9eb03abaafbbaca"></a>LIBX52_ERROR_NOT_SUPPORTED&#160;</td><td class="fielddoc"><p>Not supported </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a9e4acff4906865192086c8957047b35f"></a>LIBX52_ERROR_TRY_AGAIN&#160;</td><td class="fielddoc"><p>No change necessary, try again </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7ac329401de31cc6c50160c1fafcdc5efa"></a>LIBX52_ERROR_OUT_OF_RANGE&#160;</td><td class="fielddoc"><p>Clock time value or timezone out of range </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a85126a0081a32d7c4bd24738996da531"></a>LIBX52_ERROR_USB_FAILURE&#160;</td><td class="fielddoc"><p>Error encountered during USB interaction </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a1dd2726f8ffacda63b180c68bdf1838f"></a>LIBX52_ERROR_IO&#160;</td><td class="fielddoc"><p>Input/output error </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7acc31bdcda400b886e0ed914eb5a1a153"></a>LIBX52_ERROR_PERM&#160;</td><td class="fielddoc"><p>Insufficient permissions </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7ad3e9a0e2e18b469ddc7135d73942e29a"></a>LIBX52_ERROR_NO_DEVICE&#160;</td><td class="fielddoc"><p>No such device </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a5d77a34c39dfa1757553ecd073913844"></a>LIBX52_ERROR_NOT_FOUND&#160;</td><td class="fielddoc"><p>Entry not found </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7afe5cd825cc2c26c9226025dcb5628f9d"></a>LIBX52_ERROR_BUSY&#160;</td><td class="fielddoc"><p>Busy </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a691294d6e5876fd371f9e32686c548d4"></a>LIBX52_ERROR_TIMEOUT&#160;</td><td class="fielddoc"><p>Timeout </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7ac331268731d911dfb16cd28c3d3abc3d"></a>LIBX52_ERROR_OVERFLOW&#160;</td><td class="fielddoc"><p>Overflow </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7acf7169c36418a1a43cd8f7bdbdb91325"></a>LIBX52_ERROR_PIPE&#160;</td><td class="fielddoc"><p>Pipe error </p>
</td></tr>
<tr><td class="fieldname"><a id="gga93b777d9cea6e733b63c222e6115ccb7a1601986a5a57898997fde902f994b91d"></a>LIBX52_ERROR_INTERRUPTED&#160;</td><td class="fielddoc"><p>Operation interrupted </p>
</td></tr>
</table>
</div>
</div>
<a id="gaa32c12111de45ed00c51fd689fdd6699"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa32c12111de45ed00c51fd689fdd6699">&#9670;&nbsp;</a></span>libx52_feature</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699">libx52_feature</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Feature support for libx52. </p>
<p>Each flag is passed to <a class="el" href="group__libx52misc.html#ga504ed71c3e543da1436ea99465289ceb">libx52_check_feature</a> to determine if the connected device has the given feature. This list of features is only limited to those which differ between the supported devices. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaa32c12111de45ed00c51fd689fdd6699a2ce41c87908ef0b8ff6d76ccf226dfd0"></a>LIBX52_FEATURE_LED&#160;</td><td class="fielddoc"><p>Individual LED control </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga504ed71c3e543da1436ea99465289ceb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga504ed71c3e543da1436ea99465289ceb">&#9670;&nbsp;</a></span>libx52_check_feature()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int libx52_check_feature </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131">libx52_device</a> *&#160;</td>
<td class="paramname"><em>x52</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699">libx52_feature</a>&#160;</td>
<td class="paramname"><em>feature</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the device supports the given feature. </p>
<p>This will check if the connected device supports the requested feature. It will return <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a8c4729a9500f0b9032d874ca7942b708">LIBX52_SUCCESS</a> if it does support it, <a class="el" href="group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a97af04ffc3130e25c9eb03abaafbbaca">LIBX52_ERROR_NOT_SUPPORTED</a> if it does not, and another <a class="el" href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">libx52_error_code</a> on errors.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">x52</td><td>Pointer to the device context </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">feature</td><td>Feature identifier (<a class="el" href="group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699">libx52_feature</a>)</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">libx52_error_code</a> indicating status </dd></dl>
</div>
</div>
<a id="ga5d1fdbcab1b1a6cf8a10c206f8e79f73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5d1fdbcab1b1a6cf8a10c206f8e79f73">&#9670;&nbsp;</a></span>libx52_update()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int libx52_update </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131">libx52_device</a> *&#160;</td>
<td class="paramname"><em>x52</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Update the X52. </p>
<p>All the libx52_set functions only set the internal data structures, but do not actually write anything to the joystick. This function writes the saved data to the joystick and updates the internal data structures as necessary.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">x52</td><td>Pointer to the device context</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">libx52_error_code</a> indicating status </dd></dl>
</div>
</div>
<a id="gac491f4fb8d37f477d83725cb472de030"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac491f4fb8d37f477d83725cb472de030">&#9670;&nbsp;</a></span>libx52_vendor_command()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int libx52_vendor_command </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131">libx52_device</a> *&#160;</td>
<td class="paramname"><em>x52</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#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>Write a raw vendor control packet. </p>
<p>This function sends the control packet immediately to the hardware, without having to wait for a call to <a class="el" href="group__libx52misc.html#ga5d1fdbcab1b1a6cf8a10c206f8e79f73">libx52_update</a>.</p>
<p>This can be used to debug issues seen on the hardware, however, it is <b>NOT</b> recommended for use by end users, as it can potentially damage the hardware.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">x52</td><td>Pointer to the device context </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>wIndex in the USB packet </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>wValue in the USB packet</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7">libx52_error_code</a> indicating status </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>