Files
lighthub/docs/html/utils_8h.html
2022-01-06 02:01:16 +03:00

992 lines
43 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.8.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>LightHub: utils.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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.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="projectlogo"><img alt="Logo" src="lh.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">LightHub
&#160;<span id="projectnumber">v4.0.0</span>
</div>
<div id="projectbrief">Smarthome controller firmware</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<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');
/* @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 -->
<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">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('utils_8h.html',''); initResizable(); });
/* @license-end */
</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)">
</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="#define-members">Macros</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">utils.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &lt;Arduino.h&gt;</code><br />
<code>#include &lt;IPAddress.h&gt;</code><br />
<code>#include &quot;aJSON.h&quot;</code><br />
<code>#include &quot;<a class="el" href="options_8h_source.html">options.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="item_8h_source.html">item.h</a>&quot;</code><br />
<code>#include &quot;Streaming.h&quot;</code><br />
</div>
<p><a href="utils_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="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a2a280bfe12bc6e732a7c4d3d62443a14"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2a280bfe12bc6e732a7c4d3d62443a14">Q</a>(x)&#160;&#160;&#160;#x</td></tr>
<tr class="separator:a2a280bfe12bc6e732a7c4d3d62443a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2117b58e19182dff91ad3558e650541d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2117b58e19182dff91ad3558e650541d">QUOTE</a>(x)&#160;&#160;&#160;<a class="el" href="utils_8h.html#a2a280bfe12bc6e732a7c4d3d62443a14">Q</a>(x)</td></tr>
<tr class="separator:a2117b58e19182dff91ad3558e650541d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad15c9a08925b1c0365fb1bd9ac826670"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ad15c9a08925b1c0365fb1bd9ac826670">VALUE_TO_STRING</a>(x)&#160;&#160;&#160;#x</td></tr>
<tr class="separator:ad15c9a08925b1c0365fb1bd9ac826670"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad705dc78222473228fa826e42eca95f1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ad705dc78222473228fa826e42eca95f1">VALUE</a>(x)&#160;&#160;&#160;<a class="el" href="utils_8h.html#ad15c9a08925b1c0365fb1bd9ac826670">VALUE_TO_STRING</a>(x)</td></tr>
<tr class="separator:ad705dc78222473228fa826e42eca95f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a89328d94ddd2cdd4b39db22da01f79"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a9a89328d94ddd2cdd4b39db22da01f79">VAR_NAME_VALUE</a>(var)&#160;&#160;&#160;#var &quot;=&quot; <a class="el" href="utils_8h.html#ad705dc78222473228fa826e42eca95f1">VALUE</a>(var)</td></tr>
<tr class="separator:a9a89328d94ddd2cdd4b39db22da01f79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af725dabbb9d86c575157b3bbc24d6d55"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af725dabbb9d86c575157b3bbc24d6d55">serialParamType</a>&#160;&#160;&#160;uint16_t</td></tr>
<tr class="separator:af725dabbb9d86c575157b3bbc24d6d55"><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:a2598bacb04e8f77e8b41cee61ef359fc"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fc">topicType</a> { <a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fca3fa22e2ae357981afc104dc67d764c85">T_DEV</a> = 1,
<a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fca26fa2da957fe6c55420ed0e1a7dd7a15">T_BCST</a> = 2,
<a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fca27b2310c69298d62ed18dd416476a44d">T_OUT</a> = 3
}</td></tr>
<tr class="separator:a2598bacb04e8f77e8b41cee61ef359fc"><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:ab5fb614b925280fc7c8d0e5314dd3b7a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ab5fb614b925280fc7c8d0e5314dd3b7a">PrintBytes</a> (uint8_t *addr, uint8_t count, bool newline)</td></tr>
<tr class="separator:ab5fb614b925280fc7c8d0e5314dd3b7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85a33f14fc0eefef02be4c6bacf5c8f0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a85a33f14fc0eefef02be4c6bacf5c8f0">SetBytes</a> (uint8_t *addr, uint8_t count, char *out)</td></tr>
<tr class="separator:a85a33f14fc0eefef02be4c6bacf5c8f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4dd6705cb24a3eab32d9abc8393844b3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a4dd6705cb24a3eab32d9abc8393844b3">SetAddr</a> (char *out, uint8_t *addr)</td></tr>
<tr class="separator:a4dd6705cb24a3eab32d9abc8393844b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a215fd13be95cb1c21fe50b3693b85557"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a215fd13be95cb1c21fe50b3693b85557">HEX2DEC</a> (char i)</td></tr>
<tr class="separator:a215fd13be95cb1c21fe50b3693b85557"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6037cfc7913c0856e93dbf8fc2133aac"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a6037cfc7913c0856e93dbf8fc2133aac">getInt</a> (char **chan)</td></tr>
<tr class="separator:a6037cfc7913c0856e93dbf8fc2133aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af97ce3611cbf9e3f12566a1d2a6c965b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classitem_cmd.html">itemCmd</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af97ce3611cbf9e3f12566a1d2a6c965b">getNumber</a> (char **chan)</td></tr>
<tr class="separator:af97ce3611cbf9e3f12566a1d2a6c965b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c97971726a07a7d14fb701f4a4638f0"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3c97971726a07a7d14fb701f4a4638f0">freeRam</a> ()</td></tr>
<tr class="separator:a3c97971726a07a7d14fb701f4a4638f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1938abf1ef99f35bd2578e3db1bcf7b8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a1938abf1ef99f35bd2578e3db1bcf7b8">parseBytes</a> (const char *str, char separator, byte *bytes, int maxBytes, int base)</td></tr>
<tr class="separator:a1938abf1ef99f35bd2578e3db1bcf7b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadf1050416e46077ad59157173438dad"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aadf1050416e46077ad59157173438dad">log</a> (const char *str,...)</td></tr>
<tr class="separator:aadf1050416e46077ad59157173438dad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c16341dd45c4e557f951818d8d09810"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a6c16341dd45c4e557f951818d8d09810">printFloatValueToStr</a> (float value, char *valstr)</td></tr>
<tr class="separator:a6c16341dd45c4e557f951818d8d09810"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1380fbc9c2170180770dd1bdcc5ac647"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a1380fbc9c2170180770dd1bdcc5ac647">ReadUniqueID</a> (uint32_t *pdwUniqueID)</td></tr>
<tr class="separator:a1380fbc9c2170180770dd1bdcc5ac647"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad620f6746f5f0d6b62a801dd26c8ed53"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ad620f6746f5f0d6b62a801dd26c8ed53">_inet_aton</a> (const char *aIPAddrString, IPAddress &amp;aResult)</td></tr>
<tr class="separator:ad620f6746f5f0d6b62a801dd26c8ed53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62c963f0eca4136cc72f0f882c13e7af"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a62c963f0eca4136cc72f0f882c13e7af">_inet_ntoa_r</a> (IPAddress addr, char *buf, int buflen)</td></tr>
<tr class="separator:a62c963f0eca4136cc72f0f882c13e7af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0df006a5ae8d0d730134afdaf1c64dd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af0df006a5ae8d0d730134afdaf1c64dd">printIPAddress</a> (IPAddress ipAddress)</td></tr>
<tr class="separator:af0df006a5ae8d0d730134afdaf1c64dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0045f41bb76629662ed1ee7952f856e"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aa0045f41bb76629662ed1ee7952f856e">setTopic</a> (char *buf, int8_t buflen, <a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fc">topicType</a> tt, const char *suffix=NULL)</td></tr>
<tr class="separator:aa0045f41bb76629662ed1ee7952f856e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb183532261be04b86e9e535010db6a9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#afb183532261be04b86e9e535010db6a9">printUlongValueToStr</a> (char *valstr, unsigned long value)</td></tr>
<tr class="separator:afb183532261be04b86e9e535010db6a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af585ed9b15b9980b72fbec6d9c9dba67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af585ed9b15b9980b72fbec6d9c9dba67">scan_i2c_bus</a> ()</td></tr>
<tr class="separator:af585ed9b15b9980b72fbec6d9c9dba67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7facb8f2c84692ab65024785eb64b541"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a7facb8f2c84692ab65024785eb64b541">softRebootFunc</a> ()</td></tr>
<tr class="separator:a7facb8f2c84692ab65024785eb64b541"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1da7fe353a40e62dd3a8a0761d12b22"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ac1da7fe353a40e62dd3a8a0761d12b22">isTimeOver</a> (uint32_t timestamp, uint32_t currTime, uint32_t time, uint32_t modulo=0)</td></tr>
<tr class="separator:ac1da7fe353a40e62dd3a8a0761d12b22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9843f57c765644bc93e675922da82beb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a9843f57c765644bc93e675922da82beb">executeCommand</a> (aJsonObject *cmd, int8_t toggle=-1)</td></tr>
<tr class="separator:a9843f57c765644bc93e675922da82beb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb40f2502eb474ec60da7058025ce541"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#abb40f2502eb474ec60da7058025ce541">executeCommand</a> (aJsonObject *cmd, int8_t toggle, <a class="el" href="classitem_cmd.html">itemCmd</a> _itemCmd, aJsonObject *defaultItem=NULL, aJsonObject *defaultEmit=NULL)</td></tr>
<tr class="separator:abb40f2502eb474ec60da7058025ce541"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace8fa23ff29c3feb89c5d500ef87b914"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classitem_cmd.html">itemCmd</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ace8fa23ff29c3feb89c5d500ef87b914">mapInt</a> (int32_t arg, aJsonObject *map)</td></tr>
<tr class="separator:ace8fa23ff29c3feb89c5d500ef87b914"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b226ab4fb09687005316a874e2627d0"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2b226ab4fb09687005316a874e2627d0">millisNZ</a> (uint8_t shift=0)</td></tr>
<tr class="separator:a2b226ab4fb09687005316a874e2627d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a7f700c0c11e53e4fde708443be96ff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="utils_8h.html#af725dabbb9d86c575157b3bbc24d6d55">serialParamType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a7a7f700c0c11e53e4fde708443be96ff">str2SerialParam</a> (char *str)</td></tr>
<tr class="separator:a7a7f700c0c11e53e4fde708443be96ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19f2c10a5d113a7b031d5bb3387ea27c"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a19f2c10a5d113a7b031d5bb3387ea27c">toString</a> (const IPAddress &amp;address)</td></tr>
<tr class="separator:a19f2c10a5d113a7b031d5bb3387ea27c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a2a280bfe12bc6e732a7c4d3d62443a14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a280bfe12bc6e732a7c4d3d62443a14">&#9670;&nbsp;</a></span>Q</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define Q</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">x</td><td>)</td>
<td>&#160;&#160;&#160;#x</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a2117b58e19182dff91ad3558e650541d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2117b58e19182dff91ad3558e650541d">&#9670;&nbsp;</a></span>QUOTE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define QUOTE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">x</td><td>)</td>
<td>&#160;&#160;&#160;<a class="el" href="utils_8h.html#a2a280bfe12bc6e732a7c4d3d62443a14">Q</a>(x)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af725dabbb9d86c575157b3bbc24d6d55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af725dabbb9d86c575157b3bbc24d6d55">&#9670;&nbsp;</a></span>serialParamType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define serialParamType&#160;&#160;&#160;uint16_t</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ad705dc78222473228fa826e42eca95f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad705dc78222473228fa826e42eca95f1">&#9670;&nbsp;</a></span>VALUE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define VALUE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">x</td><td>)</td>
<td>&#160;&#160;&#160;<a class="el" href="utils_8h.html#ad15c9a08925b1c0365fb1bd9ac826670">VALUE_TO_STRING</a>(x)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ad15c9a08925b1c0365fb1bd9ac826670"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad15c9a08925b1c0365fb1bd9ac826670">&#9670;&nbsp;</a></span>VALUE_TO_STRING</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define VALUE_TO_STRING</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">x</td><td>)</td>
<td>&#160;&#160;&#160;#x</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a9a89328d94ddd2cdd4b39db22da01f79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a89328d94ddd2cdd4b39db22da01f79">&#9670;&nbsp;</a></span>VAR_NAME_VALUE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define VAR_NAME_VALUE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">var</td><td>)</td>
<td>&#160;&#160;&#160;#var &quot;=&quot; <a class="el" href="utils_8h.html#ad705dc78222473228fa826e42eca95f1">VALUE</a>(var)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="a2598bacb04e8f77e8b41cee61ef359fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2598bacb04e8f77e8b41cee61ef359fc">&#9670;&nbsp;</a></span>topicType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fc">topicType</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a2598bacb04e8f77e8b41cee61ef359fca3fa22e2ae357981afc104dc67d764c85"></a>T_DEV&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2598bacb04e8f77e8b41cee61ef359fca26fa2da957fe6c55420ed0e1a7dd7a15"></a>T_BCST&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a2598bacb04e8f77e8b41cee61ef359fca27b2310c69298d62ed18dd416476a44d"></a>T_OUT&#160;</td><td class="fielddoc"></td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ad620f6746f5f0d6b62a801dd26c8ed53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad620f6746f5f0d6b62a801dd26c8ed53">&#9670;&nbsp;</a></span>_inet_aton()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int _inet_aton </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>aIPAddrString</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IPAddress &amp;&#160;</td>
<td class="paramname"><em>aResult</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a62c963f0eca4136cc72f0f882c13e7af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62c963f0eca4136cc72f0f882c13e7af">&#9670;&nbsp;</a></span>_inet_ntoa_r()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* _inet_ntoa_r </td>
<td>(</td>
<td class="paramtype">IPAddress&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>buflen</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>ip address in network order to convert </td></tr>
<tr><td class="paramname">buf</td><td>target buffer where the string is stored </td></tr>
<tr><td class="paramname">buflen</td><td>length of buf </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>either pointer to buf which now holds the ASCII representation of addr or NULL if buf was too small </dd></dl>
</div>
</div>
<a id="abb40f2502eb474ec60da7058025ce541"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb40f2502eb474ec60da7058025ce541">&#9670;&nbsp;</a></span>executeCommand() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool executeCommand </td>
<td>(</td>
<td class="paramtype">aJsonObject *&#160;</td>
<td class="paramname"><em>cmd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int8_t&#160;</td>
<td class="paramname"><em>toggle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classitem_cmd.html">itemCmd</a>&#160;</td>
<td class="paramname"><em>_itemCmd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">aJsonObject *&#160;</td>
<td class="paramname"><em>defaultItem</em> = <code>NULL</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">aJsonObject *&#160;</td>
<td class="paramname"><em>defaultEmit</em> = <code>NULL</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a9843f57c765644bc93e675922da82beb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9843f57c765644bc93e675922da82beb">&#9670;&nbsp;</a></span>executeCommand() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool executeCommand </td>
<td>(</td>
<td class="paramtype">aJsonObject *&#160;</td>
<td class="paramname"><em>cmd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int8_t&#160;</td>
<td class="paramname"><em>toggle</em> = <code>-1</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a3c97971726a07a7d14fb701f4a4638f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c97971726a07a7d14fb701f4a4638f0">&#9670;&nbsp;</a></span>freeRam()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned long freeRam </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a6037cfc7913c0856e93dbf8fc2133aac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6037cfc7913c0856e93dbf8fc2133aac">&#9670;&nbsp;</a></span>getInt()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int getInt </td>
<td>(</td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>chan</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af97ce3611cbf9e3f12566a1d2a6c965b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af97ce3611cbf9e3f12566a1d2a6c965b">&#9670;&nbsp;</a></span>getNumber()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classitem_cmd.html">itemCmd</a> getNumber </td>
<td>(</td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>chan</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a215fd13be95cb1c21fe50b3693b85557"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a215fd13be95cb1c21fe50b3693b85557">&#9670;&nbsp;</a></span>HEX2DEC()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t HEX2DEC </td>
<td>(</td>
<td class="paramtype">char&#160;</td>
<td class="paramname"><em>i</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ac1da7fe353a40e62dd3a8a0761d12b22"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1da7fe353a40e62dd3a8a0761d12b22">&#9670;&nbsp;</a></span>isTimeOver()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool isTimeOver </td>
<td>(</td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>timestamp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>currTime</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>time</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>modulo</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aadf1050416e46077ad59157173438dad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aadf1050416e46077ad59157173438dad">&#9670;&nbsp;</a></span>log()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int log </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ace8fa23ff29c3feb89c5d500ef87b914"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace8fa23ff29c3feb89c5d500ef87b914">&#9670;&nbsp;</a></span>mapInt()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classitem_cmd.html">itemCmd</a> mapInt </td>
<td>(</td>
<td class="paramtype">int32_t&#160;</td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">aJsonObject *&#160;</td>
<td class="paramname"><em>map</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a2b226ab4fb09687005316a874e2627d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b226ab4fb09687005316a874e2627d0">&#9670;&nbsp;</a></span>millisNZ()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned long millisNZ </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>shift</em> = <code>0</code></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a1938abf1ef99f35bd2578e3db1bcf7b8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1938abf1ef99f35bd2578e3db1bcf7b8">&#9670;&nbsp;</a></span>parseBytes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void parseBytes </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char&#160;</td>
<td class="paramname"><em>separator</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">byte *&#160;</td>
<td class="paramname"><em>bytes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>maxBytes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>base</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ab5fb614b925280fc7c8d0e5314dd3b7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5fb614b925280fc7c8d0e5314dd3b7a">&#9670;&nbsp;</a></span>PrintBytes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void PrintBytes </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>count</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>newline</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a6c16341dd45c4e557f951818d8d09810"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c16341dd45c4e557f951818d8d09810">&#9670;&nbsp;</a></span>printFloatValueToStr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void printFloatValueToStr </td>
<td>(</td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>valstr</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af0df006a5ae8d0d730134afdaf1c64dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0df006a5ae8d0d730134afdaf1c64dd">&#9670;&nbsp;</a></span>printIPAddress()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void printIPAddress </td>
<td>(</td>
<td class="paramtype">IPAddress&#160;</td>
<td class="paramname"><em>ipAddress</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="afb183532261be04b86e9e535010db6a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb183532261be04b86e9e535010db6a9">&#9670;&nbsp;</a></span>printUlongValueToStr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void printUlongValueToStr </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>valstr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned long&#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">
</div>
</div>
<a id="a1380fbc9c2170180770dd1bdcc5ac647"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1380fbc9c2170180770dd1bdcc5ac647">&#9670;&nbsp;</a></span>ReadUniqueID()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ReadUniqueID </td>
<td>(</td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>pdwUniqueID</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af585ed9b15b9980b72fbec6d9c9dba67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af585ed9b15b9980b72fbec6d9c9dba67">&#9670;&nbsp;</a></span>scan_i2c_bus()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void scan_i2c_bus </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a4dd6705cb24a3eab32d9abc8393844b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4dd6705cb24a3eab32d9abc8393844b3">&#9670;&nbsp;</a></span>SetAddr()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SetAddr </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>addr</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a85a33f14fc0eefef02be4c6bacf5c8f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85a33f14fc0eefef02be4c6bacf5c8f0">&#9670;&nbsp;</a></span>SetBytes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SetBytes </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>count</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aa0045f41bb76629662ed1ee7952f856e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0045f41bb76629662ed1ee7952f856e">&#9670;&nbsp;</a></span>setTopic()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* setTopic </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int8_t&#160;</td>
<td class="paramname"><em>buflen</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="utils_8h.html#a2598bacb04e8f77e8b41cee61ef359fc">topicType</a>&#160;</td>
<td class="paramname"><em>tt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>suffix</em> = <code>NULL</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7facb8f2c84692ab65024785eb64b541"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7facb8f2c84692ab65024785eb64b541">&#9670;&nbsp;</a></span>softRebootFunc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void softRebootFunc </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7a7f700c0c11e53e4fde708443be96ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a7f700c0c11e53e4fde708443be96ff">&#9670;&nbsp;</a></span>str2SerialParam()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="utils_8h.html#af725dabbb9d86c575157b3bbc24d6d55">serialParamType</a> str2SerialParam </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>str</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a19f2c10a5d113a7b031d5bb3387ea27c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a19f2c10a5d113a7b031d5bb3387ea27c">&#9670;&nbsp;</a></span>toString()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">String toString </td>
<td>(</td>
<td class="paramtype">const IPAddress &amp;&#160;</td>
<td class="paramname"><em>address</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</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="navelem"><a class="el" href="utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20 </li>
</ul>
</div>
</body>
</html>