mm-iot-sdk/framework/doc/html/group__MMUTILS.html
Morse Micro 4f4eb7fc7a Morse Micro MM-IoT-SDK release 2.9.7
This commit introduces version 2.9.7 of the Morse Micro MM-IoT-SDK
for ARM microcontroller base platforms.
2025-10-04 02:04:28 +10:00

508 lines
27 KiB
HTML

<!-- HTML header for doxygen 1.8.17-->
<!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.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Morse Micro IoT SDK: Morse Micro Utilities</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" />
<link href="style.css" rel="stylesheet" type="text/css"/>
<link rel="shortcut icon" href="favicon.svg" />
</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="logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Morse Micro IoT SDK
&#160;<span id="projectnumber">2.9.7</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('group__MMUTILS.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="#groups">Modules</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">Morse Micro Utilities</div></div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p >Utility macros and functions to improve quality of life. </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__SLIP"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__SLIP.html">Serial Line Internet Protocol (SLIP) implementation.</a></td></tr>
<tr class="memdesc:group__SLIP"><td class="mdescLeft">&#160;</td><td class="mdescRight">SLIP was originally designed as an encapsulation for IP over serial ports, but can be used for framing of any packet-based data for transmission over a serial port. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__MMUTILS__WLAN"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS__WLAN.html">WLAN Utilities</a></td></tr>
<tr class="memdesc:group__MMUTILS__WLAN"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility macros and functions relating to WLAN. <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 id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga784ce5fcd4e6f4d10eab385b8af7997c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga784ce5fcd4e6f4d10eab385b8af7997c">MM_MIN</a>(_x, _y)&#160;&#160;&#160;(((_x) &lt; (_y)) ? (_x) : (_y))</td></tr>
<tr class="memdesc:ga784ce5fcd4e6f4d10eab385b8af7997c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum of 2 values. <a href="group__MMUTILS.html#ga784ce5fcd4e6f4d10eab385b8af7997c">More...</a><br /></td></tr>
<tr class="separator:ga784ce5fcd4e6f4d10eab385b8af7997c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga794e1b1e074758195cf4baad3674f33b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga794e1b1e074758195cf4baad3674f33b">MM_MAX</a>(_x, _y)&#160;&#160;&#160;(((_x) &gt; (_y)) ? (_x) : (_y))</td></tr>
<tr class="memdesc:ga794e1b1e074758195cf4baad3674f33b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum of 2 values. <a href="group__MMUTILS.html#ga794e1b1e074758195cf4baad3674f33b">More...</a><br /></td></tr>
<tr class="separator:ga794e1b1e074758195cf4baad3674f33b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga695315db4f1a49abe1178b6869356265"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga695315db4f1a49abe1178b6869356265">MM_FAST_ROUND_UP</a>(x, m)&#160;&#160;&#160;((((x) - 1) | ((m) - 1)) + 1)</td></tr>
<tr class="memdesc:ga695315db4f1a49abe1178b6869356265"><td class="mdescLeft">&#160;</td><td class="mdescRight">Round <code>x</code> up to the next multiple of <code>m</code> (where <code>m</code> is a power of 2). <a href="group__MMUTILS.html#ga695315db4f1a49abe1178b6869356265">More...</a><br /></td></tr>
<tr class="separator:ga695315db4f1a49abe1178b6869356265"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0157597bdd038d83fbb0f2f488e6e4ee"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga0157597bdd038d83fbb0f2f488e6e4ee">MM_UNUSED</a>(_x)&#160;&#160;&#160;(void)(_x)</td></tr>
<tr class="memdesc:ga0157597bdd038d83fbb0f2f488e6e4ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Casts the given expression to void to avoid "unused" warnings from the compiler. <a href="group__MMUTILS.html#ga0157597bdd038d83fbb0f2f488e6e4ee">More...</a><br /></td></tr>
<tr class="separator:ga0157597bdd038d83fbb0f2f488e6e4ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabfc75e5c38f3054e1643a04b81e3b54e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#gabfc75e5c38f3054e1643a04b81e3b54e">MM_PACKED</a>&#160;&#160;&#160;__attribute__((packed))</td></tr>
<tr class="memdesc:gabfc75e5c38f3054e1643a04b81e3b54e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tells the compiler to pack the structure. <a href="group__MMUTILS.html#gabfc75e5c38f3054e1643a04b81e3b54e">More...</a><br /></td></tr>
<tr class="separator:gabfc75e5c38f3054e1643a04b81e3b54e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga08fb889acc204f09b95c4d533f180688"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga08fb889acc204f09b95c4d533f180688">MM_WEAK</a>&#160;&#160;&#160;__attribute__((weak))</td></tr>
<tr class="memdesc:ga08fb889acc204f09b95c4d533f180688"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to declare a weak symbol. <a href="group__MMUTILS.html#ga08fb889acc204f09b95c4d533f180688">More...</a><br /></td></tr>
<tr class="separator:ga08fb889acc204f09b95c4d533f180688"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6b1d6a408a5d817670408172c09c516d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga6b1d6a408a5d817670408172c09c516d">MM_FALLTHROUGH</a>&#160;&#160;&#160;__attribute__((fallthrough))</td></tr>
<tr class="memdesc:ga6b1d6a408a5d817670408172c09c516d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allows a case to fallthrough to the next case in a switch case. <a href="group__MMUTILS.html#ga6b1d6a408a5d817670408172c09c516d">More...</a><br /></td></tr>
<tr class="separator:ga6b1d6a408a5d817670408172c09c516d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga88c3ad1ebe87a29a9bb932305d4d737d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga88c3ad1ebe87a29a9bb932305d4d737d">MM_STATIC_ASSERT</a>(_expression, _message)&#160;&#160;&#160;_Static_assert((_expression), _message)</td></tr>
<tr class="memdesc:ga88c3ad1ebe87a29a9bb932305d4d737d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assertion check that is evaluated at compile time. <a href="group__MMUTILS.html#ga88c3ad1ebe87a29a9bb932305d4d737d">More...</a><br /></td></tr>
<tr class="separator:ga88c3ad1ebe87a29a9bb932305d4d737d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae620c8867523894d4dae229f5e6ec0d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#gae620c8867523894d4dae229f5e6ec0d2">MM_ARRAY_COUNT</a>(_a)&#160;&#160;&#160;(sizeof(_a) / sizeof((_a)[0]))</td></tr>
<tr class="memdesc:gae620c8867523894d4dae229f5e6ec0d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of elements in the given array. <a href="group__MMUTILS.html#gae620c8867523894d4dae229f5e6ec0d2">More...</a><br /></td></tr>
<tr class="separator:gae620c8867523894d4dae229f5e6ec0d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2f02ac1fabb35f58dd519761ce0be31b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga2f02ac1fabb35f58dd519761ce0be31b">MM_MEMBER_SIZE</a>(_type, _member)&#160;&#160;&#160;(sizeof(((_type *)0)-&gt;_member))</td></tr>
<tr class="memdesc:ga2f02ac1fabb35f58dd519761ce0be31b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the size of a structs member. <a href="group__MMUTILS.html#ga2f02ac1fabb35f58dd519761ce0be31b">More...</a><br /></td></tr>
<tr class="separator:ga2f02ac1fabb35f58dd519761ce0be31b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2b4b5b12d04302a9ada0dee5a0342051"><td class="memItemLeft" align="right" valign="top">static char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MMUTILS.html#ga2b4b5b12d04302a9ada0dee5a0342051">mm_nibble_to_hex_char</a> (uint8_t nibble)</td></tr>
<tr class="memdesc:ga2b4b5b12d04302a9ada0dee5a0342051"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert the least significant 4 bits of the given argument to a character representing their hexadecimal value. <a href="group__MMUTILS.html#ga2b4b5b12d04302a9ada0dee5a0342051">More...</a><br /></td></tr>
<tr class="separator:ga2b4b5b12d04302a9ada0dee5a0342051"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="gae620c8867523894d4dae229f5e6ec0d2" name="gae620c8867523894d4dae229f5e6ec0d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae620c8867523894d4dae229f5e6ec0d2">&#9670;&nbsp;</a></span>MM_ARRAY_COUNT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_ARRAY_COUNT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_a</td><td>)</td>
<td>&#160;&#160;&#160;(sizeof(_a) / sizeof((_a)[0]))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the number of elements in the given array. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_a</td><td>The array to get the element count for. Note that this must be an <em>array</em> and not a pointer. Beware that array-type function arguments are actually treated as pointers by the compiler. Must not be NULL.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the count of elements in the given array. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00110">110</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga6b1d6a408a5d817670408172c09c516d" name="ga6b1d6a408a5d817670408172c09c516d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6b1d6a408a5d817670408172c09c516d">&#9670;&nbsp;</a></span>MM_FALLTHROUGH</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_FALLTHROUGH&#160;&#160;&#160;__attribute__((fallthrough))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Allows a case to fallthrough to the next case in a switch case. </p>
<p ><br />
</p>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00083">83</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga695315db4f1a49abe1178b6869356265" name="ga695315db4f1a49abe1178b6869356265"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga695315db4f1a49abe1178b6869356265">&#9670;&nbsp;</a></span>MM_FAST_ROUND_UP</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_FAST_ROUND_UP</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">x, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">m&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;((((x) - 1) | ((m) - 1)) + 1)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Round <code>x</code> up to the next multiple of <code>m</code> (where <code>m</code> is a power of 2). </p>
<dl class="section warning"><dt>Warning</dt><dd><code>m</code> must be a power of 2. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00065">65</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga794e1b1e074758195cf4baad3674f33b" name="ga794e1b1e074758195cf4baad3674f33b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga794e1b1e074758195cf4baad3674f33b">&#9670;&nbsp;</a></span>MM_MAX</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_MAX</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_x, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_y&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;(((_x) &gt; (_y)) ? (_x) : (_y))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the maximum of 2 values. </p>
<p >Note that this macro is not ideal and should be used with caution. Caveats include:</p><ul>
<li>The two parameters may be evaluated more than once, so should be constant values that do not have side effects. For example, do NOT do <code>MM_MAX(a++, b)</code>.</li>
<li>There are no explicit constraints on types, so be careful of comparing different integer types, etc.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_x</td><td>The first value to compare. </td></tr>
<tr><td class="paramname">_y</td><td>The second value to compare.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the maximum of <code>_x</code> and <code>_y</code>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00057">57</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga2f02ac1fabb35f58dd519761ce0be31b" name="ga2f02ac1fabb35f58dd519761ce0be31b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2f02ac1fabb35f58dd519761ce0be31b">&#9670;&nbsp;</a></span>MM_MEMBER_SIZE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_MEMBER_SIZE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_type, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_member&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;(sizeof(((_type *)0)-&gt;_member))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the size of a structs member. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_type</td><td>The struct type </td></tr>
<tr><td class="paramname">_member</td><td>The name of the member to get the size of.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the size of the struct member. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00120">120</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga784ce5fcd4e6f4d10eab385b8af7997c" name="ga784ce5fcd4e6f4d10eab385b8af7997c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga784ce5fcd4e6f4d10eab385b8af7997c">&#9670;&nbsp;</a></span>MM_MIN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_MIN</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_x, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_y&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;(((_x) &lt; (_y)) ? (_x) : (_y))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the minimum of 2 values. </p>
<p >Note that this macro is not ideal and should be used with caution. Caveats include:</p><ul>
<li>The two parameters may be evaluated more than once, so should be constant values that do not have side effects. For example, do NOT do <code>MM_MIN(a++, b)</code>.</li>
<li>There are no explicit constraints on types, so be careful of comparing different integer types, etc.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_x</td><td>The first value to compare. </td></tr>
<tr><td class="paramname">_y</td><td>The second value to compare.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the minimum of <code>_x</code> and <code>_y</code>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00041">41</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="gabfc75e5c38f3054e1643a04b81e3b54e" name="gabfc75e5c38f3054e1643a04b81e3b54e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabfc75e5c38f3054e1643a04b81e3b54e">&#9670;&nbsp;</a></span>MM_PACKED</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_PACKED&#160;&#160;&#160;__attribute__((packed))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Tells the compiler to pack the structure. </p>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00073">73</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga88c3ad1ebe87a29a9bb932305d4d737d" name="ga88c3ad1ebe87a29a9bb932305d4d737d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga88c3ad1ebe87a29a9bb932305d4d737d">&#9670;&nbsp;</a></span>MM_STATIC_ASSERT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_STATIC_ASSERT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_expression, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_message&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;_Static_assert((_expression), _message)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Assertion check that is evaluated at compile time. </p>
<p >The constant expression, <code>_expression</code>, is evaluted at compile time. If zero then it triggers a compilation error and <code>_message</code> is displayed. If non-zero, no code is emitted.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_expression</td><td>Constant expression to evaluate. If zero then a compilation error is triggered. </td></tr>
<tr><td class="paramname">_message</td><td>Message to display on error. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00098">98</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga0157597bdd038d83fbb0f2f488e6e4ee" name="ga0157597bdd038d83fbb0f2f488e6e4ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0157597bdd038d83fbb0f2f488e6e4ee">&#9670;&nbsp;</a></span>MM_UNUSED</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_UNUSED</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_x</td><td>)</td>
<td>&#160;&#160;&#160;(void)(_x)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Casts the given expression to void to avoid "unused" warnings from the compiler. </p>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00069">69</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<a id="ga08fb889acc204f09b95c4d533f180688" name="ga08fb889acc204f09b95c4d533f180688"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga08fb889acc204f09b95c4d533f180688">&#9670;&nbsp;</a></span>MM_WEAK</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MM_WEAK&#160;&#160;&#160;__attribute__((weak))</td>
</tr>
</table>
</div><div class="memdoc">
<p>Used to declare a weak symbol. </p>
<p ><br />
</p>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00078">78</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga2b4b5b12d04302a9ada0dee5a0342051" name="ga2b4b5b12d04302a9ada0dee5a0342051"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2b4b5b12d04302a9ada0dee5a0342051">&#9670;&nbsp;</a></span>mm_nibble_to_hex_char()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static char mm_nibble_to_hex_char </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>nibble</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Convert the least significant 4 bits of the given argument to a character representing their hexadecimal value. </p>
<p >For example, for input 0xde this will return 'E', for 0x01 it will return '1'.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">nibble</td><td>The input nibble (upper 4 bits will be discarded).</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The character that represents the hexadecimal value of the lower 4 bits of <code>nibble</code>. Values greater than 0x09 will be represented with upper case characters. </dd></dl>
<p class="definition">Definition at line <a class="el" href="mmutils_8h_source.html#l00134">134</a> of file <a class="el" href="mmutils_8h_source.html">mmutils.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.17-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Copyright 2021 Morse Micro </li>
</ul>
</div>
</body>
</html>