RadioLibSmol/_f_e_c_8h_source.html
2025-01-16 17:28:36 +00:00

198 lines
18 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>RadioLib: src/utils/FEC.h Source File</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 id="projectrow">
<td id="projectalign">
<div id="projectname">RadioLib
</div>
<div id="projectbrief">Universal wireless communication library for Arduino</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "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>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
</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('_f_e_c_8h_source.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">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">FEC.h</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#if !defined(_RADIOLIB_FEC_H)</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define _RADIOLIB_FEC_H</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;../TypeDef.h&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;../Module.h&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// BCH(31, 21) code constants</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#define RADIOLIB_PAGER_BCH_N (31)</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#define RADIOLIB_PAGER_BCH_K (21)</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#define RADIOLIB_PAGER_BCH_PRIMITIVE_POLY (0x25)</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#if RADIOLIB_STATIC_ONLY</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define RADIOLIB_BCH_MAX_N (63)</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#define RADIOLIB_BCH_MAX_K (31)</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="foldopen" id="foldopen00023" data-start="{" data-end="};">
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="class_radio_lib_b_c_h.html"> 23</a></span><span class="keyword">class </span><a class="code hl_class" href="class_radio_lib_b_c_h.html">RadioLibBCH</a> {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_function" href="class_radio_lib_b_c_h.html#a39d55c0292e4c9337ee0672cd5241118">RadioLibBCH</a>();</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_function" href="class_radio_lib_b_c_h.html#ac4ceca6f132ff2047e2ca13d8d00a9e5">~RadioLibBCH</a>();</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_radio_lib_b_c_h.html#aba6f10d4ac2d40eb2222d1081a34c88b">begin</a>(uint8_t n, uint8_t k, uint32_t poly);</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> uint32_t <a class="code hl_function" href="class_radio_lib_b_c_h.html#afa0a2eb58245715536acb781cd351d8a">encode</a>(uint32_t dataword);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> uint8_t n = 0;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> uint8_t k = 0;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> uint32_t poly = 0;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> uint8_t m = 0;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor"> #if RADIOLIB_STATIC_ONLY</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> int32_t alphaTo[RADIOLIB_BCH_MAX_N + 1] = { 0 };</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> int32_t indexOf[RADIOLIB_BCH_MAX_N + 1] = { 0 };</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> int32_t generator[RADIOLIB_BCH_MAX_N - RADIOLIB_BCH_MAX_K + 1] = { 0 };</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor"> #else</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> int32_t* alphaTo = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> int32_t* indexOf = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> int32_t* generator = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment">// the global singleton</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">extern</span> <a class="code hl_class" href="class_radio_lib_b_c_h.html">RadioLibBCH</a> RadioLibBCHInstance;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="foldopen" id="foldopen00110" data-start="{" data-end="};">
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="class_radio_lib_conv_code.html"> 110</a></span><span class="keyword">class </span><a class="code hl_class" href="class_radio_lib_conv_code.html">RadioLibConvCode</a> {</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_function" href="class_radio_lib_conv_code.html#a4fbe7c4e90969f0be10b8484b405df78">RadioLibConvCode</a>();</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_radio_lib_conv_code.html#af350f0a8b4d01e54e9d7eac9056c56c3">begin</a>(uint8_t rt);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> int16_t <a class="code hl_function" href="class_radio_lib_conv_code.html#a64c324098fab2c5521b3f4e965503ca8">encode</a>(<span class="keyword">const</span> uint8_t* in, <span class="keywordtype">size_t</span> in_bits, uint8_t* out, <span class="keywordtype">size_t</span>* out_bits = NULL);</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> uint8_t enc_state = 0;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> uint8_t rate = 0;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>};</div>
</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment">// each 32-bit word stores 8 values, one per each nibble</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t ConvCodeTable1_3[16] = {</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> 0x07347043, 0x61521625, 0x16256152, 0x70430734,</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> 0x43703407, 0x25165261, 0x52612516, 0x34074370,</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> 0x70430734, 0x16256152, 0x61521625, 0x07347043,</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> 0x34074370, 0x52612516, 0x25165261, 0x43703407,</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>};</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t ConvCodeTable1_2[4] = { </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> 0x03122130, 0x21300312, 0x30211203, 0x12033021,</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span>};</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="keyword">extern</span> <a class="code hl_class" href="class_radio_lib_conv_code.html">RadioLibConvCode</a> RadioLibConvCodeInstance;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclass_radio_lib_b_c_h_html"><div class="ttname"><a href="class_radio_lib_b_c_h.html">RadioLibBCH</a></div><div class="ttdoc">Class to calculate BoseChaudhuriHocquenghem (BCH) class of forward error correction codes....</div><div class="ttdef"><b>Definition</b> FEC.h:23</div></div>
<div class="ttc" id="aclass_radio_lib_b_c_h_html_a39d55c0292e4c9337ee0672cd5241118"><div class="ttname"><a href="class_radio_lib_b_c_h.html#a39d55c0292e4c9337ee0672cd5241118">RadioLibBCH::RadioLibBCH</a></div><div class="ttdeci">RadioLibBCH()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition</b> FEC.cpp:4</div></div>
<div class="ttc" id="aclass_radio_lib_b_c_h_html_aba6f10d4ac2d40eb2222d1081a34c88b"><div class="ttname"><a href="class_radio_lib_b_c_h.html#aba6f10d4ac2d40eb2222d1081a34c88b">RadioLibBCH::begin</a></div><div class="ttdeci">void begin(uint8_t n, uint8_t k, uint32_t poly)</div><div class="ttdoc">Initialization method.</div><div class="ttdef"><b>Definition</b> FEC.cpp:21</div></div>
<div class="ttc" id="aclass_radio_lib_b_c_h_html_ac4ceca6f132ff2047e2ca13d8d00a9e5"><div class="ttname"><a href="class_radio_lib_b_c_h.html#ac4ceca6f132ff2047e2ca13d8d00a9e5">RadioLibBCH::~RadioLibBCH</a></div><div class="ttdeci">~RadioLibBCH()</div><div class="ttdoc">Default destructor.</div><div class="ttdef"><b>Definition</b> FEC.cpp:8</div></div>
<div class="ttc" id="aclass_radio_lib_b_c_h_html_afa0a2eb58245715536acb781cd351d8a"><div class="ttname"><a href="class_radio_lib_b_c_h.html#afa0a2eb58245715536acb781cd351d8a">RadioLibBCH::encode</a></div><div class="ttdeci">uint32_t encode(uint32_t dataword)</div><div class="ttdoc">Encoding method - encodes one data word (without check bits) into a code word (with check bits).</div><div class="ttdef"><b>Definition</b> FEC.cpp:200</div></div>
<div class="ttc" id="aclass_radio_lib_conv_code_html"><div class="ttname"><a href="class_radio_lib_conv_code.html">RadioLibConvCode</a></div><div class="ttdoc">Class to perform convolutional coding with variable rates. Only 1/2 and 1/3 rate is currently support...</div><div class="ttdef"><b>Definition</b> FEC.h:110</div></div>
<div class="ttc" id="aclass_radio_lib_conv_code_html_a4fbe7c4e90969f0be10b8484b405df78"><div class="ttname"><a href="class_radio_lib_conv_code.html#a4fbe7c4e90969f0be10b8484b405df78">RadioLibConvCode::RadioLibConvCode</a></div><div class="ttdeci">RadioLibConvCode()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition</b> FEC.cpp:311</div></div>
<div class="ttc" id="aclass_radio_lib_conv_code_html_a64c324098fab2c5521b3f4e965503ca8"><div class="ttname"><a href="class_radio_lib_conv_code.html#a64c324098fab2c5521b3f4e965503ca8">RadioLibConvCode::encode</a></div><div class="ttdeci">int16_t encode(const uint8_t *in, size_t in_bits, uint8_t *out, size_t *out_bits=NULL)</div><div class="ttdoc">Encoding method.</div><div class="ttdef"><b>Definition</b> FEC.cpp:320</div></div>
<div class="ttc" id="aclass_radio_lib_conv_code_html_af350f0a8b4d01e54e9d7eac9056c56c3"><div class="ttname"><a href="class_radio_lib_conv_code.html#af350f0a8b4d01e54e9d7eac9056c56c3">RadioLibConvCode::begin</a></div><div class="ttdeci">void begin(uint8_t rt)</div><div class="ttdoc">Initialization method.</div><div class="ttdef"><b>Definition</b> FEC.cpp:315</div></div>
</div><!-- fragment --></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="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li><li class="navelem"><b>FEC.h</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>