1
0
mirror of https://github.com/taigrr/arduinolibs synced 2025-01-18 04:33:12 -08:00

Update docs

This commit is contained in:
Rhys Weatherley 2015-03-12 19:03:15 +10:00
parent 083448f195
commit c6206e4216
493 changed files with 35310 additions and 3018 deletions

183
AES128_8cpp_source.html Normal file
View File

@ -0,0 +1,183 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: AES128.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AES128.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;AES.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classAES128.html#af826ce33301767919bb60f27ad3ff693"> 40</a></span>&#160;<a class="code" href="classAES128.html#af826ce33301767919bb60f27ad3ff693">AES128::AES128</a>()</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; rounds = 10;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; schedule = sched;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;AES128::~AES128()</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; clean(sched);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classAES128.html#aa871832a156f0ea61b964e489670ae9d"> 55</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classAES128.html#aa871832a156f0ea61b964e489670ae9d">AES128::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> 16;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4"> 60</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4">AES128::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (len != 16)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Copy the key itself into the first 16 bytes of the schedule.</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; uint8_t *schedule = sched;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; memcpy(schedule, key, 16);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Expand the key schedule until we have 176 bytes of expanded key.</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t iteration = 1;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; uint8_t n = 16;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; uint8_t w = 4;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">while</span> (n &lt; 176) {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (w == 4) {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Every 16 bytes (4 words) we need to apply the key schedule core.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; keyScheduleCore(schedule + 16, schedule + 12, iteration);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; schedule[16] ^= schedule[0];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; schedule[17] ^= schedule[1];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; schedule[18] ^= schedule[2];</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; schedule[19] ^= schedule[3];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; ++iteration;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; w = 0;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// Otherwise just XOR the word with the one 16 bytes previous.</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; schedule[16] = schedule[12] ^ schedule[0];</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; schedule[17] = schedule[13] ^ schedule[1];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; schedule[18] = schedule[14] ^ schedule[2];</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; schedule[19] = schedule[15] ^ schedule[3];</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Advance to the next word in the schedule.</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; schedule += 4;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; n += 4;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; ++w;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
<div class="ttc" id="classAES128_html_aa871832a156f0ea61b964e489670ae9d"><div class="ttname"><a href="classAES128.html#aa871832a156f0ea61b964e489670ae9d">AES128::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Size of a 128-bit AES key in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AES128_8cpp_source.html#l00055">AES128.cpp:55</a></div></div>
<div class="ttc" id="classAES128_html_a42d7548eb5084a2c3e2d5aa5f6f98ba4"><div class="ttname"><a href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4">AES128::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="AES128_8cpp_source.html#l00060">AES128.cpp:60</a></div></div>
<div class="ttc" id="classAES128_html_af826ce33301767919bb60f27ad3ff693"><div class="ttname"><a href="classAES128.html#af826ce33301767919bb60f27ad3ff693">AES128::AES128</a></div><div class="ttdeci">AES128()</div><div class="ttdoc">Constructs an AES 128-bit block cipher with no initial key. </div><div class="ttdef"><b>Definition:</b> <a href="AES128_8cpp_source.html#l00040">AES128.cpp:40</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

183
AES192_8cpp_source.html Normal file
View File

@ -0,0 +1,183 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: AES192.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AES192.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;AES.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classAES192.html#a6f8e457cfffdc12f7dd829e3ac4585ce"> 40</a></span>&#160;<a class="code" href="classAES192.html#a6f8e457cfffdc12f7dd829e3ac4585ce">AES192::AES192</a>()</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; rounds = 12;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; schedule = sched;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;AES192::~AES192()</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; clean(sched);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classAES192.html#ade28843e51e262b30eb55791c83fd791"> 55</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classAES192.html#ade28843e51e262b30eb55791c83fd791">AES192::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> 24;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde"> 60</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde">AES192::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (len != 24)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Copy the key itself into the first 24 bytes of the schedule.</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; uint8_t *schedule = sched;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; memcpy(schedule, key, 24);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Expand the key schedule until we have 208 bytes of expanded key.</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t iteration = 1;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; uint8_t n = 24;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; uint8_t w = 6;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">while</span> (n &lt; 208) {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (w == 6) {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Every 24 bytes (6 words) we need to apply the key schedule core.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; keyScheduleCore(schedule + 24, schedule + 20, iteration);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; schedule[24] ^= schedule[0];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; schedule[25] ^= schedule[1];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; schedule[26] ^= schedule[2];</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; schedule[27] ^= schedule[3];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; ++iteration;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; w = 0;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// Otherwise just XOR the word with the one 24 bytes previous.</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; schedule[24] = schedule[20] ^ schedule[0];</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; schedule[25] = schedule[21] ^ schedule[1];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; schedule[26] = schedule[22] ^ schedule[2];</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; schedule[27] = schedule[23] ^ schedule[3];</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Advance to the next word in the schedule.</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; schedule += 4;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; n += 4;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; ++w;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
<div class="ttc" id="classAES192_html_a4ab37cff19fb05ceef1533ebc5e37cde"><div class="ttname"><a href="classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde">AES192::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="AES192_8cpp_source.html#l00060">AES192.cpp:60</a></div></div>
<div class="ttc" id="classAES192_html_ade28843e51e262b30eb55791c83fd791"><div class="ttname"><a href="classAES192.html#ade28843e51e262b30eb55791c83fd791">AES192::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Size of a 192-bit AES key in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AES192_8cpp_source.html#l00055">AES192.cpp:55</a></div></div>
<div class="ttc" id="classAES192_html_a6f8e457cfffdc12f7dd829e3ac4585ce"><div class="ttname"><a href="classAES192.html#a6f8e457cfffdc12f7dd829e3ac4585ce">AES192::AES192</a></div><div class="ttdeci">AES192()</div><div class="ttdoc">Constructs an AES 192-bit block cipher with no initial key. </div><div class="ttdef"><b>Definition:</b> <a href="AES192_8cpp_source.html#l00040">AES192.cpp:40</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

190
AES256_8cpp_source.html Normal file
View File

@ -0,0 +1,190 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: AES256.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AES256.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;AES.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classAES256.html#a3b2cbe56f03a87ec4260be4f8914fb02"> 40</a></span>&#160;<a class="code" href="classAES256.html#a3b2cbe56f03a87ec4260be4f8914fb02">AES256::AES256</a>()</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; rounds = 14;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; schedule = sched;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;AES256::~AES256()</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; clean(sched);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classAES256.html#af8ed6412bae6fc78274f60344899366a"> 55</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classAES256.html#af8ed6412bae6fc78274f60344899366a">AES256::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> 32;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classAES256.html#a6af085d2d6a730ff1e025f982121bbda"> 60</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classAES256.html#a6af085d2d6a730ff1e025f982121bbda">AES256::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (len != 32)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Copy the key itself into the first 32 bytes of the schedule.</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; uint8_t *schedule = sched;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; memcpy(schedule, key, 32);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Expand the key schedule until we have 240 bytes of expanded key.</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t iteration = 1;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; uint8_t n = 32;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; uint8_t w = 8;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">while</span> (n &lt; 240) {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (w == 8) {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Every 32 bytes (8 words) we need to apply the key schedule core.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; keyScheduleCore(schedule + 32, schedule + 28, iteration);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; schedule[32] ^= schedule[0];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; schedule[33] ^= schedule[1];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; schedule[34] ^= schedule[2];</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; schedule[35] ^= schedule[3];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; ++iteration;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; w = 0;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (w == 4) {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// At the 16 byte mark we need to apply the S-box.</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; applySbox(schedule + 32, schedule + 28);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; schedule[32] ^= schedule[0];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; schedule[33] ^= schedule[1];</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; schedule[34] ^= schedule[2];</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; schedule[35] ^= schedule[3];</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Otherwise just XOR the word with the one 32 bytes previous.</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; schedule[32] = schedule[28] ^ schedule[0];</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; schedule[33] = schedule[29] ^ schedule[1];</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; schedule[34] = schedule[30] ^ schedule[2];</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; schedule[35] = schedule[31] ^ schedule[3];</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// Advance to the next word in the schedule.</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; schedule += 4;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; n += 4;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; ++w;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;}</div>
<div class="ttc" id="classAES256_html_a3b2cbe56f03a87ec4260be4f8914fb02"><div class="ttname"><a href="classAES256.html#a3b2cbe56f03a87ec4260be4f8914fb02">AES256::AES256</a></div><div class="ttdeci">AES256()</div><div class="ttdoc">Constructs an AES 256-bit block cipher with no initial key. </div><div class="ttdef"><b>Definition:</b> <a href="AES256_8cpp_source.html#l00040">AES256.cpp:40</a></div></div>
<div class="ttc" id="classAES256_html_a6af085d2d6a730ff1e025f982121bbda"><div class="ttname"><a href="classAES256.html#a6af085d2d6a730ff1e025f982121bbda">AES256::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="AES256_8cpp_source.html#l00060">AES256.cpp:60</a></div></div>
<div class="ttc" id="classAES256_html_af8ed6412bae6fc78274f60344899366a"><div class="ttname"><a href="classAES256.html#af8ed6412bae6fc78274f60344899366a">AES256::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Size of a 256-bit AES key in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AES256_8cpp_source.html#l00055">AES256.cpp:55</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

423
AESCommon_8cpp_source.html Normal file
View File

@ -0,0 +1,423 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: AESCommon.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AESCommon.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;AES.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;utility/ProgMemUtil.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">// AES S-box (http://en.wikipedia.org/wiki/Rijndael_S-box)</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">static</span> uint8_t <span class="keyword">const</span> sbox[256] PROGMEM = {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, <span class="comment">// 0x00</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, <span class="comment">// 0x10</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, <span class="comment">// 0x20</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, <span class="comment">// 0x30</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, <span class="comment">// 0x40</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, <span class="comment">// 0x50</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, <span class="comment">// 0x60</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, <span class="comment">// 0x70</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, <span class="comment">// 0x80</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, <span class="comment">// 0x90</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, <span class="comment">// 0xA0</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, <span class="comment">// 0xB0</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, <span class="comment">// 0xC0</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, <span class="comment">// 0xD0</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, <span class="comment">// 0xE0</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, <span class="comment">// 0xF0</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;};</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">// AES inverse S-box (http://en.wikipedia.org/wiki/Rijndael_S-box)</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">static</span> uint8_t <span class="keyword">const</span> sbox_inverse[256] PROGMEM = {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, <span class="comment">// 0x00</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, <span class="comment">// 0x10</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, <span class="comment">// 0x20</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, <span class="comment">// 0x30</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, <span class="comment">// 0x40</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, <span class="comment">// 0x50</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, <span class="comment">// 0x60</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, <span class="comment">// 0x70</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, <span class="comment">// 0x80</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, <span class="comment">// 0x90</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, <span class="comment">// 0xA0</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, <span class="comment">// 0xB0</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, <span class="comment">// 0xC0</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, <span class="comment">// 0xD0</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, <span class="comment">// 0xE0</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, <span class="comment">// 0xF0</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;};</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classAESCommon.html#acf224a392659429bac80dc68c7471b21"> 125</a></span>&#160;<a class="code" href="classAESCommon.html#acf224a392659429bac80dc68c7471b21">AESCommon::AESCommon</a>()</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; : rounds(0), schedule(0)</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;{</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8"> 134</a></span>&#160;<a class="code" href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8">AESCommon::~AESCommon</a>()</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;{</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; clean(state1);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; clean(state2);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413"> 144</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413">AESCommon::blockSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> 16;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment">// Constants to correct Galois multiplication for the high bits</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment">// that are shifted out when multiplying by powers of two.</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="keyword">static</span> uint8_t <span class="keyword">const</span> K[8] = {</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; 0x00,</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; 0x1B,</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; (0x1B &lt;&lt; 1),</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; (0x1B &lt;&lt; 1) ^ 0x1B,</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; (0x1B &lt;&lt; 2),</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; (0x1B &lt;&lt; 2) ^ 0x1B,</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; (0x1B &lt;&lt; 2) ^ (0x1B &lt;&lt; 1),</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; (0x1B &lt;&lt; 2) ^ (0x1B &lt;&lt; 1) ^ 0x1B</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;};</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">// Multiply x by 2 in the Galois field, to achieve the effect of the following:</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">// if (x &amp; 0x80)</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">// return (x &lt;&lt; 1) ^ 0x1B;</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">// else</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment">// return (x &lt;&lt; 1);</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment">// However, we don&#39;t want to use runtime conditionals if we can help it</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment">// to avoid leaking timing information from the implementation.</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment">// In this case, multiplication is slightly faster than table lookup on AVR.</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="preprocessor">#define gmul2(x) (t = ((uint16_t)(x)) &lt;&lt; 1, \</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="preprocessor"> ((uint8_t)t) ^ (uint8_t)(0x1B * ((uint8_t)(t &gt;&gt; 8))))</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">// Multiply x by 4 in the Galois field.</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="preprocessor">#define gmul4(x) (t = ((uint16_t)(x)) &lt;&lt; 2, ((uint8_t)t) ^ K[t &gt;&gt; 8])</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment">// Multiply x by 8 in the Galois field.</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#define gmul8(x) (t = ((uint16_t)(x)) &lt;&lt; 3, ((uint8_t)t) ^ K[t &gt;&gt; 8])</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="preprocessor">#define OUT(col, row) output[(col) * 4 + (row)]</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define IN(col, row) input[(col) * 4 + (row)]</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> subBytesAndShiftRows(uint8_t *output, <span class="keyword">const</span> uint8_t *input)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; OUT(0, 0) = pgm_read_byte(sbox + IN(0, 0));</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; OUT(0, 1) = pgm_read_byte(sbox + IN(1, 1));</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; OUT(0, 2) = pgm_read_byte(sbox + IN(2, 2));</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; OUT(0, 3) = pgm_read_byte(sbox + IN(3, 3));</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; OUT(1, 0) = pgm_read_byte(sbox + IN(1, 0));</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; OUT(1, 1) = pgm_read_byte(sbox + IN(2, 1));</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; OUT(1, 2) = pgm_read_byte(sbox + IN(3, 2));</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; OUT(1, 3) = pgm_read_byte(sbox + IN(0, 3));</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; OUT(2, 0) = pgm_read_byte(sbox + IN(2, 0));</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; OUT(2, 1) = pgm_read_byte(sbox + IN(3, 1));</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; OUT(2, 2) = pgm_read_byte(sbox + IN(0, 2));</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; OUT(2, 3) = pgm_read_byte(sbox + IN(1, 3));</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; OUT(3, 0) = pgm_read_byte(sbox + IN(3, 0));</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; OUT(3, 1) = pgm_read_byte(sbox + IN(0, 1));</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; OUT(3, 2) = pgm_read_byte(sbox + IN(1, 2));</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; OUT(3, 3) = pgm_read_byte(sbox + IN(2, 3));</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;}</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> inverseShiftRowsAndSubBytes(uint8_t *output, <span class="keyword">const</span> uint8_t *input)</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;{</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; OUT(0, 0) = pgm_read_byte(sbox_inverse + IN(0, 0));</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; OUT(0, 1) = pgm_read_byte(sbox_inverse + IN(3, 1));</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; OUT(0, 2) = pgm_read_byte(sbox_inverse + IN(2, 2));</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; OUT(0, 3) = pgm_read_byte(sbox_inverse + IN(1, 3));</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; OUT(1, 0) = pgm_read_byte(sbox_inverse + IN(1, 0));</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; OUT(1, 1) = pgm_read_byte(sbox_inverse + IN(0, 1));</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; OUT(1, 2) = pgm_read_byte(sbox_inverse + IN(3, 2));</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; OUT(1, 3) = pgm_read_byte(sbox_inverse + IN(2, 3));</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; OUT(2, 0) = pgm_read_byte(sbox_inverse + IN(2, 0));</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; OUT(2, 1) = pgm_read_byte(sbox_inverse + IN(1, 1));</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; OUT(2, 2) = pgm_read_byte(sbox_inverse + IN(0, 2));</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; OUT(2, 3) = pgm_read_byte(sbox_inverse + IN(3, 3));</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; OUT(3, 0) = pgm_read_byte(sbox_inverse + IN(3, 0));</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; OUT(3, 1) = pgm_read_byte(sbox_inverse + IN(2, 1));</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; OUT(3, 2) = pgm_read_byte(sbox_inverse + IN(1, 2));</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; OUT(3, 3) = pgm_read_byte(sbox_inverse + IN(0, 3));</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> mixColumn(uint8_t *output, uint8_t *input)</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; uint16_t t; <span class="comment">// Needed by the gmul2 macro.</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; uint8_t a = input[0];</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; uint8_t b = input[1];</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; uint8_t c = input[2];</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; uint8_t d = input[3];</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; uint8_t a2 = gmul2(a);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; uint8_t b2 = gmul2(b);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; uint8_t c2 = gmul2(c);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; uint8_t d2 = gmul2(d);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; output[0] = a2 ^ b2 ^ b ^ c ^ d;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; output[1] = a ^ b2 ^ c2 ^ c ^ d;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; output[2] = a ^ b ^ c2 ^ d2 ^ d;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; output[3] = a2 ^ a ^ b ^ c ^ d2;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> inverseMixColumn(uint8_t *output, <span class="keyword">const</span> uint8_t *input)</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;{</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; uint16_t t; <span class="comment">// Needed by the gmul2, gmul4, and gmul8 macros.</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; uint8_t a = input[0];</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; uint8_t b = input[1];</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; uint8_t c = input[2];</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; uint8_t d = input[3];</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; uint8_t a2 = gmul2(a);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; uint8_t b2 = gmul2(b);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; uint8_t c2 = gmul2(c);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; uint8_t d2 = gmul2(d);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; uint8_t a4 = gmul4(a);</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; uint8_t b4 = gmul4(b);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; uint8_t c4 = gmul4(c);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; uint8_t d4 = gmul4(d);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; uint8_t a8 = gmul8(a);</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; uint8_t b8 = gmul8(b);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; uint8_t c8 = gmul8(c);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; uint8_t d8 = gmul8(d);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; output[0] = a8 ^ a4 ^ a2 ^ b8 ^ b2 ^ b ^ c8 ^ c4 ^ c ^ d8 ^ d;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; output[1] = a8 ^ a ^ b8 ^ b4 ^ b2 ^ c8 ^ c2 ^ c ^ d8 ^ d4 ^ d;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; output[2] = a8 ^ a4 ^ a ^ b8 ^ b ^ c8 ^ c4 ^ c2 ^ d8 ^ d2 ^ d;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; output[3] = a8 ^ a2 ^ a ^ b8 ^ b4 ^ b ^ c8 ^ c ^ d8 ^ d4 ^ d2;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div>
<div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296"> 266</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296">AESCommon::encryptBlock</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input)</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;{</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> uint8_t *roundKey = schedule;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; uint8_t round;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// Copy the input into the state and XOR with the first round key.</span></div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; state1[posn] = input[posn] ^ roundKey[posn];</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; roundKey += 16;</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// Perform all rounds except the last.</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">for</span> (round = rounds; round &gt; 1; --round) {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; subBytesAndShiftRows(state2, state1);</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; mixColumn(state1, state2);</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; mixColumn(state1 + 4, state2 + 4);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; mixColumn(state1 + 8, state2 + 8);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; mixColumn(state1 + 12, state2 + 12);</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; state1[posn] ^= roundKey[posn];</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; roundKey += 16;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// Perform the final round.</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; subBytesAndShiftRows(state2, state1);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; output[posn] = state2[posn] ^ roundKey[posn];</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div>
<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classAESCommon.html#a95a806adf42f975765ff62907efdc639"> 295</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classAESCommon.html#a95a806adf42f975765ff62907efdc639">AESCommon::decryptBlock</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input)</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;{</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">const</span> uint8_t *roundKey = schedule + rounds * 16;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; uint8_t round;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Copy the input into the state and reverse the final round.</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; state1[posn] = input[posn] ^ roundKey[posn];</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; inverseShiftRowsAndSubBytes(state2, state1);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// Perform all other rounds in reverse.</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">for</span> (round = rounds; round &gt; 1; --round) {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; roundKey -= 16;</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; state2[posn] ^= roundKey[posn];</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; inverseMixColumn(state1, state2);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; inverseMixColumn(state1 + 4, state2 + 4);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; inverseMixColumn(state1 + 8, state2 + 8);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; inverseMixColumn(state1 + 12, state2 + 12);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; inverseShiftRowsAndSubBytes(state2, state1);</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// Reverse the initial round and create the output words.</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; roundKey -= 16;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; output[posn] = state2[posn] ^ roundKey[posn];</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;}</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div>
<div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6"> 324</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6">AESCommon::clear</a>()</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;{</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; clean(schedule, (rounds + 1) * 16);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; clean(state1);</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; clean(state2);</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;}</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="keywordtype">void</span> AESCommon::keyScheduleCore(uint8_t *output, <span class="keyword">const</span> uint8_t *input, uint8_t iteration)</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;{</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// Rcon(i), 2^i in the Rijndael finite field, for i = 0..10.</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">// http://en.wikipedia.org/wiki/Rijndael_key_schedule</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">static</span> uint8_t <span class="keyword">const</span> rcon[11] PROGMEM = {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, <span class="comment">// 0x00</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; 0x80, 0x1B, 0x36</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; };</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; output[0] = pgm_read_byte(sbox + input[1]) ^ pgm_read_byte(rcon + iteration);</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; output[1] = pgm_read_byte(sbox + input[2]);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; output[2] = pgm_read_byte(sbox + input[3]);</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; output[3] = pgm_read_byte(sbox + input[0]);</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="keywordtype">void</span> AESCommon::applySbox(uint8_t *output, <span class="keyword">const</span> uint8_t *input)</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; output[0] = pgm_read_byte(sbox + input[0]);</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; output[1] = pgm_read_byte(sbox + input[1]);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; output[2] = pgm_read_byte(sbox + input[2]);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; output[3] = pgm_read_byte(sbox + input[3]);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;}</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div>
<div class="ttc" id="classAESCommon_html_a95a806adf42f975765ff62907efdc639"><div class="ttname"><a href="classAESCommon.html#a95a806adf42f975765ff62907efdc639">AESCommon::decryptBlock</a></div><div class="ttdeci">void decryptBlock(uint8_t *output, const uint8_t *input)</div><div class="ttdoc">Decrypts a single block using this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00295">AESCommon.cpp:295</a></div></div>
<div class="ttc" id="classAESCommon_html_acf224a392659429bac80dc68c7471b21"><div class="ttname"><a href="classAESCommon.html#acf224a392659429bac80dc68c7471b21">AESCommon::AESCommon</a></div><div class="ttdeci">AESCommon()</div><div class="ttdoc">Constructs an AES block cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00125">AESCommon.cpp:125</a></div></div>
<div class="ttc" id="classAESCommon_html_ae26afdcc6d18e8888974acae16df1413"><div class="ttname"><a href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413">AESCommon::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of an AES block in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00144">AESCommon.cpp:144</a></div></div>
<div class="ttc" id="classAESCommon_html_a8f67970c86c23affb0297fc1bb10fad8"><div class="ttname"><a href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8">AESCommon::~AESCommon</a></div><div class="ttdeci">virtual ~AESCommon()</div><div class="ttdoc">Destroys this AES block cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00134">AESCommon.cpp:134</a></div></div>
<div class="ttc" id="classAESCommon_html_a83e43f7d07e31d90fd7b768a93ecfce6"><div class="ttname"><a href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6">AESCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00324">AESCommon.cpp:324</a></div></div>
<div class="ttc" id="classAESCommon_html_a2d95f6159abfcd92b5841f9018e44296"><div class="ttname"><a href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296">AESCommon::encryptBlock</a></div><div class="ttdeci">void encryptBlock(uint8_t *output, const uint8_t *input)</div><div class="ttdoc">Encrypts a single block using this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00266">AESCommon.cpp:266</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

214
AES_8h_source.html Normal file
View File

@ -0,0 +1,214 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: AES.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AES.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_AES_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_AES_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;BlockCipher.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classAESCommon.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classAESCommon.html">AESCommon</a> : <span class="keyword">public</span> <a class="code" href="classBlockCipher.html">BlockCipher</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8">~AESCommon</a>();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413">blockSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296">encryptBlock</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classAESCommon.html#a95a806adf42f975765ff62907efdc639">decryptBlock</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6">clear</a>();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="classAESCommon.html#acf224a392659429bac80dc68c7471b21">AESCommon</a>();</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; uint8_t rounds;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint8_t *schedule;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> keyScheduleCore(uint8_t *output, <span class="keyword">const</span> uint8_t *input, uint8_t iteration);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> applySbox(uint8_t *output, <span class="keyword">const</span> uint8_t *input);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint8_t state1[16];</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint8_t state2[16];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;};</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classAES128.html"> 56</a></span>&#160;<span class="keyword">class </span><a class="code" href="classAES128.html">AES128</a> : <span class="keyword">public</span> <a class="code" href="classAESCommon.html">AESCommon</a></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classAES128.html#af826ce33301767919bb60f27ad3ff693">AES128</a>();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classAES128.html">AES128</a>();</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classAES128.html#aa871832a156f0ea61b964e489670ae9d">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; uint8_t sched[176];</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;};</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classAES192.html"> 70</a></span>&#160;<span class="keyword">class </span><a class="code" href="classAES192.html">AES192</a> : <span class="keyword">public</span> <a class="code" href="classAESCommon.html">AESCommon</a></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classAES192.html#a6f8e457cfffdc12f7dd829e3ac4585ce">AES192</a>();</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classAES192.html">AES192</a>();</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classAES192.html#ade28843e51e262b30eb55791c83fd791">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; uint8_t sched[208];</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;};</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classAES256.html"> 84</a></span>&#160;<span class="keyword">class </span><a class="code" href="classAES256.html">AES256</a> : <span class="keyword">public</span> <a class="code" href="classAESCommon.html">AESCommon</a></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;{</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classAES256.html#a3b2cbe56f03a87ec4260be4f8914fb02">AES256</a>();</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classAES256.html">AES256</a>();</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classAES256.html#af8ed6412bae6fc78274f60344899366a">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classAES256.html#a6af085d2d6a730ff1e025f982121bbda">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; uint8_t sched[240];</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;};</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classAESCommon_html_a95a806adf42f975765ff62907efdc639"><div class="ttname"><a href="classAESCommon.html#a95a806adf42f975765ff62907efdc639">AESCommon::decryptBlock</a></div><div class="ttdeci">void decryptBlock(uint8_t *output, const uint8_t *input)</div><div class="ttdoc">Decrypts a single block using this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00295">AESCommon.cpp:295</a></div></div>
<div class="ttc" id="classAES256_html"><div class="ttname"><a href="classAES256.html">AES256</a></div><div class="ttdoc">AES block cipher with 256-bit keys. </div><div class="ttdef"><b>Definition:</b> <a href="AES_8h_source.html#l00084">AES.h:84</a></div></div>
<div class="ttc" id="classBlockCipher_html"><div class="ttname"><a href="classBlockCipher.html">BlockCipher</a></div><div class="ttdoc">Abstract base class for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8h_source.html#l00029">BlockCipher.h:29</a></div></div>
<div class="ttc" id="classAESCommon_html_acf224a392659429bac80dc68c7471b21"><div class="ttname"><a href="classAESCommon.html#acf224a392659429bac80dc68c7471b21">AESCommon::AESCommon</a></div><div class="ttdeci">AESCommon()</div><div class="ttdoc">Constructs an AES block cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00125">AESCommon.cpp:125</a></div></div>
<div class="ttc" id="classAES128_html_aa871832a156f0ea61b964e489670ae9d"><div class="ttname"><a href="classAES128.html#aa871832a156f0ea61b964e489670ae9d">AES128::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Size of a 128-bit AES key in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AES128_8cpp_source.html#l00055">AES128.cpp:55</a></div></div>
<div class="ttc" id="classAES192_html_a4ab37cff19fb05ceef1533ebc5e37cde"><div class="ttname"><a href="classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde">AES192::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="AES192_8cpp_source.html#l00060">AES192.cpp:60</a></div></div>
<div class="ttc" id="classAESCommon_html_ae26afdcc6d18e8888974acae16df1413"><div class="ttname"><a href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413">AESCommon::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of an AES block in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00144">AESCommon.cpp:144</a></div></div>
<div class="ttc" id="classAESCommon_html_a8f67970c86c23affb0297fc1bb10fad8"><div class="ttname"><a href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8">AESCommon::~AESCommon</a></div><div class="ttdeci">virtual ~AESCommon()</div><div class="ttdoc">Destroys this AES block cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00134">AESCommon.cpp:134</a></div></div>
<div class="ttc" id="classAESCommon_html_a83e43f7d07e31d90fd7b768a93ecfce6"><div class="ttname"><a href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6">AESCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00324">AESCommon.cpp:324</a></div></div>
<div class="ttc" id="classAES128_html_a42d7548eb5084a2c3e2d5aa5f6f98ba4"><div class="ttname"><a href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4">AES128::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="AES128_8cpp_source.html#l00060">AES128.cpp:60</a></div></div>
<div class="ttc" id="classAES192_html_ade28843e51e262b30eb55791c83fd791"><div class="ttname"><a href="classAES192.html#ade28843e51e262b30eb55791c83fd791">AES192::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Size of a 192-bit AES key in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AES192_8cpp_source.html#l00055">AES192.cpp:55</a></div></div>
<div class="ttc" id="classAESCommon_html_a2d95f6159abfcd92b5841f9018e44296"><div class="ttname"><a href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296">AESCommon::encryptBlock</a></div><div class="ttdeci">void encryptBlock(uint8_t *output, const uint8_t *input)</div><div class="ttdoc">Encrypts a single block using this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="AESCommon_8cpp_source.html#l00266">AESCommon.cpp:266</a></div></div>
<div class="ttc" id="classAES256_html_a3b2cbe56f03a87ec4260be4f8914fb02"><div class="ttname"><a href="classAES256.html#a3b2cbe56f03a87ec4260be4f8914fb02">AES256::AES256</a></div><div class="ttdeci">AES256()</div><div class="ttdoc">Constructs an AES 256-bit block cipher with no initial key. </div><div class="ttdef"><b>Definition:</b> <a href="AES256_8cpp_source.html#l00040">AES256.cpp:40</a></div></div>
<div class="ttc" id="classAESCommon_html"><div class="ttname"><a href="classAESCommon.html">AESCommon</a></div><div class="ttdoc">Abstract base class for AES block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="AES_8h_source.html#l00028">AES.h:28</a></div></div>
<div class="ttc" id="classAES256_html_a6af085d2d6a730ff1e025f982121bbda"><div class="ttname"><a href="classAES256.html#a6af085d2d6a730ff1e025f982121bbda">AES256::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="AES256_8cpp_source.html#l00060">AES256.cpp:60</a></div></div>
<div class="ttc" id="classAES128_html"><div class="ttname"><a href="classAES128.html">AES128</a></div><div class="ttdoc">AES block cipher with 128-bit keys. </div><div class="ttdef"><b>Definition:</b> <a href="AES_8h_source.html#l00056">AES.h:56</a></div></div>
<div class="ttc" id="classAES256_html_af8ed6412bae6fc78274f60344899366a"><div class="ttname"><a href="classAES256.html#af8ed6412bae6fc78274f60344899366a">AES256::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Size of a 256-bit AES key in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="AES256_8cpp_source.html#l00055">AES256.cpp:55</a></div></div>
<div class="ttc" id="classAES128_html_af826ce33301767919bb60f27ad3ff693"><div class="ttname"><a href="classAES128.html#af826ce33301767919bb60f27ad3ff693">AES128::AES128</a></div><div class="ttdeci">AES128()</div><div class="ttdoc">Constructs an AES 128-bit block cipher with no initial key. </div><div class="ttdef"><b>Definition:</b> <a href="AES128_8cpp_source.html#l00040">AES128.cpp:40</a></div></div>
<div class="ttc" id="classAES192_html"><div class="ttname"><a href="classAES192.html">AES192</a></div><div class="ttdoc">AES block cipher with 192-bit keys. </div><div class="ttdef"><b>Definition:</b> <a href="AES_8h_source.html#l00070">AES.h:70</a></div></div>
<div class="ttc" id="classAES192_html_a6f8e457cfffdc12f7dd829e3ac4585ce"><div class="ttname"><a href="classAES192.html#a6f8e457cfffdc12f7dd829e3ac4585ce">AES192::AES192</a></div><div class="ttdeci">AES192()</div><div class="ttdoc">Constructs an AES 192-bit block cipher with no initial key. </div><div class="ttdef"><b>Definition:</b> <a href="AES192_8cpp_source.html#l00040">AES192.cpp:40</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

319
BLAKE2s_8cpp_source.html Normal file
View File

@ -0,0 +1,319 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: BLAKE2s.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">BLAKE2s.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;BLAKE2s.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;utility/EndianUtil.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;utility/RotateUtil.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;utility/ProgMemUtil.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a7345f4e08c19d7a8c278282b46df21a2"> 47</a></span>&#160;<a class="code" href="classBLAKE2s.html#a7345f4e08c19d7a8c278282b46df21a2">BLAKE2s::BLAKE2s</a>()</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">reset</a>();</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a4b3187ecaa3d3c8febfbb40c0f779aa7"> 56</a></span>&#160;<a class="code" href="classBLAKE2s.html#a4b3187ecaa3d3c8febfbb40c0f779aa7">BLAKE2s::~BLAKE2s</a>()</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; clean(state);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#af9f50aac096f92ba27b1b2dd48df4c52"> 61</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classBLAKE2s.html#af9f50aac096f92ba27b1b2dd48df4c52">BLAKE2s::hashSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> 32;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305"> 66</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305">BLAKE2s::blockSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> 64;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// Initialization vectors for BLAKE2s.</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#define BLAKE2s_IV0 0x6A09E667</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV1 0xBB67AE85</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV2 0x3C6EF372</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV3 0xA54FF53A</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV4 0x510E527F</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV5 0x9B05688C</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV6 0x1F83D9AB</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BLAKE2s_IV7 0x5BE0CD19</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02"> 81</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">BLAKE2s::reset</a>()</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; state.h[0] = BLAKE2s_IV0 ^ 0x01010020; <span class="comment">// Default output length of 32.</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; state.h[1] = BLAKE2s_IV1;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; state.h[2] = BLAKE2s_IV2;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; state.h[3] = BLAKE2s_IV3;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; state.h[4] = BLAKE2s_IV4;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; state.h[5] = BLAKE2s_IV5;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; state.h[6] = BLAKE2s_IV6;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; state.h[7] = BLAKE2s_IV7;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; state.finalized = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; state.length = 0;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a91ba6bc39e42002ac61114ced1d0af6d"> 103</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">BLAKE2s::reset</a>(uint8_t outputLength)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; state.h[0] = BLAKE2s_IV0 ^ 0x01010000 ^ outputLength;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; state.h[1] = BLAKE2s_IV1;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; state.h[2] = BLAKE2s_IV2;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; state.h[3] = BLAKE2s_IV3;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; state.h[4] = BLAKE2s_IV4;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; state.h[5] = BLAKE2s_IV5;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; state.h[6] = BLAKE2s_IV6;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; state.h[7] = BLAKE2s_IV7;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; state.finalized = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; state.length = 0;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911"> 118</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911">BLAKE2s::update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *<a class="code" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d">data</a>, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// Reset the hashing process if finalize() was called previously.</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">if</span> (state.finalized)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">reset</a>();</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Break the input up into 512-bit chunks and process each in turn.</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">const</span> uint8_t *d = (<span class="keyword">const</span> uint8_t *)data;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (state.chunkSize == 64) {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// Previous chunk was full and we know that it wasn&#39;t the</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// last chunk, so we can process it now with f0 set to zero.</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; processChunk(0);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; uint8_t size = 64 - state.chunkSize;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (size &gt; len)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; size = len;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; memcpy(((uint8_t *)state.m) + state.chunkSize, d, size);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; state.chunkSize += size;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; state.length += size;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; len -= size;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; d += size;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b"> 144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b">BLAKE2s::finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Finalize the hash if necessary.</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (!state.finalized) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// Pad the last chunk and hash it with f0 set to all-ones.</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; memset(((uint8_t *)state.m) + state.chunkSize, 0, 64 - state.chunkSize);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; processChunk(0xFFFFFFFF);</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Convert the hash into little-endian in the message buffer.</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 8; ++posn)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; state.m[posn] = htole32(state.h[posn]);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; state.finalized = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// Copy the hash to the caller&#39;s return buffer.</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span> (len &gt; 32)</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; len = 32;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; memcpy(hash, state.m, len);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div>
<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d"> 164</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d">BLAKE2s::clear</a>()</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;{</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; clean(state);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">reset</a>();</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;}</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment">// Permutation on the message input state for BLAKE2s.</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint8_t sigma[10][16] PROGMEM = {</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4},</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8},</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13},</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9},</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11},</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10},</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5},</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0}</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;};</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment">// Perform a BLAKE2s quarter round operation.</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="preprocessor">#define quarterRound(a, b, c, d, i) \</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor"> do { \</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="preprocessor"> uint32_t _b = (b); \</span></div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor"> uint32_t _a = (a) + _b + state.m[pgm_read_byte(&amp;(sigma[index][2 * (i)]))]; \</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="preprocessor"> uint32_t _d = rightRotate16((d) ^ _a); \</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="preprocessor"> uint32_t _c = (c) + _d; \</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="preprocessor"> _b = rightRotate12(_b ^ _c); \</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor"> _a += _b + state.m[pgm_read_byte(&amp;(sigma[index][2 * (i) + 1]))]; \</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="preprocessor"> (d) = _d = rightRotate8(_d ^ _a); \</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="preprocessor"> _c += _d; \</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="preprocessor"> (a) = _a; \</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="preprocessor"> (b) = rightRotate7(_b ^ _c); \</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="preprocessor"> (c) = _c; \</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="preprocessor"> } while (0)</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keywordtype">void</span> BLAKE2s::processChunk(uint32_t f0)</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;{</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; uint8_t index;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// Byte-swap the message buffer into little-endian if necessary.</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="preprocessor">#if !defined(CRYPTO_LITTLE_ENDIAN)</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">for</span> (index = 0; index &lt; 16; ++index)</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; state.m[index] = le32toh(state.m[index]);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// Format the block to be hashed.</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; memcpy(state.v, state.h, <span class="keyword">sizeof</span>(state.h));</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; state.v[8] = BLAKE2s_IV0;</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; state.v[9] = BLAKE2s_IV1;</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; state.v[10] = BLAKE2s_IV2;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; state.v[11] = BLAKE2s_IV3;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; state.v[12] = BLAKE2s_IV4 ^ (uint32_t)(state.length);</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; state.v[13] = BLAKE2s_IV5 ^ (uint32_t)(state.length &gt;&gt; 32);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; state.v[14] = BLAKE2s_IV6 ^ f0;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; state.v[15] = BLAKE2s_IV7;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// Perform the 10 BLAKE2s rounds.</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">for</span> (index = 0; index &lt; 10; ++index) {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// Column round.</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; quarterRound(state.v[0], state.v[4], state.v[8], state.v[12], 0);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; quarterRound(state.v[1], state.v[5], state.v[9], state.v[13], 1);</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; quarterRound(state.v[2], state.v[6], state.v[10], state.v[14], 2);</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; quarterRound(state.v[3], state.v[7], state.v[11], state.v[15], 3);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Diagonal round.</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; quarterRound(state.v[0], state.v[5], state.v[10], state.v[15], 4);</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; quarterRound(state.v[1], state.v[6], state.v[11], state.v[12], 5);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; quarterRound(state.v[2], state.v[7], state.v[8], state.v[13], 6);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; quarterRound(state.v[3], state.v[4], state.v[9], state.v[14], 7);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Combine the new and old hash values.</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">for</span> (index = 0; index &lt; 8; ++index)</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; state.h[index] ^= (state.v[index] ^ state.v[index + 8]);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div>
<div class="ttc" id="classBLAKE2s_html_a4b3187ecaa3d3c8febfbb40c0f779aa7"><div class="ttname"><a href="classBLAKE2s.html#a4b3187ecaa3d3c8febfbb40c0f779aa7">BLAKE2s::~BLAKE2s</a></div><div class="ttdeci">virtual ~BLAKE2s()</div><div class="ttdoc">Destroys this BLAKE2s hash object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00056">BLAKE2s.cpp:56</a></div></div>
<div class="ttc" id="classBLAKE2s_html_af9f50aac096f92ba27b1b2dd48df4c52"><div class="ttname"><a href="classBLAKE2s.html#af9f50aac096f92ba27b1b2dd48df4c52">BLAKE2s::hashSize</a></div><div class="ttdeci">size_t hashSize() const </div><div class="ttdoc">Size of the hash result from finalize(). </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00061">BLAKE2s.cpp:61</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a0848885f52df51dc53949d32a206e72d"><div class="ttname"><a href="classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d">BLAKE2s::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00164">BLAKE2s.cpp:164</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a778776d15316c182fdb2df5a89b3ca02"><div class="ttname"><a href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">BLAKE2s::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00081">BLAKE2s.cpp:81</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a9b5403734c20a0591d72a98912e4a305"><div class="ttname"><a href="classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305">BLAKE2s::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00066">BLAKE2s.cpp:66</a></div></div>
<div class="ttc" id="classBLAKE2s_html_aa192da2fa044b03cccaf11e87fdf9911"><div class="ttname"><a href="classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911">BLAKE2s::update</a></div><div class="ttdeci">void update(const void *data, size_t len)</div><div class="ttdoc">Updates the hash with more data. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00118">BLAKE2s.cpp:118</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a751a3d772cbe1cd1dad83dbd09853b1b"><div class="ttname"><a href="classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b">BLAKE2s::finalize</a></div><div class="ttdeci">void finalize(void *hash, size_t len)</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00144">BLAKE2s.cpp:144</a></div></div>
<div class="ttc" id="classBitmap_html_a5eeed27c176eb6e4a2c39ea83444e27d"><div class="ttname"><a href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d">Bitmap::data</a></div><div class="ttdeci">uint8_t * data()</div><div class="ttdoc">Returns a pointer to the start of the bitmap&#39;s data buffer. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00053">Bitmap.h:53</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a7345f4e08c19d7a8c278282b46df21a2"><div class="ttname"><a href="classBLAKE2s.html#a7345f4e08c19d7a8c278282b46df21a2">BLAKE2s::BLAKE2s</a></div><div class="ttdeci">BLAKE2s()</div><div class="ttdoc">Constructs a BLAKE2s hash object. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00047">BLAKE2s.cpp:47</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

166
BLAKE2s_8h_source.html Normal file
View File

@ -0,0 +1,166 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: BLAKE2s.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">BLAKE2s.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_BLAKE2S_H</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_BLAKE2S_H</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Hash.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classBLAKE2s.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBLAKE2s.html">BLAKE2s</a> : <span class="keyword">public</span> <a class="code" href="classHash.html">Hash</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classBLAKE2s.html#a7345f4e08c19d7a8c278282b46df21a2">BLAKE2s</a>();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classBLAKE2s.html#a4b3187ecaa3d3c8febfbb40c0f779aa7">~BLAKE2s</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classBLAKE2s.html#af9f50aac096f92ba27b1b2dd48df4c52">hashSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305">blockSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">reset</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">reset</a>(uint8_t outputLength);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911">update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b">finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d">clear</a>();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">struct </span>{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint32_t h[8];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint32_t m[16];</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint32_t v[16];</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint8_t chunkSize;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">bool</span> finalized;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint64_t length;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; } state;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">void</span> processChunk(uint32_t f0);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;};</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classBLAKE2s_html_a4b3187ecaa3d3c8febfbb40c0f779aa7"><div class="ttname"><a href="classBLAKE2s.html#a4b3187ecaa3d3c8febfbb40c0f779aa7">BLAKE2s::~BLAKE2s</a></div><div class="ttdeci">virtual ~BLAKE2s()</div><div class="ttdoc">Destroys this BLAKE2s hash object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00056">BLAKE2s.cpp:56</a></div></div>
<div class="ttc" id="classBLAKE2s_html_af9f50aac096f92ba27b1b2dd48df4c52"><div class="ttname"><a href="classBLAKE2s.html#af9f50aac096f92ba27b1b2dd48df4c52">BLAKE2s::hashSize</a></div><div class="ttdeci">size_t hashSize() const </div><div class="ttdoc">Size of the hash result from finalize(). </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00061">BLAKE2s.cpp:61</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a0848885f52df51dc53949d32a206e72d"><div class="ttname"><a href="classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d">BLAKE2s::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00164">BLAKE2s.cpp:164</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a778776d15316c182fdb2df5a89b3ca02"><div class="ttname"><a href="classBLAKE2s.html#a778776d15316c182fdb2df5a89b3ca02">BLAKE2s::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00081">BLAKE2s.cpp:81</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a9b5403734c20a0591d72a98912e4a305"><div class="ttname"><a href="classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305">BLAKE2s::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00066">BLAKE2s.cpp:66</a></div></div>
<div class="ttc" id="classHash_html"><div class="ttname"><a href="classHash.html">Hash</a></div><div class="ttdoc">Abstract base class for cryptographic hash algorithms. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8h_source.html#l00029">Hash.h:29</a></div></div>
<div class="ttc" id="classBLAKE2s_html_aa192da2fa044b03cccaf11e87fdf9911"><div class="ttname"><a href="classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911">BLAKE2s::update</a></div><div class="ttdeci">void update(const void *data, size_t len)</div><div class="ttdoc">Updates the hash with more data. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00118">BLAKE2s.cpp:118</a></div></div>
<div class="ttc" id="classBLAKE2s_html"><div class="ttname"><a href="classBLAKE2s.html">BLAKE2s</a></div><div class="ttdoc">BLAKE2s hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8h_source.html#l00028">BLAKE2s.h:28</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a751a3d772cbe1cd1dad83dbd09853b1b"><div class="ttname"><a href="classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b">BLAKE2s::finalize</a></div><div class="ttdeci">void finalize(void *hash, size_t len)</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00144">BLAKE2s.cpp:144</a></div></div>
<div class="ttc" id="classBLAKE2s_html_a7345f4e08c19d7a8c278282b46df21a2"><div class="ttname"><a href="classBLAKE2s.html#a7345f4e08c19d7a8c278282b46df21a2">BLAKE2s::BLAKE2s</a></div><div class="ttdeci">BLAKE2s()</div><div class="ttdoc">Constructs a BLAKE2s hash object. </div><div class="ttdef"><b>Definition:</b> <a href="BLAKE2s_8cpp_source.html#l00047">BLAKE2s.cpp:47</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Bitmap.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4"> 88</a></span>&#160;<a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4" title="Constructs a new in-memory bitmap that is width x height pixels in size.">Bitmap::Bitmap</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4"> 88</a></span>&#160;<a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4">Bitmap::Bitmap</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; : _width(width)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; , _height(height)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; , _stride((width + 7) / 8)</div>
@ -129,34 +130,34 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; memset(fb, 0xFF, size);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;}</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="code" href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e"> 106</a></span>&#160;<a class="code" href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e" title="Destroys this bitmap.">Bitmap::~Bitmap</a>()</div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e"> 106</a></span>&#160;<a class="code" href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e">Bitmap::~Bitmap</a>()</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (fb)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; free(fb);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div>
<div class="line"><a name="l00174"></a><span class="lineno"><a class="code" href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1"> 174</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1" title="Clears the entire bitmap to the specified color.">Bitmap::clear</a>(<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1"> 174</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1">Bitmap::clear</a>(<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;{</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size = _stride * _height;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (color == <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>)</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (color == <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; memset(fb, 0xFF, size);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; memset(fb, 0x00, size);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203"> 191</a></span>&#160;<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Bitmap::Color</a> <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203" title="Returns the color of the pixel at (x, y); either Black or White.">Bitmap::pixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y)<span class="keyword"> const</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203"> 191</a></span>&#160;<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Bitmap::Color</a> <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">Bitmap::pixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y)<span class="keyword"> const</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)x) &gt;= ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)_width) ||</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)y) &gt;= ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)_height))</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; uint8_t *ptr = fb + y * _stride + (x &gt;&gt; 3);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (*ptr &amp; ((uint8_t)0x80) &gt;&gt; (x &amp; 0x07))</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114"> 208</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">Bitmap::setPixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classBitmap.html#aac994b75418e7d37ec66829437329114"> 208</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">Bitmap::setPixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)x) &gt;= ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)_width) ||</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)y) &gt;= ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)_height))</div>
@ -168,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; *ptr |= (((uint8_t)0x80) &gt;&gt; (x &amp; 0x07));</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767"> 225</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">Bitmap::drawLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767"> 225</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">Bitmap::drawLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Midpoint line scan-conversion algorithm from &quot;Computer Graphics:</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// Principles and Practice&quot;, Second Edition, Foley, van Dam, et al.</span></div>
@ -192,7 +193,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; d = 2 * dy - dx;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; incrE = 2 * dy;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; incrNE = 2 * (dy - dx);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">while</span> (x1 != x2) {</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (d &lt;= 0) {</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; d += incrE;</div>
@ -201,13 +202,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; y1 += ystep;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; x1 += xstep;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; d = 2 * dx - dy;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; incrE = 2 * dx;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; incrNE = 2 * (dx - dy);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">while</span> (y1 != y2) {</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (d &lt;= 0) {</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; d += incrE;</div>
@ -216,12 +217,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; x1 += xstep;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; y1 += ystep;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x1, y1, color);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;}</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div>
<div class="line"><a name="l00286"></a><span class="lineno"><a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc"> 286</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc" title="Draws a rectangle from (x1, y1) to (x2, y2), with the outline in borderColor and the interior filled ...">Bitmap::drawRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> borderColor, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor)</div>
<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc"> 286</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc">Bitmap::drawRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> borderColor, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor)</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;{</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">int</span> temp;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (x1 &gt; x2) {</div>
@ -235,21 +236,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; y2 = temp;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (fillColor == borderColor) {</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x1, y1, x2 - x1 + 1, y2 - y1 + 1, fillColor);</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x1, y1, x2 - x1 + 1, y2 - y1 + 1, fillColor);</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(x1, y1, x2, y1, borderColor);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(x1, y1, x2, y1, borderColor);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (y1 &lt; y2)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(x2, y1 + 1, x2, y2, borderColor);</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(x2, y1 + 1, x2, y2, borderColor);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (x1 &lt; x2)</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(x2 - 1, y2, x1, y2, borderColor);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(x2 - 1, y2, x1, y2, borderColor);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (y1 &lt; (y2 - 1))</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(x1, y2 - 1, x1, y1 + 1, borderColor);</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (fillColor != <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e" title="Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...">NoFill</a>)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x1 + 1, y1 + 1, x2 - x1 - 1, y2 - y1 - 1, fillColor);</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(x1, y2 - 1, x1, y1 + 1, borderColor);</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (fillColor != <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">NoFill</a>)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x1 + 1, y1 + 1, x2 - x1 - 1, y2 - y1 - 1, fillColor);</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
<div class="line"><a name="l00334"></a><span class="lineno"><a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa"> 334</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa" title="Draws a circle with a specific center (centerX, centerY) and radius, with the outline in borderColor ...">Bitmap::drawCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> borderColor, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor)</div>
<div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa"> 334</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa">Bitmap::drawCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> borderColor, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor)</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;{</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">// Midpoint circle scan-conversion algorithm using second-order</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="comment">// differences from &quot;Computer Graphics: Principles and Practice&quot;,</span></div>
@ -278,21 +279,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div>
<div class="line"><a name="l00388"></a><span class="lineno"><a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72"> 388</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72" title="Draws bitmap at (x, y) in color.">Bitmap::drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72"> 388</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">Bitmap::drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html">Bitmap</a> &amp;bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;{</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordtype">int</span> w = bitmap.<a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>();</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordtype">int</span> s = bitmap.<a class="code" href="classBitmap.html#af30df263729385ea2330effe3c80a1bc" title="Returns the number of bytes in each line of the bitmap&#39;s data() buffer.">stride</a>();</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordtype">int</span> h = bitmap.<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>();</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> invColor = !color;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordtype">int</span> w = bitmap.<a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>();</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordtype">int</span> s = bitmap.<a class="code" href="classBitmap.html#af30df263729385ea2330effe3c80a1bc">stride</a>();</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordtype">int</span> h = bitmap.<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>();</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> invColor = !color;</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">for</span> (uint8_t by = 0; by &lt; h; ++by) {</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> uint8_t *line = bitmap.<a class="code" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d" title="Returns a pointer to the start of the bitmap&#39;s data buffer.">data</a>() + by * s;</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> uint8_t *line = bitmap.<a class="code" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d">data</a>() + by * s;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; uint8_t mask = 0x80;</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; uint8_t value = *line++;</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">for</span> (uint8_t bx = 0; bx &lt; w; ++bx) {</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (value &amp; mask)</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + bx, y + by, invColor);</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + bx, y + by, invColor);</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + bx, y + by, color);</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + bx, y + by, color);</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; mask &gt;&gt;= 1;</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span> (!mask) {</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; mask = 0x80;</div>
@ -302,21 +303,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;}</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div>
<div class="line"><a name="l00425"></a><span class="lineno"><a class="code" href="classBitmap.html#a5e4f23e8f14e193410b5f071149401e4"> 425</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72" title="Draws bitmap at (x, y) in color.">Bitmap::drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">Bitmap::ProgMem</a> bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00425"></a><span class="lineno"><a class="line" href="classBitmap.html#a5e4f23e8f14e193410b5f071149401e4"> 425</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">Bitmap::drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a> bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;{</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; uint8_t w = pgm_read_byte(bitmap);</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; uint8_t s = (w + 7) &gt;&gt; 3;</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; uint8_t h = pgm_read_byte(bitmap + 1);</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> invColor = !color;</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> invColor = !color;</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">for</span> (uint8_t by = 0; by &lt; h; ++by) {</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> uint8_t *line = ((<span class="keyword">const</span> uint8_t *)bitmap) + 2 + by * s;</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; uint8_t mask = 0x80;</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; uint8_t value = pgm_read_byte(line);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">for</span> (uint8_t bx = 0; bx &lt; w; ++bx) {</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (value &amp; mask)</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + bx, y + by, color);</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + bx, y + by, color);</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + bx, y + by, invColor);</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + bx, y + by, invColor);</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; mask &gt;&gt;= 1;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span> (!mask) {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; mask = 0x80;</div>
@ -334,17 +335,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define fontFirstChar(font) (pgm_read_byte((font) + 4))</span></div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define fontCharCount(font) (pgm_read_byte((font) + 5))</span></div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00526"></a><span class="lineno"><a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0"> 526</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0" title="Draws the len characters of str at (x, y).">Bitmap::drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len)</div>
<div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0"> 526</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0">Bitmap::drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len)</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;{</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">if</span> (!_font)</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; uint8_t <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a> = fontHeight(_font);</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; uint8_t <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a> = fontHeight(_font);</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span> (len &lt; 0)</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; len = strlen(str);</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">while</span> (len-- &gt; 0) {</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; x += <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd" title="Draws a single character ch at (x, y).">drawChar</a>(x, y, *str++);</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; x += <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd">drawChar</a>(x, y, *str++);</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">if</span> (len &gt; 0) {</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y, 1, height, !_textColor);</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y, 1, height, !_textColor);</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; ++x;</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">if</span> (x &gt;= _width)</div>
@ -352,17 +353,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;}</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div>
<div class="line"><a name="l00555"></a><span class="lineno"><a class="code" href="classBitmap.html#a802f5d6bd19a3727670e61e7a88a0cac"> 555</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0" title="Draws the len characters of str at (x, y).">Bitmap::drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start, <span class="keywordtype">int</span> len)</div>
<div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="classBitmap.html#a802f5d6bd19a3727670e61e7a88a0cac"> 555</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0">Bitmap::drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start, <span class="keywordtype">int</span> len)</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (!_font)</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; uint8_t <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a> = fontHeight(_font);</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; uint8_t <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a> = fontHeight(_font);</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">if</span> (len &lt; 0)</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; len = str.length() - start;</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">while</span> (len-- &gt; 0) {</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; x += <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd" title="Draws a single character ch at (x, y).">drawChar</a>(x, y, str[start++]);</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; x += <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd">drawChar</a>(x, y, str[start++]);</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (len &gt; 0) {</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y, 1, height, !_textColor);</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y, 1, height, !_textColor);</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; ++x;</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (x &gt;= _width)</div>
@ -370,14 +371,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;}</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div>
<div class="line"><a name="l00585"></a><span class="lineno"><a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd"> 585</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd" title="Draws a single character ch at (x, y).">Bitmap::drawChar</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">char</span> ch)</div>
<div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd"> 585</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd">Bitmap::drawChar</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">char</span> ch)</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; uint8_t <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a> = fontHeight(_font);</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; uint8_t <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a> = fontHeight(_font);</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39; &#39;</span>) {</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// Font may not have space, or it is zero-width. Calculate</span></div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// the real size and fill the space.</span></div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">int</span> spaceWidth = <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd" title="Returns the width in pixels of ch in the current font().">charWidth</a>(<span class="charliteral">&#39;n&#39;</span>);</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y, spaceWidth, height, !_textColor);</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">int</span> spaceWidth = <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">charWidth</a>(<span class="charliteral">&#39;n&#39;</span>);</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y, spaceWidth, height, !_textColor);</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">return</span> spaceWidth;</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; uint8_t first = fontFirstChar(_font);</div>
@ -387,12 +388,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; index -= first;</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; uint8_t heightBytes = (height + 7) &gt;&gt; 3;;</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; uint8_t <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; uint8_t <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">const</span> uint8_t *image;</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span> (fontIsFixed(_font)) {</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// Fixed-width font.</span></div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; width = fontWidth(_font);</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; image = ((<span class="keyword">const</span> uint8_t *)_font) + 6 + index * heightBytes * <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; image = ((<span class="keyword">const</span> uint8_t *)_font) + 6 + index * heightBytes * <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// Variable-width font.</span></div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; width = pgm_read_byte(_font + 6 + index);</div>
@ -404,9 +405,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">if</span> ((x + width) &lt;= 0 || (y + height) &lt;= 0)</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>; <span class="comment">// Character is off the top or left of the screen.</span></div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> invColor = !_textColor;</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">for</span> (uint8_t cx = 0; cx &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>; ++cx) {</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>; <span class="comment">// Character is off the top or left of the screen.</span></div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> invColor = !_textColor;</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">for</span> (uint8_t cx = 0; cx &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>; ++cx) {</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">for</span> (uint8_t cy = 0; cy &lt; heightBytes; ++cy) {</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; uint8_t value = pgm_read_byte(image + cy * width + cx);</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordtype">int</span> posn;</div>
@ -417,18 +418,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">for</span> (uint8_t bit = 0; bit &lt; 8; ++bit) {</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">if</span> ((posn + bit) &gt;= (cy * 8) &amp;&amp; (posn + bit) &lt;= height) {</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">if</span> (value &amp; 0x01)</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + cx, y + posn + bit, _textColor);</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + cx, y + posn + bit, _textColor);</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + cx, y + posn + bit, invColor);</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + cx, y + posn + bit, invColor);</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; value &gt;&gt;= 1;</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;}</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div>
<div class="line"><a name="l00650"></a><span class="lineno"><a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd"> 650</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd" title="Returns the width in pixels of ch in the current font().">Bitmap::charWidth</a>(<span class="keywordtype">char</span> ch)<span class="keyword"> const</span></div>
<div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd"> 650</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">Bitmap::charWidth</a>(<span class="keywordtype">char</span> ch)<span class="keyword"> const</span></div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; uint8_t index = (uint8_t)ch;</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span> (!_font)</div>
@ -445,33 +446,33 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">return</span> pgm_read_byte(_font + 6 + (index - first));</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;}</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div>
<div class="line"><a name="l00675"></a><span class="lineno"><a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a"> 675</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a" title="Returns the width in pixels of the len characters of str in the current font(), including inter-chara...">Bitmap::textWidth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
<div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a"> 675</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a">Bitmap::textWidth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a> = 0;</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a> = 0;</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span> (len &lt; 0)</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; len = strlen(str);</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">while</span> (len-- &gt; 0) {</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; width += <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd" title="Returns the width in pixels of ch in the current font().">charWidth</a>(*str++);</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; width += <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">charWidth</a>(*str++);</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span> (len &gt; 0)</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; ++<a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; ++<a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;}</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;</div>
<div class="line"><a name="l00697"></a><span class="lineno"><a class="code" href="classBitmap.html#a8ca70aa0f8f722a228358bffe794e925"> 697</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a" title="Returns the width in pixels of the len characters of str in the current font(), including inter-chara...">Bitmap::textWidth</a>(<span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
<div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="classBitmap.html#a8ca70aa0f8f722a228358bffe794e925"> 697</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a">Bitmap::textWidth</a>(<span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start, <span class="keywordtype">int</span> len)<span class="keyword"> const</span></div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a> = 0;</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a> = 0;</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">if</span> (len &lt; 0)</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; len = str.length() - start;</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">while</span> (len-- &gt; 0) {</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; width += <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd" title="Returns the width in pixels of ch in the current font().">charWidth</a>(str[start++]);</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; width += <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">charWidth</a>(str[start++]);</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">if</span> (len &gt; 0)</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; ++<a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; ++<a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>;</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>;</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;}</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div>
<div class="line"><a name="l00716"></a><span class="lineno"><a class="code" href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4"> 716</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4" title="Returns the height in pixels of the current text drawing font(); or zero if font() is not set...">Bitmap::textHeight</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4"> 716</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4">Bitmap::textHeight</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">if</span> (_font)</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">return</span> fontHeight(_font);</div>
@ -479,7 +480,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;}</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div>
<div class="line"><a name="l00738"></a><span class="lineno"><a class="code" href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c"> 738</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c" title="Copies the width x height pixels starting at top-left corner (x, y) to (destX, destY) in the bitmap d...">Bitmap::copy</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> *dest, <span class="keywordtype">int</span> destX, <span class="keywordtype">int</span> destY)</div>
<div class="line"><a name="l00738"></a><span class="lineno"><a class="line" href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c"> 738</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c">Bitmap::copy</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html">Bitmap</a> *dest, <span class="keywordtype">int</span> destX, <span class="keywordtype">int</span> destY)</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;{</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">if</span> (dest == <span class="keyword">this</span>) {</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// Copying to within the same bitmap, so copy in a direction</span></div>
@ -488,44 +489,44 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// Copying to a different bitmap.</span></div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">while</span> (height &gt; 0) {</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = 0; tempx &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>; ++tempx)</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; dest-&gt;<a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(destX + tempx, destY, <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203" title="Returns the color of the pixel at (x, y); either Black or White.">pixel</a>(x + tempx, y));</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = 0; tempx &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>; ++tempx)</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; dest-&gt;<a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(destX + tempx, destY, <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">pixel</a>(x + tempx, y));</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; ++y;</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; ++destY;</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; --<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>;</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; --<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>;</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;}</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;</div>
<div class="line"><a name="l00762"></a><span class="lineno"><a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2"> 762</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">Bitmap::fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2"> 762</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">Bitmap::fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;{</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">while</span> (height &gt; 0) {</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> temp = 0; temp &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>; ++temp)</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + temp, y, color);</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> temp = 0; temp &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>; ++temp)</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + temp, y, color);</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; ++y;</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; --<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>;</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; --<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>;</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;</div>
<div class="line"><a name="l00785"></a><span class="lineno"><a class="code" href="classBitmap.html#ac661adab340858b541a2fe44e6303f56"> 785</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">Bitmap::fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">Bitmap::ProgMem</a> pattern, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00785"></a><span class="lineno"><a class="line" href="classBitmap.html#ac661adab340858b541a2fe44e6303f56"> 785</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">Bitmap::fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a> pattern, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;{</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; uint8_t w = pgm_read_byte(pattern);</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; uint8_t s = (w + 7) &gt;&gt; 3;</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; uint8_t h = pgm_read_byte(pattern + 1);</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">if</span> (!w || !h)</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> invColor = !color;</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempy = 0; tempy &lt; <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>; ++tempy) {</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> invColor = !color;</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempy = 0; tempy &lt; <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>; ++tempy) {</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keyword">const</span> uint8_t *startLine = ((<span class="keyword">const</span> uint8_t *)pattern) + 2 + (tempy % h) * s;</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keyword">const</span> uint8_t *line = startLine;</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; uint8_t mask = 0x80;</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; uint8_t value = pgm_read_byte(line++);</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordtype">int</span> bit = 0;</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = 0; tempx &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>; ++tempx) {</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = 0; tempx &lt; <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>; ++tempx) {</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">if</span> (value &amp; mask)</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + tempx, y + tempy, color);</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + tempx, y + tempy, color);</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + tempx, y + tempy, invColor);</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + tempx, y + tempy, invColor);</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">if</span> (++bit &gt;= w) {</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; mask = 0x80;</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; line = startLine;</div>
@ -542,7 +543,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;}</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;</div>
<div class="line"><a name="l00841"></a><span class="lineno"><a class="code" href="classBitmap.html#af79ad4432297ff453fddc55625fec485"> 841</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a" title="Scrolls the entire contents of the bitmap by dx and dy.">Bitmap::scroll</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor)</div>
<div class="line"><a name="l00841"></a><span class="lineno"><a class="line" href="classBitmap.html#af79ad4432297ff453fddc55625fec485"> 841</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">Bitmap::scroll</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor)</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;{</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="comment">// Bail out if no scrolling at all.</span></div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">if</span> (!dx &amp;&amp; !dy)</div>
@ -579,30 +580,30 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="comment">// Fill the pixels that were uncovered by the scroll.</span></div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">if</span> (dy &lt; 0) {</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y + height + dy, width, -dy, fillColor);</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y + height + dy, width, -dy, fillColor);</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">if</span> (dx &lt; 0)</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x + width + dx, y, -dx, height + dy, fillColor);</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x + width + dx, y, -dx, height + dy, fillColor);</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dx &gt; 0)</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y, dx, height + dy, fillColor);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y, dx, height + dy, fillColor);</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dy &gt; 0) {</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y, width, -dy, fillColor);</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y, width, -dy, fillColor);</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keywordflow">if</span> (dx &lt; 0)</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x + width + dx, y + dy, -dx, height - dy, fillColor);</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x + width + dx, y + dy, -dx, height - dy, fillColor);</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dx &gt; 0)</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y + dy, dx, height - dy, fillColor);</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y + dy, dx, height - dy, fillColor);</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dx &lt; 0) {</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x + width + dx, y, -dx, height, fillColor);</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x + width + dx, y, -dx, height, fillColor);</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dx &gt; 0) {</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(x, y, dx, height, fillColor);</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(x, y, dx, height, fillColor);</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; }</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;}</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;</div>
<div class="line"><a name="l00902"></a><span class="lineno"><a class="code" href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd"> 902</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd" title="Inverts the width x height pixels starting at top-left corner (x, y).">Bitmap::invert</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)</div>
<div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd"> 902</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd">Bitmap::invert</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;{</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">while</span> (height &gt; 0) {</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = x + width - 1; tempx &gt;= x; --tempx)</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(tempx, y, !<a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203" title="Returns the color of the pixel at (x, y); either Black or White.">pixel</a>(tempx, y));</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; --<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>;</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(tempx, y, !<a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">pixel</a>(tempx, y));</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; --<a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>;</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; ++y;</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; }</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;}</div>
@ -614,14 +615,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordtype">int</span> y = y1 - tempy + y3;</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="keywordtype">int</span> x = x3 - x1;</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = x1; tempx &lt;= x2; ++tempx)</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + tempx, y, <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203" title="Returns the color of the pixel at (x, y); either Black or White.">pixel</a>(tempx, tempy));</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + tempx, y, <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">pixel</a>(tempx, tempy));</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; }</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempy = y2; tempy &gt;= y1; --tempy) {</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordtype">int</span> y = y1 - tempy + y3;</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordtype">int</span> x = x3 - x1;</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> tempx = x2; tempx &gt;= x1; --tempx)</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(x + tempx, y, <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203" title="Returns the color of the pixel at (x, y); either Black or White.">pixel</a>(tempx, tempy));</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(x + tempx, y, <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">pixel</a>(tempx, tempy));</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; }</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; }</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;}</div>
@ -629,45 +630,73 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;<span class="keywordtype">void</span> Bitmap::drawCirclePoints(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, Color borderColor, Color fillColor)</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;{</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (x != y) {</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX + x, centerY + y, borderColor);</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX + y, centerY + x, borderColor);</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX + y, centerY - x, borderColor);</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX + x, centerY - y, borderColor);</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX - x, centerY - y, borderColor);</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX - y, centerY - x, borderColor);</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX - y, centerY + x, borderColor);</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX - x, centerY + y, borderColor);</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">if</span> (fillColor != <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e" title="Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...">NoFill</a>) {</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX + x, centerY + y, borderColor);</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX + y, centerY + x, borderColor);</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX + y, centerY - x, borderColor);</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX + x, centerY - y, borderColor);</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX - x, centerY - y, borderColor);</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX - y, centerY - x, borderColor);</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX - y, centerY + x, borderColor);</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX - x, centerY + y, borderColor);</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">if</span> (fillColor != <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">NoFill</a>) {</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keywordflow">if</span> (radius &gt; 1) {</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(centerX - x + 1, centerY + y, centerX + x - 1, centerY + y, fillColor);</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(centerX - y + 1, centerY + x, centerX + y - 1, centerY + x, fillColor);</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(centerX - x + 1, centerY - y, centerX + x - 1, centerY - y, fillColor);</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(centerX - y + 1, centerY - x, centerX + y - 1, centerY - x, fillColor);</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(centerX - x + 1, centerY + y, centerX + x - 1, centerY + y, fillColor);</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(centerX - y + 1, centerY + x, centerX + y - 1, centerY + x, fillColor);</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(centerX - x + 1, centerY - y, centerX + x - 1, centerY - y, fillColor);</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(centerX - y + 1, centerY - x, centerX + y - 1, centerY - x, fillColor);</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (radius == 1) {</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX, centerY, fillColor);</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX, centerY, fillColor);</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; }</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; }</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX + x, centerY + y, borderColor);</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX + y, centerY - x, borderColor);</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX - x, centerY - y, borderColor);</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX - y, centerY + x, borderColor);</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">if</span> (fillColor != <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e" title="Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...">NoFill</a>) {</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX + x, centerY + y, borderColor);</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX + y, centerY - x, borderColor);</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX - x, centerY - y, borderColor);</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX - y, centerY + x, borderColor);</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">if</span> (fillColor != <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">NoFill</a>) {</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">if</span> (radius &gt; 1) {</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(centerX - x + 1, centerY + y, centerX + x - 1, centerY + y, fillColor);</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(centerX - x + 1, centerY - y, centerX + x - 1, centerY - y, fillColor);</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(centerX - x + 1, centerY + y, centerX + x - 1, centerY + y, fillColor);</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(centerX - x + 1, centerY - y, centerX + x - 1, centerY - y, fillColor);</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (radius == 1) {</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(centerX, centerY, fillColor);</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(centerX, centerY, fillColor);</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; }</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; }</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;}</div>
<div class="ttc" id="classBitmap_html_a76c3b49e535761f07c553e7336daf523"><div class="ttname"><a href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">Bitmap::width</a></div><div class="ttdeci">int width() const </div><div class="ttdoc">Returns the width of the bitmap in pixels. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00048">Bitmap.h:48</a></div></div>
<div class="ttc" id="classBitmap_html_ab22fe1f3871934987a670b559f67c67c"><div class="ttname"><a href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c">Bitmap::copy</a></div><div class="ttdeci">void copy(int x, int y, int width, int height, Bitmap *dest, int destX, int destY)</div><div class="ttdoc">Copies the width x height pixels starting at top-left corner (x, y) to (destX, destY) in the bitmap d...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00738">Bitmap.cpp:738</a></div></div>
<div class="ttc" id="classBitmap_html_ae08eb6f9086f9923d8dc83a469ae4c4a"><div class="ttname"><a href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">Bitmap::scroll</a></div><div class="ttdeci">void scroll(int dx, int dy, Color fillColor=Black)</div><div class="ttdoc">Scrolls the entire contents of the bitmap by dx and dy. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00135">Bitmap.h:135</a></div></div>
<div class="ttc" id="classBitmap_html"><div class="ttname"><a href="classBitmap.html">Bitmap</a></div><div class="ttdoc">Represents a monochrome bitmap within main memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00032">Bitmap.h:32</a></div></div>
<div class="ttc" id="classBitmap_html_aac61e3f7f625db568e37d88b52b3b2fc"><div class="ttname"><a href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc">Bitmap::drawRect</a></div><div class="ttdeci">void drawRect(int x1, int y1, int x2, int y2, Color borderColor=White, Color fillColor=NoFill)</div><div class="ttdoc">Draws a rectangle from (x1, y1) to (x2, y2), with the outline in borderColor and the interior filled ...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00286">Bitmap.cpp:286</a></div></div>
<div class="ttc" id="classBitmap_html_aac994b75418e7d37ec66829437329114"><div class="ttname"><a href="classBitmap.html#aac994b75418e7d37ec66829437329114">Bitmap::setPixel</a></div><div class="ttdeci">void setPixel(int x, int y, Color color)</div><div class="ttdoc">Sets the pixel at (x, y) to color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00208">Bitmap.cpp:208</a></div></div>
<div class="ttc" id="classBitmap_html_aa0a84f3694e343d68e7021552c69f767"><div class="ttname"><a href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">Bitmap::drawLine</a></div><div class="ttdeci">void drawLine(int x1, int y1, int x2, int y2, Color color=White)</div><div class="ttdoc">Draws a line from (x1, y1) to (x2, y2) in color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00225">Bitmap.cpp:225</a></div></div>
<div class="ttc" id="classBitmap_html_a491e9c0bb20ddf5a5eb4933077c8ed72"><div class="ttname"><a href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">Bitmap::drawBitmap</a></div><div class="ttdeci">void drawBitmap(int x, int y, const Bitmap &amp;bitmap, Color color=White)</div><div class="ttdoc">Draws bitmap at (x, y) in color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00388">Bitmap.cpp:388</a></div></div>
<div class="ttc" id="classBitmap_html_a933763a4f3cba79fbcf97ae6d0a864aa"><div class="ttname"><a href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa">Bitmap::drawCircle</a></div><div class="ttdeci">void drawCircle(int centerX, int centerY, int radius, Color borderColor=White, Color fillColor=NoFill)</div><div class="ttdoc">Draws a circle with a specific center (centerX, centerY) and radius, with the outline in borderColor ...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00334">Bitmap.cpp:334</a></div></div>
<div class="ttc" id="classBitmap_html_a1a11f29863ee7f36a3b15c91963102bd"><div class="ttname"><a href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd">Bitmap::drawChar</a></div><div class="ttdeci">int drawChar(int x, int y, char ch)</div><div class="ttdoc">Draws a single character ch at (x, y). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00585">Bitmap.cpp:585</a></div></div>
<div class="ttc" id="classBitmap_html_a2fcc98fd7580932b218134126a29ce43"><div class="ttname"><a href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a></div><div class="ttdeci">PGM_VOID_P ProgMem</div><div class="ttdoc">Type that represents a bitmap within program memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00041">Bitmap.h:41</a></div></div>
<div class="ttc" id="classBitmap_html_a88d386944a7017aa776a177b10d8b2ba"><div class="ttname"><a href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Bitmap::Color</a></div><div class="ttdeci">uint8_t Color</div><div class="ttdoc">Type that represents the color of a pixel in a bitmap. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00040">Bitmap.h:40</a></div></div>
<div class="ttc" id="classBitmap_html_adcd4e3dc7594421e647b0f52da9a41a3"><div class="ttname"><a href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">Bitmap::height</a></div><div class="ttdeci">int height() const </div><div class="ttdoc">Returns the height of the bitmap in pixels. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00049">Bitmap.h:49</a></div></div>
<div class="ttc" id="classBitmap_html_aa89170263dc1f51f6366c1907119715e"><div class="ttname"><a href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">Bitmap::NoFill</a></div><div class="ttdeci">static const Color NoFill</div><div class="ttdoc">Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00046">Bitmap.h:46</a></div></div>
<div class="ttc" id="classBitmap_html_a0f7607b1c7867987f4500d490a666e8a"><div class="ttname"><a href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a">Bitmap::textWidth</a></div><div class="ttdeci">int textWidth(const char *str, int len=-1) const </div><div class="ttdoc">Returns the width in pixels of the len characters of str in the current font(), including inter-chara...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00675">Bitmap.cpp:675</a></div></div>
<div class="ttc" id="classBitmap_html_a99da820f9280aace6b512801d5a5e2b2"><div class="ttname"><a href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">Bitmap::fill</a></div><div class="ttdeci">void fill(int x, int y, int width, int height, Color color)</div><div class="ttdoc">Fills the width x height pixels starting at top-left corner (x, y) with color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00762">Bitmap.cpp:762</a></div></div>
<div class="ttc" id="classBitmap_html_a5eeed27c176eb6e4a2c39ea83444e27d"><div class="ttname"><a href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d">Bitmap::data</a></div><div class="ttdeci">uint8_t * data()</div><div class="ttdoc">Returns a pointer to the start of the bitmap&#39;s data buffer. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00053">Bitmap.h:53</a></div></div>
<div class="ttc" id="classBitmap_html_a628bb694fcfe6eab619a4f1e152d41c4"><div class="ttname"><a href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4">Bitmap::textHeight</a></div><div class="ttdeci">int textHeight() const </div><div class="ttdoc">Returns the height in pixels of the current text drawing font(); or zero if font() is not set...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00716">Bitmap.cpp:716</a></div></div>
<div class="ttc" id="classBitmap_html_a9b79ac13077ca865e4515510297780bd"><div class="ttname"><a href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">Bitmap::charWidth</a></div><div class="ttdeci">int charWidth(char ch) const </div><div class="ttdoc">Returns the width in pixels of ch in the current font(). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00650">Bitmap.cpp:650</a></div></div>
<div class="ttc" id="classBitmap_html_a40526748415c8bbc58a8510d636c20f4"><div class="ttname"><a href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4">Bitmap::Bitmap</a></div><div class="ttdeci">Bitmap(int width, int height)</div><div class="ttdoc">Constructs a new in-memory bitmap that is width x height pixels in size. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00088">Bitmap.cpp:88</a></div></div>
<div class="ttc" id="classBitmap_html_a39b6754cfe50a457bbfdb1980fd87eb7"><div class="ttname"><a href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">Bitmap::White</a></div><div class="ttdeci">static const Color White</div><div class="ttdoc">Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00045">Bitmap.h:45</a></div></div>
<div class="ttc" id="classBitmap_html_af30df263729385ea2330effe3c80a1bc"><div class="ttname"><a href="classBitmap.html#af30df263729385ea2330effe3c80a1bc">Bitmap::stride</a></div><div class="ttdeci">int stride() const </div><div class="ttdoc">Returns the number of bytes in each line of the bitmap&#39;s data() buffer. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00050">Bitmap.h:50</a></div></div>
<div class="ttc" id="classBitmap_html_a2c7faeeb89d3624b5bbca58871785adc"><div class="ttname"><a href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Bitmap::Black</a></div><div class="ttdeci">static const Color Black</div><div class="ttdoc">Color value corresponding to &quot;black&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00044">Bitmap.h:44</a></div></div>
<div class="ttc" id="classBitmap_html_a839dc8fab05a5ebf7a6b2e61436b2fa1"><div class="ttname"><a href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1">Bitmap::clear</a></div><div class="ttdeci">void clear(Color color=Black)</div><div class="ttdoc">Clears the entire bitmap to the specified color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00174">Bitmap.cpp:174</a></div></div>
<div class="ttc" id="classBitmap_html_a6d85556bcc9fac91d33f0f6f7a6430dd"><div class="ttname"><a href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd">Bitmap::invert</a></div><div class="ttdeci">void invert(int x, int y, int width, int height)</div><div class="ttdoc">Inverts the width x height pixels starting at top-left corner (x, y). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00902">Bitmap.cpp:902</a></div></div>
<div class="ttc" id="classBitmap_html_a3e9bcbfb584d5020bd6f0a313ee275f0"><div class="ttname"><a href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0">Bitmap::drawText</a></div><div class="ttdeci">void drawText(int x, int y, const char *str, int len=-1)</div><div class="ttdoc">Draws the len characters of str at (x, y). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00526">Bitmap.cpp:526</a></div></div>
<div class="ttc" id="classBitmap_html_a72d2a301ec1eb1c8d0f3d64823659a8e"><div class="ttname"><a href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e">Bitmap::~Bitmap</a></div><div class="ttdeci">~Bitmap()</div><div class="ttdoc">Destroys this bitmap. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00106">Bitmap.cpp:106</a></div></div>
<div class="ttc" id="classBitmap_html_a35aa38b377d509d6c4f061a0b988d203"><div class="ttname"><a href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">Bitmap::pixel</a></div><div class="ttdeci">Color pixel(int x, int y) const </div><div class="ttdoc">Returns the color of the pixel at (x, y); either Black or White. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00191">Bitmap.cpp:191</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Bitmap.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -115,124 +116,164 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;avr/pgmspace.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">class </span><a class="code" href="classDMD.html" title="Handle large dot matrix displays composed of LED&#39;s.">DMD</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">class </span><a class="code" href="classDMD.html">DMD</a>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">class </span>String;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="classBitmap.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a></div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classBitmap.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBitmap.html">Bitmap</a></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4" title="Constructs a new in-memory bitmap that is width x height pixels in size.">Bitmap</a>(<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>, <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e" title="Destroys this bitmap.">~Bitmap</a>();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4">Bitmap</a>(<span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>, <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e">~Bitmap</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="classBitmap.html#a3846a240722e847d3cf11f701da1ce7b"> 38</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBitmap.html#a3846a240722e847d3cf11f701da1ce7b" title="Returns true if the memory for this bitmap is valid; false otherwise.">isValid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fb != 0; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classBitmap.html#a3846a240722e847d3cf11f701da1ce7b"> 38</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBitmap.html#a3846a240722e847d3cf11f701da1ce7b">isValid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fb != 0; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba"> 40</a></span>&#160; <span class="keyword">typedef</span> uint8_t <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43"> 41</a></span>&#160; <span class="keyword">typedef</span> PGM_VOID_P <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">ProgMem</a>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf"> 42</a></span>&#160; <span class="keyword">typedef</span> PGM_VOID_P <a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf" title="Type that represents a font within program memory.">Font</a>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba"> 40</a></span>&#160; <span class="keyword">typedef</span> uint8_t <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43"> 41</a></span>&#160; <span class="keyword">typedef</span> PGM_VOID_P <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">ProgMem</a>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf"> 42</a></span>&#160; <span class="keyword">typedef</span> PGM_VOID_P <a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf">Font</a>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc"> 44</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a> = 0;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7"> 45</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a> = 1;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e"> 46</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e" title="Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...">NoFill</a> = 2;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc"> 44</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a> = 0;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7"> 45</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a> = 1;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e"> 46</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">NoFill</a> = 2;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523"> 48</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523" title="Returns the width of the bitmap in pixels.">width</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _width; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3"> 49</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3" title="Returns the height of the bitmap in pixels.">height</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _height; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="classBitmap.html#af30df263729385ea2330effe3c80a1bc"> 50</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#af30df263729385ea2330effe3c80a1bc" title="Returns the number of bytes in each line of the bitmap&#39;s data() buffer.">stride</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _stride; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="code" href="classBitmap.html#ad18d3d5a1e77d541a95e93ad1f958411"> 51</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#ad18d3d5a1e77d541a95e93ad1f958411" title="Returns the number of bits per pixel for the bitmap; always 1.">bitsPerPixel</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523"> 48</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">width</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _width; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3"> 49</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">height</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _height; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classBitmap.html#af30df263729385ea2330effe3c80a1bc"> 50</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#af30df263729385ea2330effe3c80a1bc">stride</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _stride; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classBitmap.html#ad18d3d5a1e77d541a95e93ad1f958411"> 51</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#ad18d3d5a1e77d541a95e93ad1f958411">bitsPerPixel</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d"> 53</a></span>&#160; uint8_t *<a class="code" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d" title="Returns a pointer to the start of the bitmap&#39;s data buffer.">data</a>() { <span class="keywordflow">return</span> fb; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="classBitmap.html#a20fea2a946545aa3b5edd78245149e5f"> 54</a></span>&#160; <span class="keyword">const</span> uint8_t *<a class="code" href="classBitmap.html#a20fea2a946545aa3b5edd78245149e5f" title="Returns a constant pointer to the start of the bitmap&#39;s data buffer.This is an overloaded member func...">data</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fb; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d"> 53</a></span>&#160; uint8_t *<a class="code" href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d">data</a>() { <span class="keywordflow">return</span> fb; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classBitmap.html#a20fea2a946545aa3b5edd78245149e5f"> 54</a></span>&#160; <span class="keyword">const</span> uint8_t *<a class="code" href="classBitmap.html#a20fea2a946545aa3b5edd78245149e5f">data</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fb; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1" title="Clears the entire bitmap to the specified color.">clear</a>(<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1">clear</a>(<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203" title="Returns the color of the pixel at (x, y); either Black or White.">pixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114" title="Sets the pixel at (x, y) to color.">setPixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> <a class="code" href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">pixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac994b75418e7d37ec66829437329114">setPixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767" title="Draws a line from (x1, y1) to (x2, y2) in color.">drawLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc" title="Draws a rectangle from (x1, y1) to (x2, y2), with the outline in borderColor and the interior filled ...">drawRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> borderColor = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor = <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e" title="Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...">NoFill</a>);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb" title="Draws a filled rectangle from (x1, y1) to (x2, y2) in color.">drawFilledRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa" title="Draws a circle with a specific center (centerX, centerY) and radius, with the outline in borderColor ...">drawCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> borderColor = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor = <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e" title="Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...">NoFill</a>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b" title="Draws a filled circle with a specific center (centerX, centerY) and radius in color.">drawFilledCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">drawLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc">drawRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> borderColor = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor = <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">NoFill</a>);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb">drawFilledRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa">drawCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> borderColor = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor = <a class="code" href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">NoFill</a>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b">drawFilledCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72" title="Draws bitmap at (x, y) in color.">drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72" title="Draws bitmap at (x, y) in color.">drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">Bitmap::ProgMem</a> bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a" title="Draws bitmap at (x, y) in inverted colors.">drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;bitmap);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a" title="Draws bitmap at (x, y) in inverted colors.">drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">Bitmap::ProgMem</a> bitmap);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html">Bitmap</a> &amp;bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">drawBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a> bitmap, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a">drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html">Bitmap</a> &amp;bitmap);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a">drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a> bitmap);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c"> 72</a></span>&#160; <a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf" title="Type that represents a font within program memory.">Font</a> <a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c" title="Returns the currently selected font, or null if none selected.">font</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _font; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="classBitmap.html#a64d7a9651d5c385a044cc910a3b82837"> 73</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a64d7a9651d5c385a044cc910a3b82837" title="Sets the font for use with drawText() and drawChar().">setFont</a>(<a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf" title="Type that represents a font within program memory.">Font</a> <a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c" title="Returns the currently selected font, or null if none selected.">font</a>) { _font = <a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c" title="Returns the currently selected font, or null if none selected.">font</a>; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c"> 72</a></span>&#160; <a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf">Font</a> <a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c">font</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _font; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classBitmap.html#a64d7a9651d5c385a044cc910a3b82837"> 73</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a64d7a9651d5c385a044cc910a3b82837">setFont</a>(<a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf">Font</a> <a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c">font</a>) { _font = <a class="code" href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c">font</a>; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="classBitmap.html#ab6e5f5744fd2f18478aac428b751d848"> 75</a></span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> <a class="code" href="classBitmap.html#ab6e5f5744fd2f18478aac428b751d848" title="Returns the color that will be used for drawing text with drawText() and drawChar(). The default is White.">textColor</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _textColor; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="classBitmap.html#a8e225a4f188269bb18265ae4b49de0a3"> 76</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a8e225a4f188269bb18265ae4b49de0a3" title="Sets the color that will be used for drawing text with drawText() and drawChar().">setTextColor</a>(<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color) { _textColor = color; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classBitmap.html#ab6e5f5744fd2f18478aac428b751d848"> 75</a></span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> <a class="code" href="classBitmap.html#ab6e5f5744fd2f18478aac428b751d848">textColor</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _textColor; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classBitmap.html#a8e225a4f188269bb18265ae4b49de0a3"> 76</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a8e225a4f188269bb18265ae4b49de0a3">setTextColor</a>(<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color) { _textColor = color; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0" title="Draws the len characters of str at (x, y).">drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len = -1);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0" title="Draws the len characters of str at (x, y).">drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start = 0, <span class="keywordtype">int</span> len = -1);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0">drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len = -1);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0">drawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start = 0, <span class="keywordtype">int</span> len = -1);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd" title="Draws a single character ch at (x, y).">drawChar</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">char</span> ch);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd">drawChar</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">char</span> ch);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd" title="Returns the width in pixels of ch in the current font().">charWidth</a>(<span class="keywordtype">char</span> ch) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a" title="Returns the width in pixels of the len characters of str in the current font(), including inter-chara...">textWidth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len = -1) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a" title="Returns the width in pixels of the len characters of str in the current font(), including inter-chara...">textWidth</a>(<span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start = 0, <span class="keywordtype">int</span> len = -1) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4" title="Returns the height in pixels of the current text drawing font(); or zero if font() is not set...">textHeight</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">charWidth</a>(<span class="keywordtype">char</span> ch) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a">textWidth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len = -1) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a">textWidth</a>(<span class="keyword">const</span> String &amp;str, <span class="keywordtype">int</span> start = 0, <span class="keywordtype">int</span> len = -1) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4">textHeight</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c" title="Copies the width x height pixels starting at top-left corner (x, y) to (destX, destY) in the bitmap d...">copy</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> *dest, <span class="keywordtype">int</span> destX, <span class="keywordtype">int</span> destY);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2" title="Fills the width x height pixels starting at top-left corner (x, y) with color.">fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">Bitmap::ProgMem</a> pattern, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c">copy</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html">Bitmap</a> *dest, <span class="keywordtype">int</span> destX, <span class="keywordtype">int</span> destY);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">fill</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a> pattern, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color = <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a" title="Scrolls the entire contents of the bitmap by dx and dy.">scroll</a>(<span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor = <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a" title="Scrolls the entire contents of the bitmap by dx and dy.">scroll</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor = <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">scroll</a>(<span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor = <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">scroll</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor = <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd" title="Inverts the width x height pixels starting at top-left corner (x, y).">invert</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd">invert</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// Disable copy constructor and operator=().</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4" title="Constructs a new in-memory bitmap that is width x height pixels in size.">Bitmap</a>(<span class="keyword">const</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;) {}</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;operator=(<span class="keyword">const</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4">Bitmap</a>(<span class="keyword">const</span> <a class="code" href="classBitmap.html">Bitmap</a> &amp;) {}</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classBitmap.html">Bitmap</a> &amp;operator=(<span class="keyword">const</span> <a class="code" href="classBitmap.html">Bitmap</a> &amp;) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">int</span> _width;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">int</span> _height;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">int</span> _stride;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; uint8_t *fb;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf" title="Type that represents a font within program memory.">Font</a> _font;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> _textColor;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf">Font</a> _font;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> _textColor;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classDMD.html" title="Handle large dot matrix displays composed of LED&#39;s.">DMD</a>;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classDMD.html">DMD</a>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordtype">void</span> blit(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <span class="keywordtype">int</span> x3, <span class="keywordtype">int</span> y3);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">void</span> drawCirclePoints(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> borderColor, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">void</span> drawCirclePoints(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> borderColor, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;};</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb"> 115</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb" title="Draws a filled rectangle from (x1, y1) to (x2, y2) in color.">Bitmap::drawFilledRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb"> 115</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb">Bitmap::drawFilledRect</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;{</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc" title="Draws a rectangle from (x1, y1) to (x2, y2), with the outline in borderColor and the interior filled ...">drawRect</a>(x1, y1, x2, y2, color, color);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc">drawRect</a>(x1, y1, x2, y2, color, color);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
<div class="line"><a name="l00120"></a><span class="lineno"><a class="code" href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b"> 120</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b" title="Draws a filled circle with a specific center (centerX, centerY) and radius in color.">Bitmap::drawFilledCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> color)</div>
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b"> 120</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b">Bitmap::drawFilledCircle</a>(<span class="keywordtype">int</span> centerX, <span class="keywordtype">int</span> centerY, <span class="keywordtype">int</span> radius, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> color)</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;{</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa" title="Draws a circle with a specific center (centerX, centerY) and radius, with the outline in borderColor ...">drawCircle</a>(centerX, centerY, radius, color, color);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa">drawCircle</a>(centerX, centerY, radius, color, color);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a"> 125</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a" title="Draws bitmap at (x, y) in inverted colors.">Bitmap::drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a> &amp;bitmap)</div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a"> 125</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a">Bitmap::drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code" href="classBitmap.html">Bitmap</a> &amp;bitmap)</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72" title="Draws bitmap at (x, y) in color.">drawBitmap</a>(x, y, bitmap, <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">drawBitmap</a>(x, y, bitmap, <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="code" href="classBitmap.html#a2e862b72c2d6471af737fac320472d69"> 130</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a" title="Draws bitmap at (x, y) in inverted colors.">Bitmap::drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43" title="Type that represents a bitmap within program memory.">Bitmap::ProgMem</a> bitmap)</div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classBitmap.html#a2e862b72c2d6471af737fac320472d69"> 130</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#a4321640464bc08b60348c09bff01b86a">Bitmap::drawInvertedBitmap</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a> bitmap)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;{</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72" title="Draws bitmap at (x, y) in color.">drawBitmap</a>(x, y, bitmap, <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>);</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">drawBitmap</a>(x, y, bitmap, <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a"> 135</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a" title="Scrolls the entire contents of the bitmap by dx and dy.">Bitmap::scroll</a>(<span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> fillColor)</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a"> 135</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">Bitmap::scroll</a>(<span class="keywordtype">int</span> dx, <span class="keywordtype">int</span> dy, <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> fillColor)</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a" title="Scrolls the entire contents of the bitmap by dx and dy.">scroll</a>(0, 0, _width, _height, dx, dy, fillColor);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">scroll</a>(0, 0, _width, _height, dx, dy, fillColor);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classDMD_html"><div class="ttname"><a href="classDMD.html">DMD</a></div><div class="ttdoc">Handle large dot matrix displays composed of LED&#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8h_source.html#l00028">DMD.h:28</a></div></div>
<div class="ttc" id="classBitmap_html_a76c3b49e535761f07c553e7336daf523"><div class="ttname"><a href="classBitmap.html#a76c3b49e535761f07c553e7336daf523">Bitmap::width</a></div><div class="ttdeci">int width() const </div><div class="ttdoc">Returns the width of the bitmap in pixels. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00048">Bitmap.h:48</a></div></div>
<div class="ttc" id="classBitmap_html_ab22fe1f3871934987a670b559f67c67c"><div class="ttname"><a href="classBitmap.html#ab22fe1f3871934987a670b559f67c67c">Bitmap::copy</a></div><div class="ttdeci">void copy(int x, int y, int width, int height, Bitmap *dest, int destX, int destY)</div><div class="ttdoc">Copies the width x height pixels starting at top-left corner (x, y) to (destX, destY) in the bitmap d...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00738">Bitmap.cpp:738</a></div></div>
<div class="ttc" id="classBitmap_html_ae08eb6f9086f9923d8dc83a469ae4c4a"><div class="ttname"><a href="classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a">Bitmap::scroll</a></div><div class="ttdeci">void scroll(int dx, int dy, Color fillColor=Black)</div><div class="ttdoc">Scrolls the entire contents of the bitmap by dx and dy. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00135">Bitmap.h:135</a></div></div>
<div class="ttc" id="classBitmap_html"><div class="ttname"><a href="classBitmap.html">Bitmap</a></div><div class="ttdoc">Represents a monochrome bitmap within main memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00032">Bitmap.h:32</a></div></div>
<div class="ttc" id="classBitmap_html_aac61e3f7f625db568e37d88b52b3b2fc"><div class="ttname"><a href="classBitmap.html#aac61e3f7f625db568e37d88b52b3b2fc">Bitmap::drawRect</a></div><div class="ttdeci">void drawRect(int x1, int y1, int x2, int y2, Color borderColor=White, Color fillColor=NoFill)</div><div class="ttdoc">Draws a rectangle from (x1, y1) to (x2, y2), with the outline in borderColor and the interior filled ...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00286">Bitmap.cpp:286</a></div></div>
<div class="ttc" id="classBitmap_html_aac994b75418e7d37ec66829437329114"><div class="ttname"><a href="classBitmap.html#aac994b75418e7d37ec66829437329114">Bitmap::setPixel</a></div><div class="ttdeci">void setPixel(int x, int y, Color color)</div><div class="ttdoc">Sets the pixel at (x, y) to color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00208">Bitmap.cpp:208</a></div></div>
<div class="ttc" id="classBitmap_html_a757291b9a39bcb0d64ac98d3a2fa061b"><div class="ttname"><a href="classBitmap.html#a757291b9a39bcb0d64ac98d3a2fa061b">Bitmap::drawFilledCircle</a></div><div class="ttdeci">void drawFilledCircle(int centerX, int centerY, int radius, Color color=White)</div><div class="ttdoc">Draws a filled circle with a specific center (centerX, centerY) and radius in color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00120">Bitmap.h:120</a></div></div>
<div class="ttc" id="classBitmap_html_aa0a84f3694e343d68e7021552c69f767"><div class="ttname"><a href="classBitmap.html#aa0a84f3694e343d68e7021552c69f767">Bitmap::drawLine</a></div><div class="ttdeci">void drawLine(int x1, int y1, int x2, int y2, Color color=White)</div><div class="ttdoc">Draws a line from (x1, y1) to (x2, y2) in color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00225">Bitmap.cpp:225</a></div></div>
<div class="ttc" id="classBitmap_html_a491e9c0bb20ddf5a5eb4933077c8ed72"><div class="ttname"><a href="classBitmap.html#a491e9c0bb20ddf5a5eb4933077c8ed72">Bitmap::drawBitmap</a></div><div class="ttdeci">void drawBitmap(int x, int y, const Bitmap &amp;bitmap, Color color=White)</div><div class="ttdoc">Draws bitmap at (x, y) in color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00388">Bitmap.cpp:388</a></div></div>
<div class="ttc" id="classBitmap_html_a568acbca3818dd85dd62fff6d0b36ffb"><div class="ttname"><a href="classBitmap.html#a568acbca3818dd85dd62fff6d0b36ffb">Bitmap::drawFilledRect</a></div><div class="ttdeci">void drawFilledRect(int x1, int y1, int x2, int y2, Color color=White)</div><div class="ttdoc">Draws a filled rectangle from (x1, y1) to (x2, y2) in color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00115">Bitmap.h:115</a></div></div>
<div class="ttc" id="classBitmap_html_a4321640464bc08b60348c09bff01b86a"><div class="ttname"><a href="classBitmap.html#a4321640464bc08b60348c09bff01b86a">Bitmap::drawInvertedBitmap</a></div><div class="ttdeci">void drawInvertedBitmap(int x, int y, const Bitmap &amp;bitmap)</div><div class="ttdoc">Draws bitmap at (x, y) in inverted colors. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00125">Bitmap.h:125</a></div></div>
<div class="ttc" id="classBitmap_html_ad18d3d5a1e77d541a95e93ad1f958411"><div class="ttname"><a href="classBitmap.html#ad18d3d5a1e77d541a95e93ad1f958411">Bitmap::bitsPerPixel</a></div><div class="ttdeci">int bitsPerPixel() const </div><div class="ttdoc">Returns the number of bits per pixel for the bitmap; always 1. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00051">Bitmap.h:51</a></div></div>
<div class="ttc" id="classBitmap_html_a933763a4f3cba79fbcf97ae6d0a864aa"><div class="ttname"><a href="classBitmap.html#a933763a4f3cba79fbcf97ae6d0a864aa">Bitmap::drawCircle</a></div><div class="ttdeci">void drawCircle(int centerX, int centerY, int radius, Color borderColor=White, Color fillColor=NoFill)</div><div class="ttdoc">Draws a circle with a specific center (centerX, centerY) and radius, with the outline in borderColor ...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00334">Bitmap.cpp:334</a></div></div>
<div class="ttc" id="classBitmap_html_a8e225a4f188269bb18265ae4b49de0a3"><div class="ttname"><a href="classBitmap.html#a8e225a4f188269bb18265ae4b49de0a3">Bitmap::setTextColor</a></div><div class="ttdeci">void setTextColor(Color color)</div><div class="ttdoc">Sets the color that will be used for drawing text with drawText() and drawChar(). ...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00076">Bitmap.h:76</a></div></div>
<div class="ttc" id="classBitmap_html_a1a11f29863ee7f36a3b15c91963102bd"><div class="ttname"><a href="classBitmap.html#a1a11f29863ee7f36a3b15c91963102bd">Bitmap::drawChar</a></div><div class="ttdeci">int drawChar(int x, int y, char ch)</div><div class="ttdoc">Draws a single character ch at (x, y). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00585">Bitmap.cpp:585</a></div></div>
<div class="ttc" id="classBitmap_html_a2fcc98fd7580932b218134126a29ce43"><div class="ttname"><a href="classBitmap.html#a2fcc98fd7580932b218134126a29ce43">Bitmap::ProgMem</a></div><div class="ttdeci">PGM_VOID_P ProgMem</div><div class="ttdoc">Type that represents a bitmap within program memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00041">Bitmap.h:41</a></div></div>
<div class="ttc" id="classBitmap_html_a88d386944a7017aa776a177b10d8b2ba"><div class="ttname"><a href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Bitmap::Color</a></div><div class="ttdeci">uint8_t Color</div><div class="ttdoc">Type that represents the color of a pixel in a bitmap. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00040">Bitmap.h:40</a></div></div>
<div class="ttc" id="classBitmap_html_ab6e5f5744fd2f18478aac428b751d848"><div class="ttname"><a href="classBitmap.html#ab6e5f5744fd2f18478aac428b751d848">Bitmap::textColor</a></div><div class="ttdeci">Color textColor() const </div><div class="ttdoc">Returns the color that will be used for drawing text with drawText() and drawChar(). The default is White. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00075">Bitmap.h:75</a></div></div>
<div class="ttc" id="classBitmap_html_adcd4e3dc7594421e647b0f52da9a41a3"><div class="ttname"><a href="classBitmap.html#adcd4e3dc7594421e647b0f52da9a41a3">Bitmap::height</a></div><div class="ttdeci">int height() const </div><div class="ttdoc">Returns the height of the bitmap in pixels. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00049">Bitmap.h:49</a></div></div>
<div class="ttc" id="classBitmap_html_aa89170263dc1f51f6366c1907119715e"><div class="ttname"><a href="classBitmap.html#aa89170263dc1f51f6366c1907119715e">Bitmap::NoFill</a></div><div class="ttdeci">static const Color NoFill</div><div class="ttdoc">Special color value that is used with drawRect() and drawCircle() to indicate that the interior of th...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00046">Bitmap.h:46</a></div></div>
<div class="ttc" id="classBitmap_html_a0f7607b1c7867987f4500d490a666e8a"><div class="ttname"><a href="classBitmap.html#a0f7607b1c7867987f4500d490a666e8a">Bitmap::textWidth</a></div><div class="ttdeci">int textWidth(const char *str, int len=-1) const </div><div class="ttdoc">Returns the width in pixels of the len characters of str in the current font(), including inter-chara...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00675">Bitmap.cpp:675</a></div></div>
<div class="ttc" id="classBitmap_html_a99da820f9280aace6b512801d5a5e2b2"><div class="ttname"><a href="classBitmap.html#a99da820f9280aace6b512801d5a5e2b2">Bitmap::fill</a></div><div class="ttdeci">void fill(int x, int y, int width, int height, Color color)</div><div class="ttdoc">Fills the width x height pixels starting at top-left corner (x, y) with color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00762">Bitmap.cpp:762</a></div></div>
<div class="ttc" id="classBitmap_html_a20fea2a946545aa3b5edd78245149e5f"><div class="ttname"><a href="classBitmap.html#a20fea2a946545aa3b5edd78245149e5f">Bitmap::data</a></div><div class="ttdeci">const uint8_t * data() const </div><div class="ttdoc">Returns a constant pointer to the start of the bitmap&#39;s data buffer. This is an overloaded member fun...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00054">Bitmap.h:54</a></div></div>
<div class="ttc" id="classBitmap_html_a5eeed27c176eb6e4a2c39ea83444e27d"><div class="ttname"><a href="classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d">Bitmap::data</a></div><div class="ttdeci">uint8_t * data()</div><div class="ttdoc">Returns a pointer to the start of the bitmap&#39;s data buffer. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00053">Bitmap.h:53</a></div></div>
<div class="ttc" id="classBitmap_html_a628bb694fcfe6eab619a4f1e152d41c4"><div class="ttname"><a href="classBitmap.html#a628bb694fcfe6eab619a4f1e152d41c4">Bitmap::textHeight</a></div><div class="ttdeci">int textHeight() const </div><div class="ttdoc">Returns the height in pixels of the current text drawing font(); or zero if font() is not set...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00716">Bitmap.cpp:716</a></div></div>
<div class="ttc" id="classBitmap_html_a9b79ac13077ca865e4515510297780bd"><div class="ttname"><a href="classBitmap.html#a9b79ac13077ca865e4515510297780bd">Bitmap::charWidth</a></div><div class="ttdeci">int charWidth(char ch) const </div><div class="ttdoc">Returns the width in pixels of ch in the current font(). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00650">Bitmap.cpp:650</a></div></div>
<div class="ttc" id="classBitmap_html_a40526748415c8bbc58a8510d636c20f4"><div class="ttname"><a href="classBitmap.html#a40526748415c8bbc58a8510d636c20f4">Bitmap::Bitmap</a></div><div class="ttdeci">Bitmap(int width, int height)</div><div class="ttdoc">Constructs a new in-memory bitmap that is width x height pixels in size. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00088">Bitmap.cpp:88</a></div></div>
<div class="ttc" id="classBitmap_html_a3846a240722e847d3cf11f701da1ce7b"><div class="ttname"><a href="classBitmap.html#a3846a240722e847d3cf11f701da1ce7b">Bitmap::isValid</a></div><div class="ttdeci">bool isValid() const </div><div class="ttdoc">Returns true if the memory for this bitmap is valid; false otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00038">Bitmap.h:38</a></div></div>
<div class="ttc" id="classBitmap_html_a39b6754cfe50a457bbfdb1980fd87eb7"><div class="ttname"><a href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">Bitmap::White</a></div><div class="ttdeci">static const Color White</div><div class="ttdoc">Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00045">Bitmap.h:45</a></div></div>
<div class="ttc" id="classBitmap_html_a7bf0a232b4bd12573cc570cc0edef47c"><div class="ttname"><a href="classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c">Bitmap::font</a></div><div class="ttdeci">Font font() const </div><div class="ttdoc">Returns the currently selected font, or null if none selected. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00072">Bitmap.h:72</a></div></div>
<div class="ttc" id="classBitmap_html_af30df263729385ea2330effe3c80a1bc"><div class="ttname"><a href="classBitmap.html#af30df263729385ea2330effe3c80a1bc">Bitmap::stride</a></div><div class="ttdeci">int stride() const </div><div class="ttdoc">Returns the number of bytes in each line of the bitmap&#39;s data() buffer. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00050">Bitmap.h:50</a></div></div>
<div class="ttc" id="classBitmap_html_a2c7faeeb89d3624b5bbca58871785adc"><div class="ttname"><a href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Bitmap::Black</a></div><div class="ttdeci">static const Color Black</div><div class="ttdoc">Color value corresponding to &quot;black&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00044">Bitmap.h:44</a></div></div>
<div class="ttc" id="classBitmap_html_a839dc8fab05a5ebf7a6b2e61436b2fa1"><div class="ttname"><a href="classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1">Bitmap::clear</a></div><div class="ttdeci">void clear(Color color=Black)</div><div class="ttdoc">Clears the entire bitmap to the specified color. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00174">Bitmap.cpp:174</a></div></div>
<div class="ttc" id="classBitmap_html_a456f7d6da03189c1e7148563a891b3cf"><div class="ttname"><a href="classBitmap.html#a456f7d6da03189c1e7148563a891b3cf">Bitmap::Font</a></div><div class="ttdeci">PGM_VOID_P Font</div><div class="ttdoc">Type that represents a font within program memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00042">Bitmap.h:42</a></div></div>
<div class="ttc" id="classBitmap_html_a64d7a9651d5c385a044cc910a3b82837"><div class="ttname"><a href="classBitmap.html#a64d7a9651d5c385a044cc910a3b82837">Bitmap::setFont</a></div><div class="ttdeci">void setFont(Font font)</div><div class="ttdoc">Sets the font for use with drawText() and drawChar(). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00073">Bitmap.h:73</a></div></div>
<div class="ttc" id="classBitmap_html_a6d85556bcc9fac91d33f0f6f7a6430dd"><div class="ttname"><a href="classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd">Bitmap::invert</a></div><div class="ttdeci">void invert(int x, int y, int width, int height)</div><div class="ttdoc">Inverts the width x height pixels starting at top-left corner (x, y). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00902">Bitmap.cpp:902</a></div></div>
<div class="ttc" id="classBitmap_html_a3e9bcbfb584d5020bd6f0a313ee275f0"><div class="ttname"><a href="classBitmap.html#a3e9bcbfb584d5020bd6f0a313ee275f0">Bitmap::drawText</a></div><div class="ttdeci">void drawText(int x, int y, const char *str, int len=-1)</div><div class="ttdoc">Draws the len characters of str at (x, y). </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00526">Bitmap.cpp:526</a></div></div>
<div class="ttc" id="classBitmap_html_a72d2a301ec1eb1c8d0f3d64823659a8e"><div class="ttname"><a href="classBitmap.html#a72d2a301ec1eb1c8d0f3d64823659a8e">Bitmap::~Bitmap</a></div><div class="ttdeci">~Bitmap()</div><div class="ttdoc">Destroys this bitmap. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00106">Bitmap.cpp:106</a></div></div>
<div class="ttc" id="classBitmap_html_a35aa38b377d509d6c4f061a0b988d203"><div class="ttname"><a href="classBitmap.html#a35aa38b377d509d6c4f061a0b988d203">Bitmap::pixel</a></div><div class="ttdeci">Color pixel(int x, int y) const </div><div class="ttdoc">Returns the color of the pixel at (x, y); either Black or White. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8cpp_source.html#l00191">Bitmap.cpp:191</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: BlinkLED.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -116,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &lt;WProgram.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f"> 64</a></span>&#160;<a class="code" href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f" title="Initialize a blinking LED on the specified pin.">BlinkLED::BlinkLED</a>(uint8_t pin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> onTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offTime, <span class="keywordtype">bool</span> initialState)</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f"> 64</a></span>&#160;<a class="code" href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f">BlinkLED::BlinkLED</a>(uint8_t pin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> onTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offTime, <span class="keywordtype">bool</span> initialState)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; : _pin(pin)</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; , _state(initialState)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; , _paused(false)</div>
@ -128,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; _lastChange = millis();</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e"> 79</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">BlinkLED::loop</a>()</div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e"> 79</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">BlinkLED::loop</a>()</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;{</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (_paused)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span>;</div>
@ -148,22 +149,22 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="code" href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258"> 122</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258" title="Sets the onTime and offTime (in milliseconds).">BlinkLED::setBlinkRate</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> onTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offTime)</div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258"> 122</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258">BlinkLED::setBlinkRate</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> onTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offTime)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;{</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; _onTime = <a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb" title="Returns the number of milliseconds the LED will be on.">onTime</a>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; _offTime = <a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc" title="Returns the number of milliseconds the LED will be off.">offTime</a>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; _onTime = <a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb">onTime</a>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; _offTime = <a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc">offTime</a>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
<div class="line"><a name="l00145"></a><span class="lineno"><a class="code" href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4"> 145</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4" title="Sets the current state of the LED, where true is on, false is off.">BlinkLED::setState</a>(<span class="keywordtype">bool</span> state)</div>
<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4"> 145</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4">BlinkLED::setState</a>(<span class="keywordtype">bool</span> state)</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (_state != state) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; digitalWrite(_pin, state ? HIGH : LOW);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; _state = <a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233" title="Returns the current state of the LED; true is on, false is off.">state</a>;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; _state = <a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233">state</a>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; _lastChange = millis();</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div>
<div class="line"><a name="l00170"></a><span class="lineno"><a class="code" href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252"> 170</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252" title="Resumes the LED blink cycle after a pause().">BlinkLED::resume</a>()</div>
<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252"> 170</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252">BlinkLED::resume</a>()</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (_paused) {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; _paused = <span class="keyword">false</span>;</div>
@ -184,12 +185,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;}</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div>
<div class="ttc" id="classBlinkLED_html_a380241e4dfd20e8a558487227f2f4252"><div class="ttname"><a href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252">BlinkLED::resume</a></div><div class="ttdeci">void resume()</div><div class="ttdoc">Resumes the LED blink cycle after a pause(). </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00170">BlinkLED.cpp:170</a></div></div>
<div class="ttc" id="classBlinkLED_html_aeeaf42b94c5392935f00f0f12a58c75e"><div class="ttname"><a href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">BlinkLED::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00079">BlinkLED.cpp:79</a></div></div>
<div class="ttc" id="classBlinkLED_html_a74c640edf1a9f6e8bea1e139462908bc"><div class="ttname"><a href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc">BlinkLED::offTime</a></div><div class="ttdeci">unsigned long offTime() const </div><div class="ttdoc">Returns the number of milliseconds the LED will be off. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00036">BlinkLED.h:36</a></div></div>
<div class="ttc" id="classBlinkLED_html_af904a345e56d49948a042ac439d0b9d4"><div class="ttname"><a href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4">BlinkLED::setState</a></div><div class="ttdeci">void setState(bool state)</div><div class="ttdoc">Sets the current state of the LED, where true is on, false is off. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00145">BlinkLED.cpp:145</a></div></div>
<div class="ttc" id="classBlinkLED_html_a47f95624881063aa91c0066ed2c92258"><div class="ttname"><a href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258">BlinkLED::setBlinkRate</a></div><div class="ttdeci">void setBlinkRate(unsigned long onTime, unsigned long offTime)</div><div class="ttdoc">Sets the onTime and offTime (in milliseconds). </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00122">BlinkLED.cpp:122</a></div></div>
<div class="ttc" id="classBlinkLED_html_ab89b5b3435998ea6699d4bf94866e233"><div class="ttname"><a href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233">BlinkLED::state</a></div><div class="ttdeci">bool state() const </div><div class="ttdoc">Returns the current state of the LED; true is on, false is off. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00039">BlinkLED.h:39</a></div></div>
<div class="ttc" id="classBlinkLED_html_a8475f78f41d1a2d5d719bec8cbbb3ebb"><div class="ttname"><a href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb">BlinkLED::onTime</a></div><div class="ttdeci">unsigned long onTime() const </div><div class="ttdoc">Returns the number of milliseconds the LED will be on. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00035">BlinkLED.h:35</a></div></div>
<div class="ttc" id="classBlinkLED_html_afc33958651e7ce6dceb428ea654c2c2f"><div class="ttname"><a href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f">BlinkLED::BlinkLED</a></div><div class="ttdeci">BlinkLED(uint8_t pin, unsigned long onTime, unsigned long offTime, bool initialState=false)</div><div class="ttdoc">Initialize a blinking LED on the specified pin. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00064">BlinkLED.cpp:64</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: BlinkLED.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,23 +115,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classBlinkLED.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classBlinkLED.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBlinkLED.html">BlinkLED</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f" title="Initialize a blinking LED on the specified pin.">BlinkLED</a>(uint8_t pin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb" title="Returns the number of milliseconds the LED will be on.">onTime</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc" title="Returns the number of milliseconds the LED will be off.">offTime</a>, <span class="keywordtype">bool</span> initialState = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f">BlinkLED</a>(uint8_t pin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb">onTime</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc">offTime</a>, <span class="keywordtype">bool</span> initialState = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">loop</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb"> 35</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb" title="Returns the number of milliseconds the LED will be on.">onTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _onTime; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc"> 36</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc" title="Returns the number of milliseconds the LED will be off.">offTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _offTime; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258" title="Sets the onTime and offTime (in milliseconds).">setBlinkRate</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> onTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offTime);</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb"> 35</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb">onTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _onTime; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc"> 36</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc">offTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _offTime; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258">setBlinkRate</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> onTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offTime);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233"> 39</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233" title="Returns the current state of the LED; true is on, false is off.">state</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _state; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4" title="Sets the current state of the LED, where true is on, false is off.">setState</a>(<span class="keywordtype">bool</span> <a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233" title="Returns the current state of the LED; true is on, false is off.">state</a>);</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233"> 39</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233">state</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _state; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4">setState</a>(<span class="keywordtype">bool</span> <a class="code" href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233">state</a>);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="classBlinkLED.html#a2760a0223cd6a0598b961f681ffb5c0a"> 42</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a2760a0223cd6a0598b961f681ffb5c0a" title="Pauses the LED blink cycle in its current state().">pause</a>() { _paused = <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252" title="Resumes the LED blink cycle after a pause().">resume</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="classBlinkLED.html#aa0ee318b886b84fb71d5831fa456ecc8"> 44</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBlinkLED.html#aa0ee318b886b84fb71d5831fa456ecc8" title="Returns true if the LED blink cycle is paused; false otherwise.">isPaused</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _paused; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classBlinkLED.html#a2760a0223cd6a0598b961f681ffb5c0a"> 42</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a2760a0223cd6a0598b961f681ffb5c0a">pause</a>() { _paused = <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252">resume</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classBlinkLED.html#aa0ee318b886b84fb71d5831fa456ecc8"> 44</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBlinkLED.html#aa0ee318b886b84fb71d5831fa456ecc8">isPaused</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _paused; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint8_t _pin;</div>
@ -142,12 +143,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classBlinkLED_html_a380241e4dfd20e8a558487227f2f4252"><div class="ttname"><a href="classBlinkLED.html#a380241e4dfd20e8a558487227f2f4252">BlinkLED::resume</a></div><div class="ttdeci">void resume()</div><div class="ttdoc">Resumes the LED blink cycle after a pause(). </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00170">BlinkLED.cpp:170</a></div></div>
<div class="ttc" id="classBlinkLED_html_aeeaf42b94c5392935f00f0f12a58c75e"><div class="ttname"><a href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">BlinkLED::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00079">BlinkLED.cpp:79</a></div></div>
<div class="ttc" id="classBlinkLED_html_a74c640edf1a9f6e8bea1e139462908bc"><div class="ttname"><a href="classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc">BlinkLED::offTime</a></div><div class="ttdeci">unsigned long offTime() const </div><div class="ttdoc">Returns the number of milliseconds the LED will be off. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00036">BlinkLED.h:36</a></div></div>
<div class="ttc" id="classBlinkLED_html_a2760a0223cd6a0598b961f681ffb5c0a"><div class="ttname"><a href="classBlinkLED.html#a2760a0223cd6a0598b961f681ffb5c0a">BlinkLED::pause</a></div><div class="ttdeci">void pause()</div><div class="ttdoc">Pauses the LED blink cycle in its current state(). </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00042">BlinkLED.h:42</a></div></div>
<div class="ttc" id="classBlinkLED_html_af904a345e56d49948a042ac439d0b9d4"><div class="ttname"><a href="classBlinkLED.html#af904a345e56d49948a042ac439d0b9d4">BlinkLED::setState</a></div><div class="ttdeci">void setState(bool state)</div><div class="ttdoc">Sets the current state of the LED, where true is on, false is off. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00145">BlinkLED.cpp:145</a></div></div>
<div class="ttc" id="classBlinkLED_html_a47f95624881063aa91c0066ed2c92258"><div class="ttname"><a href="classBlinkLED.html#a47f95624881063aa91c0066ed2c92258">BlinkLED::setBlinkRate</a></div><div class="ttdeci">void setBlinkRate(unsigned long onTime, unsigned long offTime)</div><div class="ttdoc">Sets the onTime and offTime (in milliseconds). </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00122">BlinkLED.cpp:122</a></div></div>
<div class="ttc" id="classBlinkLED_html"><div class="ttname"><a href="classBlinkLED.html">BlinkLED</a></div><div class="ttdoc">Blink a LED on a digital output pin. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00028">BlinkLED.h:28</a></div></div>
<div class="ttc" id="classBlinkLED_html_ab89b5b3435998ea6699d4bf94866e233"><div class="ttname"><a href="classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233">BlinkLED::state</a></div><div class="ttdeci">bool state() const </div><div class="ttdoc">Returns the current state of the LED; true is on, false is off. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00039">BlinkLED.h:39</a></div></div>
<div class="ttc" id="classBlinkLED_html_a8475f78f41d1a2d5d719bec8cbbb3ebb"><div class="ttname"><a href="classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb">BlinkLED::onTime</a></div><div class="ttdeci">unsigned long onTime() const </div><div class="ttdoc">Returns the number of milliseconds the LED will be on. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00035">BlinkLED.h:35</a></div></div>
<div class="ttc" id="classBlinkLED_html_afc33958651e7ce6dceb428ea654c2c2f"><div class="ttname"><a href="classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f">BlinkLED::BlinkLED</a></div><div class="ttdeci">BlinkLED(uint8_t pin, unsigned long onTime, unsigned long offTime, bool initialState=false)</div><div class="ttdoc">Initialize a blinking LED on the specified pin. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8cpp_source.html#l00064">BlinkLED.cpp:64</a></div></div>
<div class="ttc" id="classBlinkLED_html_aa0ee318b886b84fb71d5831fa456ecc8"><div class="ttname"><a href="classBlinkLED.html#aa0ee318b886b84fb71d5831fa456ecc8">BlinkLED::isPaused</a></div><div class="ttdeci">bool isPaused() const </div><div class="ttdoc">Returns true if the LED blink cycle is paused; false otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="BlinkLED_8h_source.html#l00044">BlinkLED.h:44</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -0,0 +1,133 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: BlockCipher.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">BlockCipher.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;BlockCipher.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f"> 40</a></span>&#160;<a class="code" href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f">BlockCipher::BlockCipher</a>()</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9"> 52</a></span>&#160;<a class="code" href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9">BlockCipher::~BlockCipher</a>()</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="ttc" id="classBlockCipher_html_adc3d7cba116cbea9ad017f4cded6fe2f"><div class="ttname"><a href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f">BlockCipher::BlockCipher</a></div><div class="ttdeci">BlockCipher()</div><div class="ttdoc">Constructs a block cipher. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8cpp_source.html#l00040">BlockCipher.cpp:40</a></div></div>
<div class="ttc" id="classBlockCipher_html_acec1bc4faeaa6dda2d91bffd79a988f9"><div class="ttname"><a href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9">BlockCipher::~BlockCipher</a></div><div class="ttdeci">virtual ~BlockCipher()</div><div class="ttdoc">Destroys this block cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8cpp_source.html#l00052">BlockCipher.cpp:52</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

154
BlockCipher_8h_source.html Normal file
View File

@ -0,0 +1,154 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: BlockCipher.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">BlockCipher.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_BLOCKCIPHER_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_BLOCKCIPHER_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classBlockCipher.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBlockCipher.html">BlockCipher</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f">BlockCipher</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9">~BlockCipher</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">blockSize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">keySize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">encryptBlock</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input) = 0;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c">decryptBlock</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input) = 0;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">clear</a>() = 0;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;};</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classBlockCipher_html"><div class="ttname"><a href="classBlockCipher.html">BlockCipher</a></div><div class="ttdoc">Abstract base class for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8h_source.html#l00029">BlockCipher.h:29</a></div></div>
<div class="ttc" id="classBlockCipher_html_adc3d7cba116cbea9ad017f4cded6fe2f"><div class="ttname"><a href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f">BlockCipher::BlockCipher</a></div><div class="ttdeci">BlockCipher()</div><div class="ttdoc">Constructs a block cipher. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8cpp_source.html#l00040">BlockCipher.cpp:40</a></div></div>
<div class="ttc" id="classBlockCipher_html_acec1bc4faeaa6dda2d91bffd79a988f9"><div class="ttname"><a href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9">BlockCipher::~BlockCipher</a></div><div class="ttdeci">virtual ~BlockCipher()</div><div class="ttdoc">Destroys this block cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8cpp_source.html#l00052">BlockCipher.cpp:52</a></div></div>
<div class="ttc" id="classBlockCipher_html_ac3ba2450222aa1ea804ae4881ab6440c"><div class="ttname"><a href="classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c">BlockCipher::decryptBlock</a></div><div class="ttdeci">virtual void decryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Decrypts a single block using this cipher. </div></div>
<div class="ttc" id="classBlockCipher_html_aed0788b25f6bb2f1bd47d5a5f0c5db33"><div class="ttname"><a href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">BlockCipher::encryptBlock</a></div><div class="ttdeci">virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Encrypts a single block using this cipher. </div></div>
<div class="ttc" id="classBlockCipher_html_a9a05307664469777592799c8f77397c4"><div class="ttname"><a href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">BlockCipher::setKey</a></div><div class="ttdeci">virtual bool setKey(const uint8_t *key, size_t len)=0</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div></div>
<div class="ttc" id="classBlockCipher_html_a6f27d46e9dfa7761d014d828ad5f955b"><div class="ttname"><a href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">BlockCipher::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div></div>
<div class="ttc" id="classBlockCipher_html_a7059a310487c128db034b0ce0ad425a0"><div class="ttname"><a href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">BlockCipher::blockSize</a></div><div class="ttdeci">virtual size_t blockSize() const =0</div><div class="ttdoc">Size of a single block processed by this cipher, in bytes. </div></div>
<div class="ttc" id="classBlockCipher_html_afde6004a859e015d877eab3c37042a0f"><div class="ttname"><a href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">BlockCipher::keySize</a></div><div class="ttdeci">virtual size_t keySize() const =0</div><div class="ttdoc">Default size of the key for this block cipher, in bytes. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: BoolField.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -111,15 +112,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;BoolField.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998"> 77</a></span>&#160;<a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998" title="Constructs a new boolean field with a specific label.">BoolField::BoolField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(label)</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998"> 77</a></span>&#160;<a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998">BoolField::BoolField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classField.html">Field</a>(label)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; , _printLen(0)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; , _value(false)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="classBoolField.html#a49aad212ed18f84baa105c24e86281d9"> 94</a></span>&#160;<a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998" title="Constructs a new boolean field with a specific label.">BoolField::BoolField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;trueLabel, <span class="keyword">const</span> String &amp;falseLabel, <span class="keywordtype">bool</span> value)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(form, label)</div>
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classBoolField.html#a49aad212ed18f84baa105c24e86281d9"> 94</a></span>&#160;<a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998">BoolField::BoolField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;trueLabel, <span class="keyword">const</span> String &amp;falseLabel, <span class="keywordtype">bool</span> value)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; : <a class="code" href="classField.html">Field</a>(form, label)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; , _trueLabel(trueLabel)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; , _falseLabel(falseLabel)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; , _printLen(0)</div>
@ -127,69 +128,83 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;{</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;}</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="classBoolField.html#af793bafc1193d79b495c2ede711bca57"> 103</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBoolField.html#af793bafc1193d79b495c2ede711bca57" title="Dispatches event via this field.">BoolField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classBoolField.html#af793bafc1193d79b495c2ede711bca57"> 103</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classBoolField.html#af793bafc1193d79b495c2ede711bca57">BoolField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span> (event == LCD_BUTTON_UP || event == LCD_BUTTON_DOWN) {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577" title="Sets the current value of this field to value.">setValue</a>(!_value);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577">setValue</a>(!_value);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09"> 113</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09" title="Enters the field due to form navigation.">BoolField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09"> 113</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09">BoolField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09" title="Enters the field due to form navigation.">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; printValue();</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;}</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577"> 131</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577" title="Sets the current value of this field to value.">BoolField::setValue</a>(<span class="keywordtype">bool</span> value)</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577"> 131</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577">BoolField::setValue</a>(<span class="keywordtype">bool</span> value)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (value != _value) {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; _value = <a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39" title="Returns the current value of this field, true or false.">value</a>;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; _value = <a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39">value</a>;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; printValue();</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
<div class="line"><a name="l00153"></a><span class="lineno"><a class="code" href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194"> 153</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194" title="Sets the string that is displayed when value() is true to trueLabel.">BoolField::setTrueLabel</a>(<span class="keyword">const</span> String &amp;trueLabel)</div>
<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194"> 153</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194">BoolField::setTrueLabel</a>(<span class="keyword">const</span> String &amp;trueLabel)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;{</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; _trueLabel = <a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d" title="Returns the string that is displayed when value() is true.">trueLabel</a>;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; _trueLabel = <a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d">trueLabel</a>;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; printValue();</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
<div class="line"><a name="l00173"></a><span class="lineno"><a class="code" href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a"> 173</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a" title="Sets the string that is displayed when value() is false to falseLabel.">BoolField::setFalseLabel</a>(<span class="keyword">const</span> String &amp;falseLabel)</div>
<div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a"> 173</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a">BoolField::setFalseLabel</a>(<span class="keyword">const</span> String &amp;falseLabel)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;{</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; _falseLabel = <a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01" title="Returns the string that is displayed when value() is false.">falseLabel</a>;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; _falseLabel = <a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01">falseLabel</a>;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; printValue();</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;}</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keywordtype">void</span> BoolField::printValue()</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (_value) {</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(_trueLabel);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(_trueLabel);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; len = _trueLabel.length();</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">while</span> (len++ &lt; _printLen)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; _printLen = _trueLabel.length();</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(_falseLabel);</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(_falseLabel);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; len = _falseLabel.length();</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">while</span> (len++ &lt; _printLen)</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; _printLen = _falseLabel.length();</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div>
<div class="ttc" id="classBoolField_html_a5d4382cdcdc989de0179d8f3f3a59998"><div class="ttname"><a href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998">BoolField::BoolField</a></div><div class="ttdeci">BoolField(const String &amp;label)</div><div class="ttdoc">Constructs a new boolean field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00077">BoolField.cpp:77</a></div></div>
<div class="ttc" id="classBoolField_html_a080c575fd4a98e6afc4b9197fbab5577"><div class="ttname"><a href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577">BoolField::setValue</a></div><div class="ttdeci">void setValue(bool value)</div><div class="ttdoc">Sets the current value of this field to value. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00131">BoolField.cpp:131</a></div></div>
<div class="ttc" id="classBoolField_html_a9972030beec6e007b556c6eb652e163d"><div class="ttname"><a href="classBoolField.html#a9972030beec6e007b556c6eb652e163d">BoolField::trueLabel</a></div><div class="ttdeci">const String &amp; trueLabel() const </div><div class="ttdoc">Returns the string that is displayed when value() is true. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00040">BoolField.h:40</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classBoolField_html_a803fc8c39765da4a44af01d925cd4194"><div class="ttname"><a href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194">BoolField::setTrueLabel</a></div><div class="ttdeci">void setTrueLabel(const String &amp;trueLabel)</div><div class="ttdoc">Sets the string that is displayed when value() is true to trueLabel. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00153">BoolField.cpp:153</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classBoolField_html_ae6a29d27139fd78f2ca96152059fb30a"><div class="ttname"><a href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a">BoolField::setFalseLabel</a></div><div class="ttdeci">void setFalseLabel(const String &amp;falseLabel)</div><div class="ttdoc">Sets the string that is displayed when value() is false to falseLabel. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00173">BoolField.cpp:173</a></div></div>
<div class="ttc" id="classBoolField_html_af793bafc1193d79b495c2ede711bca57"><div class="ttname"><a href="classBoolField.html#af793bafc1193d79b495c2ede711bca57">BoolField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00103">BoolField.cpp:103</a></div></div>
<div class="ttc" id="classBoolField_html_ab3f1e610b52caed7e41016f6ae3d7d09"><div class="ttname"><a href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09">BoolField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00113">BoolField.cpp:113</a></div></div>
<div class="ttc" id="classBoolField_html_a59ad7a8a33290bda0d9fbb3df4f09b01"><div class="ttname"><a href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01">BoolField::falseLabel</a></div><div class="ttdeci">const String &amp; falseLabel() const </div><div class="ttdoc">Returns the string that is displayed when value() is false. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00043">BoolField.h:43</a></div></div>
<div class="ttc" id="classBoolField_html_a9147826437fbaf9b29eda9dee9e37b39"><div class="ttname"><a href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39">BoolField::value</a></div><div class="ttdeci">bool value() const </div><div class="ttdoc">Returns the current value of this field, true or false. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00037">BoolField.h:37</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: BoolField.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,23 +115,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Field.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classBoolField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBoolField.html" title="Field that manages the input of a boolean value.">BoolField</a> : <span class="keyword">public</span> <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classBoolField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classBoolField.html">BoolField</a> : <span class="keyword">public</span> <a class="code" href="classField.html">Field</a> {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998" title="Constructs a new boolean field with a specific label.">BoolField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998" title="Constructs a new boolean field with a specific label.">BoolField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d" title="Returns the string that is displayed when value() is true.">trueLabel</a>, <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01" title="Returns the string that is displayed when value() is false.">falseLabel</a>, <span class="keywordtype">bool</span> <a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39" title="Returns the current value of this field, true or false.">value</a>);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998">BoolField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998">BoolField</a>(<a class="code" href="classForm.html">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d">trueLabel</a>, <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01">falseLabel</a>, <span class="keywordtype">bool</span> <a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39">value</a>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBoolField.html#af793bafc1193d79b495c2ede711bca57" title="Dispatches event via this field.">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classBoolField.html#af793bafc1193d79b495c2ede711bca57">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09" title="Enters the field due to form navigation.">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39"> 37</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39" title="Returns the current value of this field, true or false.">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577" title="Sets the current value of this field to value.">setValue</a>(<span class="keywordtype">bool</span> value);</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39"> 37</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577">setValue</a>(<span class="keywordtype">bool</span> value);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d"> 40</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d" title="Returns the string that is displayed when value() is true.">trueLabel</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _trueLabel; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194" title="Sets the string that is displayed when value() is true to trueLabel.">setTrueLabel</a>(<span class="keyword">const</span> String &amp;trueLabel);</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d"> 40</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a9972030beec6e007b556c6eb652e163d">trueLabel</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _trueLabel; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194">setTrueLabel</a>(<span class="keyword">const</span> String &amp;trueLabel);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01"> 43</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01" title="Returns the string that is displayed when value() is false.">falseLabel</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _falseLabel; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a" title="Sets the string that is displayed when value() is false to falseLabel.">setFalseLabel</a>(<span class="keyword">const</span> String &amp;falseLabel);</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01"> 43</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01">falseLabel</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _falseLabel; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a">setFalseLabel</a>(<span class="keyword">const</span> String &amp;falseLabel);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; String _trueLabel;</div>
@ -142,12 +143,26 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classBoolField_html_a5d4382cdcdc989de0179d8f3f3a59998"><div class="ttname"><a href="classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998">BoolField::BoolField</a></div><div class="ttdeci">BoolField(const String &amp;label)</div><div class="ttdoc">Constructs a new boolean field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00077">BoolField.cpp:77</a></div></div>
<div class="ttc" id="classBoolField_html_a080c575fd4a98e6afc4b9197fbab5577"><div class="ttname"><a href="classBoolField.html#a080c575fd4a98e6afc4b9197fbab5577">BoolField::setValue</a></div><div class="ttdeci">void setValue(bool value)</div><div class="ttdoc">Sets the current value of this field to value. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00131">BoolField.cpp:131</a></div></div>
<div class="ttc" id="classBoolField_html_a9972030beec6e007b556c6eb652e163d"><div class="ttname"><a href="classBoolField.html#a9972030beec6e007b556c6eb652e163d">BoolField::trueLabel</a></div><div class="ttdeci">const String &amp; trueLabel() const </div><div class="ttdoc">Returns the string that is displayed when value() is true. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00040">BoolField.h:40</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_a27427319be1cc92db3128637d8884ee5"><div class="ttname"><a href="classField.html#a27427319be1cc92db3128637d8884ee5">Field::form</a></div><div class="ttdeci">Form * form() const </div><div class="ttdoc">Returns the Form that owns this field; null if not associated with a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00034">Field.h:34</a></div></div>
<div class="ttc" id="classBoolField_html_a803fc8c39765da4a44af01d925cd4194"><div class="ttname"><a href="classBoolField.html#a803fc8c39765da4a44af01d925cd4194">BoolField::setTrueLabel</a></div><div class="ttdeci">void setTrueLabel(const String &amp;trueLabel)</div><div class="ttdoc">Sets the string that is displayed when value() is true to trueLabel. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00153">BoolField.cpp:153</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classBoolField_html_ae6a29d27139fd78f2ca96152059fb30a"><div class="ttname"><a href="classBoolField.html#ae6a29d27139fd78f2ca96152059fb30a">BoolField::setFalseLabel</a></div><div class="ttdeci">void setFalseLabel(const String &amp;falseLabel)</div><div class="ttdoc">Sets the string that is displayed when value() is false to falseLabel. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00173">BoolField.cpp:173</a></div></div>
<div class="ttc" id="classBoolField_html_af793bafc1193d79b495c2ede711bca57"><div class="ttname"><a href="classBoolField.html#af793bafc1193d79b495c2ede711bca57">BoolField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00103">BoolField.cpp:103</a></div></div>
<div class="ttc" id="classBoolField_html_ab3f1e610b52caed7e41016f6ae3d7d09"><div class="ttname"><a href="classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09">BoolField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8cpp_source.html#l00113">BoolField.cpp:113</a></div></div>
<div class="ttc" id="classBoolField_html_a59ad7a8a33290bda0d9fbb3df4f09b01"><div class="ttname"><a href="classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01">BoolField::falseLabel</a></div><div class="ttdeci">const String &amp; falseLabel() const </div><div class="ttdoc">Returns the string that is displayed when value() is false. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00043">BoolField.h:43</a></div></div>
<div class="ttc" id="classBoolField_html_a9147826437fbaf9b29eda9dee9e37b39"><div class="ttname"><a href="classBoolField.html#a9147826437fbaf9b29eda9dee9e37b39">BoolField::value</a></div><div class="ttdeci">bool value() const </div><div class="ttdoc">Returns the current value of this field, true or false. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00037">BoolField.h:37</a></div></div>
<div class="ttc" id="classBoolField_html"><div class="ttname"><a href="classBoolField.html">BoolField</a></div><div class="ttdoc">Field that manages the input of a boolean value. </div><div class="ttdef"><b>Definition:</b> <a href="BoolField_8h_source.html#l00028">BoolField.h:28</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

216
CBC_8cpp_source.html Normal file
View File

@ -0,0 +1,216 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: CBC.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CBC.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;CBC.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classCBCCommon.html#a7575b369910e05f54e76698dd04bfa05"> 42</a></span>&#160;<a class="code" href="classCBCCommon.html#a7575b369910e05f54e76698dd04bfa05">CBCCommon::CBCCommon</a>()</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; : blockCipher(0)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; , posn(16)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classCBCCommon.html#a45a91367531b4692b3bb7237ab6e9015"> 51</a></span>&#160;<a class="code" href="classCBCCommon.html#a45a91367531b4692b3bb7237ab6e9015">CBCCommon::~CBCCommon</a>()</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; clean(iv);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; clean(temp);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e"> 57</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e">CBCCommon::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">keySize</a>();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classCBCCommon.html#a016277533730284a38bb6ad8cd6f91ce"> 62</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCBCCommon.html#a016277533730284a38bb6ad8cd6f91ce">CBCCommon::ivSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> 16;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37"> 67</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37">CBCCommon::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;{</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Verify the cipher&#39;s block size, just in case.</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (blockCipher-&gt;<a class="code" href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">blockSize</a>() != 16)</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Set the key on the underlying block cipher.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">setKey</a>(key, len);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classCBCCommon.html#ac7a586217835055b3a354bb932db160c"> 77</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCBCCommon.html#ac7a586217835055b3a354bb932db160c">CBCCommon::setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (len != 16)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; memcpy(this-&gt;iv, iv, 16);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; posn = 16;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147"> 86</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147">CBCCommon::encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">while</span> (len &gt;= 16) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; iv[posn] ^= *input++;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">encryptBlock</a>(iv, iv);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; *output++ = iv[posn];</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; len -= 16;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6"> 99</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6">CBCCommon::decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;{</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">while</span> (len &gt;= 16) {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c">decryptBlock</a>(temp, input);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn) {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; uint8_t in = *input++;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; *output++ = temp[posn] ^ iv[posn];</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; iv[posn] = in;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; len -= 16;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9"> 113</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9">CBCCommon::clear</a>()</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">clear</a>();</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; clean(iv);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; clean(temp);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; posn = 16;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div>
<div class="ttc" id="classCBCCommon_html_a41d2f655a7df13cfcd009b2882e13147"><div class="ttname"><a href="classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147">CBCCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00086">CBC.cpp:86</a></div></div>
<div class="ttc" id="classCBCCommon_html_a7575b369910e05f54e76698dd04bfa05"><div class="ttname"><a href="classCBCCommon.html#a7575b369910e05f54e76698dd04bfa05">CBCCommon::CBCCommon</a></div><div class="ttdeci">CBCCommon()</div><div class="ttdoc">Constructs a new cipher in CBC mode. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00042">CBC.cpp:42</a></div></div>
<div class="ttc" id="classCBCCommon_html_add75ea4342a190e560cee26a8e9efc37"><div class="ttname"><a href="classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37">CBCCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00067">CBC.cpp:67</a></div></div>
<div class="ttc" id="classCBCCommon_html_adb7daacfe2a4fca3d13b62b75372fe4e"><div class="ttname"><a href="classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e">CBCCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00057">CBC.cpp:57</a></div></div>
<div class="ttc" id="classCBCCommon_html_a7befadfe7384e0e857a96a59bf3845e9"><div class="ttname"><a href="classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9">CBCCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00113">CBC.cpp:113</a></div></div>
<div class="ttc" id="classBlockCipher_html_ac3ba2450222aa1ea804ae4881ab6440c"><div class="ttname"><a href="classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c">BlockCipher::decryptBlock</a></div><div class="ttdeci">virtual void decryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Decrypts a single block using this cipher. </div></div>
<div class="ttc" id="classBlockCipher_html_aed0788b25f6bb2f1bd47d5a5f0c5db33"><div class="ttname"><a href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">BlockCipher::encryptBlock</a></div><div class="ttdeci">virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Encrypts a single block using this cipher. </div></div>
<div class="ttc" id="classCBCCommon_html_ab46a2625cae9a654c708e1f31a0e22b6"><div class="ttname"><a href="classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6">CBCCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00099">CBC.cpp:99</a></div></div>
<div class="ttc" id="classCBCCommon_html_ac7a586217835055b3a354bb932db160c"><div class="ttname"><a href="classCBCCommon.html#ac7a586217835055b3a354bb932db160c">CBCCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00077">CBC.cpp:77</a></div></div>
<div class="ttc" id="classCBCCommon_html_a45a91367531b4692b3bb7237ab6e9015"><div class="ttname"><a href="classCBCCommon.html#a45a91367531b4692b3bb7237ab6e9015">CBCCommon::~CBCCommon</a></div><div class="ttdeci">virtual ~CBCCommon()</div><div class="ttdoc">Destroys this cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00051">CBC.cpp:51</a></div></div>
<div class="ttc" id="classBlockCipher_html_a9a05307664469777592799c8f77397c4"><div class="ttname"><a href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">BlockCipher::setKey</a></div><div class="ttdeci">virtual bool setKey(const uint8_t *key, size_t len)=0</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div></div>
<div class="ttc" id="classCBCCommon_html_a016277533730284a38bb6ad8cd6f91ce"><div class="ttname"><a href="classCBCCommon.html#a016277533730284a38bb6ad8cd6f91ce">CBCCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00062">CBC.cpp:62</a></div></div>
<div class="ttc" id="classBlockCipher_html_a6f27d46e9dfa7761d014d828ad5f955b"><div class="ttname"><a href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">BlockCipher::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div></div>
<div class="ttc" id="classBlockCipher_html_a7059a310487c128db034b0ce0ad425a0"><div class="ttname"><a href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">BlockCipher::blockSize</a></div><div class="ttdeci">virtual size_t blockSize() const =0</div><div class="ttdoc">Size of a single block processed by this cipher, in bytes. </div></div>
<div class="ttc" id="classBlockCipher_html_afde6004a859e015d877eab3c37042a0f"><div class="ttname"><a href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">BlockCipher::keySize</a></div><div class="ttdeci">virtual size_t keySize() const =0</div><div class="ttdoc">Default size of the key for this block cipher, in bytes. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

180
CBC_8h_source.html Normal file
View File

@ -0,0 +1,180 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: CBC.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CBC.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_CBC_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_CBC_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Cipher.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;BlockCipher.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classCBCCommon.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCBCCommon.html">CBCCommon</a> : <span class="keyword">public</span> <a class="code" href="classCipher.html">Cipher</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classCBCCommon.html#a45a91367531b4692b3bb7237ab6e9015">~CBCCommon</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classCBCCommon.html#a016277533730284a38bb6ad8cd6f91ce">ivSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCBCCommon.html#ac7a586217835055b3a354bb932db160c">setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147">encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6">decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9">clear</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classCBCCommon.html#a7575b369910e05f54e76698dd04bfa05">CBCCommon</a>();</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1"> 47</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1">setBlockCipher</a>(<a class="code" href="classBlockCipher.html">BlockCipher</a> *cipher) { blockCipher = cipher; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classBlockCipher.html">BlockCipher</a> *blockCipher;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint8_t iv[16];</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint8_t temp[16];</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;};</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classCBC.html"> 57</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCBC.html">CBC</a> : <span class="keyword">public</span> <a class="code" href="classCBCCommon.html">CBCCommon</a></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classCBC.html#ae22d0d9347d5f3c97328e643a9b29ecb"> 60</a></span>&#160; <a class="code" href="classCBC.html#ae22d0d9347d5f3c97328e643a9b29ecb">CBC</a>() { <a class="code" href="classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1">setBlockCipher</a>(&amp;cipher); }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; T cipher;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;};</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCipher_html"><div class="ttname"><a href="classCipher.html">Cipher</a></div><div class="ttdoc">Abstract base class for stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8h_source.html#l00029">Cipher.h:29</a></div></div>
<div class="ttc" id="classCBCCommon_html_a41d2f655a7df13cfcd009b2882e13147"><div class="ttname"><a href="classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147">CBCCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00086">CBC.cpp:86</a></div></div>
<div class="ttc" id="classBlockCipher_html"><div class="ttname"><a href="classBlockCipher.html">BlockCipher</a></div><div class="ttdoc">Abstract base class for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8h_source.html#l00029">BlockCipher.h:29</a></div></div>
<div class="ttc" id="classCBCCommon_html_a7575b369910e05f54e76698dd04bfa05"><div class="ttname"><a href="classCBCCommon.html#a7575b369910e05f54e76698dd04bfa05">CBCCommon::CBCCommon</a></div><div class="ttdeci">CBCCommon()</div><div class="ttdoc">Constructs a new cipher in CBC mode. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00042">CBC.cpp:42</a></div></div>
<div class="ttc" id="classCBCCommon_html_add75ea4342a190e560cee26a8e9efc37"><div class="ttname"><a href="classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37">CBCCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00067">CBC.cpp:67</a></div></div>
<div class="ttc" id="classCBCCommon_html_adb7daacfe2a4fca3d13b62b75372fe4e"><div class="ttname"><a href="classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e">CBCCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00057">CBC.cpp:57</a></div></div>
<div class="ttc" id="classCBCCommon_html_a7befadfe7384e0e857a96a59bf3845e9"><div class="ttname"><a href="classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9">CBCCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00113">CBC.cpp:113</a></div></div>
<div class="ttc" id="classCBCCommon_html_ab46a2625cae9a654c708e1f31a0e22b6"><div class="ttname"><a href="classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6">CBCCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00099">CBC.cpp:99</a></div></div>
<div class="ttc" id="classCBCCommon_html_ac7a586217835055b3a354bb932db160c"><div class="ttname"><a href="classCBCCommon.html#ac7a586217835055b3a354bb932db160c">CBCCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00077">CBC.cpp:77</a></div></div>
<div class="ttc" id="classCBCCommon_html_a45a91367531b4692b3bb7237ab6e9015"><div class="ttname"><a href="classCBCCommon.html#a45a91367531b4692b3bb7237ab6e9015">CBCCommon::~CBCCommon</a></div><div class="ttdeci">virtual ~CBCCommon()</div><div class="ttdoc">Destroys this cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00051">CBC.cpp:51</a></div></div>
<div class="ttc" id="classCBCCommon_html_a016277533730284a38bb6ad8cd6f91ce"><div class="ttname"><a href="classCBCCommon.html#a016277533730284a38bb6ad8cd6f91ce">CBCCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8cpp_source.html#l00062">CBC.cpp:62</a></div></div>
<div class="ttc" id="classCBC_html"><div class="ttname"><a href="classCBC.html">CBC</a></div><div class="ttdoc">Implementation of the Cipher Block Chaining (CBC) mode for 128-bit block ciphers. ...</div><div class="ttdef"><b>Definition:</b> <a href="CBC_8h_source.html#l00057">CBC.h:57</a></div></div>
<div class="ttc" id="classCBCCommon_html_a0b7631244b0c2c954cfdb50eb32f7db1"><div class="ttname"><a href="classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1">CBCCommon::setBlockCipher</a></div><div class="ttdeci">void setBlockCipher(BlockCipher *cipher)</div><div class="ttdoc">Sets the block cipher to use for this CBC object. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8h_source.html#l00047">CBC.h:47</a></div></div>
<div class="ttc" id="classCBC_html_ae22d0d9347d5f3c97328e643a9b29ecb"><div class="ttname"><a href="classCBC.html#ae22d0d9347d5f3c97328e643a9b29ecb">CBC::CBC</a></div><div class="ttdeci">CBC()</div><div class="ttdoc">Constructs a new CBC object for the block cipher T. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8h_source.html#l00060">CBC.h:60</a></div></div>
<div class="ttc" id="classCBCCommon_html"><div class="ttname"><a href="classCBCCommon.html">CBCCommon</a></div><div class="ttdoc">Concrete base class to assist with implementing CBC for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="CBC_8h_source.html#l00029">CBC.h:29</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

241
CFB_8cpp_source.html Normal file
View File

@ -0,0 +1,241 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: CFB.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CFB.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;CFB.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classCFBCommon.html#adad0210430c83817c993bdca30d562a6"> 42</a></span>&#160;<a class="code" href="classCFBCommon.html#adad0210430c83817c993bdca30d562a6">CFBCommon::CFBCommon</a>()</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; : blockCipher(0)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; , posn(16)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classCFBCommon.html#ae200d7b876a1f154bcdb1cdf33d3be54"> 51</a></span>&#160;<a class="code" href="classCFBCommon.html#ae200d7b876a1f154bcdb1cdf33d3be54">CFBCommon::~CFBCommon</a>()</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; clean(iv);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a82899da983bc70bc8152ee67f424552e"> 56</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCFBCommon.html#a82899da983bc70bc8152ee67f424552e">CFBCommon::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">keySize</a>();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a55db1be69de87aafe5601d31be918ebb"> 61</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCFBCommon.html#a55db1be69de87aafe5601d31be918ebb">CFBCommon::ivSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> 16;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea"> 66</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea">CFBCommon::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Verify the cipher&#39;s block size, just in case.</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (blockCipher-&gt;<a class="code" href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">blockSize</a>() != 16)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Set the key on the underlying block cipher.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">setKey</a>(key, len);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80"> 76</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80">CFBCommon::setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (len != 16)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; memcpy(this-&gt;iv, iv, 16);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; posn = 16;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a57af3692389bed300d3cfdf351351c51"> 85</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#a57af3692389bed300d3cfdf351351c51">CFBCommon::encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; uint8_t size;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// If we have exhausted the current keystream block, then encrypt</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// the IV/ciphertext to get another keystream block.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (posn &gt;= 16) {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">encryptBlock</a>(iv, iv);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; posn = 0;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// XOR the plaintext with the encrypted IV to get the new ciphertext.</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// We keep building up the ciphertext byte by byte in the IV buffer</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// until we have a full block&#39;s worth, and then the IV is encrypted</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// again by the code above.</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; size = 16 - posn;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (size &gt; len)</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; size = len;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; len -= size;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">while</span> (size &gt; 0) {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; iv[posn] ^= *input++;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; *output++ = iv[posn++];</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; --size;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div>
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef"> 112</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef">CFBCommon::decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; uint8_t size;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// If we have exhausted the current keystream block, then encrypt</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// the IV/ciphertext to get another keystream block.</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (posn &gt;= 16) {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">encryptBlock</a>(iv, iv);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; posn = 0;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// XOR the ciphertext with the encrypted IV to get the new plaintext.</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// We keep building up the ciphertext byte by byte in the IV buffer</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// until we have a full block&#39;s worth, and then the IV is encrypted</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// again by the code above.</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; size = 16 - posn;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (size &gt; len)</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; size = len;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; len -= size;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">while</span> (size &gt; 0) {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; uint8_t in = *input++;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; *output++ = iv[posn] ^ in;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; iv[posn++] = in;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; --size;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d"> 140</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d">CFBCommon::clear</a>()</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;{</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">clear</a>();</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; clean(iv);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; posn = 16;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;}</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
<div class="ttc" id="classCFBCommon_html_a45b9be25fb96f0e3ca5211b064e2baea"><div class="ttname"><a href="classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea">CFBCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00066">CFB.cpp:66</a></div></div>
<div class="ttc" id="classCFBCommon_html_a82899da983bc70bc8152ee67f424552e"><div class="ttname"><a href="classCFBCommon.html#a82899da983bc70bc8152ee67f424552e">CFBCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00056">CFB.cpp:56</a></div></div>
<div class="ttc" id="classCFBCommon_html_a55db1be69de87aafe5601d31be918ebb"><div class="ttname"><a href="classCFBCommon.html#a55db1be69de87aafe5601d31be918ebb">CFBCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00061">CFB.cpp:61</a></div></div>
<div class="ttc" id="classBlockCipher_html_aed0788b25f6bb2f1bd47d5a5f0c5db33"><div class="ttname"><a href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">BlockCipher::encryptBlock</a></div><div class="ttdeci">virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Encrypts a single block using this cipher. </div></div>
<div class="ttc" id="classCFBCommon_html_ae200d7b876a1f154bcdb1cdf33d3be54"><div class="ttname"><a href="classCFBCommon.html#ae200d7b876a1f154bcdb1cdf33d3be54">CFBCommon::~CFBCommon</a></div><div class="ttdeci">virtual ~CFBCommon()</div><div class="ttdoc">Destroys this cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00051">CFB.cpp:51</a></div></div>
<div class="ttc" id="classCFBCommon_html_a597040eb7df40adbbef94b4c3975cd80"><div class="ttname"><a href="classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80">CFBCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00076">CFB.cpp:76</a></div></div>
<div class="ttc" id="classCFBCommon_html_adad0210430c83817c993bdca30d562a6"><div class="ttname"><a href="classCFBCommon.html#adad0210430c83817c993bdca30d562a6">CFBCommon::CFBCommon</a></div><div class="ttdeci">CFBCommon()</div><div class="ttdoc">Constructs a new cipher in CFB mode. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00042">CFB.cpp:42</a></div></div>
<div class="ttc" id="classCFBCommon_html_a57af3692389bed300d3cfdf351351c51"><div class="ttname"><a href="classCFBCommon.html#a57af3692389bed300d3cfdf351351c51">CFBCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00085">CFB.cpp:85</a></div></div>
<div class="ttc" id="classBlockCipher_html_a9a05307664469777592799c8f77397c4"><div class="ttname"><a href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">BlockCipher::setKey</a></div><div class="ttdeci">virtual bool setKey(const uint8_t *key, size_t len)=0</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div></div>
<div class="ttc" id="classBlockCipher_html_a6f27d46e9dfa7761d014d828ad5f955b"><div class="ttname"><a href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">BlockCipher::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div></div>
<div class="ttc" id="classCFBCommon_html_a847d320b0fe7f329385f26511b42c40d"><div class="ttname"><a href="classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d">CFBCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00140">CFB.cpp:140</a></div></div>
<div class="ttc" id="classBlockCipher_html_a7059a310487c128db034b0ce0ad425a0"><div class="ttname"><a href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">BlockCipher::blockSize</a></div><div class="ttdeci">virtual size_t blockSize() const =0</div><div class="ttdoc">Size of a single block processed by this cipher, in bytes. </div></div>
<div class="ttc" id="classBlockCipher_html_afde6004a859e015d877eab3c37042a0f"><div class="ttname"><a href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">BlockCipher::keySize</a></div><div class="ttdeci">virtual size_t keySize() const =0</div><div class="ttdoc">Default size of the key for this block cipher, in bytes. </div></div>
<div class="ttc" id="classCFBCommon_html_aaaa3d61c5743e30e355207c193c0b0ef"><div class="ttname"><a href="classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef">CFBCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00112">CFB.cpp:112</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

179
CFB_8h_source.html Normal file
View File

@ -0,0 +1,179 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: CFB.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CFB.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_CFB_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_CFB_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Cipher.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;BlockCipher.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classCFBCommon.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCFBCommon.html">CFBCommon</a> : <span class="keyword">public</span> <a class="code" href="classCipher.html">Cipher</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classCFBCommon.html#ae200d7b876a1f154bcdb1cdf33d3be54">~CFBCommon</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classCFBCommon.html#a82899da983bc70bc8152ee67f424552e">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classCFBCommon.html#a55db1be69de87aafe5601d31be918ebb">ivSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80">setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#a57af3692389bed300d3cfdf351351c51">encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef">decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d">clear</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classCFBCommon.html#adad0210430c83817c993bdca30d562a6">CFBCommon</a>();</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c"> 47</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c">setBlockCipher</a>(<a class="code" href="classBlockCipher.html">BlockCipher</a> *cipher) { blockCipher = cipher; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classBlockCipher.html">BlockCipher</a> *blockCipher;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint8_t iv[16];</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classCFB.html"> 56</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCFB.html">CFB</a> : <span class="keyword">public</span> <a class="code" href="classCFBCommon.html">CFBCommon</a></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classCFB.html#a26a027614d027162c67085a58b512318"> 59</a></span>&#160; <a class="code" href="classCFB.html#a26a027614d027162c67085a58b512318">CFB</a>() { <a class="code" href="classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c">setBlockCipher</a>(&amp;cipher); }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; T cipher;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;};</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCipher_html"><div class="ttname"><a href="classCipher.html">Cipher</a></div><div class="ttdoc">Abstract base class for stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8h_source.html#l00029">Cipher.h:29</a></div></div>
<div class="ttc" id="classCFBCommon_html_a45b9be25fb96f0e3ca5211b064e2baea"><div class="ttname"><a href="classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea">CFBCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00066">CFB.cpp:66</a></div></div>
<div class="ttc" id="classCFBCommon_html_a82899da983bc70bc8152ee67f424552e"><div class="ttname"><a href="classCFBCommon.html#a82899da983bc70bc8152ee67f424552e">CFBCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00056">CFB.cpp:56</a></div></div>
<div class="ttc" id="classCFB_html_a26a027614d027162c67085a58b512318"><div class="ttname"><a href="classCFB.html#a26a027614d027162c67085a58b512318">CFB::CFB</a></div><div class="ttdeci">CFB()</div><div class="ttdoc">Constructs a new CFB object for the block cipher T. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8h_source.html#l00059">CFB.h:59</a></div></div>
<div class="ttc" id="classBlockCipher_html"><div class="ttname"><a href="classBlockCipher.html">BlockCipher</a></div><div class="ttdoc">Abstract base class for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8h_source.html#l00029">BlockCipher.h:29</a></div></div>
<div class="ttc" id="classCFB_html"><div class="ttname"><a href="classCFB.html">CFB</a></div><div class="ttdoc">Implementation of the Cipher Feedback (CFB) mode for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8h_source.html#l00056">CFB.h:56</a></div></div>
<div class="ttc" id="classCFBCommon_html_a55db1be69de87aafe5601d31be918ebb"><div class="ttname"><a href="classCFBCommon.html#a55db1be69de87aafe5601d31be918ebb">CFBCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00061">CFB.cpp:61</a></div></div>
<div class="ttc" id="classCFBCommon_html_ae200d7b876a1f154bcdb1cdf33d3be54"><div class="ttname"><a href="classCFBCommon.html#ae200d7b876a1f154bcdb1cdf33d3be54">CFBCommon::~CFBCommon</a></div><div class="ttdeci">virtual ~CFBCommon()</div><div class="ttdoc">Destroys this cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00051">CFB.cpp:51</a></div></div>
<div class="ttc" id="classCFBCommon_html"><div class="ttname"><a href="classCFBCommon.html">CFBCommon</a></div><div class="ttdoc">Concrete base class to assist with implementing CFB for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8h_source.html#l00029">CFB.h:29</a></div></div>
<div class="ttc" id="classCFBCommon_html_a597040eb7df40adbbef94b4c3975cd80"><div class="ttname"><a href="classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80">CFBCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00076">CFB.cpp:76</a></div></div>
<div class="ttc" id="classCFBCommon_html_a9161530f456efacb64f5008fdb1a460c"><div class="ttname"><a href="classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c">CFBCommon::setBlockCipher</a></div><div class="ttdeci">void setBlockCipher(BlockCipher *cipher)</div><div class="ttdoc">Sets the block cipher to use for this CFB object. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8h_source.html#l00047">CFB.h:47</a></div></div>
<div class="ttc" id="classCFBCommon_html_adad0210430c83817c993bdca30d562a6"><div class="ttname"><a href="classCFBCommon.html#adad0210430c83817c993bdca30d562a6">CFBCommon::CFBCommon</a></div><div class="ttdeci">CFBCommon()</div><div class="ttdoc">Constructs a new cipher in CFB mode. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00042">CFB.cpp:42</a></div></div>
<div class="ttc" id="classCFBCommon_html_a57af3692389bed300d3cfdf351351c51"><div class="ttname"><a href="classCFBCommon.html#a57af3692389bed300d3cfdf351351c51">CFBCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00085">CFB.cpp:85</a></div></div>
<div class="ttc" id="classCFBCommon_html_a847d320b0fe7f329385f26511b42c40d"><div class="ttname"><a href="classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d">CFBCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00140">CFB.cpp:140</a></div></div>
<div class="ttc" id="classCFBCommon_html_aaaa3d61c5743e30e355207c193c0b0ef"><div class="ttname"><a href="classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef">CFBCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CFB_8cpp_source.html#l00112">CFB.cpp:112</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

236
CTR_8cpp_source.html Normal file
View File

@ -0,0 +1,236 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: CTR.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CTR.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;CTR.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classCTRCommon.html#abeb01342f17023e99776001d397c51ff"> 42</a></span>&#160;<a class="code" href="classCTRCommon.html#abeb01342f17023e99776001d397c51ff">CTRCommon::CTRCommon</a>()</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; : blockCipher(0)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; , posn(16)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; , counterStart(0)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;CTRCommon::~CTRCommon()</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// It is assumed that the subclass will clear sensitive</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// information in the block cipher.</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; clean(counter);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; clean(state);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2"> 57</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2">CTRCommon::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">keySize</a>();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classCTRCommon.html#a98c1717d11d8da8e1fa108607358774a"> 62</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCTRCommon.html#a98c1717d11d8da8e1fa108607358774a">CTRCommon::ivSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> 16;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classCTRCommon.html#ae2bc6b33a864412598b426320d853337"> 86</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCTRCommon.html#ae2bc6b33a864412598b426320d853337">CTRCommon::setCounterSize</a>(<span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (size &lt; 1 || size &gt; 16)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; counterStart = 16 - size;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div>
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classCTRCommon.html#a79da937dc2c444a174176beab33c055a"> 94</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCTRCommon.html#a79da937dc2c444a174176beab33c055a">CTRCommon::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Verify the cipher&#39;s block size, just in case.</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (blockCipher-&gt;<a class="code" href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">blockSize</a>() != 16)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Set the key on the underlying block cipher.</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">setKey</a>(key, len);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div>
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04"> 119</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04">CTRCommon::setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">if</span> (len != 16)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; memcpy(counter, iv, len);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; posn = 16;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classCTRCommon.html#a201bda584d111552ce8ec09fac759963"> 128</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#a201bda584d111552ce8ec09fac759963">CTRCommon::encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (posn &gt;= 16) {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// Generate a new encrypted counter block.</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">encryptBlock</a>(state, counter);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; posn = 0;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Increment the counter, taking care not to reveal</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// any timing information about the starting value.</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// We iterate through the entire counter region even</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// if we could stop earlier because a byte is non-zero.</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; uint16_t temp = 1;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; uint8_t index = 16;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">while</span> (index &gt; counterStart) {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; --index;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; temp += counter[index];</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; counter[index] = (uint8_t)temp;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; temp &gt;&gt;= 8;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; uint8_t templen = 16 - posn;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (templen &gt; len)</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; templen = len;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; len -= templen;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">while</span> (templen &gt; 0) {</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; *output++ = *input++ ^ state[posn++];</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; --templen;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classCTRCommon.html#a0943387cf1124258389702e0690740fe"> 160</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#a0943387cf1124258389702e0690740fe">CTRCommon::decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classCTRCommon.html#a201bda584d111552ce8ec09fac759963">encrypt</a>(output, input, len);</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;}</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2"> 165</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2">CTRCommon::clear</a>()</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">clear</a>();</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; clean(counter);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; clean(state);</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; posn = 16;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div>
<div class="ttc" id="classCTRCommon_html_aad289af3eb013cb3ffda6d7e8e8b3d04"><div class="ttname"><a href="classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04">CTRCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initial counter value to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00119">CTR.cpp:119</a></div></div>
<div class="ttc" id="classBlockCipher_html_aed0788b25f6bb2f1bd47d5a5f0c5db33"><div class="ttname"><a href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">BlockCipher::encryptBlock</a></div><div class="ttdeci">virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Encrypts a single block using this cipher. </div></div>
<div class="ttc" id="classCTRCommon_html_ae2bc6b33a864412598b426320d853337"><div class="ttname"><a href="classCTRCommon.html#ae2bc6b33a864412598b426320d853337">CTRCommon::setCounterSize</a></div><div class="ttdeci">bool setCounterSize(size_t size)</div><div class="ttdoc">Sets the counter size for the IV. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00086">CTR.cpp:86</a></div></div>
<div class="ttc" id="classBlockCipher_html_a9a05307664469777592799c8f77397c4"><div class="ttname"><a href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">BlockCipher::setKey</a></div><div class="ttdeci">virtual bool setKey(const uint8_t *key, size_t len)=0</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div></div>
<div class="ttc" id="classCTRCommon_html_a201bda584d111552ce8ec09fac759963"><div class="ttname"><a href="classCTRCommon.html#a201bda584d111552ce8ec09fac759963">CTRCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00128">CTR.cpp:128</a></div></div>
<div class="ttc" id="classCTRCommon_html_a0943387cf1124258389702e0690740fe"><div class="ttname"><a href="classCTRCommon.html#a0943387cf1124258389702e0690740fe">CTRCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00160">CTR.cpp:160</a></div></div>
<div class="ttc" id="classCTRCommon_html_abeb01342f17023e99776001d397c51ff"><div class="ttname"><a href="classCTRCommon.html#abeb01342f17023e99776001d397c51ff">CTRCommon::CTRCommon</a></div><div class="ttdeci">CTRCommon()</div><div class="ttdoc">Constructs a new cipher in CTR mode. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00042">CTR.cpp:42</a></div></div>
<div class="ttc" id="classCTRCommon_html_a29ce8e13a302350397fc6790a686bea2"><div class="ttname"><a href="classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2">CTRCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00057">CTR.cpp:57</a></div></div>
<div class="ttc" id="classBlockCipher_html_a6f27d46e9dfa7761d014d828ad5f955b"><div class="ttname"><a href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">BlockCipher::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div></div>
<div class="ttc" id="classCTRCommon_html_a98c1717d11d8da8e1fa108607358774a"><div class="ttname"><a href="classCTRCommon.html#a98c1717d11d8da8e1fa108607358774a">CTRCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00062">CTR.cpp:62</a></div></div>
<div class="ttc" id="classCTRCommon_html_a79da937dc2c444a174176beab33c055a"><div class="ttname"><a href="classCTRCommon.html#a79da937dc2c444a174176beab33c055a">CTRCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00094">CTR.cpp:94</a></div></div>
<div class="ttc" id="classBlockCipher_html_a7059a310487c128db034b0ce0ad425a0"><div class="ttname"><a href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">BlockCipher::blockSize</a></div><div class="ttdeci">virtual size_t blockSize() const =0</div><div class="ttdoc">Size of a single block processed by this cipher, in bytes. </div></div>
<div class="ttc" id="classBlockCipher_html_afde6004a859e015d877eab3c37042a0f"><div class="ttname"><a href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">BlockCipher::keySize</a></div><div class="ttdeci">virtual size_t keySize() const =0</div><div class="ttdoc">Default size of the key for this block cipher, in bytes. </div></div>
<div class="ttc" id="classCTRCommon_html_ac0d6381c02fe2a8a017ad66d006a6ef2"><div class="ttname"><a href="classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2">CTRCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00165">CTR.cpp:165</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

183
CTR_8h_source.html Normal file
View File

@ -0,0 +1,183 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: CTR.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CTR.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_CTR_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_CTR_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Cipher.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;BlockCipher.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classCTRCommon.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCTRCommon.html">CTRCommon</a> : <span class="keyword">public</span> <a class="code" href="classCipher.html">Cipher</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classCTRCommon.html">CTRCommon</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classCTRCommon.html#a98c1717d11d8da8e1fa108607358774a">ivSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCTRCommon.html#ae2bc6b33a864412598b426320d853337">setCounterSize</a>(<span class="keywordtype">size_t</span> size);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCTRCommon.html#a79da937dc2c444a174176beab33c055a">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04">setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#a201bda584d111552ce8ec09fac759963">encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#a0943387cf1124258389702e0690740fe">decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2">clear</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classCTRCommon.html#abeb01342f17023e99776001d397c51ff">CTRCommon</a>();</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228"> 49</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228">setBlockCipher</a>(<a class="code" href="classBlockCipher.html">BlockCipher</a> *cipher) { blockCipher = cipher; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classBlockCipher.html">BlockCipher</a> *blockCipher;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint8_t counter[16];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; uint8_t state[16];</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; uint8_t counterStart;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;};</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classCTR.html"> 60</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCTR.html">CTR</a> : <span class="keyword">public</span> <a class="code" href="classCTRCommon.html">CTRCommon</a></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classCTR.html#a7025ab5d79f0f0763f751aeabc425ca9"> 63</a></span>&#160; <a class="code" href="classCTR.html#a7025ab5d79f0f0763f751aeabc425ca9">CTR</a>() { <a class="code" href="classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228">setBlockCipher</a>(&amp;cipher); }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; T cipher;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;};</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCipher_html"><div class="ttname"><a href="classCipher.html">Cipher</a></div><div class="ttdoc">Abstract base class for stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8h_source.html#l00029">Cipher.h:29</a></div></div>
<div class="ttc" id="classCTR_html_a7025ab5d79f0f0763f751aeabc425ca9"><div class="ttname"><a href="classCTR.html#a7025ab5d79f0f0763f751aeabc425ca9">CTR::CTR</a></div><div class="ttdeci">CTR()</div><div class="ttdoc">Constructs a new CTR object for the 128-bit block cipher T. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8h_source.html#l00063">CTR.h:63</a></div></div>
<div class="ttc" id="classBlockCipher_html"><div class="ttname"><a href="classBlockCipher.html">BlockCipher</a></div><div class="ttdoc">Abstract base class for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8h_source.html#l00029">BlockCipher.h:29</a></div></div>
<div class="ttc" id="classCTRCommon_html_a6c409c4ec1f99e0cb751196d891dc228"><div class="ttname"><a href="classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228">CTRCommon::setBlockCipher</a></div><div class="ttdeci">void setBlockCipher(BlockCipher *cipher)</div><div class="ttdoc">Sets the block cipher to use for this CTR object. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8h_source.html#l00049">CTR.h:49</a></div></div>
<div class="ttc" id="classCTRCommon_html_aad289af3eb013cb3ffda6d7e8e8b3d04"><div class="ttname"><a href="classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04">CTRCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initial counter value to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00119">CTR.cpp:119</a></div></div>
<div class="ttc" id="classCTRCommon_html_ae2bc6b33a864412598b426320d853337"><div class="ttname"><a href="classCTRCommon.html#ae2bc6b33a864412598b426320d853337">CTRCommon::setCounterSize</a></div><div class="ttdeci">bool setCounterSize(size_t size)</div><div class="ttdoc">Sets the counter size for the IV. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00086">CTR.cpp:86</a></div></div>
<div class="ttc" id="classCTRCommon_html_a201bda584d111552ce8ec09fac759963"><div class="ttname"><a href="classCTRCommon.html#a201bda584d111552ce8ec09fac759963">CTRCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00128">CTR.cpp:128</a></div></div>
<div class="ttc" id="classCTRCommon_html_a0943387cf1124258389702e0690740fe"><div class="ttname"><a href="classCTRCommon.html#a0943387cf1124258389702e0690740fe">CTRCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00160">CTR.cpp:160</a></div></div>
<div class="ttc" id="classCTRCommon_html_abeb01342f17023e99776001d397c51ff"><div class="ttname"><a href="classCTRCommon.html#abeb01342f17023e99776001d397c51ff">CTRCommon::CTRCommon</a></div><div class="ttdeci">CTRCommon()</div><div class="ttdoc">Constructs a new cipher in CTR mode. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00042">CTR.cpp:42</a></div></div>
<div class="ttc" id="classCTRCommon_html_a29ce8e13a302350397fc6790a686bea2"><div class="ttname"><a href="classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2">CTRCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00057">CTR.cpp:57</a></div></div>
<div class="ttc" id="classCTRCommon_html_a98c1717d11d8da8e1fa108607358774a"><div class="ttname"><a href="classCTRCommon.html#a98c1717d11d8da8e1fa108607358774a">CTRCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00062">CTR.cpp:62</a></div></div>
<div class="ttc" id="classCTRCommon_html_a79da937dc2c444a174176beab33c055a"><div class="ttname"><a href="classCTRCommon.html#a79da937dc2c444a174176beab33c055a">CTRCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00094">CTR.cpp:94</a></div></div>
<div class="ttc" id="classCTR_html"><div class="ttname"><a href="classCTR.html">CTR</a></div><div class="ttdoc">Implementation of the Counter (CTR) mode for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8h_source.html#l00060">CTR.h:60</a></div></div>
<div class="ttc" id="classCTRCommon_html_ac0d6381c02fe2a8a017ad66d006a6ef2"><div class="ttname"><a href="classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2">CTRCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8cpp_source.html#l00165">CTR.cpp:165</a></div></div>
<div class="ttc" id="classCTRCommon_html"><div class="ttname"><a href="classCTRCommon.html">CTRCommon</a></div><div class="ttdoc">Concrete base class to assist with implementing CTR mode for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="CTR_8h_source.html#l00029">CTR.h:29</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

308
ChaCha_8cpp_source.html Normal file
View File

@ -0,0 +1,308 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: ChaCha.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ChaCha.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;ChaCha.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;utility/RotateUtil.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;utility/EndianUtil.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;utility/ProgMemUtil.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classChaCha.html#a5831811b705d3c80e97f0242597f0c7e"> 47</a></span>&#160;<a class="code" href="classChaCha.html#a5831811b705d3c80e97f0242597f0c7e">ChaCha::ChaCha</a>(uint8_t numRounds)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; : rounds(numRounds)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; , posn(64)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;ChaCha::~ChaCha()</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; clean(block);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; clean(stream);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7"> 59</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7">ChaCha::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Default key size is 256-bit, but any key size is allowed.</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> 32;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classChaCha.html#afaa3df343a7d07976bd7e03a0c1bf43c"> 65</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classChaCha.html#afaa3df343a7d07976bd7e03a0c1bf43c">ChaCha::ivSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// We return 8 but we also support 12-byte nonces in setIV().</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> 8;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90"> 87</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90">ChaCha::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> tag128[] PROGMEM = <span class="stringliteral">&quot;expand 16-byte k&quot;</span>;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> tag256[] PROGMEM = <span class="stringliteral">&quot;expand 32-byte k&quot;</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (len &lt;= 16) {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; memcpy_P(block, tag128, 16);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; memcpy(block + 16, key, len);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; memcpy(block + 32, key, len);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (len &lt; 16) {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; memset(block + 16 + len, 0, 16 - len);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; memset(block + 32 + len, 0, 16 - len);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (len &gt; 32)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; len = 32;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; memcpy_P(block, tag256, 16);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; memcpy(block + 16, key, len);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (len &lt; 32)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; memset(block + 16 + len, 0, 32 - len);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; posn = 64;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div>
<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classChaCha.html#a734f3246b1e6810c63637b8cda26b259"> 111</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classChaCha.html#a734f3246b1e6810c63637b8cda26b259">ChaCha::setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// From draft-nir-cfrg-chacha20-poly1305-04.txt, we can use either</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// 64-bit or 96-bit nonces. The 96-bit nonce consists of the high</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// word of the counter prepended to a regular 64-bit nonce for ChaCha.</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (len == 8) {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; memset(block + 48, 0, 8);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; memcpy(block + 56, iv, len);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; posn = 64;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len == 12) {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; memset(block + 48, 0, 4);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; memcpy(block + 52, iv, len);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; posn = 64;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div>
<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classChaCha.html#acab9109b7189ea88d9e5417a3a209eac"> 145</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classChaCha.html#acab9109b7189ea88d9e5417a3a209eac">ChaCha::setCounter</a>(<span class="keyword">const</span> uint8_t *counter, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// Normally both the IV and the counter are 8 bytes in length.</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// However, if the IV was 12 bytes, then a 4 byte counter can be used.</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (len == 4 || len == 8) {</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; memcpy(block + 48, counter, len);</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; posn = 64;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;}</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div>
<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classChaCha.html#acd4fff140b8871c233d9a31abf753ed8"> 158</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaCha.html#acd4fff140b8871c233d9a31abf753ed8">ChaCha::encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (posn &gt;= 64) {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Generate a new encrypted counter block.</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">hashCore</a>((uint32_t *)stream, (<span class="keyword">const</span> uint32_t *)block, rounds);</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; posn = 0;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// Increment the counter, taking care not to reveal</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// any timing information about the starting value.</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// We iterate through the entire counter region even</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// if we could stop earlier because a byte is non-zero.</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; uint16_t temp = 1;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; uint8_t index = 48;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">while</span> (index &lt; 56) {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; temp += block[index];</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; block[index] = (uint8_t)temp;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; temp &gt;&gt;= 8;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; ++index;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; uint8_t templen = 64 - posn;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (templen &gt; len)</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; templen = len;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; len -= templen;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">while</span> (templen &gt; 0) {</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; *output++ = *input++ ^ stream[posn++];</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; --templen;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;}</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div>
<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c"> 190</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c">ChaCha::decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;{</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="classChaCha.html#acd4fff140b8871c233d9a31abf753ed8">encrypt</a>(output, input, len);</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div>
<div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classChaCha.html#af533905f679066c41f4d6cd76bddb4cb"> 195</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaCha.html#af533905f679066c41f4d6cd76bddb4cb">ChaCha::clear</a>()</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;{</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; clean(block);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; clean(stream);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; posn = 64;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;}</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment">// Perform a ChaCha quarter round operation.</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#define quarterRound(a, b, c, d) \</span></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor"> do { \</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="preprocessor"> uint32_t _b = (b); \</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor"> uint32_t _a = (a) + _b; \</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="preprocessor"> uint32_t _d = leftRotate((d) ^ _a, 16); \</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor"> uint32_t _c = (c) + _d; \</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor"> _b = leftRotate12(_b ^ _c); \</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="preprocessor"> _a += _b; \</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="preprocessor"> (d) = _d = leftRotate(_d ^ _a, 8); \</span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="preprocessor"> _c += _d; \</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="preprocessor"> (a) = _a; \</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="preprocessor"> (b) = leftRotate7(_b ^ _c); \</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="preprocessor"> (c) = _c; \</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="preprocessor"> } while (0)</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038"> 230</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a>(uint32_t *output, <span class="keyword">const</span> uint32_t *input, uint8_t rounds)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;{</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Copy the input buffer to the output prior to the first round</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// and convert from little-endian to host byte order.</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; output[posn] = le32toh(input[posn]);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// Perform the ChaCha rounds in sets of two.</span></div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span> (; rounds &gt;= 2; rounds -= 2) {</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Column round.</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; quarterRound(output[0], output[4], output[8], output[12]);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; quarterRound(output[1], output[5], output[9], output[13]);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; quarterRound(output[2], output[6], output[10], output[14]);</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; quarterRound(output[3], output[7], output[11], output[15]);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// Diagonal round.</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; quarterRound(output[0], output[5], output[10], output[15]);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; quarterRound(output[1], output[6], output[11], output[12]);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; quarterRound(output[2], output[7], output[8], output[13]);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; quarterRound(output[3], output[4], output[9], output[14]);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Add the original input to the final output, convert back to</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// little-endian, and return the result.</span></div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; 16; ++posn)</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; output[posn] = htole32(output[posn] + le32toh(input[posn]));</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
<div class="ttc" id="classChaCha_html_afaa3df343a7d07976bd7e03a0c1bf43c"><div class="ttname"><a href="classChaCha.html#afaa3df343a7d07976bd7e03a0c1bf43c">ChaCha::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00065">ChaCha.cpp:65</a></div></div>
<div class="ttc" id="classChaCha_html_a6b2bdffbd3705e388bb458edb2f40c90"><div class="ttname"><a href="classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90">ChaCha::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00087">ChaCha.cpp:87</a></div></div>
<div class="ttc" id="classChaCha_html_af286083291fab2bd36dc7ad1f54d5cd7"><div class="ttname"><a href="classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7">ChaCha::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00059">ChaCha.cpp:59</a></div></div>
<div class="ttc" id="classChaCha_html_a734f3246b1e6810c63637b8cda26b259"><div class="ttname"><a href="classChaCha.html#a734f3246b1e6810c63637b8cda26b259">ChaCha::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00111">ChaCha.cpp:111</a></div></div>
<div class="ttc" id="classChaCha_html_acab9109b7189ea88d9e5417a3a209eac"><div class="ttname"><a href="classChaCha.html#acab9109b7189ea88d9e5417a3a209eac">ChaCha::setCounter</a></div><div class="ttdeci">bool setCounter(const uint8_t *counter, size_t len)</div><div class="ttdoc">Sets the starting counter for encryption. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00145">ChaCha.cpp:145</a></div></div>
<div class="ttc" id="classChaCha_html_a5831811b705d3c80e97f0242597f0c7e"><div class="ttname"><a href="classChaCha.html#a5831811b705d3c80e97f0242597f0c7e">ChaCha::ChaCha</a></div><div class="ttdeci">ChaCha(uint8_t numRounds=20)</div><div class="ttdoc">Constructs a new ChaCha stream cipher. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00047">ChaCha.cpp:47</a></div></div>
<div class="ttc" id="classChaCha_html_a1f54b2b51b59428010f81a6c4dc4e42c"><div class="ttname"><a href="classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c">ChaCha::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00190">ChaCha.cpp:190</a></div></div>
<div class="ttc" id="classChaCha_html_acd4fff140b8871c233d9a31abf753ed8"><div class="ttname"><a href="classChaCha.html#acd4fff140b8871c233d9a31abf753ed8">ChaCha::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00158">ChaCha.cpp:158</a></div></div>
<div class="ttc" id="classChaCha_html_af533905f679066c41f4d6cd76bddb4cb"><div class="ttname"><a href="classChaCha.html#af533905f679066c41f4d6cd76bddb4cb">ChaCha::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00195">ChaCha.cpp:195</a></div></div>
<div class="ttc" id="classChaCha_html_a41ac3262e52ff49dcd916d0b3b2e2038"><div class="ttname"><a href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a></div><div class="ttdeci">static void hashCore(uint32_t *output, const uint32_t *input, uint8_t rounds)</div><div class="ttdoc">Executes the ChaCha hash core on an input memory block. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00230">ChaCha.cpp:230</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

171
ChaCha_8h_source.html Normal file
View File

@ -0,0 +1,171 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: ChaCha.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ChaCha.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_CHACHA_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_CHACHA_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Cipher.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classChaCha.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classChaCha.html">ChaCha</a> : <span class="keyword">public</span> <a class="code" href="classCipher.html">Cipher</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classChaCha.html#a5831811b705d3c80e97f0242597f0c7e">ChaCha</a>(uint8_t <a class="code" href="classChaCha.html#a0a73d3623da377bc593876156768dd72">numRounds</a> = 20);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classChaCha.html">ChaCha</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classChaCha.html#afaa3df343a7d07976bd7e03a0c1bf43c">ivSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classChaCha.html#a0a73d3623da377bc593876156768dd72"> 37</a></span>&#160; uint8_t <a class="code" href="classChaCha.html#a0a73d3623da377bc593876156768dd72">numRounds</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rounds; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classChaCha.html#a1a0911e0be8f4590d7fb76884d98c541"> 38</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaCha.html#a1a0911e0be8f4590d7fb76884d98c541">setNumRounds</a>(uint8_t <a class="code" href="classChaCha.html#a0a73d3623da377bc593876156768dd72">numRounds</a>) { rounds = <a class="code" href="classChaCha.html#a0a73d3623da377bc593876156768dd72">numRounds</a>; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classChaCha.html#a734f3246b1e6810c63637b8cda26b259">setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classChaCha.html#acab9109b7189ea88d9e5417a3a209eac">setCounter</a>(<span class="keyword">const</span> uint8_t *counter, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaCha.html#acd4fff140b8871c233d9a31abf753ed8">encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c">decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaCha.html#af533905f679066c41f4d6cd76bddb4cb">clear</a>();</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">hashCore</a>(uint32_t *output, <span class="keyword">const</span> uint32_t *input, uint8_t rounds);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint8_t block[64];</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint8_t stream[64];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; uint8_t rounds;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;};</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCipher_html"><div class="ttname"><a href="classCipher.html">Cipher</a></div><div class="ttdoc">Abstract base class for stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8h_source.html#l00029">Cipher.h:29</a></div></div>
<div class="ttc" id="classChaCha_html_afaa3df343a7d07976bd7e03a0c1bf43c"><div class="ttname"><a href="classChaCha.html#afaa3df343a7d07976bd7e03a0c1bf43c">ChaCha::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00065">ChaCha.cpp:65</a></div></div>
<div class="ttc" id="classChaCha_html_a6b2bdffbd3705e388bb458edb2f40c90"><div class="ttname"><a href="classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90">ChaCha::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00087">ChaCha.cpp:87</a></div></div>
<div class="ttc" id="classChaCha_html"><div class="ttname"><a href="classChaCha.html">ChaCha</a></div><div class="ttdoc">ChaCha stream cipher. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8h_source.html#l00028">ChaCha.h:28</a></div></div>
<div class="ttc" id="classChaCha_html_af286083291fab2bd36dc7ad1f54d5cd7"><div class="ttname"><a href="classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7">ChaCha::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00059">ChaCha.cpp:59</a></div></div>
<div class="ttc" id="classChaCha_html_a734f3246b1e6810c63637b8cda26b259"><div class="ttname"><a href="classChaCha.html#a734f3246b1e6810c63637b8cda26b259">ChaCha::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00111">ChaCha.cpp:111</a></div></div>
<div class="ttc" id="classChaCha_html_acab9109b7189ea88d9e5417a3a209eac"><div class="ttname"><a href="classChaCha.html#acab9109b7189ea88d9e5417a3a209eac">ChaCha::setCounter</a></div><div class="ttdeci">bool setCounter(const uint8_t *counter, size_t len)</div><div class="ttdoc">Sets the starting counter for encryption. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00145">ChaCha.cpp:145</a></div></div>
<div class="ttc" id="classChaCha_html_a5831811b705d3c80e97f0242597f0c7e"><div class="ttname"><a href="classChaCha.html#a5831811b705d3c80e97f0242597f0c7e">ChaCha::ChaCha</a></div><div class="ttdeci">ChaCha(uint8_t numRounds=20)</div><div class="ttdoc">Constructs a new ChaCha stream cipher. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00047">ChaCha.cpp:47</a></div></div>
<div class="ttc" id="classChaCha_html_a1f54b2b51b59428010f81a6c4dc4e42c"><div class="ttname"><a href="classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c">ChaCha::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00190">ChaCha.cpp:190</a></div></div>
<div class="ttc" id="classChaCha_html_acd4fff140b8871c233d9a31abf753ed8"><div class="ttname"><a href="classChaCha.html#acd4fff140b8871c233d9a31abf753ed8">ChaCha::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00158">ChaCha.cpp:158</a></div></div>
<div class="ttc" id="classChaCha_html_af533905f679066c41f4d6cd76bddb4cb"><div class="ttname"><a href="classChaCha.html#af533905f679066c41f4d6cd76bddb4cb">ChaCha::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00195">ChaCha.cpp:195</a></div></div>
<div class="ttc" id="classChaCha_html_a0a73d3623da377bc593876156768dd72"><div class="ttname"><a href="classChaCha.html#a0a73d3623da377bc593876156768dd72">ChaCha::numRounds</a></div><div class="ttdeci">uint8_t numRounds() const </div><div class="ttdoc">Returns the number of encryption rounds; usually 8, 12, or 20. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8h_source.html#l00037">ChaCha.h:37</a></div></div>
<div class="ttc" id="classChaCha_html_a1a0911e0be8f4590d7fb76884d98c541"><div class="ttname"><a href="classChaCha.html#a1a0911e0be8f4590d7fb76884d98c541">ChaCha::setNumRounds</a></div><div class="ttdeci">void setNumRounds(uint8_t numRounds)</div><div class="ttdoc">Sets the number of encryption rounds. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8h_source.html#l00038">ChaCha.h:38</a></div></div>
<div class="ttc" id="classChaCha_html_a41ac3262e52ff49dcd916d0b3b2e2038"><div class="ttname"><a href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a></div><div class="ttdeci">static void hashCore(uint32_t *output, const uint32_t *input, uint8_t rounds)</div><div class="ttdoc">Executes the ChaCha hash core on an input memory block. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00230">ChaCha.cpp:230</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Charlieplex.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -118,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd"> 121</a></span>&#160;<a class="code" href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd" title="Constructs a new charliexplexing array where the output pins are specified by the numPins entries in ...">Charlieplex::Charlieplex</a>(<span class="keyword">const</span> uint8_t *pins, uint8_t numPins)</div>
<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd"> 121</a></span>&#160;<a class="code" href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd">Charlieplex::Charlieplex</a>(<span class="keyword">const</span> uint8_t *pins, uint8_t numPins)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; : _count(((int)numPins) * (numPins - 1))</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; , _lastTime(micros())</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; , _currentIndex(-1)</div>
@ -153,23 +154,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
<div class="line"><a name="l00159"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103"> 159</a></span>&#160;<a class="code" href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103" title="Destroys this charlieplexed array.">Charlieplex::~Charlieplex</a>()</div>
<div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103"> 159</a></span>&#160;<a class="code" href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103">Charlieplex::~Charlieplex</a>()</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;{</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; free(_pins1);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; free(_pins2);</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; free(_values);</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div>
<div class="line"><a name="l00277"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a"> 277</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a" title="Runs the multiplexing loop, to display the LED states on the charlieplexed array.">Charlieplex::loop</a>()</div>
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a"> 277</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a">Charlieplex::loop</a>()</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;{</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> us = micros();</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> ((us - _lastTime) &gt;= _holdTime) {</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; _lastTime = us;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b" title="Refreshes the charlieplexed array by advancing to the next LED that needs to be lit.">refresh</a>();</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b">refresh</a>();</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div>
<div class="line"><a name="l00296"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b"> 296</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b" title="Refreshes the charlieplexed array by advancing to the next LED that needs to be lit.">Charlieplex::refresh</a>()</div>
<div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b"> 296</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b">Charlieplex::refresh</a>()</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;{</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// Find the next LED to be lit.</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordtype">int</span> prevIndex = _currentIndex;</div>
@ -224,12 +225,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; analogWrite(pin1, value);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;}</div>
<div class="ttc" id="classCharlieplex_html_a4dbe37ccba8ba18139f4e710afdcd103"><div class="ttname"><a href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103">Charlieplex::~Charlieplex</a></div><div class="ttdeci">~Charlieplex()</div><div class="ttdoc">Destroys this charlieplexed array. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00159">Charlieplex.cpp:159</a></div></div>
<div class="ttc" id="classCharlieplex_html_abfb0d0456bcbadbf60c21f615adacdbd"><div class="ttname"><a href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd">Charlieplex::Charlieplex</a></div><div class="ttdeci">Charlieplex(const uint8_t *pins, uint8_t numPins)</div><div class="ttdoc">Constructs a new charliexplexing array where the output pins are specified by the numPins entries in ...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00121">Charlieplex.cpp:121</a></div></div>
<div class="ttc" id="classCharlieplex_html_a8313edeacd8387c428b8299d52584d6a"><div class="ttname"><a href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a">Charlieplex::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdoc">Runs the multiplexing loop, to display the LED states on the charlieplexed array. ...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00277">Charlieplex.cpp:277</a></div></div>
<div class="ttc" id="classCharlieplex_html_a3c961bfff866e400dad371f0376f096b"><div class="ttname"><a href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b">Charlieplex::refresh</a></div><div class="ttdeci">void refresh()</div><div class="ttdoc">Refreshes the charlieplexed array by advancing to the next LED that needs to be lit. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00296">Charlieplex.cpp:296</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Charlieplex.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,25 +115,25 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classCharlieplex.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCharlieplex.html" title="Manage an array of LED&#39;s in a charlieplexed arrangement.">Charlieplex</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classCharlieplex.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCharlieplex.html">Charlieplex</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd" title="Constructs a new charliexplexing array where the output pins are specified by the numPins entries in ...">Charlieplex</a>(<span class="keyword">const</span> uint8_t *pins, uint8_t numPins);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103" title="Destroys this charlieplexed array.">~Charlieplex</a>();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd">Charlieplex</a>(<span class="keyword">const</span> uint8_t *pins, uint8_t numPins);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103">~Charlieplex</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a5008aa4143d381ce34a3aed1a3843e4e"> 34</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classCharlieplex.html#a5008aa4143d381ce34a3aed1a3843e4e" title="Returns the number of LED&#39;s in this charlieplexed array based on the number of pins.">count</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _count; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a5008aa4143d381ce34a3aed1a3843e4e"> 34</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classCharlieplex.html#a5008aa4143d381ce34a3aed1a3843e4e">count</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _count; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d"> 36</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d" title="Returns the value of the LED at index in the charplexed array; true if lit; false if not lit...">led</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _values[index] != 0; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5"> 37</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5" title="Sets the value of the LED at index in the charliplexed array.">setLed</a>(<span class="keywordtype">int</span> index, <span class="keywordtype">bool</span> value) { _values[index] = (value ? 255 : 0); }</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d"> 36</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d">led</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _values[index] != 0; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5"> 37</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5">setLed</a>(<span class="keywordtype">int</span> index, <span class="keywordtype">bool</span> value) { _values[index] = (value ? 255 : 0); }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a89312f2fd1d27c4e56346ed9cccfb9f6"> 39</a></span>&#160; uint8_t <a class="code" href="classCharlieplex.html#a89312f2fd1d27c4e56346ed9cccfb9f6" title="Returns the PWM value of the LED at index in the charplexed array; between 0 and 255.">pwmLed</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _values[index]; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a605a302e13005a1aa3d68d0e22bc474b"> 40</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a605a302e13005a1aa3d68d0e22bc474b" title="Sets the PWM value of the LED at index in the charliplexed array; between 0 and 255.">setPwmLed</a>(<span class="keywordtype">int</span> index, uint8_t value) { _values[index] = value; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a89312f2fd1d27c4e56346ed9cccfb9f6"> 39</a></span>&#160; uint8_t <a class="code" href="classCharlieplex.html#a89312f2fd1d27c4e56346ed9cccfb9f6">pwmLed</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _values[index]; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a605a302e13005a1aa3d68d0e22bc474b"> 40</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a605a302e13005a1aa3d68d0e22bc474b">setPwmLed</a>(<span class="keywordtype">int</span> index, uint8_t value) { _values[index] = value; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="classCharlieplex.html#abb429659a7b1ee4c7306ea659050cb30"> 42</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classCharlieplex.html#abb429659a7b1ee4c7306ea659050cb30" title="Returns the number of microseconds that each LED should be held on for before moving onto the next in...">holdTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _holdTime; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="classCharlieplex.html#a8502f4c752faba37023ced587695f6a4"> 43</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a8502f4c752faba37023ced587695f6a4" title="Sets the number of microseconds that each LED should be held on for before moving onto the next in lo...">setHoldTime</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> us) { _holdTime = us; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classCharlieplex.html#abb429659a7b1ee4c7306ea659050cb30"> 42</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classCharlieplex.html#abb429659a7b1ee4c7306ea659050cb30">holdTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _holdTime; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classCharlieplex.html#a8502f4c752faba37023ced587695f6a4"> 43</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a8502f4c752faba37023ced587695f6a4">setHoldTime</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> us) { _holdTime = us; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a" title="Runs the multiplexing loop, to display the LED states on the charlieplexed array.">loop</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b" title="Refreshes the charlieplexed array by advancing to the next LED that needs to be lit.">refresh</a>();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a">loop</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b">refresh</a>();</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">int</span> _count;</div>
@ -146,12 +147,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;};</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCharlieplex_html_a605a302e13005a1aa3d68d0e22bc474b"><div class="ttname"><a href="classCharlieplex.html#a605a302e13005a1aa3d68d0e22bc474b">Charlieplex::setPwmLed</a></div><div class="ttdeci">void setPwmLed(int index, uint8_t value)</div><div class="ttdoc">Sets the PWM value of the LED at index in the charliplexed array; between 0 and 255. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00040">Charlieplex.h:40</a></div></div>
<div class="ttc" id="classCharlieplex_html_a4dbe37ccba8ba18139f4e710afdcd103"><div class="ttname"><a href="classCharlieplex.html#a4dbe37ccba8ba18139f4e710afdcd103">Charlieplex::~Charlieplex</a></div><div class="ttdeci">~Charlieplex()</div><div class="ttdoc">Destroys this charlieplexed array. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00159">Charlieplex.cpp:159</a></div></div>
<div class="ttc" id="classCharlieplex_html_a8502f4c752faba37023ced587695f6a4"><div class="ttname"><a href="classCharlieplex.html#a8502f4c752faba37023ced587695f6a4">Charlieplex::setHoldTime</a></div><div class="ttdeci">void setHoldTime(unsigned long us)</div><div class="ttdoc">Sets the number of microseconds that each LED should be held on for before moving onto the next in lo...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00043">Charlieplex.h:43</a></div></div>
<div class="ttc" id="classCharlieplex_html"><div class="ttname"><a href="classCharlieplex.html">Charlieplex</a></div><div class="ttdoc">Manage an array of LED&#39;s in a charlieplexed arrangement. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00028">Charlieplex.h:28</a></div></div>
<div class="ttc" id="classCharlieplex_html_ab103c9687a0890faf72e4da79e3de0a5"><div class="ttname"><a href="classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5">Charlieplex::setLed</a></div><div class="ttdeci">void setLed(int index, bool value)</div><div class="ttdoc">Sets the value of the LED at index in the charliplexed array. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00037">Charlieplex.h:37</a></div></div>
<div class="ttc" id="classCharlieplex_html_a90fd09f24b62424b0b7b8bcdb0140b9d"><div class="ttname"><a href="classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d">Charlieplex::led</a></div><div class="ttdeci">bool led(int index) const </div><div class="ttdoc">Returns the value of the LED at index in the charplexed array; true if lit; false if not lit...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00036">Charlieplex.h:36</a></div></div>
<div class="ttc" id="classCharlieplex_html_abfb0d0456bcbadbf60c21f615adacdbd"><div class="ttname"><a href="classCharlieplex.html#abfb0d0456bcbadbf60c21f615adacdbd">Charlieplex::Charlieplex</a></div><div class="ttdeci">Charlieplex(const uint8_t *pins, uint8_t numPins)</div><div class="ttdoc">Constructs a new charliexplexing array where the output pins are specified by the numPins entries in ...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00121">Charlieplex.cpp:121</a></div></div>
<div class="ttc" id="classCharlieplex_html_a8313edeacd8387c428b8299d52584d6a"><div class="ttname"><a href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a">Charlieplex::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdoc">Runs the multiplexing loop, to display the LED states on the charlieplexed array. ...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00277">Charlieplex.cpp:277</a></div></div>
<div class="ttc" id="classCharlieplex_html_a5008aa4143d381ce34a3aed1a3843e4e"><div class="ttname"><a href="classCharlieplex.html#a5008aa4143d381ce34a3aed1a3843e4e">Charlieplex::count</a></div><div class="ttdeci">int count() const </div><div class="ttdoc">Returns the number of LED&#39;s in this charlieplexed array based on the number of pins. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00034">Charlieplex.h:34</a></div></div>
<div class="ttc" id="classCharlieplex_html_abb429659a7b1ee4c7306ea659050cb30"><div class="ttname"><a href="classCharlieplex.html#abb429659a7b1ee4c7306ea659050cb30">Charlieplex::holdTime</a></div><div class="ttdeci">unsigned long holdTime() const </div><div class="ttdoc">Returns the number of microseconds that each LED should be held on for before moving onto the next in...</div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00042">Charlieplex.h:42</a></div></div>
<div class="ttc" id="classCharlieplex_html_a3c961bfff866e400dad371f0376f096b"><div class="ttname"><a href="classCharlieplex.html#a3c961bfff866e400dad371f0376f096b">Charlieplex::refresh</a></div><div class="ttdeci">void refresh()</div><div class="ttdoc">Refreshes the charlieplexed array by advancing to the next LED that needs to be lit. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8cpp_source.html#l00296">Charlieplex.cpp:296</a></div></div>
<div class="ttc" id="classCharlieplex_html_a89312f2fd1d27c4e56346ed9cccfb9f6"><div class="ttname"><a href="classCharlieplex.html#a89312f2fd1d27c4e56346ed9cccfb9f6">Charlieplex::pwmLed</a></div><div class="ttdeci">uint8_t pwmLed(int index) const </div><div class="ttdoc">Returns the PWM value of the LED at index in the charplexed array; between 0 and 255. </div><div class="ttdef"><b>Definition:</b> <a href="Charlieplex_8h_source.html#l00039">Charlieplex.h:39</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: ChaseLEDs.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -116,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &lt;WProgram.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78"> 71</a></span>&#160;<a class="code" href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78" title="Initializes the LED chaser.">ChaseLEDs::ChaseLEDs</a>(<span class="keyword">const</span> uint8_t *pins, <span class="keywordtype">int</span> num, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> advanceTime)</div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78"> 71</a></span>&#160;<a class="code" href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78">ChaseLEDs::ChaseLEDs</a>(<span class="keyword">const</span> uint8_t *pins, <span class="keywordtype">int</span> num, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> advanceTime)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; : _pins(pins)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; , _numPins(num)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; , _currentIndex(-1)</div>
@ -129,35 +130,39 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786"> 87</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786">ChaseLEDs::loop</a>()</div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786"> 87</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786">ChaseLEDs::loop</a>()</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (_currentIndex &gt;= 0) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> ((millis() - _lastChange) &gt;= _advanceTime) {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Advance to the next LED in sequence.</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; _currentIndex = (_currentIndex + 1) % _numPins;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; _lastChange += _advanceTime;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(1), _pins[_currentIndex]);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(1), _pins[_currentIndex]);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// First time - light the first LED.</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; _currentIndex = 0;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; _lastChange = millis();</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(1), _pins[_currentIndex]);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(1), _pins[_currentIndex]);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b"> 136</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">ChaseLEDs::advance</a>(uint8_t prevPin, uint8_t nextPin)</div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b"> 136</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">ChaseLEDs::advance</a>(uint8_t prevPin, uint8_t nextPin)</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;{</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; digitalWrite(prevPin, LOW);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; digitalWrite(nextPin, HIGH);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div>
<div class="ttc" id="classChaseLEDs_html_aa0f4e0bd07dd65ee5574e894a612486b"><div class="ttname"><a href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">ChaseLEDs::advance</a></div><div class="ttdeci">virtual void advance(uint8_t prevPin, uint8_t nextPin)</div><div class="ttdoc">Advances to the next LED in sequence, turning off prevPin, and turning on nextPin. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8cpp_source.html#l00136">ChaseLEDs.cpp:136</a></div></div>
<div class="ttc" id="classChaseLEDs_html_a27c460fcb341c2dc2fcf9341616eb525"><div class="ttname"><a href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">ChaseLEDs::previousPin</a></div><div class="ttdeci">uint8_t previousPin(int n) const </div><div class="ttdoc">Returns the pin that is n steps back in the sequence. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8h_source.html#l00040">ChaseLEDs.h:40</a></div></div>
<div class="ttc" id="classChaseLEDs_html_a8745fa6b9f33b6c6274a563dd4dea786"><div class="ttname"><a href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786">ChaseLEDs::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8cpp_source.html#l00087">ChaseLEDs.cpp:87</a></div></div>
<div class="ttc" id="classChaseLEDs_html_ab6bb3da371d3730a6552e93a9b2eab78"><div class="ttname"><a href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78">ChaseLEDs::ChaseLEDs</a></div><div class="ttdeci">ChaseLEDs(const uint8_t *pins, int num, unsigned long advanceTime)</div><div class="ttdoc">Initializes the LED chaser. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8cpp_source.html#l00071">ChaseLEDs.cpp:71</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: ChaseLEDs.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,19 +115,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classChaseLEDs.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classChaseLEDs.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classChaseLEDs.html">ChaseLEDs</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78" title="Initializes the LED chaser.">ChaseLEDs</a>(<span class="keyword">const</span> uint8_t *pins, <span class="keywordtype">int</span> num, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700" title="Returns the number of milliseconds that each LED will be lit in the chase sequence.">advanceTime</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78">ChaseLEDs</a>(<span class="keyword">const</span> uint8_t *pins, <span class="keywordtype">int</span> num, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700">advanceTime</a>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786">loop</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700"> 35</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700" title="Returns the number of milliseconds that each LED will be lit in the chase sequence.">advanceTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _advanceTime; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7"> 36</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7" title="Sets the number of milliseconds to advance between LED&#39;s to advanceTime.">setAdvanceTime</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> advanceTime) { _advanceTime = <a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700" title="Returns the number of milliseconds that each LED will be lit in the chase sequence.">advanceTime</a>; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700"> 35</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700">advanceTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _advanceTime; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7"> 36</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7">setAdvanceTime</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> advanceTime) { _advanceTime = <a class="code" href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700">advanceTime</a>; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(uint8_t prevPin, uint8_t nextPin);</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525"> 40</a></span>&#160; uint8_t <a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(<span class="keywordtype">int</span> n)<span class="keyword"> const</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(uint8_t prevPin, uint8_t nextPin);</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525"> 40</a></span>&#160; uint8_t <a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(<span class="keywordtype">int</span> n)<span class="keyword"> const</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword"> </span>{ <span class="keywordflow">return</span> _pins[(_currentIndex + _numPins - n) % _numPins]; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">private</span>:</div>
@ -138,12 +139,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classChaseLEDs_html_aed060c51bb63dd8065be89f895989700"><div class="ttname"><a href="classChaseLEDs.html#aed060c51bb63dd8065be89f895989700">ChaseLEDs::advanceTime</a></div><div class="ttdeci">unsigned long advanceTime() const </div><div class="ttdoc">Returns the number of milliseconds that each LED will be lit in the chase sequence. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8h_source.html#l00035">ChaseLEDs.h:35</a></div></div>
<div class="ttc" id="classChaseLEDs_html_aa0f4e0bd07dd65ee5574e894a612486b"><div class="ttname"><a href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">ChaseLEDs::advance</a></div><div class="ttdeci">virtual void advance(uint8_t prevPin, uint8_t nextPin)</div><div class="ttdoc">Advances to the next LED in sequence, turning off prevPin, and turning on nextPin. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8cpp_source.html#l00136">ChaseLEDs.cpp:136</a></div></div>
<div class="ttc" id="classChaseLEDs_html_a27c460fcb341c2dc2fcf9341616eb525"><div class="ttname"><a href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">ChaseLEDs::previousPin</a></div><div class="ttdeci">uint8_t previousPin(int n) const </div><div class="ttdoc">Returns the pin that is n steps back in the sequence. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8h_source.html#l00040">ChaseLEDs.h:40</a></div></div>
<div class="ttc" id="classChaseLEDs_html_a8745fa6b9f33b6c6274a563dd4dea786"><div class="ttname"><a href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786">ChaseLEDs::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8cpp_source.html#l00087">ChaseLEDs.cpp:87</a></div></div>
<div class="ttc" id="classChaseLEDs_html"><div class="ttname"><a href="classChaseLEDs.html">ChaseLEDs</a></div><div class="ttdoc">Chase LED&#39;s on output pins in a defined sequence. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8h_source.html#l00028">ChaseLEDs.h:28</a></div></div>
<div class="ttc" id="classChaseLEDs_html_ab6bb3da371d3730a6552e93a9b2eab78"><div class="ttname"><a href="classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78">ChaseLEDs::ChaseLEDs</a></div><div class="ttdeci">ChaseLEDs(const uint8_t *pins, int num, unsigned long advanceTime)</div><div class="ttdoc">Initializes the LED chaser. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8cpp_source.html#l00071">ChaseLEDs.cpp:71</a></div></div>
<div class="ttc" id="classChaseLEDs_html_af560270f72302c19fb7f95002089c9d7"><div class="ttname"><a href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7">ChaseLEDs::setAdvanceTime</a></div><div class="ttdeci">void setAdvanceTime(unsigned long advanceTime)</div><div class="ttdoc">Sets the number of milliseconds to advance between LED&#39;s to advanceTime. </div><div class="ttdef"><b>Definition:</b> <a href="ChaseLEDs_8h_source.html#l00036">ChaseLEDs.h:36</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

133
Cipher_8cpp_source.html Normal file
View File

@ -0,0 +1,133 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Cipher.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Cipher.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;Cipher.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c"> 41</a></span>&#160;<a class="code" href="classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c">Cipher::Cipher</a>()</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classCipher.html#a84bdea765f7e35aa5b5950dd2853a383"> 53</a></span>&#160;<a class="code" href="classCipher.html#a84bdea765f7e35aa5b5950dd2853a383">Cipher::~Cipher</a>()</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="ttc" id="classCipher_html_a6a61077eca3ccd5900f92ceac58fb09c"><div class="ttname"><a href="classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c">Cipher::Cipher</a></div><div class="ttdeci">Cipher()</div><div class="ttdoc">Constructs a new cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8cpp_source.html#l00041">Cipher.cpp:41</a></div></div>
<div class="ttc" id="classCipher_html_a84bdea765f7e35aa5b5950dd2853a383"><div class="ttname"><a href="classCipher.html#a84bdea765f7e35aa5b5950dd2853a383">Cipher::~Cipher</a></div><div class="ttdeci">virtual ~Cipher()</div><div class="ttdoc">Destroys this cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8cpp_source.html#l00053">Cipher.cpp:53</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

156
Cipher_8h_source.html Normal file
View File

@ -0,0 +1,156 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Cipher.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Cipher.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_CIPHER_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_CIPHER_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classCipher.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCipher.html">Cipher</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c">Cipher</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classCipher.html#a84bdea765f7e35aa5b5950dd2853a383">~Cipher</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCipher.html#a4cea432ea0278c865441f17cbb88b1ab">keySize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCipher.html#ab8b53ddc4ce431f03c2a1903d70ace9c">ivSize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCipher.html#a0dfe133bda81dfa680b668f5908ccbe5">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCipher.html#a3777acd8ff776a4e945bb7c9f2d044d9">setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCipher.html#ad2832bd61039d61560e34ea3382ca562">encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCipher.html#ac6099d1a0d7f2ff67b0e4ccb4a17eb08">decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCipher.html#a4b7c3965646441a70d9ab934a7c92ab1">clear</a>() = 0;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;};</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCipher_html_ab8b53ddc4ce431f03c2a1903d70ace9c"><div class="ttname"><a href="classCipher.html#ab8b53ddc4ce431f03c2a1903d70ace9c">Cipher::ivSize</a></div><div class="ttdeci">virtual size_t ivSize() const =0</div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div></div>
<div class="ttc" id="classCipher_html"><div class="ttname"><a href="classCipher.html">Cipher</a></div><div class="ttdoc">Abstract base class for stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8h_source.html#l00029">Cipher.h:29</a></div></div>
<div class="ttc" id="classCipher_html_ad2832bd61039d61560e34ea3382ca562"><div class="ttname"><a href="classCipher.html#ad2832bd61039d61560e34ea3382ca562">Cipher::encrypt</a></div><div class="ttdeci">virtual void encrypt(uint8_t *output, const uint8_t *input, size_t len)=0</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div></div>
<div class="ttc" id="classCipher_html_ac6099d1a0d7f2ff67b0e4ccb4a17eb08"><div class="ttname"><a href="classCipher.html#ac6099d1a0d7f2ff67b0e4ccb4a17eb08">Cipher::decrypt</a></div><div class="ttdeci">virtual void decrypt(uint8_t *output, const uint8_t *input, size_t len)=0</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div></div>
<div class="ttc" id="classCipher_html_a3777acd8ff776a4e945bb7c9f2d044d9"><div class="ttname"><a href="classCipher.html#a3777acd8ff776a4e945bb7c9f2d044d9">Cipher::setIV</a></div><div class="ttdeci">virtual bool setIV(const uint8_t *iv, size_t len)=0</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div></div>
<div class="ttc" id="classCipher_html_a6a61077eca3ccd5900f92ceac58fb09c"><div class="ttname"><a href="classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c">Cipher::Cipher</a></div><div class="ttdeci">Cipher()</div><div class="ttdoc">Constructs a new cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8cpp_source.html#l00041">Cipher.cpp:41</a></div></div>
<div class="ttc" id="classCipher_html_a84bdea765f7e35aa5b5950dd2853a383"><div class="ttname"><a href="classCipher.html#a84bdea765f7e35aa5b5950dd2853a383">Cipher::~Cipher</a></div><div class="ttdeci">virtual ~Cipher()</div><div class="ttdoc">Destroys this cipher object. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8cpp_source.html#l00053">Cipher.cpp:53</a></div></div>
<div class="ttc" id="classCipher_html_a4cea432ea0278c865441f17cbb88b1ab"><div class="ttname"><a href="classCipher.html#a4cea432ea0278c865441f17cbb88b1ab">Cipher::keySize</a></div><div class="ttdeci">virtual size_t keySize() const =0</div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div></div>
<div class="ttc" id="classCipher_html_a4b7c3965646441a70d9ab934a7c92ab1"><div class="ttname"><a href="classCipher.html#a4b7c3965646441a70d9ab934a7c92ab1">Cipher::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div></div>
<div class="ttc" id="classCipher_html_a0dfe133bda81dfa680b668f5908ccbe5"><div class="ttname"><a href="classCipher.html#a0dfe133bda81dfa680b668f5908ccbe5">Cipher::setKey</a></div><div class="ttdeci">virtual bool setKey(const uint8_t *key, size_t len)=0</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

135
Crypto_8cpp_source.html Normal file
View File

@ -0,0 +1,135 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Crypto.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crypto.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keywordtype">void</span> clean(<span class="keywordtype">void</span> *dest, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Force the use of volatile so that we actually clear the memory.</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// Otherwise the compiler might optimise the entire contents of this</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// function away, which will not be secure.</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">volatile</span> uint8_t *d = (<span class="keyword">volatile</span> uint8_t *)dest;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">while</span> (size &gt; 0) {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; *d++ = 0;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; --size;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

136
Crypto_8h_source.html Normal file
View File

@ -0,0 +1,136 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Crypto.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crypto.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keywordtype">void</span> clean(<span class="keywordtype">void</span> *dest, <span class="keywordtype">size_t</span> size);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> clean(T &amp;var)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; clean(&amp;var, <span class="keyword">sizeof</span>(T));</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;}</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

725
Curve25519_8cpp_source.html Normal file
View File

@ -0,0 +1,725 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Curve25519.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Curve25519.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;Curve25519.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;RNG.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;utility/ProgMemUtil.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// Number of limbs in a value from the field modulo 2^255 - 19.</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// We assume that sizeof(limb_t) is a power of 2: 1, 2, 4, etc.</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#define NUM_LIMBS (32 / sizeof(limb_t))</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// Number of bits in limb_t.</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define LIMB_BITS (8 * sizeof(limb_t))</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a"> 68</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a">Curve25519::eval</a>(uint8_t result[32], <span class="keyword">const</span> uint8_t s[32], <span class="keyword">const</span> uint8_t x[32])</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; limb_t x_1[NUM_LIMBS];</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; limb_t x_2[NUM_LIMBS];</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; limb_t x_3[NUM_LIMBS];</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; limb_t z_2[NUM_LIMBS];</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; limb_t z_3[NUM_LIMBS];</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; limb_t A[NUM_LIMBS];</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; limb_t B[NUM_LIMBS];</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; limb_t C[NUM_LIMBS];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; limb_t D[NUM_LIMBS];</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; limb_t E[NUM_LIMBS];</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; limb_t AA[NUM_LIMBS];</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; limb_t BB[NUM_LIMBS];</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; limb_t DA[NUM_LIMBS];</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; limb_t CB[NUM_LIMBS];</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; uint8_t mask;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; uint8_t sposn;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; uint8_t select;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; uint8_t swap;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">bool</span> retval;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// Unpack the &quot;x&quot; argument into the limb representation</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// which also masks off the high bit. NULL means 9.</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (x) {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; unpack(x_1, x); <span class="comment">// x_1 = x</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; memset(x_1, 0, <span class="keyword">sizeof</span>(x_1)); <span class="comment">// x_1 = 9</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; x_1[0] = 9;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// Check that &quot;x&quot; is within the range of the modulo field.</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// We can do this with a reduction - if there was no borrow</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// then the value of &quot;x&quot; was out of range. Timing is sensitive</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// here so that we don&#39;t reveal anything about the value of &quot;x&quot;.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// If there was a reduction, then continue executing the rest</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// of this function with the (now) in-range &quot;x&quot; value and</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// report the failure at the end.</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; retval = (bool)(reduceQuick(x_1) &amp; 0x01);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// Initialize the other temporary variables.</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; memset(x_2, 0, <span class="keyword">sizeof</span>(x_2)); <span class="comment">// x_2 = 1</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; x_2[0] = 1;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; memset(z_2, 0, <span class="keyword">sizeof</span>(z_2)); <span class="comment">// z_2 = 0</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; memcpy(x_3, x_1, <span class="keyword">sizeof</span>(x_1)); <span class="comment">// x_3 = x</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; memcpy(z_3, x_2, <span class="keyword">sizeof</span>(x_2)); <span class="comment">// z_3 = 1</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// Iterate over all 255 bits of &quot;s&quot; from the highest to the lowest.</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// We ignore the high bit of the 256-bit representation of &quot;s&quot;.</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; mask = 0x40;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; sposn = 31;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; swap = 0;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (uint8_t t = 255; t &gt; 0; --t) {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// Conditional swaps on entry to this bit but only if we</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// didn&#39;t swap on the previous bit.</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; select = s[sposn] &amp; mask;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; swap ^= select;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; cswap(swap, x_2, x_3);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; cswap(swap, z_2, z_3);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// Evaluate the curve.</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; add(A, x_2, z_2); <span class="comment">// A = x_2 + z_2</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; square(AA, A); <span class="comment">// AA = A^2</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; sub(B, x_2, z_2); <span class="comment">// B = x_2 - z_2</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; square(BB, B); <span class="comment">// BB = B^2</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; sub(E, AA, BB); <span class="comment">// E = AA - BB</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; add(C, x_3, z_3); <span class="comment">// C = x_3 + z_3</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; sub(D, x_3, z_3); <span class="comment">// D = x_3 - z_3</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; mul(DA, D, A); <span class="comment">// DA = D * A</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; mul(CB, C, B); <span class="comment">// CB = C * B</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; add(x_3, DA, CB); <span class="comment">// x_3 = (DA + CB)^2</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; square(x_3, x_3);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; sub(z_3, DA, CB); <span class="comment">// z_3 = x_1 * (DA - CB)^2</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; square(z_3, z_3);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; mul(z_3, z_3, x_1);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; mul(x_2, AA, BB); <span class="comment">// x_2 = AA * BB</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; mulA24(z_2, E); <span class="comment">// z_2 = E * (AA + a24 * E)</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; add(z_2, z_2, AA);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; mul(z_2, z_2, E);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// Move onto the next lower bit of &quot;s&quot;.</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; mask &gt;&gt;= 1;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (!mask) {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; --sposn;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; mask = 0x80;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; swap = select &lt;&lt; 7;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; swap = select &gt;&gt; 1;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// Final conditional swaps.</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; cswap(swap, x_2, x_3);</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; cswap(swap, z_2, z_3);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// Compute x_2 * (z_2 ^ (p - 2)) where p = 2^255 - 19.</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; recip(z_3, z_2);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; mul(x_2, x_2, z_3);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// Pack the result into the return array.</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; pack(result, x_2);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// Clean up and exit.</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; clean(x_1);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; clean(x_2);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; clean(x_3);</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; clean(z_2);</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; clean(z_3);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; clean(A);</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; clean(B);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; clean(C);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; clean(D);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; clean(E);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; clean(AA);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; clean(BB);</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; clean(DA);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; clean(CB);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> retval;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div>
<div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classCurve25519.html#a2b6911583d17ea9a36bbbb40d58b3d89"> 231</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCurve25519.html#a2b6911583d17ea9a36bbbb40d58b3d89">Curve25519::dh1</a>(uint8_t k[32], uint8_t f[32])</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Generate a random &quot;f&quot; value and then adjust the value to make</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// it valid as an &quot;s&quot; value for eval(). According to the specification</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// we need to mask off the 3 right-most bits of f[0], mask off the</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// left-most bit of f[31], and set the second to left-most bit of f[31].</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; RNG.<a class="code" href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">rand</a>(f, 32);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; f[0] &amp;= 0xF8;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; f[31] = (f[31] &amp; 0x7F) | 0x40;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// Evaluate the curve function: k = Curve25519::eval(f, 9).</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// We pass NULL to eval() to indicate the value 9. There is no</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// need to check the return value from eval() because we know</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// that 9 is a valid field element.</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a">eval</a>(k, f, 0);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// If &quot;k&quot; is weak for contributory behaviour then reject it,</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// generate another &quot;f&quot; value, and try again. This case is</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// highly unlikely but we still perform the check just in case.</span></div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; } <span class="keywordflow">while</span> (isWeakPoint(k));</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;}</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div>
<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classCurve25519.html#a14022d6ac68ec691ffb0247275078ab9"> 269</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCurve25519.html#a14022d6ac68ec691ffb0247275078ab9">Curve25519::dh2</a>(uint8_t k[32], uint8_t f[32])</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; uint8_t weak;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Evaluate the curve function: k = Curve25519::eval(f, k).</span></div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// If &quot;k&quot; is weak for contributory behaviour before or after</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// the curve evaluation, then fail the exchange. For safety</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// we perform every phase of the weak checks even if we could</span></div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// bail out earlier so that the execution takes the same</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// amount of time for weak and non-weak &quot;k&quot; values.</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; weak = isWeakPoint(k); <span class="comment">// Is &quot;k&quot; weak before?</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; weak |= ((<a class="code" href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a">eval</a>(k, f, k) ^ 0x01) &amp; 0x01); <span class="comment">// Is &quot;k&quot; weak during?</span></div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; weak |= isWeakPoint(k); <span class="comment">// Is &quot;k&quot; weak after?</span></div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; clean(f, 32);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">bool</span>)((weak ^ 0x01) &amp; 0x01);</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;uint8_t Curve25519::isWeakPoint(<span class="keyword">const</span> uint8_t k[32])</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;{</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// List of weak points from http://cr.yp.to/ecdh.html</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// That page lists some others but they are variants on these</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// of the form &quot;point + i * (2^255 - 19)&quot; for i = 0, 1, 2.</span></div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// Here we mask off the high bit and eval() catches the rest.</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t points[5][32] PROGMEM = {</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {0xE0, 0xEB, 0x7A, 0x7C, 0x3B, 0x41, 0xB8, 0xAE,</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; 0x16, 0x56, 0xE3, 0xFA, 0xF1, 0x9F, 0xC4, 0x6A,</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; 0xDA, 0x09, 0x8D, 0xEB, 0x9C, 0x32, 0xB1, 0xFD,</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; 0x86, 0x62, 0x05, 0x16, 0x5F, 0x49, 0xB8, 0x00},</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {0x5F, 0x9C, 0x95, 0xBC, 0xA3, 0x50, 0x8C, 0x24,</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; 0xB1, 0xD0, 0xB1, 0x55, 0x9C, 0x83, 0xEF, 0x5B,</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; 0x04, 0x44, 0x5C, 0xC4, 0x58, 0x1C, 0x8E, 0x86,</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; 0xD8, 0x22, 0x4E, 0xDD, 0xD0, 0x9F, 0x11, 0x57},</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F}</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; };</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// Check each of the weak points in turn. We perform the</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// comparisons carefully so as not to reveal the value of &quot;k&quot;</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// in the instruction timing. If &quot;k&quot; is indeed weak then</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// we still check everything so as not to reveal which</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// weak point it is.</span></div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; uint8_t result = 0;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 5; ++posn) {</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> uint8_t *point = points[posn];</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; uint8_t check = (pgm_read_byte(point + 31) ^ k[31]) &amp; 0x7F;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 31; index &gt; 0; --index)</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; check |= (pgm_read_byte(point + index - 1) ^ k[index - 1]);</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; result |= (uint8_t)((((uint16_t)0x0100) - check) &gt;&gt; 8);</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">// The &quot;result&quot; variable will be non-zero if there was a match.</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;}</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="keywordtype">void</span> Curve25519::reduce(limb_t *result, limb_t *x, uint8_t size)</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;{</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"> Note: This explaination is best viewed with a UTF-8 text viewer.</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"> To help explain what this function is doing, the following describes</span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment"> how to efficiently compute reductions modulo a base of the form (2ⁿ - b)</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment"> where b is greater than zero and (b + 1)² &lt;= 2ⁿ.</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment"> Here we are interested in reducing the result of multiplying two</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment"> numbers that are less than or equal to (2ⁿ - b - 1). That is,</span></div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment"> multiplying numbers that have already been reduced.</span></div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment"> Given some x less than or equal to (2ⁿ - b - 1)², we want to find a</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment"> y less than (2ⁿ - b) such that:</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment"> y ≡ x mod (2ⁿ - b)</span></div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"> We know that for all integer values of k &gt;= 0:</span></div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment"> y ≡ x - k * (2ⁿ - b)</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment"> ≡ x - k * 2ⁿ + k * b</span></div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment"> In our case we choose k = ⌊x / 2ⁿ⌋ and then let:</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="comment"> w = (x mod 2ⁿ) + ⌊x / 2ⁿ⌋ * b</span></div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment"> The value w will either be the answer y or y can be obtained by</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="comment"> repeatedly subtracting (2ⁿ - b) from w until it is less than (2ⁿ - b).</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="comment"> At most b subtractions will be required.</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment"> In our case b is 19 which is more subtractions than we would like to do,</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="comment"> but we can handle that by performing the above reduction twice and then</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="comment"> performing a single trial subtraction:</span></div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment"> w = (x mod 2ⁿ) + ⌊x / 2ⁿ⌋ * b</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment"> y = (w mod 2ⁿ) + ⌊w / 2ⁿ⌋ * b</span></div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"> if y &gt;= (2ⁿ - b)</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment"> y -= (2ⁿ - b)</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment"> The value y is the answer we want for reducing x modulo (2ⁿ - b).</span></div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; dlimb_t carry;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// Calculate (x mod 2^255) + ((x / 2^255) * 19) which will</span></div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// either produce the answer we want or it will produce a</span></div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// value of the form &quot;answer + j * (2^255 - 19)&quot;.</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; carry = ((dlimb_t)(x[NUM_LIMBS - 1] &gt;&gt; (LIMB_BITS - 1))) * 19U;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; x[NUM_LIMBS - 1] &amp;= ((((limb_t)1) &lt;&lt; (LIMB_BITS - 1)) - 1);</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; size; ++posn) {</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; carry += ((dlimb_t)(x[posn + NUM_LIMBS])) * 38U;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; carry += x[posn];</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; x[posn] = (limb_t)carry;</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span> (size &lt; NUM_LIMBS) {</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// The high order half of the number is short; e.g. for mulA24().</span></div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="comment">// Propagate the carry through the rest of the low order part.</span></div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">for</span> (posn = size; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; carry += x[posn];</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; x[posn] = (limb_t)carry;</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// The &quot;j&quot; value may still be too large due to the final carry-out.</span></div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// We must repeat the reduction. If we already have the answer,</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// then this won&#39;t do any harm but we must still do the calculation</span></div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// to preserve the overall timing.</span></div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; carry *= 38U;</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; carry += ((dlimb_t)(x[NUM_LIMBS - 1] &gt;&gt; (LIMB_BITS - 1))) * 19U;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; x[NUM_LIMBS - 1] &amp;= ((((limb_t)1) &lt;&lt; (LIMB_BITS - 1)) - 1);</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; carry += x[posn];</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; x[posn] = (limb_t)carry;</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// At this point &quot;x&quot; will either be the answer or it will be the</span></div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// answer plus (2^255 - 19). Perform a trial subtraction which</span></div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// is equivalent to adding 19 and subtracting 2^255. We put the</span></div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// trial answer into the top-most limbs of the original &quot;x&quot; array.</span></div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// We add 19 here; the subtraction of 2^255 occurs in the next step.</span></div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; carry = 19U;</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; carry += x[posn];</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; x[posn + NUM_LIMBS] = (limb_t)carry;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// If there was a borrow, then the bottom-most limbs of &quot;x&quot; are the</span></div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// correct answer. If there was no borrow, then the top-most limbs</span></div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// of &quot;x&quot; are the correct answer. Select the correct answer but do</span></div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// it in a way that instruction timing will not reveal which value</span></div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// was selected. Borrow will occur if the high bit of the previous</span></div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// result is 0: turn the high bit into a selection mask.</span></div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; limb_t mask = (limb_t)(((slimb_t)(x[NUM_LIMBS * 2 - 1])) &gt;&gt; (LIMB_BITS - 1));</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; limb_t nmask = ~mask;</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; x[NUM_LIMBS * 2 - 1] &amp;= ((((limb_t)1) &lt;&lt; (LIMB_BITS - 1)) - 1);</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; result[posn] = (x[posn] &amp; nmask) | (x[posn + NUM_LIMBS] &amp; mask);</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;}</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;Curve25519::limb_t Curve25519::reduceQuick(limb_t *x)</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;{</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; limb_t temp[NUM_LIMBS];</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; dlimb_t carry;</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// Perform a trial subtraction of (2^255 - 19) from &quot;x&quot; which is</span></div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// equivalent to adding 19 and subtracting 2^255. We add 19 here;</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// the subtraction of 2^255 occurs in the next step.</span></div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; carry = 19U;</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; carry += x[posn];</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; temp[posn] = (limb_t)carry;</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// If there was a borrow, then the original &quot;x&quot; is the correct answer.</span></div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// If there was no borrow, then &quot;temp&quot; is the correct answer. Select the</span></div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">// correct answer but do it in a way that instruction timing will not</span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// reveal which value was selected. Borrow will occur if the high bit</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// of &quot;temp&quot; is 0: turn the high bit into a selection mask.</span></div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; limb_t mask = (limb_t)(((slimb_t)(temp[NUM_LIMBS - 1])) &gt;&gt; (LIMB_BITS - 1));</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; limb_t nmask = ~mask;</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; temp[NUM_LIMBS - 1] &amp;= ((((limb_t)1) &lt;&lt; (LIMB_BITS - 1)) - 1);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; x[posn] = (x[posn] &amp; nmask) | (temp[posn] &amp; mask);</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// Clean up &quot;temp&quot;.</span></div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; clean(temp);</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// Return a zero value if we actually subtracted (2^255 - 19) from &quot;x&quot;.</span></div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span> nmask;</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;}</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="keywordtype">void</span> Curve25519::mul(limb_t *result, <span class="keyword">const</span> limb_t *x, <span class="keyword">const</span> limb_t *y)</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;{</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; limb_t temp[NUM_LIMBS * 2];</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; uint8_t i, j;</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; dlimb_t carry;</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; limb_t word;</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// Multiply the lowest word of x by y.</span></div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; carry = 0;</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; word = x[0];</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; NUM_LIMBS; ++i) {</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; carry += ((dlimb_t)(y[i])) * word;</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; temp[i] = (limb_t)carry;</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; temp[NUM_LIMBS] = (limb_t)carry;</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// Multiply and add the remaining words of x by y.</span></div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; NUM_LIMBS; ++i) {</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; word = x[i];</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; carry = 0;</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">for</span> (j = 0; j &lt; NUM_LIMBS; ++j) {</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; carry += ((dlimb_t)(y[j])) * word;</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; carry += temp[i + j];</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; temp[i + j] = (limb_t)carry;</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; temp[i + NUM_LIMBS] = (limb_t)carry;</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">// Reduce the intermediate result modulo 2^255 - 19.</span></div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; reduce(result, temp, NUM_LIMBS);</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; clean(temp);</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;}</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="keywordtype">void</span> Curve25519::mulA24(limb_t *result, <span class="keyword">const</span> limb_t *x)</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;{</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="comment">// The constant a24 = 121665 (0x1DB41) as a limb array.</span></div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="preprocessor">#if CURVE25519_LIMB_8BIT</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="preprocessor"></span> <span class="keyword">static</span> limb_t <span class="keyword">const</span> a24[3] PROGMEM = {0x41, 0xDB, 0x01};</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="preprocessor"> #define pgm_read_a24(index) (pgm_read_byte(&amp;(a24[(index)])))</span></div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#elif CURVE25519_LIMB_16BIT</span></div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="preprocessor"></span> <span class="keyword">static</span> limb_t <span class="keyword">const</span> a24[2] PROGMEM = {0xDB41, 0x0001};</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="preprocessor"> #define pgm_read_a24(index) (pgm_read_word(&amp;(a24[(index)])))</span></div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#elif CURVE25519_LIMB_32BIT</span></div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="preprocessor"></span> <span class="keyword">static</span> limb_t <span class="keyword">const</span> a24[1] PROGMEM = {0x0001DB41};</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="preprocessor"> #define pgm_read_a24(index) (pgm_read_dword(&amp;(a24[(index)])))</span></div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#else</span></div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #error &quot;limb_t must be 8, 16, or 32 bits in size&quot;</span></div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #define NUM_A24_LIMBS (sizeof(a24) / sizeof(limb_t))</span></div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Multiply the lowest limb of a24 by x and zero-extend into the result.</span></div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; limb_t temp[NUM_LIMBS * 2];</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; uint8_t i, j;</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; dlimb_t carry = 0;</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; limb_t word = pgm_read_a24(0);</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; NUM_LIMBS; ++i) {</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; carry += ((dlimb_t)(x[i])) * word;</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; temp[i] = (limb_t)carry;</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; }</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; temp[NUM_LIMBS] = (limb_t)carry;</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="comment">// Multiply and add the remaining limbs of a24.</span></div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; NUM_A24_LIMBS; ++i) {</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; word = pgm_read_a24(i);</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; carry = 0;</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">for</span> (j = 0; j &lt; NUM_LIMBS; ++j) {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; carry += ((dlimb_t)(x[j])) * word;</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; carry += temp[i + j];</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; temp[i + j] = (limb_t)carry;</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; temp[i + NUM_LIMBS] = (limb_t)carry;</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// Reduce the intermediate result modulo 2^255 - 19.</span></div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; reduce(result, temp, NUM_A24_LIMBS);</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; clean(temp);</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;}</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keywordtype">void</span> Curve25519::add(limb_t *result, <span class="keyword">const</span> limb_t *x, <span class="keyword">const</span> limb_t *y)</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;{</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; dlimb_t carry = 0;</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// Add the two arrays to obtain the intermediate result.</span></div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; carry += x[posn];</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; carry += y[posn];</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; result[posn] = (limb_t)carry;</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; carry &gt;&gt;= LIMB_BITS;</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="comment">// Reduce the result using the quick trial subtraction method.</span></div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; reduceQuick(result);</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;}</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="keywordtype">void</span> Curve25519::sub(limb_t *result, <span class="keyword">const</span> limb_t *x, <span class="keyword">const</span> limb_t *y)</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;{</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; dlimb_t borrow;</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// Subtract y from x to generate the intermediate result.</span></div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; borrow = 0;</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; borrow = ((dlimb_t)x[posn]) - y[posn] - ((borrow &gt;&gt; LIMB_BITS) &amp; 0x01);</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; result[posn] = (limb_t)borrow;</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// If we had a borrow, then the result has gone negative and we</span></div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// have to add 2^255 - 19 to the result to make it positive again.</span></div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// The top bits of &quot;borrow&quot; will be all 1&#39;s if there is a borrow</span></div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="comment">// or it will be all 0&#39;s if there was no borrow. Easiest is to</span></div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="comment">// conditionally subtract 19 and then mask off the high bit.</span></div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; borrow = (borrow &gt;&gt; LIMB_BITS) &amp; 19U;</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; borrow = ((dlimb_t)result[0]) - borrow;</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; result[0] = (limb_t)borrow;</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">for</span> (posn = 1; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; borrow = ((dlimb_t)result[posn]) - ((borrow &gt;&gt; LIMB_BITS) &amp; 0x01);</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; result[posn] = (limb_t)borrow;</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; result[NUM_LIMBS - 1] &amp;= ((((limb_t)1) &lt;&lt; (LIMB_BITS - 1)) - 1);</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="keywordtype">void</span> Curve25519::cswap(uint8_t select, limb_t *x, limb_t *y)</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;{</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; limb_t dummy;</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; limb_t sel;</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// Turn &quot;select&quot; into an all-zeroes or all-ones mask. We don&#39;t care</span></div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="comment">// which bit or bits is set in the original &quot;select&quot; value.</span></div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; sel = (limb_t)(((((dlimb_t)1) &lt;&lt; LIMB_BITS) - select) &gt;&gt; LIMB_BITS);</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; --sel;</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// Swap the two values based on &quot;select&quot;. Algorithm from:</span></div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// https://tools.ietf.org/html/draft-irtf-cfrg-curves-02</span></div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">for</span> (posn = 0; posn &lt; NUM_LIMBS; ++posn) {</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; dummy = sel &amp; (x[posn] ^ y[posn]);</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; x[posn] ^= dummy;</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; y[posn] ^= dummy;</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;}</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="keywordtype">void</span> Curve25519::recip(limb_t *result, <span class="keyword">const</span> limb_t *x)</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;{</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; limb_t t1[NUM_LIMBS];</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; uint8_t i, j;</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// The reciprocal is the same as x ^ (p - 2) where p = 2^255 - 19.</span></div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="comment">// The big-endian hexadecimal expansion of (p - 2) is:</span></div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// 7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFEB</span></div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// The naive implementation needs to do 2 multiplications per 1 bit and</span></div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="comment">// 1 multiplication per 0 bit. We can improve upon this by creating a</span></div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="comment">// pattern 0000000001 ... 0000000001. If we square and multiply the</span></div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// pattern by itself we can turn the pattern into the partial results</span></div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">// 0000000011 ... 0000000011, 0000000111 ... 0000000111, etc.</span></div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="comment">// This averages out to about 1.1 multiplications per 1 bit instead of 2.</span></div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// Build a pattern of 250 bits in length of repeated copies of 0000000001.</span></div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="preprocessor"> #define RECIP_GROUP_SIZE 10</span></div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #define RECIP_GROUP_BITS 250 // Must be a multiple of RECIP_GROUP_SIZE.</span></div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;<span class="preprocessor"></span> square(t1, x);</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">for</span> (j = 0; j &lt; (RECIP_GROUP_SIZE - 1); ++j)</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; square(t1, t1);</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; mul(result, t1, x);</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; ((RECIP_GROUP_BITS / RECIP_GROUP_SIZE) - 2); ++i) {</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">for</span> (j = 0; j &lt; RECIP_GROUP_SIZE; ++j)</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; square(t1, t1);</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; mul(result, result, t1);</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// Multiply bit-shifted versions of the 0000000001 pattern into</span></div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="comment">// the result to &quot;fill in&quot; the gaps in the pattern.</span></div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; square(t1, result);</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; mul(result, result, t1);</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">for</span> (j = 0; j &lt; (RECIP_GROUP_SIZE - 2); ++j) {</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; square(t1, t1);</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; mul(result, result, t1);</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">// Deal with the 5 lowest bits of (p - 2), 01011, from highest to lowest.</span></div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; square(result, result);</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; square(result, result);</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; mul(result, result, x);</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; square(result, result);</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; square(result, result);</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; mul(result, result, x);</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; square(result, result);</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; mul(result, result, x);</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">// Clean up and exit.</span></div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; clean(t1);</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;}</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;<span class="keywordtype">void</span> Curve25519::unpack(limb_t *result, <span class="keyword">const</span> uint8_t *x)</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;{</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;<span class="preprocessor">#if CURVE25519_LIMB_8BIT</span></div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="preprocessor"></span> memcpy(result, x, 32);</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; result[31] &amp;= 0x7F;</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="preprocessor">#elif CURVE25519_LIMB_16BIT</span></div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 16; ++posn) {</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; result[posn] = ((limb_t)x[posn * 2]) | (((limb_t)x[posn * 2 + 1]) &lt;&lt; 8);</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; result[15] &amp;= 0x7FFF;</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;<span class="preprocessor">#elif CURVE25519_LIMB_32BIT</span></div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 8; ++posn) {</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; result[posn] = ((limb_t)x[posn * 4]) |</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; (((limb_t)x[posn * 4 + 1]) &lt;&lt; 8) |</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; (((limb_t)x[posn * 4 + 2]) &lt;&lt; 16) |</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; (((limb_t)x[posn * 4 + 3]) &lt;&lt; 24);</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; }</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; result[7] &amp;= 0x7FFFFFFF;</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="preprocessor"></span>}</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="keywordtype">void</span> Curve25519::pack(uint8_t *result, <span class="keyword">const</span> limb_t *x)</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;{</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="preprocessor">#if CURVE25519_LIMB_8BIT</span></div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;<span class="preprocessor"></span> memcpy(result, x, 32);</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="preprocessor">#elif CURVE25519_LIMB_16BIT</span></div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 16; ++posn) {</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; limb_t value = x[posn];</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; result[posn * 2] = (uint8_t)value;</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; result[posn * 2 + 1] = (uint8_t)(value &gt;&gt; 8);</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="preprocessor">#elif CURVE25519_LIMB_32BIT</span></div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 8; ++posn) {</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; limb_t value = x[posn];</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; result[posn * 4] = (uint8_t)value;</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; result[posn * 4 + 1] = (uint8_t)(value &gt;&gt; 8);</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; result[posn * 4 + 2] = (uint8_t)(value &gt;&gt; 16);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; result[posn * 4 + 3] = (uint8_t)(value &gt;&gt; 24);</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;<span class="preprocessor"></span>}</div>
<div class="ttc" id="classRNGClass_html_a418a833cf18198fd7e5d6dbd78c99c29"><div class="ttname"><a href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">RNGClass::rand</a></div><div class="ttdeci">void rand(uint8_t *data, size_t len)</div><div class="ttdoc">Generates random bytes into a caller-supplied buffer. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00277">RNG.cpp:277</a></div></div>
<div class="ttc" id="classCurve25519_html_a2e4b7dd83a019b32c76584c99bfda21a"><div class="ttname"><a href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a">Curve25519::eval</a></div><div class="ttdeci">static bool eval(uint8_t result[32], const uint8_t s[32], const uint8_t x[32])</div><div class="ttdoc">Evaluates the raw Curve25519 function. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8cpp_source.html#l00068">Curve25519.cpp:68</a></div></div>
<div class="ttc" id="classCurve25519_html_a2b6911583d17ea9a36bbbb40d58b3d89"><div class="ttname"><a href="classCurve25519.html#a2b6911583d17ea9a36bbbb40d58b3d89">Curve25519::dh1</a></div><div class="ttdeci">static void dh1(uint8_t k[32], uint8_t f[32])</div><div class="ttdoc">Performs phase 1 of a Diffie-Hellman key exchange using Curve25519. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8cpp_source.html#l00231">Curve25519.cpp:231</a></div></div>
<div class="ttc" id="classCurve25519_html_a14022d6ac68ec691ffb0247275078ab9"><div class="ttname"><a href="classCurve25519.html#a14022d6ac68ec691ffb0247275078ab9">Curve25519::dh2</a></div><div class="ttdeci">static bool dh2(uint8_t k[32], uint8_t f[32])</div><div class="ttdoc">Performs phase 2 of a Diffie-Hellman key exchange using Curve25519. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8cpp_source.html#l00269">Curve25519.cpp:269</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

196
Curve25519_8h_source.html Normal file
View File

@ -0,0 +1,196 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Curve25519.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Curve25519.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_CURVE15519_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_CURVE15519_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">// Define exactly one of these to 1 to set the size of the basic limb type.</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// 16-bit limbs seems to give the best performance on 8-bit AVR micros.</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define CURVE25519_LIMB_8BIT 0</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CURVE25519_LIMB_16BIT 1</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CURVE25519_LIMB_32BIT 0</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classCurve25519.html"> 35</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCurve25519.html">Curve25519</a></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a">eval</a>(uint8_t result[32], <span class="keyword">const</span> uint8_t s[32], <span class="keyword">const</span> uint8_t x[32]);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classCurve25519.html#a2b6911583d17ea9a36bbbb40d58b3d89">dh1</a>(uint8_t k[32], uint8_t f[32]);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classCurve25519.html#a14022d6ac68ec691ffb0247275078ab9">dh2</a>(uint8_t k[32], uint8_t f[32]);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if defined(TEST_CURVE25519_FIELD_OPS)</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor"></span><span class="keyword">public</span>:</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor"></span><span class="keyword">private</span>:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor"></span> <span class="comment">// Define the limb types to use on this platform.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor"> #if CURVE25519_LIMB_8BIT</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor"></span> <span class="keyword">typedef</span> uint8_t limb_t;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">typedef</span> int8_t slimb_t;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">typedef</span> uint16_t dlimb_t;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor"> #elif CURVE25519_LIMB_16BIT</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor"></span> <span class="keyword">typedef</span> uint16_t limb_t;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">typedef</span> int16_t slimb_t;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">typedef</span> uint32_t dlimb_t;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor"> #elif CURVE25519_LIMB_32BIT</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor"></span> <span class="keyword">typedef</span> uint32_t limb_t;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">typedef</span> int32_t slimb_t;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">typedef</span> uint64_t dlimb_t;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor"> #else</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #error &quot;limb_t must be 8, 16, or 32 bits in size&quot;</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">static</span> uint8_t isWeakPoint(<span class="keyword">const</span> uint8_t k[32]);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> reduce(limb_t *result, limb_t *x, uint8_t size);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">static</span> limb_t reduceQuick(limb_t *x);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> mul(limb_t *result, <span class="keyword">const</span> limb_t *x, <span class="keyword">const</span> limb_t *y);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> square(limb_t *result, <span class="keyword">const</span> limb_t *x)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; mul(result, x, x);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> mulA24(limb_t *result, <span class="keyword">const</span> limb_t *x);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> add(limb_t *result, <span class="keyword">const</span> limb_t *x, <span class="keyword">const</span> limb_t *y);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> sub(limb_t *result, <span class="keyword">const</span> limb_t *x, <span class="keyword">const</span> limb_t *y);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> cswap(uint8_t select, limb_t *x, limb_t *y);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> recip(limb_t *result, <span class="keyword">const</span> limb_t *x);</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> unpack(limb_t *result, <span class="keyword">const</span> uint8_t *x);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> pack(uint8_t *result, <span class="keyword">const</span> limb_t *x);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Constructor and destructor are private - cannot instantiate this class.</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classCurve25519.html">Curve25519</a>() {}</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; ~<a class="code" href="classCurve25519.html">Curve25519</a>() {}</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;};</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCurve25519_html"><div class="ttname"><a href="classCurve25519.html">Curve25519</a></div><div class="ttdoc">Diffie-Hellman key agreement based on the elliptic curve modulo 2^255 - 19. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8h_source.html#l00035">Curve25519.h:35</a></div></div>
<div class="ttc" id="classCurve25519_html_a2e4b7dd83a019b32c76584c99bfda21a"><div class="ttname"><a href="classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a">Curve25519::eval</a></div><div class="ttdeci">static bool eval(uint8_t result[32], const uint8_t s[32], const uint8_t x[32])</div><div class="ttdoc">Evaluates the raw Curve25519 function. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8cpp_source.html#l00068">Curve25519.cpp:68</a></div></div>
<div class="ttc" id="classCurve25519_html_a2b6911583d17ea9a36bbbb40d58b3d89"><div class="ttname"><a href="classCurve25519.html#a2b6911583d17ea9a36bbbb40d58b3d89">Curve25519::dh1</a></div><div class="ttdeci">static void dh1(uint8_t k[32], uint8_t f[32])</div><div class="ttdoc">Performs phase 1 of a Diffie-Hellman key exchange using Curve25519. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8cpp_source.html#l00231">Curve25519.cpp:231</a></div></div>
<div class="ttc" id="classCurve25519_html_a14022d6ac68ec691ffb0247275078ab9"><div class="ttname"><a href="classCurve25519.html#a14022d6ac68ec691ffb0247275078ab9">Curve25519::dh2</a></div><div class="ttdeci">static bool dh2(uint8_t k[32], uint8_t f[32])</div><div class="ttdoc">Performs phase 2 of a Diffie-Hellman key exchange using Curve25519. </div><div class="ttdef"><b>Definition:</b> <a href="Curve25519_8cpp_source.html#l00269">Curve25519.cpp:269</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DMD.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -139,8 +140,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="preprocessor">#define DMD_REFRESH_MS 5</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define DMD_REFRESH_US 5000</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809"> 237</a></span>&#160;<a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809" title="Constructs a new dot matrix display handler for a display that is widthPanels x heightPanels in size...">DMD::DMD</a>(<span class="keywordtype">int</span> widthPanels, <span class="keywordtype">int</span> heightPanels)</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; : <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a>(widthPanels * DMD_NUM_COLUMNS, heightPanels * DMD_NUM_ROWS)</div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classDMD.html#affd37accffe951c8878434dfa1245809"> 237</a></span>&#160;<a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809">DMD::DMD</a>(<span class="keywordtype">int</span> widthPanels, <span class="keywordtype">int</span> heightPanels)</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; : <a class="code" href="classBitmap.html">Bitmap</a>(widthPanels * DMD_NUM_COLUMNS, heightPanels * DMD_NUM_ROWS)</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; , _doubleBuffer(false)</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; , phase(0)</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; , fb0(0)</div>
@ -177,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; digitalWrite(DMD_PIN_SPI_MOSI, HIGH);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;}</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div>
<div class="line"><a name="l00278"></a><span class="lineno"><a class="code" href="classDMD.html#a7b37e05584d3e0308163700920df99b2"> 278</a></span>&#160;<a class="code" href="classDMD.html#a7b37e05584d3e0308163700920df99b2" title="Destroys this dot matrix display handler.">DMD::~DMD</a>()</div>
<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classDMD.html#a7b37e05584d3e0308163700920df99b2"> 278</a></span>&#160;<a class="code" href="classDMD.html#a7b37e05584d3e0308163700920df99b2">DMD::~DMD</a>()</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;{</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (fb0)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; free(fb0);</div>
@ -186,10 +187,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; fb = 0; <span class="comment">// Don&#39;t free the buffer again in the base class.</span></div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;}</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div>
<div class="line"><a name="l00314"></a><span class="lineno"><a class="code" href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723"> 314</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723" title="Enables or disables double-buffering according to doubleBuffer.">DMD::setDoubleBuffer</a>(<span class="keywordtype">bool</span> doubleBuffer)</div>
<div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723"> 314</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723">DMD::setDoubleBuffer</a>(<span class="keywordtype">bool</span> doubleBuffer)</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;{</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (doubleBuffer != _doubleBuffer) {</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; _doubleBuffer = <a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec" title="Returns true if the display is double-buffered; false if single-buffered. The default is false...">doubleBuffer</a>;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; _doubleBuffer = <a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec">doubleBuffer</a>;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (doubleBuffer) {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// Allocate a new back buffer.</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size = _stride * _height;</div>
@ -221,7 +222,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div>
<div class="line"><a name="l00363"></a><span class="lineno"><a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a"> 363</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a" title="Swaps the buffers that are used for rendering to the display.">DMD::swapBuffers</a>()</div>
<div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a"> 363</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a">DMD::swapBuffers</a>()</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;{</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span> (_doubleBuffer) {</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// Turn off interrupts while swapping buffers so that we don&#39;t</span></div>
@ -238,19 +239,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div>
<div class="line"><a name="l00396"></a><span class="lineno"><a class="code" href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736"> 396</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736" title="Swaps the buffers that are used for rendering to the display and copies the former back buffer conten...">DMD::swapBuffersAndCopy</a>()</div>
<div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736"> 396</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736">DMD::swapBuffersAndCopy</a>()</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;{</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a" title="Swaps the buffers that are used for rendering to the display.">swapBuffers</a>();</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a">swapBuffers</a>();</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (_doubleBuffer)</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; memcpy(fb, displayfb, _stride * _height);</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div>
<div class="line"><a name="l00420"></a><span class="lineno"><a class="code" href="classDMD.html#a2c74a0845ef6080056b972d490648114"> 420</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a2c74a0845ef6080056b972d490648114" title="Performs regular display refresh activities from the application&#39;s main loop.">DMD::loop</a>()</div>
<div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="classDMD.html#a2c74a0845ef6080056b972d490648114"> 420</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a2c74a0845ef6080056b972d490648114">DMD::loop</a>()</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> currentTime = millis();</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> ((currentTime - lastRefresh) &gt;= DMD_REFRESH_MS) {</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; lastRefresh = currentTime;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8" title="Refresh the display.">refresh</a>();</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8">refresh</a>();</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;}</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div>
@ -288,7 +289,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; 0x3F, 0xBF, 0x7F, 0xFF</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;};</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div>
<div class="line"><a name="l00478"></a><span class="lineno"><a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8"> 478</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8" title="Refresh the display.">DMD::refresh</a>()</div>
<div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8"> 478</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8">DMD::refresh</a>()</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// Bail out if there is a conflict on the SPI bus.</span></div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">if</span> (!digitalRead(DMD_PIN_SPI_SS))</div>
@ -347,7 +348,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; phase = (phase + 1) &amp; 0x03;</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;}</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div>
<div class="line"><a name="l00563"></a><span class="lineno"><a class="code" href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2"> 563</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2" title="Enables Timer1 overflow interrupts for updating this display.">DMD::enableTimer1</a>()</div>
<div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2"> 563</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2">DMD::enableTimer1</a>()</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;{</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// Number of CPU cycles in the display&#39;s refresh period.</span></div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> numCycles = (F_CPU / 2000000) * DMD_REFRESH_US;</div>
@ -393,13 +394,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; TIMSK1 |= _BV(TOIE1);</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;}</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div>
<div class="line"><a name="l00614"></a><span class="lineno"><a class="code" href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33"> 614</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33" title="Disables Timer1 overflow interrupts.">DMD::disableTimer1</a>()</div>
<div class="line"><a name="l00614"></a><span class="lineno"><a class="line" href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33"> 614</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33">DMD::disableTimer1</a>()</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;{</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// Turn off the Timer1 overflow interrupt.</span></div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; TIMSK1 &amp;= ~_BV(TOIE1);</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;}</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div>
<div class="line"><a name="l00646"></a><span class="lineno"><a class="code" href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97"> 646</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97" title="Enables Timer2 overflow interrupts for updating this display.">DMD::enableTimer2</a>()</div>
<div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97"> 646</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97">DMD::enableTimer2</a>()</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;{</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="comment">// Configure Timer2 for the period we want. With the prescaler set</span></div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="comment">// to 128, then 256 increments of Timer2 gives roughly 4 ms between</span></div>
@ -422,25 +423,42 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; TIMSK2 = _BV(TOIE2);</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;}</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;</div>
<div class="line"><a name="l00674"></a><span class="lineno"><a class="code" href="classDMD.html#a52fe885bfb380b74df54c96221811cff"> 674</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a52fe885bfb380b74df54c96221811cff" title="Disables Timer2 overflow interrupts.">DMD::disableTimer2</a>()</div>
<div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="classDMD.html#a52fe885bfb380b74df54c96221811cff"> 674</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDMD.html#a52fe885bfb380b74df54c96221811cff">DMD::disableTimer2</a>()</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;{</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// Turn off the Timer2 overflow interrupt.</span></div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; TIMSK2 &amp;= ~_BV(TOIE2);</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;}</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;</div>
<div class="line"><a name="l00690"></a><span class="lineno"><a class="code" href="classDMD.html#a557412f734fc4596e1102bf71e110ea0"> 690</a></span>&#160;<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">DMD::Color</a> <a class="code" href="classDMD.html#a557412f734fc4596e1102bf71e110ea0" title="Converts an RGB value into a pixel color value.">DMD::fromRGB</a>(uint8_t r, uint8_t g, uint8_t b)</div>
<div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="classDMD.html#a557412f734fc4596e1102bf71e110ea0"> 690</a></span>&#160;<a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">DMD::Color</a> <a class="code" href="classDMD.html#a557412f734fc4596e1102bf71e110ea0">DMD::fromRGB</a>(uint8_t r, uint8_t g, uint8_t b)</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;{</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (r || g || b)</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7" title="Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...">White</a>;</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">White</a>;</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc" title="Color value corresponding to &quot;black&quot;.">Black</a>;</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Black</a>;</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;}</div>
<div class="ttc" id="classDMD_html_a39af27e216f654ecc7e60b0614cb6b33"><div class="ttname"><a href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33">DMD::disableTimer1</a></div><div class="ttdeci">void disableTimer1()</div><div class="ttdoc">Disables Timer1 overflow interrupts. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00614">DMD.cpp:614</a></div></div>
<div class="ttc" id="classDMD_html_a2c74a0845ef6080056b972d490648114"><div class="ttname"><a href="classDMD.html#a2c74a0845ef6080056b972d490648114">DMD::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdoc">Performs regular display refresh activities from the application&#39;s main loop. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00420">DMD.cpp:420</a></div></div>
<div class="ttc" id="classDMD_html_a52fe885bfb380b74df54c96221811cff"><div class="ttname"><a href="classDMD.html#a52fe885bfb380b74df54c96221811cff">DMD::disableTimer2</a></div><div class="ttdeci">void disableTimer2()</div><div class="ttdoc">Disables Timer2 overflow interrupts. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00674">DMD.cpp:674</a></div></div>
<div class="ttc" id="classBitmap_html"><div class="ttname"><a href="classBitmap.html">Bitmap</a></div><div class="ttdoc">Represents a monochrome bitmap within main memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00032">Bitmap.h:32</a></div></div>
<div class="ttc" id="classDMD_html_aab1f3ba29c053d630ae12865d22166ec"><div class="ttname"><a href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec">DMD::doubleBuffer</a></div><div class="ttdeci">bool doubleBuffer() const </div><div class="ttdoc">Returns true if the display is double-buffered; false if single-buffered. The default is false...</div><div class="ttdef"><b>Definition:</b> <a href="DMD_8h_source.html#l00034">DMD.h:34</a></div></div>
<div class="ttc" id="classDMD_html_a80269ccd44b3ef9ee15f0a1009b7a60a"><div class="ttname"><a href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a">DMD::swapBuffers</a></div><div class="ttdeci">void swapBuffers()</div><div class="ttdoc">Swaps the buffers that are used for rendering to the display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00363">DMD.cpp:363</a></div></div>
<div class="ttc" id="classDMD_html_a4c3b04b384f3d656a9b59690836775e2"><div class="ttname"><a href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2">DMD::enableTimer1</a></div><div class="ttdeci">void enableTimer1()</div><div class="ttdoc">Enables Timer1 overflow interrupts for updating this display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00563">DMD.cpp:563</a></div></div>
<div class="ttc" id="classDMD_html_a7b37e05584d3e0308163700920df99b2"><div class="ttname"><a href="classDMD.html#a7b37e05584d3e0308163700920df99b2">DMD::~DMD</a></div><div class="ttdeci">~DMD()</div><div class="ttdoc">Destroys this dot matrix display handler. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00278">DMD.cpp:278</a></div></div>
<div class="ttc" id="classBitmap_html_a88d386944a7017aa776a177b10d8b2ba"><div class="ttname"><a href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Bitmap::Color</a></div><div class="ttdeci">uint8_t Color</div><div class="ttdoc">Type that represents the color of a pixel in a bitmap. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00040">Bitmap.h:40</a></div></div>
<div class="ttc" id="classDMD_html_a0b1771cf790b2b62eea55e56b02e3736"><div class="ttname"><a href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736">DMD::swapBuffersAndCopy</a></div><div class="ttdeci">void swapBuffersAndCopy()</div><div class="ttdoc">Swaps the buffers that are used for rendering to the display and copies the former back buffer conten...</div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00396">DMD.cpp:396</a></div></div>
<div class="ttc" id="classDMD_html_affd37accffe951c8878434dfa1245809"><div class="ttname"><a href="classDMD.html#affd37accffe951c8878434dfa1245809">DMD::DMD</a></div><div class="ttdeci">DMD(int widthPanels=1, int heightPanels=1)</div><div class="ttdoc">Constructs a new dot matrix display handler for a display that is widthPanels x heightPanels in size...</div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00237">DMD.cpp:237</a></div></div>
<div class="ttc" id="classDMD_html_a5469775db7fafebca2cdbc6a6372fb97"><div class="ttname"><a href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97">DMD::enableTimer2</a></div><div class="ttdeci">void enableTimer2()</div><div class="ttdoc">Enables Timer2 overflow interrupts for updating this display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00646">DMD.cpp:646</a></div></div>
<div class="ttc" id="classDMD_html_a557412f734fc4596e1102bf71e110ea0"><div class="ttname"><a href="classDMD.html#a557412f734fc4596e1102bf71e110ea0">DMD::fromRGB</a></div><div class="ttdeci">static Color fromRGB(uint8_t r, uint8_t g, uint8_t b)</div><div class="ttdoc">Converts an RGB value into a pixel color value. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00690">DMD.cpp:690</a></div></div>
<div class="ttc" id="classBitmap_html_a39b6754cfe50a457bbfdb1980fd87eb7"><div class="ttname"><a href="classBitmap.html#a39b6754cfe50a457bbfdb1980fd87eb7">Bitmap::White</a></div><div class="ttdeci">static const Color White</div><div class="ttdoc">Color value corresponding to &quot;white&quot;. If the bitmap is displayed on a LED array, then it may have a d...</div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00045">Bitmap.h:45</a></div></div>
<div class="ttc" id="classDMD_html_a9e4bf2a9d247312d35c1401ff61261c8"><div class="ttname"><a href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8">DMD::refresh</a></div><div class="ttdeci">void refresh()</div><div class="ttdoc">Refresh the display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00478">DMD.cpp:478</a></div></div>
<div class="ttc" id="classDMD_html_a6fbdcf8832f91d02500cb7a9b84d2723"><div class="ttname"><a href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723">DMD::setDoubleBuffer</a></div><div class="ttdeci">void setDoubleBuffer(bool doubleBuffer)</div><div class="ttdoc">Enables or disables double-buffering according to doubleBuffer. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00314">DMD.cpp:314</a></div></div>
<div class="ttc" id="classBitmap_html_a2c7faeeb89d3624b5bbca58871785adc"><div class="ttname"><a href="classBitmap.html#a2c7faeeb89d3624b5bbca58871785adc">Bitmap::Black</a></div><div class="ttdeci">static const Color Black</div><div class="ttdoc">Color value corresponding to &quot;black&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00044">Bitmap.h:44</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DMD.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,32 +115,32 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Bitmap.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classDMD.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDMD.html" title="Handle large dot matrix displays composed of LED&#39;s.">DMD</a> : <span class="keyword">public</span> <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classDMD.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDMD.html">DMD</a> : <span class="keyword">public</span> <a class="code" href="classBitmap.html">Bitmap</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809" title="Constructs a new dot matrix display handler for a display that is widthPanels x heightPanels in size...">DMD</a>(<span class="keywordtype">int</span> widthPanels = 1, <span class="keywordtype">int</span> heightPanels = 1);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classDMD.html#a7b37e05584d3e0308163700920df99b2" title="Destroys this dot matrix display handler.">~DMD</a>();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809">DMD</a>(<span class="keywordtype">int</span> widthPanels = 1, <span class="keywordtype">int</span> heightPanels = 1);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classDMD.html#a7b37e05584d3e0308163700920df99b2">~DMD</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec"> 34</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec" title="Returns true if the display is double-buffered; false if single-buffered. The default is false...">doubleBuffer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _doubleBuffer; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723" title="Enables or disables double-buffering according to doubleBuffer.">setDoubleBuffer</a>(<span class="keywordtype">bool</span> <a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec" title="Returns true if the display is double-buffered; false if single-buffered. The default is false...">doubleBuffer</a>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a" title="Swaps the buffers that are used for rendering to the display.">swapBuffers</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736" title="Swaps the buffers that are used for rendering to the display and copies the former back buffer conten...">swapBuffersAndCopy</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec"> 34</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec">doubleBuffer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _doubleBuffer; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723">setDoubleBuffer</a>(<span class="keywordtype">bool</span> <a class="code" href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec">doubleBuffer</a>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a">swapBuffers</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736">swapBuffersAndCopy</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a2c74a0845ef6080056b972d490648114" title="Performs regular display refresh activities from the application&#39;s main loop.">loop</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8" title="Refresh the display.">refresh</a>();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a2c74a0845ef6080056b972d490648114">loop</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8">refresh</a>();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2" title="Enables Timer1 overflow interrupts for updating this display.">enableTimer1</a>();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33" title="Disables Timer1 overflow interrupts.">disableTimer1</a>();</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2">enableTimer1</a>();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33">disableTimer1</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97" title="Enables Timer2 overflow interrupts for updating this display.">enableTimer2</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a52fe885bfb380b74df54c96221811cff" title="Disables Timer2 overflow interrupts.">disableTimer2</a>();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97">enableTimer2</a>();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDMD.html#a52fe885bfb380b74df54c96221811cff">disableTimer2</a>();</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">static</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba" title="Type that represents the color of a pixel in a bitmap.">Color</a> <a class="code" href="classDMD.html#a557412f734fc4596e1102bf71e110ea0" title="Converts an RGB value into a pixel color value.">fromRGB</a>(uint8_t r, uint8_t g, uint8_t b);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">static</span> <a class="code" href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Color</a> <a class="code" href="classDMD.html#a557412f734fc4596e1102bf71e110ea0">fromRGB</a>(uint8_t r, uint8_t g, uint8_t b);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// Disable copy constructor and operator=().</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809" title="Constructs a new dot matrix display handler for a display that is widthPanels x heightPanels in size...">DMD</a>(<span class="keyword">const</span> <a class="code" href="classDMD.html" title="Handle large dot matrix displays composed of LED&#39;s.">DMD</a> &amp;other) : <a class="code" href="classBitmap.html" title="Represents a monochrome bitmap within main memory.">Bitmap</a>(other) {}</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classDMD.html" title="Handle large dot matrix displays composed of LED&#39;s.">DMD</a> &amp;operator=(<span class="keyword">const</span> <a class="code" href="classDMD.html" title="Handle large dot matrix displays composed of LED&#39;s.">DMD</a> &amp;) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classDMD.html#affd37accffe951c8878434dfa1245809">DMD</a>(<span class="keyword">const</span> <a class="code" href="classDMD.html">DMD</a> &amp;other) : <a class="code" href="classBitmap.html">Bitmap</a>(other) {}</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classDMD.html">DMD</a> &amp;operator=(<span class="keyword">const</span> <a class="code" href="classDMD.html">DMD</a> &amp;) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">bool</span> _doubleBuffer;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; uint8_t phase;</div>
@ -150,12 +151,28 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;};</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classDMD_html"><div class="ttname"><a href="classDMD.html">DMD</a></div><div class="ttdoc">Handle large dot matrix displays composed of LED&#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8h_source.html#l00028">DMD.h:28</a></div></div>
<div class="ttc" id="classDMD_html_a39af27e216f654ecc7e60b0614cb6b33"><div class="ttname"><a href="classDMD.html#a39af27e216f654ecc7e60b0614cb6b33">DMD::disableTimer1</a></div><div class="ttdeci">void disableTimer1()</div><div class="ttdoc">Disables Timer1 overflow interrupts. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00614">DMD.cpp:614</a></div></div>
<div class="ttc" id="classDMD_html_a2c74a0845ef6080056b972d490648114"><div class="ttname"><a href="classDMD.html#a2c74a0845ef6080056b972d490648114">DMD::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdoc">Performs regular display refresh activities from the application&#39;s main loop. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00420">DMD.cpp:420</a></div></div>
<div class="ttc" id="classDMD_html_a52fe885bfb380b74df54c96221811cff"><div class="ttname"><a href="classDMD.html#a52fe885bfb380b74df54c96221811cff">DMD::disableTimer2</a></div><div class="ttdeci">void disableTimer2()</div><div class="ttdoc">Disables Timer2 overflow interrupts. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00674">DMD.cpp:674</a></div></div>
<div class="ttc" id="classBitmap_html"><div class="ttname"><a href="classBitmap.html">Bitmap</a></div><div class="ttdoc">Represents a monochrome bitmap within main memory. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00032">Bitmap.h:32</a></div></div>
<div class="ttc" id="classDMD_html_aab1f3ba29c053d630ae12865d22166ec"><div class="ttname"><a href="classDMD.html#aab1f3ba29c053d630ae12865d22166ec">DMD::doubleBuffer</a></div><div class="ttdeci">bool doubleBuffer() const </div><div class="ttdoc">Returns true if the display is double-buffered; false if single-buffered. The default is false...</div><div class="ttdef"><b>Definition:</b> <a href="DMD_8h_source.html#l00034">DMD.h:34</a></div></div>
<div class="ttc" id="classDMD_html_a80269ccd44b3ef9ee15f0a1009b7a60a"><div class="ttname"><a href="classDMD.html#a80269ccd44b3ef9ee15f0a1009b7a60a">DMD::swapBuffers</a></div><div class="ttdeci">void swapBuffers()</div><div class="ttdoc">Swaps the buffers that are used for rendering to the display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00363">DMD.cpp:363</a></div></div>
<div class="ttc" id="classDMD_html_a4c3b04b384f3d656a9b59690836775e2"><div class="ttname"><a href="classDMD.html#a4c3b04b384f3d656a9b59690836775e2">DMD::enableTimer1</a></div><div class="ttdeci">void enableTimer1()</div><div class="ttdoc">Enables Timer1 overflow interrupts for updating this display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00563">DMD.cpp:563</a></div></div>
<div class="ttc" id="classDMD_html_a7b37e05584d3e0308163700920df99b2"><div class="ttname"><a href="classDMD.html#a7b37e05584d3e0308163700920df99b2">DMD::~DMD</a></div><div class="ttdeci">~DMD()</div><div class="ttdoc">Destroys this dot matrix display handler. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00278">DMD.cpp:278</a></div></div>
<div class="ttc" id="classBitmap_html_a88d386944a7017aa776a177b10d8b2ba"><div class="ttname"><a href="classBitmap.html#a88d386944a7017aa776a177b10d8b2ba">Bitmap::Color</a></div><div class="ttdeci">uint8_t Color</div><div class="ttdoc">Type that represents the color of a pixel in a bitmap. </div><div class="ttdef"><b>Definition:</b> <a href="Bitmap_8h_source.html#l00040">Bitmap.h:40</a></div></div>
<div class="ttc" id="classDMD_html_a0b1771cf790b2b62eea55e56b02e3736"><div class="ttname"><a href="classDMD.html#a0b1771cf790b2b62eea55e56b02e3736">DMD::swapBuffersAndCopy</a></div><div class="ttdeci">void swapBuffersAndCopy()</div><div class="ttdoc">Swaps the buffers that are used for rendering to the display and copies the former back buffer conten...</div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00396">DMD.cpp:396</a></div></div>
<div class="ttc" id="classDMD_html_affd37accffe951c8878434dfa1245809"><div class="ttname"><a href="classDMD.html#affd37accffe951c8878434dfa1245809">DMD::DMD</a></div><div class="ttdeci">DMD(int widthPanels=1, int heightPanels=1)</div><div class="ttdoc">Constructs a new dot matrix display handler for a display that is widthPanels x heightPanels in size...</div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00237">DMD.cpp:237</a></div></div>
<div class="ttc" id="classDMD_html_a5469775db7fafebca2cdbc6a6372fb97"><div class="ttname"><a href="classDMD.html#a5469775db7fafebca2cdbc6a6372fb97">DMD::enableTimer2</a></div><div class="ttdeci">void enableTimer2()</div><div class="ttdoc">Enables Timer2 overflow interrupts for updating this display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00646">DMD.cpp:646</a></div></div>
<div class="ttc" id="classDMD_html_a557412f734fc4596e1102bf71e110ea0"><div class="ttname"><a href="classDMD.html#a557412f734fc4596e1102bf71e110ea0">DMD::fromRGB</a></div><div class="ttdeci">static Color fromRGB(uint8_t r, uint8_t g, uint8_t b)</div><div class="ttdoc">Converts an RGB value into a pixel color value. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00690">DMD.cpp:690</a></div></div>
<div class="ttc" id="classDMD_html_a9e4bf2a9d247312d35c1401ff61261c8"><div class="ttname"><a href="classDMD.html#a9e4bf2a9d247312d35c1401ff61261c8">DMD::refresh</a></div><div class="ttdeci">void refresh()</div><div class="ttdoc">Refresh the display. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00478">DMD.cpp:478</a></div></div>
<div class="ttc" id="classDMD_html_a6fbdcf8832f91d02500cb7a9b84d2723"><div class="ttname"><a href="classDMD.html#a6fbdcf8832f91d02500cb7a9b84d2723">DMD::setDoubleBuffer</a></div><div class="ttdeci">void setDoubleBuffer(bool doubleBuffer)</div><div class="ttdoc">Enables or disables double-buffering according to doubleBuffer. </div><div class="ttdef"><b>Definition:</b> <a href="DMD_8cpp_source.html#l00314">DMD.cpp:314</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DS1307RTC.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -136,17 +137,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define DS1307_ALARMS (64 - RTC::ALARM_COUNT * DS1307_ALARM_SIZE - 1)</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define DS1307_ALARM_MAGIC 63</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866"> 83</a></span>&#160;<a class="code" href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866" title="Attaches to a realtime clock slave device on bus.">DS1307RTC::DS1307RTC</a>(<a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> &amp;bus, uint8_t oneHzPin)</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866"> 83</a></span>&#160;<a class="code" href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866">DS1307RTC::DS1307RTC</a>(<a class="code" href="classI2CMaster.html">I2CMaster</a> &amp;bus, uint8_t oneHzPin)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; : _bus(&amp;bus)</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; , _oneHzPin(oneHzPin)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; , prevOneHz(false)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; , _isRealTime(true)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// Make sure the CH bit in register 0 is off or the clock won&#39;t update.</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_SECOND);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS1307_I2C_ADDRESS, 1)) {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; uint8_t value = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_SECOND);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS1307_I2C_ADDRESS, 1)) {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; uint8_t value = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span> ((value &amp; 0x80) != 0)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; writeRegister(DS1307_SECOND, value &amp; 0x7F);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; } <span class="keywordflow">else</span> {</div>
@ -166,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; initAlarms();</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0"> 118</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0" title="Returns true if the realtime clock has updated since the last call to this function.">DS1307RTC::hasUpdates</a>()</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0"> 118</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0">DS1307RTC::hasUpdates</a>()</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// If not using a 1 Hz pin or there is no RTC chip available,</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// then assume that there is an update available.</span></div>
@ -205,43 +206,43 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div>
<div class="line"><a name="l00157"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6"> 157</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6" title="Reads the current time from the realtime clock into value.">DS1307RTC::readTime</a>(<a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value)</div>
<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6"> 157</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6">DS1307RTC::readTime</a>(<a class="code" href="structRTCTime.html">RTCTime</a> *value)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_SECOND);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS1307_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>() &amp; 0x7F);</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a> = fromHourBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_SECOND);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS1307_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>() &amp; 0x7F);</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a> = fromHourBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a> = 0;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a> = 0;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a> = 0;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a> = 0;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a> = 0;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a> = 0;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6" title="Reads the current time from the realtime clock into value.">RTC::readTime</a>(value);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a>(value);</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
<div class="line"><a name="l00177"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4"> 177</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4" title="Reads the current date from the realtime clock into value.">DS1307RTC::readDate</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value)</div>
<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4"> 177</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4">DS1307RTC::readDate</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *value)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (!_isRealTime) {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4" title="Reads the current date from the realtime clock into value.">RTC::readDate</a>(value);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a>(value);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_DATE);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS1307_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>()) + 2000;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_DATE);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS1307_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>()) + 2000;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = 1;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 1;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = 2000;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = 1;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 1;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = 2000;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;}</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div>
@ -250,135 +251,173 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> ((value / 10) &lt;&lt; 4) + (value % 10);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;}</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div>
<div class="line"><a name="l00202"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8"> 202</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8" title="Updates the time in the realtime clock to match value.">DS1307RTC::writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value)</div>
<div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8"> 202</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8">DS1307RTC::writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html">RTCTime</a> *value)</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_SECOND);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a>));</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a>));</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a>)); <span class="comment">// Changes mode to 24-hour clock.</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_SECOND);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a>));</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a>));</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a>)); <span class="comment">// Changes mode to 24-hour clock.</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8" title="Updates the time in the realtime clock to match value.">RTC::writeTime</a>(value);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a>(value);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;}</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div>
<div class="line"><a name="l00216"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230"> 216</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230" title="Updates the date in the realtime clock to match value.">DS1307RTC::writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value)</div>
<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230"> 216</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230">DS1307RTC::writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *value)</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;{</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_DATE);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a>));</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>));</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> % 100));</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_DATE);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a>));</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>));</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> % 100));</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230" title="Updates the date in the realtime clock to match value.">RTC::writeDate</a>(value);</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a>(value);</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a"> 230</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a" title="Reads the details of the alarm with index alarmNum into value.">DS1307RTC::readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a"> 230</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a">DS1307RTC::readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;{</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_ALARMS + alarmNum * DS1307_ALARM_SIZE);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS1307_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_ALARMS + alarmNum * DS1307_ALARM_SIZE);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS1307_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = 0;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = 0;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = 0;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = 0;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = 0;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = 0;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a" title="Reads the details of the alarm with index alarmNum into value.">RTC::readAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;}</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75"> 250</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75" title="Updates the details of the alarm with index alarmNum from value.">DS1307RTC::writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75"> 250</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75">DS1307RTC::writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;{</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_ALARMS + alarmNum * DS1307_ALARM_SIZE);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a>));</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a>));</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a>);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_ALARMS + alarmNum * DS1307_ALARM_SIZE);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a>));</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a>));</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a>);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75" title="Updates the details of the alarm with index alarmNum from value.">RTC::writeAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248"> 264</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248" title="Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...">DS1307RTC::byteCount</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248"> 264</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248">DS1307RTC::byteCount</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> DS1307_ALARMS - DS1307_NVRAM;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div>
<div class="line"><a name="l00269"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a"> 269</a></span>&#160;uint8_t <a class="code" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">DS1307RTC::readByte</a>(uint8_t offset)</div>
<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a"> 269</a></span>&#160;uint8_t <a class="code" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a">DS1307RTC::readByte</a>(uint8_t offset)</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> (_isRealTime)</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span> readRegister(DS1307_NVRAM + offset);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">RTC::readByte</a>(offset);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a>(offset);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;}</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div>
<div class="line"><a name="l00277"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6"> 277</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">DS1307RTC::writeByte</a>(uint8_t offset, uint8_t value)</div>
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6"> 277</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6">DS1307RTC::writeByte</a>(uint8_t offset, uint8_t value)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;{</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (_isRealTime)</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; writeRegister(DS1307_NVRAM + offset, value);</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">RTC::writeByte</a>(offset, value);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a>(offset, value);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="keywordtype">void</span> DS1307RTC::initAlarms()</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;{</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; uint8_t value = readRegister(DS1307_ALARM_MAGIC);</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (value != (0xB0 + <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a>)) {</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (value != (0xB0 + <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a>)) {</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// This is the first time we have used this clock chip,</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// so initialize all alarms to their default state.</span></div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> alarm;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = 6; <span class="comment">// Default to 6am for alarms.</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = 0;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = 0;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 0; index &lt; <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a>; ++index)</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75" title="Updates the details of the alarm with index alarmNum from value.">writeAlarm</a>(index, &amp;alarm);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="structRTCAlarm.html">RTCAlarm</a> alarm;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = 6; <span class="comment">// Default to 6am for alarms.</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = 0;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = 0;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 0; index &lt; <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a>; ++index)</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75">writeAlarm</a>(index, &amp;alarm);</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; writeRegister(DS1307_ALARM_MAGIC, 0xB0 + ALARM_COUNT);</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// Also clear the rest of NVRAM so that it is in a known state.</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// Otherwise we&#39;ll have whatever garbage was present at power-on.</span></div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS1307_NVRAM);</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS1307_NVRAM);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (uint8_t index = DS1307_NVRAM; index &lt; DS1307_ALARMS; ++index)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(0);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(0);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;uint8_t DS1307RTC::readRegister(uint8_t reg)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;{</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(reg);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS1307_I2C_ADDRESS, 1))</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(reg);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS1307_I2C_ADDRESS, 1))</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> 0; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="keywordtype">bool</span> DS1307RTC::writeRegister(uint8_t reg, uint8_t value)</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(reg);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(value);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS1307_I2C_ADDRESS);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(reg);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(value);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;}</div>
<div class="ttc" id="structRTCDate_html_a6e6196059b36186041a5312400ea9202"><div class="ttname"><a href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">RTCDate::month</a></div><div class="ttdeci">uint8_t month</div><div class="ttdoc">Month of the year (1-12) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00038">RTC.h:38</a></div></div>
<div class="ttc" id="classRTC_html_a102e2ec15bf0273d8f7e9ce4b6dcc96e"><div class="ttname"><a href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a></div><div class="ttdeci">virtual void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00179">RTC.cpp:179</a></div></div>
<div class="ttc" id="structRTCTime_html_acf2161ca037080dc4b767e636ad8db84"><div class="ttname"><a href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">RTCTime::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute within the hour (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00031">RTC.h:31</a></div></div>
<div class="ttc" id="classRTC_html_ade282d7a60147c3f0269f1fcd59c8d66"><div class="ttname"><a href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a></div><div class="ttdeci">virtual void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00209">RTC.cpp:209</a></div></div>
<div class="ttc" id="classRTC_html_aa1e21bf42ebd4456919744ae0f4f631e"><div class="ttname"><a href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a></div><div class="ttdeci">virtual void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00169">RTC.cpp:169</a></div></div>
<div class="ttc" id="classDS1307RTC_html_acd9800d6df2244b8e4e790480a1d62a6"><div class="ttname"><a href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6">DS1307RTC::readTime</a></div><div class="ttdeci">void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00157">DS1307RTC.cpp:157</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a6fec8ff71f33cc1a129eb0bd009600b0"><div class="ttname"><a href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0">DS1307RTC::hasUpdates</a></div><div class="ttdeci">bool hasUpdates()</div><div class="ttdoc">Returns true if the realtime clock has updated since the last call to this function. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00118">DS1307RTC.cpp:118</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a7354aed91d7c94d0d7b2144b1bf32c75"><div class="ttname"><a href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75">DS1307RTC::writeAlarm</a></div><div class="ttdeci">void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00250">DS1307RTC.cpp:250</a></div></div>
<div class="ttc" id="classI2CMaster_html_a0bf6b84cb1e2b3a37a4a0260d0b6f960"><div class="ttname"><a href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">I2CMaster::write</a></div><div class="ttdeci">virtual void write(uint8_t value)=0</div><div class="ttdoc">Writes a single byte value on the I2C bus. </div></div>
<div class="ttc" id="classRTC_html_a0e96c91efd9e7a6340effdae3eadf17e"><div class="ttname"><a href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a></div><div class="ttdeci">virtual void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00224">RTC.cpp:224</a></div></div>
<div class="ttc" id="classRTC_html_aee5ae8f600ee5296e65635c0d836fca3"><div class="ttname"><a href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">RTC::ALARM_COUNT</a></div><div class="ttdeci">static const uint8_t ALARM_COUNT</div><div class="ttdoc">Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00074">RTC.h:74</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a0a5d0d86a0345420ebb289ea724b19e8"><div class="ttname"><a href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8">DS1307RTC::writeTime</a></div><div class="ttdeci">void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00202">DS1307RTC.cpp:202</a></div></div>
<div class="ttc" id="classRTC_html_ae667600d05c8e7b06a93574dd068a4d7"><div class="ttname"><a href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a></div><div class="ttdeci">virtual void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00194">RTC.cpp:194</a></div></div>
<div class="ttc" id="classI2CMaster_html_a4e5f1a1a4c2242699be5a35fc4872fde"><div class="ttname"><a href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">I2CMaster::startRead</a></div><div class="ttdeci">virtual bool startRead(unsigned int address, unsigned int count)=0</div><div class="ttdoc">Starts a read operation for count bytes by sending the start condition and the I2C control byte...</div></div>
<div class="ttc" id="structRTCAlarm_html_a75bdc42acd3ab3ad495680c6b6a34692"><div class="ttname"><a href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">RTCAlarm::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day for the alarm (0-23). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00044">RTC.h:44</a></div></div>
<div class="ttc" id="structRTCAlarm_html_a0f2ef7363cb60a26642d5295b77ca19e"><div class="ttname"><a href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">RTCAlarm::flags</a></div><div class="ttdeci">uint8_t flags</div><div class="ttdoc">Additional flags for the alarm. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00046">RTC.h:46</a></div></div>
<div class="ttc" id="structRTCDate_html"><div class="ttname"><a href="structRTCDate.html">RTCDate</a></div><div class="ttdoc">Stores date information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00035">RTC.h:35</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a6fb56d1690bc30e7995961a5b5e5fdc4"><div class="ttname"><a href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4">DS1307RTC::readDate</a></div><div class="ttdeci">void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00177">DS1307RTC.cpp:177</a></div></div>
<div class="ttc" id="classI2CMaster_html_a01960fc821cb25e4c88c26d2c6107e35"><div class="ttname"><a href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">I2CMaster::startWrite</a></div><div class="ttdeci">virtual void startWrite(unsigned int address)</div><div class="ttdoc">Starts a write operation by sending a start condition and the I2C control byte. </div></div>
<div class="ttc" id="classI2CMaster_html_ab29f63551ddeb032a91505d1c0b8ac41"><div class="ttname"><a href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">I2CMaster::endWrite</a></div><div class="ttdeci">virtual bool endWrite()=0</div><div class="ttdoc">Ends the current write operation. </div></div>
<div class="ttc" id="structRTCDate_html_a7d31822daff3c3fc947386abd897732f"><div class="ttname"><a href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">RTCDate::year</a></div><div class="ttdeci">unsigned int year</div><div class="ttdoc">Year (4-digit) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00037">RTC.h:37</a></div></div>
<div class="ttc" id="classRTC_html_a1cab6397ec04b1e2b3feea5b3cd1f749"><div class="ttname"><a href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a></div><div class="ttdeci">virtual void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00262">RTC.cpp:262</a></div></div>
<div class="ttc" id="structRTCAlarm_html_ad9a75ceb4b4b3474baa66dd5466e62fe"><div class="ttname"><a href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">RTCAlarm::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute of the hour for the alarm (0-59). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00045">RTC.h:45</a></div></div>
<div class="ttc" id="classRTC_html_a0f47b10b436e3f9d36e04ec907579431"><div class="ttname"><a href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a></div><div class="ttdeci">virtual uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00247">RTC.cpp:247</a></div></div>
<div class="ttc" id="structRTCTime_html"><div class="ttname"><a href="structRTCTime.html">RTCTime</a></div><div class="ttdoc">Stores time information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00028">RTC.h:28</a></div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a4f7346be33612cf9ecd96080eb046230"><div class="ttname"><a href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230">DS1307RTC::writeDate</a></div><div class="ttdeci">void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00216">DS1307RTC.cpp:216</a></div></div>
<div class="ttc" id="structRTCAlarm_html"><div class="ttname"><a href="structRTCAlarm.html">RTCAlarm</a></div><div class="ttdoc">Stores alarm information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00042">RTC.h:42</a></div></div>
<div class="ttc" id="classDS1307RTC_html_aab608eb1630520ee122306b721fdc47a"><div class="ttname"><a href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a">DS1307RTC::readAlarm</a></div><div class="ttdeci">void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00230">DS1307RTC.cpp:230</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a092805d75bea323dc4be062638bff866"><div class="ttname"><a href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866">DS1307RTC::DS1307RTC</a></div><div class="ttdeci">DS1307RTC(I2CMaster &amp;bus, uint8_t oneHzPin=255)</div><div class="ttdoc">Attaches to a realtime clock slave device on bus. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00083">DS1307RTC.cpp:83</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a93c25269a9b78ab3331354db26672248"><div class="ttname"><a href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248">DS1307RTC::byteCount</a></div><div class="ttdeci">int byteCount() const </div><div class="ttdoc">Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...</div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00264">DS1307RTC.cpp:264</a></div></div>
<div class="ttc" id="classI2CMaster_html_a49eeebb57f6bc06de39973fe836369cd"><div class="ttname"><a href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">I2CMaster::read</a></div><div class="ttdeci">virtual uint8_t read()=0</div><div class="ttdoc">Reads a single byte from the I2C bus. </div></div>
<div class="ttc" id="classDS1307RTC_html_a7364609a201022688778ab116c3e4f4a"><div class="ttname"><a href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a">DS1307RTC::readByte</a></div><div class="ttdeci">uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00269">DS1307RTC.cpp:269</a></div></div>
<div class="ttc" id="structRTCTime_html_a98ba717092ef856dd2b773ba02fcb1a4"><div class="ttname"><a href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">RTCTime::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day (0-23) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00030">RTC.h:30</a></div></div>
<div class="ttc" id="structRTCDate_html_a2d68ff3fb90240df522b41222362704c"><div class="ttname"><a href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">RTCDate::day</a></div><div class="ttdeci">uint8_t day</div><div class="ttdoc">Day of the month (1-31) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00039">RTC.h:39</a></div></div>
<div class="ttc" id="structRTCTime_html_a87b7c02e535d808dcba04c77e34abb91"><div class="ttname"><a href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">RTCTime::second</a></div><div class="ttdeci">uint8_t second</div><div class="ttdoc">Second within the minute (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00032">RTC.h:32</a></div></div>
<div class="ttc" id="classRTC_html_aaf0a5c1f32f210a49718d148620b5bec"><div class="ttname"><a href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a></div><div class="ttdeci">virtual void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00144">RTC.cpp:144</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a6ef435fd4aa4adf8eefdf8b1741f5ba6"><div class="ttname"><a href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6">DS1307RTC::writeByte</a></div><div class="ttdeci">void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00277">DS1307RTC.cpp:277</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DS1307RTC.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,31 +115,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;RTC.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html">I2CMaster</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="code" href="classDS1307RTC.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDS1307RTC.html" title="Communicates with a DS1307 realtime clock chip via I2C.">DS1307RTC</a> : <span class="keyword">public</span> <a class="code" href="classRTC.html" title="Base class for realtime clock handlers.">RTC</a> {</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classDS1307RTC.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDS1307RTC.html">DS1307RTC</a> : <span class="keyword">public</span> <a class="code" href="classRTC.html">RTC</a> {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866" title="Attaches to a realtime clock slave device on bus.">DS1307RTC</a>(<a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> &amp;bus, uint8_t oneHzPin = 255);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866">DS1307RTC</a>(<a class="code" href="classI2CMaster.html">I2CMaster</a> &amp;bus, uint8_t oneHzPin = 255);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classDS1307RTC.html#aba01ca4c2f7863b610e5dfe9146886bd"> 34</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS1307RTC.html#aba01ca4c2f7863b610e5dfe9146886bd" title="Returns true if the realtime clock is on the I2C bus; false if the time and date are simulated...">isRealTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _isRealTime; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classDS1307RTC.html#aba01ca4c2f7863b610e5dfe9146886bd"> 34</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS1307RTC.html#aba01ca4c2f7863b610e5dfe9146886bd">isRealTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _isRealTime; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0" title="Returns true if the realtime clock has updated since the last call to this function.">hasUpdates</a>();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0">hasUpdates</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6" title="Reads the current time from the realtime clock into value.">readTime</a>(<a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4" title="Reads the current date from the realtime clock into value.">readDate</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6">readTime</a>(<a class="code" href="structRTCTime.html">RTCTime</a> *value);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4">readDate</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *value);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8" title="Updates the time in the realtime clock to match value.">writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230" title="Updates the date in the realtime clock to match value.">writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8">writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html">RTCTime</a> *value);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230">writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *value);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a" title="Reads the details of the alarm with index alarmNum into value.">readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75" title="Updates the details of the alarm with index alarmNum from value.">writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a">readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75">writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248" title="Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...">byteCount</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint8_t <a class="code" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">readByte</a>(uint8_t offset);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">writeByte</a>(uint8_t offset, uint8_t value);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248">byteCount</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint8_t <a class="code" href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a">readByte</a>(uint8_t offset);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6">writeByte</a>(uint8_t offset, uint8_t value);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> *_bus;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classI2CMaster.html">I2CMaster</a> *_bus;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint8_t _oneHzPin;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">bool</span> prevOneHz;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">bool</span> _isRealTime;</div>
@ -150,12 +151,30 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;};</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classDS1307RTC_html_acd9800d6df2244b8e4e790480a1d62a6"><div class="ttname"><a href="classDS1307RTC.html#acd9800d6df2244b8e4e790480a1d62a6">DS1307RTC::readTime</a></div><div class="ttdeci">void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00157">DS1307RTC.cpp:157</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a6fec8ff71f33cc1a129eb0bd009600b0"><div class="ttname"><a href="classDS1307RTC.html#a6fec8ff71f33cc1a129eb0bd009600b0">DS1307RTC::hasUpdates</a></div><div class="ttdeci">bool hasUpdates()</div><div class="ttdoc">Returns true if the realtime clock has updated since the last call to this function. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00118">DS1307RTC.cpp:118</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a7354aed91d7c94d0d7b2144b1bf32c75"><div class="ttname"><a href="classDS1307RTC.html#a7354aed91d7c94d0d7b2144b1bf32c75">DS1307RTC::writeAlarm</a></div><div class="ttdeci">void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00250">DS1307RTC.cpp:250</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a0a5d0d86a0345420ebb289ea724b19e8"><div class="ttname"><a href="classDS1307RTC.html#a0a5d0d86a0345420ebb289ea724b19e8">DS1307RTC::writeTime</a></div><div class="ttdeci">void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00202">DS1307RTC.cpp:202</a></div></div>
<div class="ttc" id="structRTCDate_html"><div class="ttname"><a href="structRTCDate.html">RTCDate</a></div><div class="ttdoc">Stores date information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00035">RTC.h:35</a></div></div>
<div class="ttc" id="classDS1307RTC_html"><div class="ttname"><a href="classDS1307RTC.html">DS1307RTC</a></div><div class="ttdoc">Communicates with a DS1307 realtime clock chip via I2C. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8h_source.html#l00030">DS1307RTC.h:30</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a6fb56d1690bc30e7995961a5b5e5fdc4"><div class="ttname"><a href="classDS1307RTC.html#a6fb56d1690bc30e7995961a5b5e5fdc4">DS1307RTC::readDate</a></div><div class="ttdeci">void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00177">DS1307RTC.cpp:177</a></div></div>
<div class="ttc" id="classDS1307RTC_html_aba01ca4c2f7863b610e5dfe9146886bd"><div class="ttname"><a href="classDS1307RTC.html#aba01ca4c2f7863b610e5dfe9146886bd">DS1307RTC::isRealTime</a></div><div class="ttdeci">bool isRealTime() const </div><div class="ttdoc">Returns true if the realtime clock is on the I2C bus; false if the time and date are simulated...</div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8h_source.html#l00034">DS1307RTC.h:34</a></div></div>
<div class="ttc" id="structRTCTime_html"><div class="ttname"><a href="structRTCTime.html">RTCTime</a></div><div class="ttdoc">Stores time information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00028">RTC.h:28</a></div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a4f7346be33612cf9ecd96080eb046230"><div class="ttname"><a href="classDS1307RTC.html#a4f7346be33612cf9ecd96080eb046230">DS1307RTC::writeDate</a></div><div class="ttdeci">void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00216">DS1307RTC.cpp:216</a></div></div>
<div class="ttc" id="structRTCAlarm_html"><div class="ttname"><a href="structRTCAlarm.html">RTCAlarm</a></div><div class="ttdoc">Stores alarm information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00042">RTC.h:42</a></div></div>
<div class="ttc" id="classDS1307RTC_html_aab608eb1630520ee122306b721fdc47a"><div class="ttname"><a href="classDS1307RTC.html#aab608eb1630520ee122306b721fdc47a">DS1307RTC::readAlarm</a></div><div class="ttdeci">void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00230">DS1307RTC.cpp:230</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a092805d75bea323dc4be062638bff866"><div class="ttname"><a href="classDS1307RTC.html#a092805d75bea323dc4be062638bff866">DS1307RTC::DS1307RTC</a></div><div class="ttdeci">DS1307RTC(I2CMaster &amp;bus, uint8_t oneHzPin=255)</div><div class="ttdoc">Attaches to a realtime clock slave device on bus. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00083">DS1307RTC.cpp:83</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a93c25269a9b78ab3331354db26672248"><div class="ttname"><a href="classDS1307RTC.html#a93c25269a9b78ab3331354db26672248">DS1307RTC::byteCount</a></div><div class="ttdeci">int byteCount() const </div><div class="ttdoc">Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...</div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00264">DS1307RTC.cpp:264</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a7364609a201022688778ab116c3e4f4a"><div class="ttname"><a href="classDS1307RTC.html#a7364609a201022688778ab116c3e4f4a">DS1307RTC::readByte</a></div><div class="ttdeci">uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00269">DS1307RTC.cpp:269</a></div></div>
<div class="ttc" id="classRTC_html"><div class="ttname"><a href="classRTC.html">RTC</a></div><div class="ttdoc">Base class for realtime clock handlers. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00049">RTC.h:49</a></div></div>
<div class="ttc" id="classDS1307RTC_html_a6ef435fd4aa4adf8eefdf8b1741f5ba6"><div class="ttname"><a href="classDS1307RTC.html#a6ef435fd4aa4adf8eefdf8b1741f5ba6">DS1307RTC::writeByte</a></div><div class="ttdeci">void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS1307RTC_8cpp_source.html#l00277">DS1307RTC.cpp:277</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DS3232RTC.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -172,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define DS3232_ALARMS (256 - RTC::ALARM_COUNT * DS3232_ALARM_SIZE - 1)</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define DS3232_ALARM_MAGIC 255</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb"> 126</a></span>&#160;<a class="code" href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb" title="Attaches to a realtime clock slave device on bus.">DS3232RTC::DS3232RTC</a>(<a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> &amp;bus, uint8_t oneHzPin)</div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb"> 126</a></span>&#160;<a class="code" href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb">DS3232RTC::DS3232RTC</a>(<a class="code" href="classI2CMaster.html">I2CMaster</a> &amp;bus, uint8_t oneHzPin)</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; : _bus(&amp;bus)</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; , _oneHzPin(oneHzPin)</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; , prevOneHz(false)</div>
@ -180,17 +181,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; , alarmInterrupts(false)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Probe the device and configure it for our use.</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_CONTROL);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS3232_I2C_ADDRESS, 1)) {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; uint8_t value = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>() &amp; DS3232_CONV;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_CONTROL);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS3232_I2C_ADDRESS, 1)) {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; uint8_t value = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>() &amp; DS3232_CONV;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (oneHzPin != 255)</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; value |= DS3232_BBSQW | DS3232_RS_1HZ;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_CONTROL);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(value);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_CRATE_64);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_CONTROL);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(value);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_CRATE_64);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Did not get an acknowledgement from the RTC chip.</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; _isRealTime = <span class="keyword">false</span>;</div>
@ -207,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; initAlarms();</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc"> 166</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc" title="Returns true if the realtime clock has updated since the last call to this function.">DS3232RTC::hasUpdates</a>()</div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc"> 166</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc">DS3232RTC::hasUpdates</a>()</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// If not using a 1 Hz pin or there is no RTC chip available,</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// then assume that there is an update available.</span></div>
@ -246,43 +247,43 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747"> 205</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747" title="Reads the current time from the realtime clock into value.">DS3232RTC::readTime</a>(<a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value)</div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747"> 205</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747">DS3232RTC::readTime</a>(<a class="code" href="structRTCTime.html">RTCTime</a> *value)</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_SECOND);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS3232_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a> = fromHourBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_SECOND);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS3232_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a> = fromHourBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a> = 0;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a> = 0;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a> = 0;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a> = 0;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a> = 0;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a> = 0;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747" title="Reads the current time from the realtime clock into value.">RTC::readTime</a>(value);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a>(value);</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;}</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca"> 225</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca" title="Reads the current date from the realtime clock into value.">DS3232RTC::readDate</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value)</div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca"> 225</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca">DS3232RTC::readDate</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *value)</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (!_isRealTime) {</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca" title="Reads the current date from the realtime clock into value.">RTC::readDate</a>(value);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a>(value);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_DATE);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS3232_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>() &amp; 0x7F); <span class="comment">// Strip century bit.</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>()) + 2000;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_DATE);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS3232_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>() &amp; 0x7F); <span class="comment">// Strip century bit.</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>()) + 2000;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = 1;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 1;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = 2000;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = 1;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 1;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = 2000;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div>
@ -291,123 +292,123 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> ((value / 10) &lt;&lt; 4) + (value % 10);</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;}</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78"> 250</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78" title="Updates the time in the realtime clock to match value.">DS3232RTC::writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value)</div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78"> 250</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78">DS3232RTC::writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html">RTCTime</a> *value)</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;{</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_SECOND);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a>));</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a>));</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a>)); <span class="comment">// Changes mode to 24-hour clock.</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_SECOND);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a>));</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a>));</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a>)); <span class="comment">// Changes mode to 24-hour clock.</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78" title="Updates the time in the realtime clock to match value.">RTC::writeTime</a>(value);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a>(value);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed"> 264</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed" title="Updates the date in the realtime clock to match value.">DS3232RTC::writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value)</div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed"> 264</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed">DS3232RTC::writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *value)</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;{</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_DATE);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a>));</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>));</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> % 100));</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_DATE);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a>));</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>));</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> % 100));</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed" title="Updates the date in the realtime clock to match value.">RTC::writeDate</a>(value);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a>(value);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;}</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div>
<div class="line"><a name="l00278"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873"> 278</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873" title="Reads the details of the alarm with index alarmNum into value.">DS3232RTC::readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873"> 278</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873">DS3232RTC::readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;{</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_ALARMS + alarmNum * DS3232_ALARM_SIZE);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS3232_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>());</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_ALARMS + alarmNum * DS3232_ALARM_SIZE);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS3232_I2C_ADDRESS, 3)) {</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = fromBCD(_bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>());</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = 0;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = 0;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = 0;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = 0;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = 0;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = 0;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873" title="Reads the details of the alarm with index alarmNum into value.">RTC::readAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;}</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div>
<div class="line"><a name="l00298"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75"> 298</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75" title="Updates the details of the alarm with index alarmNum from value.">DS3232RTC::writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75"> 298</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75">DS3232RTC::writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;{</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Write the alarm details to NVRAM.</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_ALARMS + alarmNum * DS3232_ALARM_SIZE);</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a>));</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a>));</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a>);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_ALARMS + alarmNum * DS3232_ALARM_SIZE);</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a>));</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a>));</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(value-&gt;<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a>);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// Keep the DS3232&#39;s built-in alarms in sync with the first two alarms.</span></div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">if</span> (alarmNum == 0) {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_ALARM1_SEC);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(0);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a>));</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a>));</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(0x81); <span class="comment">// Match hours, mins, secs; day = 1</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_ALARM1_SEC);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(0);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a>));</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a>));</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(0x81); <span class="comment">// Match hours, mins, secs; day = 1</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (alarmInterrupts)</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; updateAlarmInterrupts();</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (alarmNum == 1) {</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_ALARM2_MIN);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a>));</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a>));</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(0x81); <span class="comment">// Match hours, mins; day = 1</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_ALARM2_MIN);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a>));</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(toBCD(value-&gt;<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a>));</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(0x81); <span class="comment">// Match hours, mins; day = 1</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (alarmInterrupts)</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; updateAlarmInterrupts();</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75" title="Updates the details of the alarm with index alarmNum from value.">RTC::writeAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a>(alarmNum, value);</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;}</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div>
<div class="line"><a name="l00335"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e"> 335</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e" title="Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...">DS3232RTC::byteCount</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e"> 335</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e">DS3232RTC::byteCount</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> DS3232_ALARMS - DS3232_NVRAM;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;}</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div>
<div class="line"><a name="l00340"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7"> 340</a></span>&#160;uint8_t <a class="code" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">DS3232RTC::readByte</a>(uint8_t offset)</div>
<div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7"> 340</a></span>&#160;uint8_t <a class="code" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7">DS3232RTC::readByte</a>(uint8_t offset)</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;{</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (_isRealTime)</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">return</span> readRegister(DS3232_NVRAM + offset);</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">RTC::readByte</a>(offset);</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a>(offset);</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;}</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div>
<div class="line"><a name="l00348"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a"> 348</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">DS3232RTC::writeByte</a>(uint8_t offset, uint8_t value)</div>
<div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a"> 348</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a">DS3232RTC::writeByte</a>(uint8_t offset, uint8_t value)</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;{</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (_isRealTime)</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; writeRegister(DS3232_NVRAM + offset, value);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">RTC::writeByte</a>(offset, value);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a>(offset, value);</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;}</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div>
<div class="line"><a name="l00356"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b"> 356</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b" title="Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...">DS3232RTC::readTemperature</a>()</div>
<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b"> 356</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b">DS3232RTC::readTemperature</a>()</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;{</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> (((<span class="keywordtype">int</span>)(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)readRegister(DS3232_TEMP_MSB)) &lt;&lt; 2) |</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; (readRegister(DS3232_TEMP_LSB) &gt;&gt; 6);</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8" title="Value that is returned from readTemperature() if the realtime clock chip cannot determine the tempera...">NO_TEMPERATURE</a>;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8">NO_TEMPERATURE</a>;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div>
<div class="line"><a name="l00380"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9"> 380</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9" title="Enables the generation of interrupts for alarms 0 and 1.">DS3232RTC::enableAlarmInterrupts</a>()</div>
<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9"> 380</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9">DS3232RTC::enableAlarmInterrupts</a>()</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;{</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (_oneHzPin == 255 &amp;&amp; _isRealTime) {</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; updateAlarmInterrupts();</div>
@ -415,7 +416,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;}</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div>
<div class="line"><a name="l00393"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9"> 393</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9" title="Disables the generation of interrupts for alarms 0 and 1.">DS3232RTC::disableAlarmInterrupts</a>()</div>
<div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9"> 393</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9">DS3232RTC::disableAlarmInterrupts</a>()</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;{</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">if</span> (alarmInterrupts) {</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; uint8_t value = readRegister(DS3232_CONTROL);</div>
@ -425,7 +426,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div>
<div class="line"><a name="l00416"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3"> 416</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3" title="Determines which of alarms 0 or 1 have fired since the last call.">DS3232RTC::firedAlarm</a>()</div>
<div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3"> 416</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3">DS3232RTC::firedAlarm</a>()</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;{</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span> (!_isRealTime)</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> -1;</div>
@ -448,7 +449,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> alarm;</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;}</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div>
<div class="line"><a name="l00444"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a"> 444</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a" title="Enables the 32 kHz output on the DS3232 chip.">DS3232RTC::enable32kHzOutput</a>()</div>
<div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a"> 444</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a">DS3232RTC::enable32kHzOutput</a>()</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;{</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; uint8_t value = readRegister(DS3232_STATUS);</div>
@ -457,7 +458,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;}</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;</div>
<div class="line"><a name="l00458"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb"> 458</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb" title="Disables the 32 kHz output on the DS3232 chip.">DS3232RTC::disable32kHzOutput</a>()</div>
<div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb"> 458</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb">DS3232RTC::disable32kHzOutput</a>()</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (_isRealTime) {</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; uint8_t value = readRegister(DS3232_STATUS);</div>
@ -469,42 +470,42 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="keywordtype">void</span> DS3232RTC::initAlarms()</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;{</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; uint8_t value = readRegister(DS3232_ALARM_MAGIC);</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (value != (0xB0 + <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a>)) {</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (value != (0xB0 + <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a>)) {</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// This is the first time we have used this clock chip,</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// so initialize all alarms to their default state.</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> alarm;</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = 6; <span class="comment">// Default to 6am for alarms.</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = 0;</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = 0;</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 0; index &lt; <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a>; ++index)</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75" title="Updates the details of the alarm with index alarmNum from value.">writeAlarm</a>(index, &amp;alarm);</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="structRTCAlarm.html">RTCAlarm</a> alarm;</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = 6; <span class="comment">// Default to 6am for alarms.</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = 0;</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; alarm.<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = 0;</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 0; index &lt; <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a>; ++index)</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75">writeAlarm</a>(index, &amp;alarm);</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; writeRegister(DS3232_ALARM_MAGIC, 0xB0 + ALARM_COUNT);</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// Also clear the rest of NVRAM so that it is in a known state.</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// Otherwise we&#39;ll have whatever garbage was present at power-on.</span></div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(DS3232_NVRAM);</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(DS3232_NVRAM);</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">for</span> (uint8_t index = DS3232_NVRAM; index &lt; DS3232_ALARMS; ++index)</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(0);</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(0);</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;}</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;uint8_t DS3232RTC::readRegister(uint8_t reg)</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;{</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(reg);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(DS3232_I2C_ADDRESS, 1))</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(reg);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(DS3232_I2C_ADDRESS, 1))</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">return</span> 0; <span class="comment">// RTC chip is not responding.</span></div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;}</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="keywordtype">bool</span> DS3232RTC::writeRegister(uint8_t reg, uint8_t value)</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(reg);</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(value);</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(DS3232_I2C_ADDRESS);</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(reg);</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(value);</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>();</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;}</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="preprocessor">#define DS3232_ALARM1_FLAGS (DS3232_ALARMS + 2)</span></div>
@ -526,12 +527,57 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; value &amp;= ~DS3232_A2IE;</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; writeRegister(DS3232_CONTROL, value);</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;}</div>
<div class="ttc" id="structRTCDate_html_a6e6196059b36186041a5312400ea9202"><div class="ttname"><a href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">RTCDate::month</a></div><div class="ttdeci">uint8_t month</div><div class="ttdoc">Month of the year (1-12) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00038">RTC.h:38</a></div></div>
<div class="ttc" id="classRTC_html_a102e2ec15bf0273d8f7e9ce4b6dcc96e"><div class="ttname"><a href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a></div><div class="ttdeci">virtual void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00179">RTC.cpp:179</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ab91e79271a1f8e75b07bddbb04445dc9"><div class="ttname"><a href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9">DS3232RTC::enableAlarmInterrupts</a></div><div class="ttdeci">void enableAlarmInterrupts()</div><div class="ttdoc">Enables the generation of interrupts for alarms 0 and 1. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00380">DS3232RTC.cpp:380</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ada732bae42fc2833e59ae293aa27ddcb"><div class="ttname"><a href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb">DS3232RTC::disable32kHzOutput</a></div><div class="ttdeci">void disable32kHzOutput()</div><div class="ttdoc">Disables the 32 kHz output on the DS3232 chip. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00458">DS3232RTC.cpp:458</a></div></div>
<div class="ttc" id="classDS3232RTC_html_af89e68c68f1c4b7e94286f800b5b2747"><div class="ttname"><a href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747">DS3232RTC::readTime</a></div><div class="ttdeci">void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00205">DS3232RTC.cpp:205</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a0faf40c25ab019a326a60f301c2bb41b"><div class="ttname"><a href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b">DS3232RTC::readTemperature</a></div><div class="ttdeci">int readTemperature()</div><div class="ttdoc">Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...</div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00356">DS3232RTC.cpp:356</a></div></div>
<div class="ttc" id="structRTCTime_html_acf2161ca037080dc4b767e636ad8db84"><div class="ttname"><a href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">RTCTime::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute within the hour (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00031">RTC.h:31</a></div></div>
<div class="ttc" id="classRTC_html_ade282d7a60147c3f0269f1fcd59c8d66"><div class="ttname"><a href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a></div><div class="ttdeci">virtual void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00209">RTC.cpp:209</a></div></div>
<div class="ttc" id="classRTC_html_aa1e21bf42ebd4456919744ae0f4f631e"><div class="ttname"><a href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a></div><div class="ttdeci">virtual void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00169">RTC.cpp:169</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a1319fe936dcb7e9d6bdf200b77a94f8e"><div class="ttname"><a href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e">DS3232RTC::byteCount</a></div><div class="ttdeci">int byteCount() const </div><div class="ttdoc">Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...</div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00335">DS3232RTC.cpp:335</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ab03358e3b5996e38d766e2f9f6ab62ca"><div class="ttname"><a href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca">DS3232RTC::readDate</a></div><div class="ttdeci">void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00225">DS3232RTC.cpp:225</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a3966de6f4241d86f198a8b9dd5e7e59a"><div class="ttname"><a href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a">DS3232RTC::enable32kHzOutput</a></div><div class="ttdeci">void enable32kHzOutput()</div><div class="ttdoc">Enables the 32 kHz output on the DS3232 chip. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00444">DS3232RTC.cpp:444</a></div></div>
<div class="ttc" id="classI2CMaster_html_a0bf6b84cb1e2b3a37a4a0260d0b6f960"><div class="ttname"><a href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">I2CMaster::write</a></div><div class="ttdeci">virtual void write(uint8_t value)=0</div><div class="ttdoc">Writes a single byte value on the I2C bus. </div></div>
<div class="ttc" id="classDS3232RTC_html_a8b0a65e0ac479aec8fad6ca3147dbe75"><div class="ttname"><a href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75">DS3232RTC::writeAlarm</a></div><div class="ttdeci">void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00298">DS3232RTC.cpp:298</a></div></div>
<div class="ttc" id="classRTC_html_a0e96c91efd9e7a6340effdae3eadf17e"><div class="ttname"><a href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a></div><div class="ttdeci">virtual void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00224">RTC.cpp:224</a></div></div>
<div class="ttc" id="classRTC_html_aee5ae8f600ee5296e65635c0d836fca3"><div class="ttname"><a href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">RTC::ALARM_COUNT</a></div><div class="ttdeci">static const uint8_t ALARM_COUNT</div><div class="ttdoc">Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00074">RTC.h:74</a></div></div>
<div class="ttc" id="classRTC_html_ae667600d05c8e7b06a93574dd068a4d7"><div class="ttname"><a href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a></div><div class="ttdeci">virtual void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00194">RTC.cpp:194</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a225b8c62d617aa1b7be7d20e8a033be9"><div class="ttname"><a href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9">DS3232RTC::disableAlarmInterrupts</a></div><div class="ttdeci">void disableAlarmInterrupts()</div><div class="ttdoc">Disables the generation of interrupts for alarms 0 and 1. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00393">DS3232RTC.cpp:393</a></div></div>
<div class="ttc" id="classI2CMaster_html_a4e5f1a1a4c2242699be5a35fc4872fde"><div class="ttname"><a href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">I2CMaster::startRead</a></div><div class="ttdeci">virtual bool startRead(unsigned int address, unsigned int count)=0</div><div class="ttdoc">Starts a read operation for count bytes by sending the start condition and the I2C control byte...</div></div>
<div class="ttc" id="structRTCAlarm_html_a75bdc42acd3ab3ad495680c6b6a34692"><div class="ttname"><a href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">RTCAlarm::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day for the alarm (0-23). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00044">RTC.h:44</a></div></div>
<div class="ttc" id="classRTC_html_a9ed5480b362a83f1f45c4d3bcf7c3bf8"><div class="ttname"><a href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8">RTC::NO_TEMPERATURE</a></div><div class="ttdeci">static const int NO_TEMPERATURE</div><div class="ttdoc">Value that is returned from readTemperature() if the realtime clock chip cannot determine the tempera...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00083">RTC.h:83</a></div></div>
<div class="ttc" id="structRTCAlarm_html_a0f2ef7363cb60a26642d5295b77ca19e"><div class="ttname"><a href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">RTCAlarm::flags</a></div><div class="ttdeci">uint8_t flags</div><div class="ttdoc">Additional flags for the alarm. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00046">RTC.h:46</a></div></div>
<div class="ttc" id="structRTCDate_html"><div class="ttname"><a href="structRTCDate.html">RTCDate</a></div><div class="ttdoc">Stores date information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00035">RTC.h:35</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ab0ca13a8b80da856b37fc53b84e27c78"><div class="ttname"><a href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78">DS3232RTC::writeTime</a></div><div class="ttdeci">void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00250">DS3232RTC.cpp:250</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a5ba83a3ef7d65d45c2f3241afdd8fef7"><div class="ttname"><a href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7">DS3232RTC::readByte</a></div><div class="ttdeci">uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00340">DS3232RTC.cpp:340</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a79649f100a4562b9c1ba7c69e85cbca3"><div class="ttname"><a href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3">DS3232RTC::firedAlarm</a></div><div class="ttdeci">int firedAlarm()</div><div class="ttdoc">Determines which of alarms 0 or 1 have fired since the last call. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00416">DS3232RTC.cpp:416</a></div></div>
<div class="ttc" id="classDS3232RTC_html_aa959454ae01b11c48d6ec7ec192b4ccb"><div class="ttname"><a href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb">DS3232RTC::DS3232RTC</a></div><div class="ttdeci">DS3232RTC(I2CMaster &amp;bus, uint8_t oneHzPin=255)</div><div class="ttdoc">Attaches to a realtime clock slave device on bus. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00126">DS3232RTC.cpp:126</a></div></div>
<div class="ttc" id="classI2CMaster_html_a01960fc821cb25e4c88c26d2c6107e35"><div class="ttname"><a href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">I2CMaster::startWrite</a></div><div class="ttdeci">virtual void startWrite(unsigned int address)</div><div class="ttdoc">Starts a write operation by sending a start condition and the I2C control byte. </div></div>
<div class="ttc" id="classI2CMaster_html_ab29f63551ddeb032a91505d1c0b8ac41"><div class="ttname"><a href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">I2CMaster::endWrite</a></div><div class="ttdeci">virtual bool endWrite()=0</div><div class="ttdoc">Ends the current write operation. </div></div>
<div class="ttc" id="structRTCDate_html_a7d31822daff3c3fc947386abd897732f"><div class="ttname"><a href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">RTCDate::year</a></div><div class="ttdeci">unsigned int year</div><div class="ttdoc">Year (4-digit) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00037">RTC.h:37</a></div></div>
<div class="ttc" id="classRTC_html_a1cab6397ec04b1e2b3feea5b3cd1f749"><div class="ttname"><a href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a></div><div class="ttdeci">virtual void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00262">RTC.cpp:262</a></div></div>
<div class="ttc" id="structRTCAlarm_html_ad9a75ceb4b4b3474baa66dd5466e62fe"><div class="ttname"><a href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">RTCAlarm::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute of the hour for the alarm (0-59). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00045">RTC.h:45</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a619ffee1bc013c9ddf4ae415115798bc"><div class="ttname"><a href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc">DS3232RTC::hasUpdates</a></div><div class="ttdeci">bool hasUpdates()</div><div class="ttdoc">Returns true if the realtime clock has updated since the last call to this function. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00166">DS3232RTC.cpp:166</a></div></div>
<div class="ttc" id="classRTC_html_a0f47b10b436e3f9d36e04ec907579431"><div class="ttname"><a href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a></div><div class="ttdeci">virtual uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00247">RTC.cpp:247</a></div></div>
<div class="ttc" id="structRTCTime_html"><div class="ttname"><a href="structRTCTime.html">RTCTime</a></div><div class="ttdoc">Stores time information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00028">RTC.h:28</a></div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a31c004a90c724979d8267c31f2dbf5ed"><div class="ttname"><a href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed">DS3232RTC::writeDate</a></div><div class="ttdeci">void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00264">DS3232RTC.cpp:264</a></div></div>
<div class="ttc" id="structRTCAlarm_html"><div class="ttname"><a href="structRTCAlarm.html">RTCAlarm</a></div><div class="ttdoc">Stores alarm information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00042">RTC.h:42</a></div></div>
<div class="ttc" id="classI2CMaster_html_a49eeebb57f6bc06de39973fe836369cd"><div class="ttname"><a href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">I2CMaster::read</a></div><div class="ttdeci">virtual uint8_t read()=0</div><div class="ttdoc">Reads a single byte from the I2C bus. </div></div>
<div class="ttc" id="structRTCTime_html_a98ba717092ef856dd2b773ba02fcb1a4"><div class="ttname"><a href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">RTCTime::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day (0-23) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00030">RTC.h:30</a></div></div>
<div class="ttc" id="structRTCDate_html_a2d68ff3fb90240df522b41222362704c"><div class="ttname"><a href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">RTCDate::day</a></div><div class="ttdeci">uint8_t day</div><div class="ttdoc">Day of the month (1-31) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00039">RTC.h:39</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a09c7073c687dcbbc423baf48074c7873"><div class="ttname"><a href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873">DS3232RTC::readAlarm</a></div><div class="ttdeci">void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00278">DS3232RTC.cpp:278</a></div></div>
<div class="ttc" id="structRTCTime_html_a87b7c02e535d808dcba04c77e34abb91"><div class="ttname"><a href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">RTCTime::second</a></div><div class="ttdeci">uint8_t second</div><div class="ttdoc">Second within the minute (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00032">RTC.h:32</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a9acebf12c5cecdd6d84e0ff9ed41765a"><div class="ttname"><a href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a">DS3232RTC::writeByte</a></div><div class="ttdeci">void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00348">DS3232RTC.cpp:348</a></div></div>
<div class="ttc" id="classRTC_html_aaf0a5c1f32f210a49718d148620b5bec"><div class="ttname"><a href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a></div><div class="ttdeci">virtual void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00144">RTC.cpp:144</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DS3232RTC.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,40 +115,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;RTC.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html">I2CMaster</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="code" href="classDS3232RTC.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDS3232RTC.html" title="Communicates with a DS3232 realtime clock chip via I2C.">DS3232RTC</a> : <span class="keyword">public</span> <a class="code" href="classRTC.html" title="Base class for realtime clock handlers.">RTC</a> {</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classDS3232RTC.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDS3232RTC.html">DS3232RTC</a> : <span class="keyword">public</span> <a class="code" href="classRTC.html">RTC</a> {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb" title="Attaches to a realtime clock slave device on bus.">DS3232RTC</a>(<a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> &amp;bus, uint8_t oneHzPin = 255);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb">DS3232RTC</a>(<a class="code" href="classI2CMaster.html">I2CMaster</a> &amp;bus, uint8_t oneHzPin = 255);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classDS3232RTC.html#acc5908a3743afb4c26bd75e22cad87a4"> 34</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS3232RTC.html#acc5908a3743afb4c26bd75e22cad87a4" title="Returns true if the realtime clock is on the I2C bus; false if the time and date are simulated...">isRealTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _isRealTime; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classDS3232RTC.html#acc5908a3743afb4c26bd75e22cad87a4"> 34</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS3232RTC.html#acc5908a3743afb4c26bd75e22cad87a4">isRealTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _isRealTime; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc" title="Returns true if the realtime clock has updated since the last call to this function.">hasUpdates</a>();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc">hasUpdates</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747" title="Reads the current time from the realtime clock into value.">readTime</a>(<a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca" title="Reads the current date from the realtime clock into value.">readDate</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747">readTime</a>(<a class="code" href="structRTCTime.html">RTCTime</a> *value);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca">readDate</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *value);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78" title="Updates the time in the realtime clock to match value.">writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed" title="Updates the date in the realtime clock to match value.">writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78">writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html">RTCTime</a> *value);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed">writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *value);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873" title="Reads the details of the alarm with index alarmNum into value.">readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75" title="Updates the details of the alarm with index alarmNum from value.">writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873">readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75">writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e" title="Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...">byteCount</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint8_t <a class="code" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">readByte</a>(uint8_t offset);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">writeByte</a>(uint8_t offset, uint8_t value);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e">byteCount</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint8_t <a class="code" href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7">readByte</a>(uint8_t offset);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a">writeByte</a>(uint8_t offset, uint8_t value);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b" title="Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...">readTemperature</a>();</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b">readTemperature</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9" title="Enables the generation of interrupts for alarms 0 and 1.">enableAlarmInterrupts</a>();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9" title="Disables the generation of interrupts for alarms 0 and 1.">disableAlarmInterrupts</a>();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3" title="Determines which of alarms 0 or 1 have fired since the last call.">firedAlarm</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9">enableAlarmInterrupts</a>();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9">disableAlarmInterrupts</a>();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3">firedAlarm</a>();</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a" title="Enables the 32 kHz output on the DS3232 chip.">enable32kHzOutput</a>();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb" title="Disables the 32 kHz output on the DS3232 chip.">disable32kHzOutput</a>();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a">enable32kHzOutput</a>();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb">disable32kHzOutput</a>();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> *_bus;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classI2CMaster.html">I2CMaster</a> *_bus;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; uint8_t _oneHzPin;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">bool</span> prevOneHz;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">bool</span> _isRealTime;</div>
@ -162,12 +163,36 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classDS3232RTC_html_ab91e79271a1f8e75b07bddbb04445dc9"><div class="ttname"><a href="classDS3232RTC.html#ab91e79271a1f8e75b07bddbb04445dc9">DS3232RTC::enableAlarmInterrupts</a></div><div class="ttdeci">void enableAlarmInterrupts()</div><div class="ttdoc">Enables the generation of interrupts for alarms 0 and 1. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00380">DS3232RTC.cpp:380</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ada732bae42fc2833e59ae293aa27ddcb"><div class="ttname"><a href="classDS3232RTC.html#ada732bae42fc2833e59ae293aa27ddcb">DS3232RTC::disable32kHzOutput</a></div><div class="ttdeci">void disable32kHzOutput()</div><div class="ttdoc">Disables the 32 kHz output on the DS3232 chip. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00458">DS3232RTC.cpp:458</a></div></div>
<div class="ttc" id="classDS3232RTC_html_af89e68c68f1c4b7e94286f800b5b2747"><div class="ttname"><a href="classDS3232RTC.html#af89e68c68f1c4b7e94286f800b5b2747">DS3232RTC::readTime</a></div><div class="ttdeci">void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00205">DS3232RTC.cpp:205</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a0faf40c25ab019a326a60f301c2bb41b"><div class="ttname"><a href="classDS3232RTC.html#a0faf40c25ab019a326a60f301c2bb41b">DS3232RTC::readTemperature</a></div><div class="ttdeci">int readTemperature()</div><div class="ttdoc">Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...</div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00356">DS3232RTC.cpp:356</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a1319fe936dcb7e9d6bdf200b77a94f8e"><div class="ttname"><a href="classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e">DS3232RTC::byteCount</a></div><div class="ttdeci">int byteCount() const </div><div class="ttdoc">Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...</div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00335">DS3232RTC.cpp:335</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ab03358e3b5996e38d766e2f9f6ab62ca"><div class="ttname"><a href="classDS3232RTC.html#ab03358e3b5996e38d766e2f9f6ab62ca">DS3232RTC::readDate</a></div><div class="ttdeci">void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00225">DS3232RTC.cpp:225</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a3966de6f4241d86f198a8b9dd5e7e59a"><div class="ttname"><a href="classDS3232RTC.html#a3966de6f4241d86f198a8b9dd5e7e59a">DS3232RTC::enable32kHzOutput</a></div><div class="ttdeci">void enable32kHzOutput()</div><div class="ttdoc">Enables the 32 kHz output on the DS3232 chip. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00444">DS3232RTC.cpp:444</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a8b0a65e0ac479aec8fad6ca3147dbe75"><div class="ttname"><a href="classDS3232RTC.html#a8b0a65e0ac479aec8fad6ca3147dbe75">DS3232RTC::writeAlarm</a></div><div class="ttdeci">void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00298">DS3232RTC.cpp:298</a></div></div>
<div class="ttc" id="classDS3232RTC_html"><div class="ttname"><a href="classDS3232RTC.html">DS3232RTC</a></div><div class="ttdoc">Communicates with a DS3232 realtime clock chip via I2C. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8h_source.html#l00030">DS3232RTC.h:30</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a225b8c62d617aa1b7be7d20e8a033be9"><div class="ttname"><a href="classDS3232RTC.html#a225b8c62d617aa1b7be7d20e8a033be9">DS3232RTC::disableAlarmInterrupts</a></div><div class="ttdeci">void disableAlarmInterrupts()</div><div class="ttdoc">Disables the generation of interrupts for alarms 0 and 1. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00393">DS3232RTC.cpp:393</a></div></div>
<div class="ttc" id="structRTCDate_html"><div class="ttname"><a href="structRTCDate.html">RTCDate</a></div><div class="ttdoc">Stores date information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00035">RTC.h:35</a></div></div>
<div class="ttc" id="classDS3232RTC_html_ab0ca13a8b80da856b37fc53b84e27c78"><div class="ttname"><a href="classDS3232RTC.html#ab0ca13a8b80da856b37fc53b84e27c78">DS3232RTC::writeTime</a></div><div class="ttdeci">void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00250">DS3232RTC.cpp:250</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a5ba83a3ef7d65d45c2f3241afdd8fef7"><div class="ttname"><a href="classDS3232RTC.html#a5ba83a3ef7d65d45c2f3241afdd8fef7">DS3232RTC::readByte</a></div><div class="ttdeci">uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00340">DS3232RTC.cpp:340</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a79649f100a4562b9c1ba7c69e85cbca3"><div class="ttname"><a href="classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3">DS3232RTC::firedAlarm</a></div><div class="ttdeci">int firedAlarm()</div><div class="ttdoc">Determines which of alarms 0 or 1 have fired since the last call. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00416">DS3232RTC.cpp:416</a></div></div>
<div class="ttc" id="classDS3232RTC_html_aa959454ae01b11c48d6ec7ec192b4ccb"><div class="ttname"><a href="classDS3232RTC.html#aa959454ae01b11c48d6ec7ec192b4ccb">DS3232RTC::DS3232RTC</a></div><div class="ttdeci">DS3232RTC(I2CMaster &amp;bus, uint8_t oneHzPin=255)</div><div class="ttdoc">Attaches to a realtime clock slave device on bus. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00126">DS3232RTC.cpp:126</a></div></div>
<div class="ttc" id="classDS3232RTC_html_acc5908a3743afb4c26bd75e22cad87a4"><div class="ttname"><a href="classDS3232RTC.html#acc5908a3743afb4c26bd75e22cad87a4">DS3232RTC::isRealTime</a></div><div class="ttdeci">bool isRealTime() const </div><div class="ttdoc">Returns true if the realtime clock is on the I2C bus; false if the time and date are simulated...</div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8h_source.html#l00034">DS3232RTC.h:34</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a619ffee1bc013c9ddf4ae415115798bc"><div class="ttname"><a href="classDS3232RTC.html#a619ffee1bc013c9ddf4ae415115798bc">DS3232RTC::hasUpdates</a></div><div class="ttdeci">bool hasUpdates()</div><div class="ttdoc">Returns true if the realtime clock has updated since the last call to this function. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00166">DS3232RTC.cpp:166</a></div></div>
<div class="ttc" id="structRTCTime_html"><div class="ttname"><a href="structRTCTime.html">RTCTime</a></div><div class="ttdoc">Stores time information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00028">RTC.h:28</a></div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a31c004a90c724979d8267c31f2dbf5ed"><div class="ttname"><a href="classDS3232RTC.html#a31c004a90c724979d8267c31f2dbf5ed">DS3232RTC::writeDate</a></div><div class="ttdeci">void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00264">DS3232RTC.cpp:264</a></div></div>
<div class="ttc" id="structRTCAlarm_html"><div class="ttname"><a href="structRTCAlarm.html">RTCAlarm</a></div><div class="ttdoc">Stores alarm information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00042">RTC.h:42</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a09c7073c687dcbbc423baf48074c7873"><div class="ttname"><a href="classDS3232RTC.html#a09c7073c687dcbbc423baf48074c7873">DS3232RTC::readAlarm</a></div><div class="ttdeci">void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00278">DS3232RTC.cpp:278</a></div></div>
<div class="ttc" id="classDS3232RTC_html_a9acebf12c5cecdd6d84e0ff9ed41765a"><div class="ttname"><a href="classDS3232RTC.html#a9acebf12c5cecdd6d84e0ff9ed41765a">DS3232RTC::writeByte</a></div><div class="ttdeci">void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="DS3232RTC_8cpp_source.html#l00348">DS3232RTC.cpp:348</a></div></div>
<div class="ttc" id="classRTC_html"><div class="ttname"><a href="classRTC.html">RTC</a></div><div class="ttdoc">Base class for realtime clock handlers. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00049">RTC.h:49</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DejaVuSans9.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -256,9 +257,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DejaVuSansBold9.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -256,9 +257,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: DejaVuSansItalic9.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -256,9 +257,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: EEPROM24.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -112,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;EEPROM24.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;I2CMaster.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
<div class="line"><a name="l00095"></a><span class="lineno"><a class="code" href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995"> 95</a></span>&#160;<a class="code" href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995" title="Constructs a new EEPROM access object on bus for an EEPROM of the specified type.">EEPROM24::EEPROM24</a>(<a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> &amp;bus, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> type, uint8_t bank)</div>
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995"> 95</a></span>&#160;<a class="code" href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995">EEPROM24::EEPROM24</a>(<a class="code" href="classI2CMaster.html">I2CMaster</a> &amp;bus, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> type, uint8_t bank)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; : _bus(&amp;bus)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; , _size((type &amp; 0xFFFF) * ((type &gt;&gt; 16) &amp; 0x0FFF))</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; , _pageSize((type &gt;&gt; 16) &amp; 0x0FFF)</div>
@ -126,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">case</span> EE_BSEL_8BIT_ADDR: {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; uint8_t addrBits = 8;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c" title="Returns the size of the EEPROM in bytes.">size</a> = 0x0100;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c">size</a> = 0x0100;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">while</span> (size &lt; _size) {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; ++addrBits;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; size &lt;&lt;= 1;</div>
@ -143,54 +144,54 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="code" href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf"> 152</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf" title="Returns true if the EEPROM is available on the I2C bus; false otherwise.">EEPROM24::available</a>()</div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf"> 152</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf">EEPROM24::available</a>()</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;{</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// Perform a &quot;Current Address Read&quot; on the EEPROM. We don&#39;t care about</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// the returned byte. We only care if the read request was ACK&#39;ed or not.</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(i2cAddress, 1))</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(i2cAddress, 1))</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586"> 167</a></span>&#160;uint8_t <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586" title="Reads a single byte from the EEPROM at address.">EEPROM24::read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address)</div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586"> 167</a></span>&#160;uint8_t <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586">EEPROM24::read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address)</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (address &gt;= _size)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; writeAddress(address);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(i2cAddress, 1))</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(i2cAddress, 1))</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="code" href="classEEPROM24.html#a63e23dc014415f947975359ac09f627e"> 187</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586" title="Reads a single byte from the EEPROM at address.">EEPROM24::read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classEEPROM24.html#a63e23dc014415f947975359ac09f627e"> 187</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586">EEPROM24::read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span> (address &gt;= _size || !length)</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> ((address + length) &gt; _size)</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; length = (size_t)(_size - address);</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; writeAddress(address);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(i2cAddress, length))</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(i2cAddress, length))</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; uint8_t *d = (uint8_t *)data;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = 0;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">while</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a6458fa99cfd9e6270ae6dff993955833" title="Returns the number of bytes that are still available for reading.">available</a>()) {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; *d++ = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">while</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#a6458fa99cfd9e6270ae6dff993955833">available</a>()) {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; *d++ = _bus-&gt;<a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>();</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; ++count;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> count;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div>
<div class="line"><a name="l00213"></a><span class="lineno"><a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8"> 213</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8" title="Writes a byte value to address in the EEPROM.">EEPROM24::write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, uint8_t value)</div>
<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8"> 213</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8">EEPROM24::write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, uint8_t value)</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;{</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (address &gt;= _size)</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; writeAddress(address);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(value);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(value);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> waitForWrite();</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;}</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="code" href="classEEPROM24.html#a3d918ed34da7ca6d21a776c0614eebf3"> 235</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8" title="Writes a byte value to address in the EEPROM.">EEPROM24::write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classEEPROM24.html#a3d918ed34da7ca6d21a776c0614eebf3"> 235</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8">EEPROM24::write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;{</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (address &gt;= _size)</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> 0;</div>
@ -205,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; writeAddress(address);</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; needAddress = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(*d++);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(*d++);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; ++address;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; ++page;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span> ((address &amp; (_pageSize - 1)) == 0) {</div>
@ -229,23 +230,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;{</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">switch</span> (_mode) {</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">case</span> EE_BSEL_NONE:</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(i2cAddress);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)(address &gt;&gt; 8));</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(i2cAddress);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)(address &gt;&gt; 8));</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">case</span> EE_BSEL_8BIT_ADDR:</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(i2cAddress | (((uint8_t)(address &gt;&gt; 8)) &amp; 0x07));</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(i2cAddress | (((uint8_t)(address &gt;&gt; 8)) &amp; 0x07));</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">case</span> EE_BSEL_17BIT_ADDR:</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(i2cAddress | (((uint8_t)(address &gt;&gt; 16)) &amp; 0x01));</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)(address &gt;&gt; 8));</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(i2cAddress | (((uint8_t)(address &gt;&gt; 16)) &amp; 0x01));</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)(address &gt;&gt; 8));</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">case</span> EE_BSEL_17BIT_ADDR_ALT:</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(i2cAddress | (((uint8_t)(address &gt;&gt; 14)) &amp; 0x04));</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)(address &gt;&gt; 8));</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(i2cAddress | (((uint8_t)(address &gt;&gt; 14)) &amp; 0x04));</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)(address &gt;&gt; 8));</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div>
@ -255,23 +256,35 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// 1000 iterations is going to be approximately 100ms when the I2C</span></div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// clock is 100 kHz. If there has been no response in that time</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// then we assume that the write has failed and timeout.</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>())</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (!_bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>())</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordtype">unsigned</span> count = 1000;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">while</span> (count &gt; 0) {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(i2cAddress);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>())</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; _bus-&gt;<a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(i2cAddress);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (_bus-&gt;<a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>())</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; --count;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div>
<div class="ttc" id="classEEPROM24_html_aa544875cef9bd05bf71d6c19be06cf7c"><div class="ttname"><a href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c">EEPROM24::size</a></div><div class="ttdeci">unsigned long size() const </div><div class="ttdoc">Returns the size of the EEPROM in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8h_source.html#l00065">EEPROM24.h:65</a></div></div>
<div class="ttc" id="classEEPROM24_html_a960971377d4decb122ff38d12603e586"><div class="ttname"><a href="classEEPROM24.html#a960971377d4decb122ff38d12603e586">EEPROM24::read</a></div><div class="ttdeci">uint8_t read(unsigned long address)</div><div class="ttdoc">Reads a single byte from the EEPROM at address. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00167">EEPROM24.cpp:167</a></div></div>
<div class="ttc" id="classI2CMaster_html_a0bf6b84cb1e2b3a37a4a0260d0b6f960"><div class="ttname"><a href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">I2CMaster::write</a></div><div class="ttdeci">virtual void write(uint8_t value)=0</div><div class="ttdoc">Writes a single byte value on the I2C bus. </div></div>
<div class="ttc" id="classI2CMaster_html_a4e5f1a1a4c2242699be5a35fc4872fde"><div class="ttname"><a href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">I2CMaster::startRead</a></div><div class="ttdeci">virtual bool startRead(unsigned int address, unsigned int count)=0</div><div class="ttdoc">Starts a read operation for count bytes by sending the start condition and the I2C control byte...</div></div>
<div class="ttc" id="classEEPROM24_html_ae8547f6ff7711496e1959ee24a142995"><div class="ttname"><a href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995">EEPROM24::EEPROM24</a></div><div class="ttdeci">EEPROM24(I2CMaster &amp;bus, unsigned long type, uint8_t bank=0)</div><div class="ttdoc">Constructs a new EEPROM access object on bus for an EEPROM of the specified type. ...</div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00095">EEPROM24.cpp:95</a></div></div>
<div class="ttc" id="classEEPROM24_html_a9e017772e3459ee4ab987e27d78937f8"><div class="ttname"><a href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8">EEPROM24::write</a></div><div class="ttdeci">bool write(unsigned long address, uint8_t value)</div><div class="ttdoc">Writes a byte value to address in the EEPROM. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00213">EEPROM24.cpp:213</a></div></div>
<div class="ttc" id="classI2CMaster_html_a6458fa99cfd9e6270ae6dff993955833"><div class="ttname"><a href="classI2CMaster.html#a6458fa99cfd9e6270ae6dff993955833">I2CMaster::available</a></div><div class="ttdeci">virtual unsigned int available()=0</div><div class="ttdoc">Returns the number of bytes that are still available for reading. </div></div>
<div class="ttc" id="classI2CMaster_html_a01960fc821cb25e4c88c26d2c6107e35"><div class="ttname"><a href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">I2CMaster::startWrite</a></div><div class="ttdeci">virtual void startWrite(unsigned int address)</div><div class="ttdoc">Starts a write operation by sending a start condition and the I2C control byte. </div></div>
<div class="ttc" id="classI2CMaster_html_ab29f63551ddeb032a91505d1c0b8ac41"><div class="ttname"><a href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">I2CMaster::endWrite</a></div><div class="ttdeci">virtual bool endWrite()=0</div><div class="ttdoc">Ends the current write operation. </div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classEEPROM24_html_af8b70971d882b06de3fc6644a8ece3cf"><div class="ttname"><a href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf">EEPROM24::available</a></div><div class="ttdeci">bool available()</div><div class="ttdoc">Returns true if the EEPROM is available on the I2C bus; false otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00152">EEPROM24.cpp:152</a></div></div>
<div class="ttc" id="classI2CMaster_html_a49eeebb57f6bc06de39973fe836369cd"><div class="ttname"><a href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">I2CMaster::read</a></div><div class="ttdeci">virtual uint8_t read()=0</div><div class="ttdoc">Reads a single byte from the I2C bus. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: EEPROM24.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -115,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html">I2CMaster</a>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// Block select modes.</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#define EE_BSEL_NONE 0</span></div>
@ -146,24 +147,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define EEPROM_24LC1025 _EE24(131072UL, 128, EE_BSEL_17BIT_ADDR_ALT)</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define EEPROM_24LC1026 _EE24(131072UL, 128, EE_BSEL_17BIT_ADDR)</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="classEEPROM24.html"> 60</a></span>&#160;<span class="keyword">class </span><a class="code" href="classEEPROM24.html" title="Reading and writing EEPROM&#39;s from the 24LCXX family.">EEPROM24</a></div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classEEPROM24.html"> 60</a></span>&#160;<span class="keyword">class </span><a class="code" href="classEEPROM24.html">EEPROM24</a></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995" title="Constructs a new EEPROM access object on bus for an EEPROM of the specified type.">EEPROM24</a>(<a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> &amp;bus, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> type, uint8_t bank = 0);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995">EEPROM24</a>(<a class="code" href="classI2CMaster.html">I2CMaster</a> &amp;bus, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> type, uint8_t bank = 0);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c"> 65</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c" title="Returns the size of the EEPROM in bytes.">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _size; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="classEEPROM24.html#af33b23e2614f3966bbaf2554890c032a"> 66</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classEEPROM24.html#af33b23e2614f3966bbaf2554890c032a" title="Returns the size of a single EEPROM page in bytes.">pageSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _pageSize; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c"> 65</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _size; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classEEPROM24.html#af33b23e2614f3966bbaf2554890c032a"> 66</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classEEPROM24.html#af33b23e2614f3966bbaf2554890c032a">pageSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _pageSize; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf" title="Returns true if the EEPROM is available on the I2C bus; false otherwise.">available</a>();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf">available</a>();</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586" title="Reads a single byte from the EEPROM at address.">read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586" title="Reads a single byte from the EEPROM at address.">read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586">read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a960971377d4decb122ff38d12603e586">read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8" title="Writes a byte value to address in the EEPROM.">write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, uint8_t value);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8" title="Writes a byte value to address in the EEPROM.">write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8">write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, uint8_t value);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8">write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> length);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> *_bus;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classI2CMaster.html">I2CMaster</a> *_bus;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _size;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _pageSize;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; uint8_t _mode;</div>
@ -174,12 +175,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;};</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classEEPROM24_html_aa544875cef9bd05bf71d6c19be06cf7c"><div class="ttname"><a href="classEEPROM24.html#aa544875cef9bd05bf71d6c19be06cf7c">EEPROM24::size</a></div><div class="ttdeci">unsigned long size() const </div><div class="ttdoc">Returns the size of the EEPROM in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8h_source.html#l00065">EEPROM24.h:65</a></div></div>
<div class="ttc" id="classEEPROM24_html_a960971377d4decb122ff38d12603e586"><div class="ttname"><a href="classEEPROM24.html#a960971377d4decb122ff38d12603e586">EEPROM24::read</a></div><div class="ttdeci">uint8_t read(unsigned long address)</div><div class="ttdoc">Reads a single byte from the EEPROM at address. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00167">EEPROM24.cpp:167</a></div></div>
<div class="ttc" id="classEEPROM24_html"><div class="ttname"><a href="classEEPROM24.html">EEPROM24</a></div><div class="ttdoc">Reading and writing EEPROM&#39;s from the 24LCXX family. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8h_source.html#l00060">EEPROM24.h:60</a></div></div>
<div class="ttc" id="classEEPROM24_html_ae8547f6ff7711496e1959ee24a142995"><div class="ttname"><a href="classEEPROM24.html#ae8547f6ff7711496e1959ee24a142995">EEPROM24::EEPROM24</a></div><div class="ttdeci">EEPROM24(I2CMaster &amp;bus, unsigned long type, uint8_t bank=0)</div><div class="ttdoc">Constructs a new EEPROM access object on bus for an EEPROM of the specified type. ...</div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00095">EEPROM24.cpp:95</a></div></div>
<div class="ttc" id="classEEPROM24_html_a9e017772e3459ee4ab987e27d78937f8"><div class="ttname"><a href="classEEPROM24.html#a9e017772e3459ee4ab987e27d78937f8">EEPROM24::write</a></div><div class="ttdeci">bool write(unsigned long address, uint8_t value)</div><div class="ttdoc">Writes a byte value to address in the EEPROM. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00213">EEPROM24.cpp:213</a></div></div>
<div class="ttc" id="classEEPROM24_html_af33b23e2614f3966bbaf2554890c032a"><div class="ttname"><a href="classEEPROM24.html#af33b23e2614f3966bbaf2554890c032a">EEPROM24::pageSize</a></div><div class="ttdeci">unsigned long pageSize() const </div><div class="ttdoc">Returns the size of a single EEPROM page in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8h_source.html#l00066">EEPROM24.h:66</a></div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classEEPROM24_html_af8b70971d882b06de3fc6644a8ece3cf"><div class="ttname"><a href="classEEPROM24.html#af8b70971d882b06de3fc6644a8ece3cf">EEPROM24::available</a></div><div class="ttdeci">bool available()</div><div class="ttdoc">Returns true if the EEPROM is available on the I2C bus; false otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="EEPROM24_8cpp_source.html#l00152">EEPROM24.cpp:152</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Field.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -111,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;Field.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e"> 40</a></span>&#160;<a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e" title="Constructs a new field with a specific label.">Field::Field</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e"> 40</a></span>&#160;<a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e">Field::Field</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; : _label(label)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; , _form(0)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; , next(0)</div>
@ -119,70 +120,85 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="classField.html#a7e2bdb203ddfd9219696f263c1731fe7"> 52</a></span>&#160;<a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e" title="Constructs a new field with a specific label.">Field::Field</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classField.html#a7e2bdb203ddfd9219696f263c1731fe7"> 52</a></span>&#160;<a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e">Field::Field</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; : _label(label)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; , _form(0)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; , next(0)</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; , prev(0)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; form.<a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7" title="Adds field to this form.">addField</a>(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; form.<a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7">addField</a>(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60"> 66</a></span>&#160;<a class="code" href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60" title="Destroys this field and removes it from its owning Form.">Field::~Field</a>()</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60"> 66</a></span>&#160;<a class="code" href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60">Field::~Field</a>()</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (_form)</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; _form-&gt;<a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697" title="Removes field from this form.">removeField</a>(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; _form-&gt;<a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697">removeField</a>(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00096"></a><span class="lineno"><a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3"> 96</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3" title="Dispatches event via this field.">Field::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3"> 96</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3">Field::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;{</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// Nothing to do here.</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5" title="Enters the field due to form navigation.">Field::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(_label);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(_label);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07"> 129</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07" title="Exits the field due to form navigation.">Field::exitField</a>()</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07"> 129</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">Field::exitField</a>()</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Nothing to do here.</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="code" href="classField.html#ad4ea63599d780c35b296cf2840b69f7b"> 146</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#ad4ea63599d780c35b296cf2840b69f7b" title="Sets the label to display in the first line of this field.">Field::setLabel</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classField.html#ad4ea63599d780c35b296cf2840b69f7b"> 146</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#ad4ea63599d780c35b296cf2840b69f7b">Field::setLabel</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>()) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>()) {</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> prevLen = _label.length();</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newLen = label.length();</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; _label = <a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 0);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(label);</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; _label = <a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 0);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(label);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">while</span> (newLen++ &lt; prevLen)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd" title="Updates the cursor position after the label has been drawn by setLabel().">updateCursor</a>();</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd">updateCursor</a>();</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; _label = <a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; _label = <a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72"> 169</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">Field::isCurrent</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classField.html#a25d86a67b321e8c642edf75a10a35f72"> 169</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (!_form-&gt;<a class="code" href="classForm.html#a3101f288e3e5aa8307c57f35861ad587" title="Returns true if the form is shown; false if the form is hidden.">isVisible</a>())</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (!_form-&gt;<a class="code" href="classForm.html#a3101f288e3e5aa8307c57f35861ad587">isVisible</a>())</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> _form-&gt;<a class="code" href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8" title="Returns the current field that is displayed on-screen.">currentField</a>() == <span class="keyword">this</span>;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> _form-&gt;<a class="code" href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8">currentField</a>() == <span class="keyword">this</span>;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;}</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd"> 191</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd" title="Updates the cursor position after the label has been drawn by setLabel().">Field::updateCursor</a>()</div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classField.html#afc612378167be0e7f8a6f8395b3537bd"> 191</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd">Field::updateCursor</a>()</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// Nothing to do here.</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;}</div>
<div class="ttc" id="classForm_html_a3101f288e3e5aa8307c57f35861ad587"><div class="ttname"><a href="classForm.html#a3101f288e3e5aa8307c57f35861ad587">Form::isVisible</a></div><div class="ttdeci">bool isVisible() const </div><div class="ttdoc">Returns true if the form is shown; false if the form is hidden. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00053">Form.h:53</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classField_html_a061bd1ed4d8b079df86465df8facd3b3"><div class="ttname"><a href="classField.html#a061bd1ed4d8b079df86465df8facd3b3">Field::dispatch</a></div><div class="ttdeci">virtual int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00096">Field.cpp:96</a></div></div>
<div class="ttc" id="classForm_html_a5cb056ace428e75e321610555bfecac7"><div class="ttname"><a href="classForm.html#a5cb056ace428e75e321610555bfecac7">Form::addField</a></div><div class="ttdeci">void addField(Field *field)</div><div class="ttdoc">Adds field to this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00165">Form.cpp:165</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classField_html_ac4ea0d104376233c3f0bfc080ec8564e"><div class="ttname"><a href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e">Field::Field</a></div><div class="ttdeci">Field(const String &amp;label)</div><div class="ttdoc">Constructs a new field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00040">Field.cpp:40</a></div></div>
<div class="ttc" id="classField_html_ad6805c75ee1e62f8cd8bd550c4530c07"><div class="ttname"><a href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">Field::exitField</a></div><div class="ttdeci">virtual void exitField()</div><div class="ttdoc">Exits the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00129">Field.cpp:129</a></div></div>
<div class="ttc" id="classField_html_afc612378167be0e7f8a6f8395b3537bd"><div class="ttname"><a href="classField.html#afc612378167be0e7f8a6f8395b3537bd">Field::updateCursor</a></div><div class="ttdeci">virtual void updateCursor()</div><div class="ttdoc">Updates the cursor position after the label has been drawn by setLabel(). </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00191">Field.cpp:191</a></div></div>
<div class="ttc" id="classForm_html_a7abd717029f9b19ee7318470072cd697"><div class="ttname"><a href="classForm.html#a7abd717029f9b19ee7318470072cd697">Form::removeField</a></div><div class="ttdeci">void removeField(Field *field)</div><div class="ttdoc">Removes field from this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00187">Form.cpp:187</a></div></div>
<div class="ttc" id="classField_html_ad4ea63599d780c35b296cf2840b69f7b"><div class="ttname"><a href="classField.html#ad4ea63599d780c35b296cf2840b69f7b">Field::setLabel</a></div><div class="ttdeci">void setLabel(const String &amp;label)</div><div class="ttdoc">Sets the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00146">Field.cpp:146</a></div></div>
<div class="ttc" id="classField_html_a45d6e6d09b8f8e46de62b40119d62c60"><div class="ttname"><a href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60">Field::~Field</a></div><div class="ttdeci">~Field()</div><div class="ttdoc">Destroys this field and removes it from its owning Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00066">Field.cpp:66</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
<div class="ttc" id="classForm_html_a85a219a73294cef1f89a2182b5c25bf8"><div class="ttname"><a href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8">Form::currentField</a></div><div class="ttdeci">Field * currentField() const </div><div class="ttdoc">Returns the current field that is displayed on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00046">Form.h:46</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Field.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,45 +115,58 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Form.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classField.html">Field</a> {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e" title="Constructs a new field with a specific label.">Field</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e" title="Constructs a new field with a specific label.">Field</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>, <span class="keyword">const</span> String &amp;label);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60" title="Destroys this field and removes it from its owning Form.">~Field</a>();</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e">Field</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e">Field</a>(<a class="code" href="classForm.html">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>, <span class="keyword">const</span> String &amp;label);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60">~Field</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5"> 34</a></span>&#160; <a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> *<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _form; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classField.html#a27427319be1cc92db3128637d8884ee5"> 34</a></span>&#160; <a class="code" href="classForm.html">Form</a> *<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _form; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3" title="Dispatches event via this field.">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5" title="Enters the field due to form navigation.">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07" title="Exits the field due to form navigation.">exitField</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">exitField</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe"> 41</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _label; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classField.html#ad4ea63599d780c35b296cf2840b69f7b" title="Sets the label to display in the first line of this field.">setLabel</a>(<span class="keyword">const</span> String &amp;label);</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classField.html#aaa861ef917130c989a955bc75c683afe"> 41</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _label; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classField.html#ad4ea63599d780c35b296cf2840b69f7b">setLabel</a>(<span class="keyword">const</span> String &amp;label);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1"> 47</a></span>&#160; LiquidCrystal *<a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _form-&gt;_lcd; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1"> 47</a></span>&#160; LiquidCrystal *<a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _form-&gt;_lcd; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd" title="Updates the cursor position after the label has been drawn by setLabel().">updateCursor</a>();</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classField.html#afc612378167be0e7f8a6f8395b3537bd">updateCursor</a>();</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; String _label;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> *_form;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *next;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *prev;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classForm.html">Form</a> *_form;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classField.html">Field</a> *next;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="classField.html">Field</a> *prev;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classForm.html">Form</a>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;};</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classField_html_a27427319be1cc92db3128637d8884ee5"><div class="ttname"><a href="classField.html#a27427319be1cc92db3128637d8884ee5">Field::form</a></div><div class="ttdeci">Form * form() const </div><div class="ttdoc">Returns the Form that owns this field; null if not associated with a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00034">Field.h:34</a></div></div>
<div class="ttc" id="classField_html_a061bd1ed4d8b079df86465df8facd3b3"><div class="ttname"><a href="classField.html#a061bd1ed4d8b079df86465df8facd3b3">Field::dispatch</a></div><div class="ttdeci">virtual int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00096">Field.cpp:96</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classField_html_ac4ea0d104376233c3f0bfc080ec8564e"><div class="ttname"><a href="classField.html#ac4ea0d104376233c3f0bfc080ec8564e">Field::Field</a></div><div class="ttdeci">Field(const String &amp;label)</div><div class="ttdoc">Constructs a new field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00040">Field.cpp:40</a></div></div>
<div class="ttc" id="classField_html_ad6805c75ee1e62f8cd8bd550c4530c07"><div class="ttname"><a href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">Field::exitField</a></div><div class="ttdeci">virtual void exitField()</div><div class="ttdoc">Exits the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00129">Field.cpp:129</a></div></div>
<div class="ttc" id="classField_html_afc612378167be0e7f8a6f8395b3537bd"><div class="ttname"><a href="classField.html#afc612378167be0e7f8a6f8395b3537bd">Field::updateCursor</a></div><div class="ttdeci">virtual void updateCursor()</div><div class="ttdoc">Updates the cursor position after the label has been drawn by setLabel(). </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00191">Field.cpp:191</a></div></div>
<div class="ttc" id="classField_html_ad4ea63599d780c35b296cf2840b69f7b"><div class="ttname"><a href="classField.html#ad4ea63599d780c35b296cf2840b69f7b">Field::setLabel</a></div><div class="ttdeci">void setLabel(const String &amp;label)</div><div class="ttdoc">Sets the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00146">Field.cpp:146</a></div></div>
<div class="ttc" id="classField_html_a45d6e6d09b8f8e46de62b40119d62c60"><div class="ttname"><a href="classField.html#a45d6e6d09b8f8e46de62b40119d62c60">Field::~Field</a></div><div class="ttdeci">~Field()</div><div class="ttdoc">Destroys this field and removes it from its owning Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00066">Field.cpp:66</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Form.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -112,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;Form.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Field.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="classForm.html#ad30836b22edde707a52d94090b716996"> 47</a></span>&#160;<a class="code" href="classForm.html#ad30836b22edde707a52d94090b716996" title="Constructs a new form and associates it with lcd.">Form::Form</a>(LiquidCrystal &amp;lcd)</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classForm.html#ad30836b22edde707a52d94090b716996"> 47</a></span>&#160;<a class="code" href="classForm.html#ad30836b22edde707a52d94090b716996">Form::Form</a>(LiquidCrystal &amp;lcd)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; : _lcd(&amp;lcd)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; , first(0)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; , last(0)</div>
@ -120,10 +121,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f"> 58</a></span>&#160;<a class="code" href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f" title="Detaches all remaining fields and destroys this form.">Form::~Form</a>()</div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f"> 58</a></span>&#160;<a class="code" href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f">Form::~Form</a>()</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field = first;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *next;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classField.html">Field</a> *field = first;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classField.html">Field</a> *next;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">while</span> (field != 0) {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; next = field-&gt;next;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; field-&gt;_form = 0;</div>
@ -133,50 +134,50 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee"> 99</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee" title="Dispatches event to the currently active field using Field::dispatch().">Form::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee"> 99</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee">Form::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;{</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (current) {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">int</span> exitval = current-&gt;<a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3" title="Dispatches event via this field.">dispatch</a>(event);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">int</span> exitval = current-&gt;<a class="code" href="classField.html#a061bd1ed4d8b079df86465df8facd3b3">dispatch</a>(event);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (exitval &gt;= 0)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> exitval;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (event == LCD_BUTTON_LEFT)</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90" title="Changes to the previous field in the &quot;tab order&quot;.">prevField</a>();</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90">prevField</a>();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event == LCD_BUTTON_RIGHT)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1" title="Changes to the next field in the &quot;tab order&quot;.">nextField</a>();</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1">nextField</a>();</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1"> 118</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1" title="Changes to the next field in the &quot;tab order&quot;.">Form::nextField</a>()</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1"> 118</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1">Form::nextField</a>()</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field = current;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classField.html">Field</a> *field = current;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">if</span> (!field)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; field = first;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (field &amp;&amp; field-&gt;next)</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; field = field-&gt;next;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; field = first;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(field);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(field);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90"> 135</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90" title="Changes to the previous field in the &quot;tab order&quot;.">Form::prevField</a>()</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90"> 135</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90">Form::prevField</a>()</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field = current;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classField.html">Field</a> *field = current;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (!field)</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; field = last;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (field &amp;&amp; field-&gt;prev)</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; field = field-&gt;prev;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; field = last;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(field);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(field);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;}</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="code" href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b"> 152</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b" title="Changes to default field (i.e., the first field).">Form::defaultField</a>()</div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b"> 152</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b">Form::defaultField</a>()</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;{</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(first);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(first);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7"> 165</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7" title="Adds field to this form.">Form::addField</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field)</div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classForm.html#a5cb056ace428e75e321610555bfecac7"> 165</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7">Form::addField</a>(<a class="code" href="classField.html">Field</a> *field)</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (field-&gt;_form)</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// Already added to a form.</span></div>
@ -190,17 +191,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; last = field;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697"> 187</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697" title="Removes field from this form.">Form::removeField</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field)</div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classForm.html#a7abd717029f9b19ee7318470072cd697"> 187</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697">Form::removeField</a>(<a class="code" href="classField.html">Field</a> *field)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span> (field-&gt;_form != <span class="keyword">this</span>)</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// Not a member of this form.</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (current == field) {</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (field-&gt;next)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(field-&gt;next);</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(field-&gt;next);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (field-&gt;prev)</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(field-&gt;prev);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(field-&gt;prev);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(0);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(0);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (field-&gt;next)</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; field-&gt;next-&gt;prev = field-&gt;prev;</div>
@ -215,14 +216,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; field-&gt;prev = 0;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;}</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5"> 230</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">Form::setCurrentField</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field)</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5"> 230</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">Form::setCurrentField</a>(<a class="code" href="classField.html">Field</a> *field)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;{</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (field &amp;&amp; field-&gt;_form != <span class="keyword">this</span>)</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// Wrong form.</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (visible) {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordtype">bool</span> reverse = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (current) {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; current-&gt;<a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07" title="Exits the field due to form navigation.">exitField</a>();</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; current-&gt;<a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">exitField</a>();</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (field-&gt;next == current)</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; reverse = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!field-&gt;next &amp;&amp; current == first)</div>
@ -231,13 +232,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; current = field;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; _lcd-&gt;clear();</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (current)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; current-&gt;<a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5" title="Enters the field due to form navigation.">enterField</a>(reverse);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; current-&gt;<a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">enterField</a>(reverse);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; current = field;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="code" href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65"> 274</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65" title="Shows the form, or does nothing if the form is already on-screen.">Form::show</a>()</div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65"> 274</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65">Form::show</a>()</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;{</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (!visible) {</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (!current)</div>
@ -245,26 +246,41 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; visible = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; _lcd-&gt;clear();</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">if</span> (current)</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; current-&gt;<a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5" title="Enters the field due to form navigation.">enterField</a>(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; current-&gt;<a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">enterField</a>(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div>
<div class="line"><a name="l00293"></a><span class="lineno"><a class="code" href="classForm.html#a88b9146a3f68e837c5e831203096f9e9"> 293</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a88b9146a3f68e837c5e831203096f9e9" title="Hides the form, or does nothing if the form is not on-screen.">Form::hide</a>()</div>
<div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classForm.html#a88b9146a3f68e837c5e831203096f9e9"> 293</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classForm.html#a88b9146a3f68e837c5e831203096f9e9">Form::hide</a>()</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;{</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span> (visible) {</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (current)</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; current-&gt;<a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07" title="Exits the field due to form navigation.">exitField</a>();</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; current-&gt;<a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">exitField</a>();</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; visible = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; _lcd-&gt;clear();</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;}</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div>
<div class="ttc" id="classForm_html_ad30836b22edde707a52d94090b716996"><div class="ttname"><a href="classForm.html#ad30836b22edde707a52d94090b716996">Form::Form</a></div><div class="ttdeci">Form(LiquidCrystal &amp;lcd)</div><div class="ttdoc">Constructs a new form and associates it with lcd. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00047">Form.cpp:47</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html_a89bd3850e87caa2ca7b2e946f923d0ee"><div class="ttname"><a href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee">Form::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event to the currently active field using Field::dispatch(). </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00099">Form.cpp:99</a></div></div>
<div class="ttc" id="classForm_html_a788a186ea4a7ebd75283a948ca45f4d1"><div class="ttname"><a href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1">Form::nextField</a></div><div class="ttdeci">void nextField()</div><div class="ttdoc">Changes to the next field in the &quot;tab order&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00118">Form.cpp:118</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classField_html_a061bd1ed4d8b079df86465df8facd3b3"><div class="ttname"><a href="classField.html#a061bd1ed4d8b079df86465df8facd3b3">Field::dispatch</a></div><div class="ttdeci">virtual int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00096">Field.cpp:96</a></div></div>
<div class="ttc" id="classForm_html_a5cb056ace428e75e321610555bfecac7"><div class="ttname"><a href="classForm.html#a5cb056ace428e75e321610555bfecac7">Form::addField</a></div><div class="ttdeci">void addField(Field *field)</div><div class="ttdoc">Adds field to this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00165">Form.cpp:165</a></div></div>
<div class="ttc" id="classForm_html_a88b9146a3f68e837c5e831203096f9e9"><div class="ttname"><a href="classForm.html#a88b9146a3f68e837c5e831203096f9e9">Form::hide</a></div><div class="ttdeci">void hide()</div><div class="ttdoc">Hides the form, or does nothing if the form is not on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00293">Form.cpp:293</a></div></div>
<div class="ttc" id="classField_html_ad6805c75ee1e62f8cd8bd550c4530c07"><div class="ttname"><a href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">Field::exitField</a></div><div class="ttdeci">virtual void exitField()</div><div class="ttdoc">Exits the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00129">Field.cpp:129</a></div></div>
<div class="ttc" id="classForm_html_a7abd717029f9b19ee7318470072cd697"><div class="ttname"><a href="classForm.html#a7abd717029f9b19ee7318470072cd697">Form::removeField</a></div><div class="ttdeci">void removeField(Field *field)</div><div class="ttdoc">Removes field from this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00187">Form.cpp:187</a></div></div>
<div class="ttc" id="classForm_html_ae6004fedfa07191ffd47d7b12370b4e5"><div class="ttname"><a href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">Form::setCurrentField</a></div><div class="ttdeci">void setCurrentField(Field *field)</div><div class="ttdoc">Sets the current field that is displayed on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00230">Form.cpp:230</a></div></div>
<div class="ttc" id="classForm_html_a9cda7cce41e81bfaca51e922d4f9b98f"><div class="ttname"><a href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f">Form::~Form</a></div><div class="ttdeci">~Form()</div><div class="ttdoc">Detaches all remaining fields and destroys this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00058">Form.cpp:58</a></div></div>
<div class="ttc" id="classForm_html_a9e8d718ab55a8034c22c606ccfa90d65"><div class="ttname"><a href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65">Form::show</a></div><div class="ttdeci">void show()</div><div class="ttdoc">Shows the form, or does nothing if the form is already on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00274">Form.cpp:274</a></div></div>
<div class="ttc" id="classForm_html_aba75b59f68b31dd77dbbac9ab5c3124b"><div class="ttname"><a href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b">Form::defaultField</a></div><div class="ttdeci">void defaultField()</div><div class="ttdoc">Changes to default field (i.e., the first field). </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00152">Form.cpp:152</a></div></div>
<div class="ttc" id="classForm_html_acb080fe4f4631e9060e6efab8eaa0a90"><div class="ttname"><a href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90">Form::prevField</a></div><div class="ttdeci">void prevField()</div><div class="ttdoc">Changes to the previous field in the &quot;tab order&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00135">Form.cpp:135</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Form.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,50 +115,66 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;LCD.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span><a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span><a class="code" href="classField.html">Field</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define FORM_CHANGED 1</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="classForm.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> {</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classForm.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classForm.html">Form</a> {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classForm.html#ad30836b22edde707a52d94090b716996" title="Constructs a new form and associates it with lcd.">Form</a>(LiquidCrystal &amp;lcd);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f" title="Detaches all remaining fields and destroys this form.">~Form</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classForm.html#ad30836b22edde707a52d94090b716996">Form</a>(LiquidCrystal &amp;lcd);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f">~Form</a>();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee" title="Dispatches event to the currently active field using Field::dispatch().">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1" title="Changes to the next field in the &quot;tab order&quot;.">nextField</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90" title="Changes to the previous field in the &quot;tab order&quot;.">prevField</a>();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b" title="Changes to default field (i.e., the first field).">defaultField</a>();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1">nextField</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90">prevField</a>();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b">defaultField</a>();</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7" title="Adds field to this form.">addField</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697" title="Removes field from this form.">removeField</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a5cb056ace428e75e321610555bfecac7">addField</a>(<a class="code" href="classField.html">Field</a> *field);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a7abd717029f9b19ee7318470072cd697">removeField</a>(<a class="code" href="classField.html">Field</a> *field);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8"> 46</a></span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *<a class="code" href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8" title="Returns the current field that is displayed on-screen.">currentField</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> current; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5" title="Sets the current field that is displayed on-screen.">setCurrentField</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *field);</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8"> 46</a></span>&#160; <a class="code" href="classField.html">Field</a> *<a class="code" href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8">currentField</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> current; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">setCurrentField</a>(<a class="code" href="classField.html">Field</a> *field);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="classForm.html#a48fb77f93e77b28b0397b59e1e9bf789"> 49</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classForm.html#a48fb77f93e77b28b0397b59e1e9bf789" title="Returns true if field is currently displayed on-screen, false otherwise.">isCurrent</a>(<a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> &amp;field)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> current == &amp;field; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classForm.html#a48fb77f93e77b28b0397b59e1e9bf789"> 49</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classForm.html#a48fb77f93e77b28b0397b59e1e9bf789">isCurrent</a>(<a class="code" href="classField.html">Field</a> &amp;field)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> current == &amp;field; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65" title="Shows the form, or does nothing if the form is already on-screen.">show</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a88b9146a3f68e837c5e831203096f9e9" title="Hides the form, or does nothing if the form is not on-screen.">hide</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="classForm.html#a3101f288e3e5aa8307c57f35861ad587"> 53</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classForm.html#a3101f288e3e5aa8307c57f35861ad587" title="Returns true if the form is shown; false if the form is hidden.">isVisible</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> visible; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65">show</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classForm.html#a88b9146a3f68e837c5e831203096f9e9">hide</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classForm.html#a3101f288e3e5aa8307c57f35861ad587"> 53</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classForm.html#a3101f288e3e5aa8307c57f35861ad587">isVisible</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> visible; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; LiquidCrystal *_lcd;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *first;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *last;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> *current;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classField.html">Field</a> *first;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classField.html">Field</a> *last;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classField.html">Field</a> *current;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">bool</span> visible;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classField.html">Field</a>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;};</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classForm_html_a3101f288e3e5aa8307c57f35861ad587"><div class="ttname"><a href="classForm.html#a3101f288e3e5aa8307c57f35861ad587">Form::isVisible</a></div><div class="ttdeci">bool isVisible() const </div><div class="ttdoc">Returns true if the form is shown; false if the form is hidden. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00053">Form.h:53</a></div></div>
<div class="ttc" id="classForm_html_ad30836b22edde707a52d94090b716996"><div class="ttname"><a href="classForm.html#ad30836b22edde707a52d94090b716996">Form::Form</a></div><div class="ttdeci">Form(LiquidCrystal &amp;lcd)</div><div class="ttdoc">Constructs a new form and associates it with lcd. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00047">Form.cpp:47</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html_a89bd3850e87caa2ca7b2e946f923d0ee"><div class="ttname"><a href="classForm.html#a89bd3850e87caa2ca7b2e946f923d0ee">Form::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event to the currently active field using Field::dispatch(). </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00099">Form.cpp:99</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classForm_html_a788a186ea4a7ebd75283a948ca45f4d1"><div class="ttname"><a href="classForm.html#a788a186ea4a7ebd75283a948ca45f4d1">Form::nextField</a></div><div class="ttdeci">void nextField()</div><div class="ttdoc">Changes to the next field in the &quot;tab order&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00118">Form.cpp:118</a></div></div>
<div class="ttc" id="classForm_html_a5cb056ace428e75e321610555bfecac7"><div class="ttname"><a href="classForm.html#a5cb056ace428e75e321610555bfecac7">Form::addField</a></div><div class="ttdeci">void addField(Field *field)</div><div class="ttdoc">Adds field to this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00165">Form.cpp:165</a></div></div>
<div class="ttc" id="classForm_html_a88b9146a3f68e837c5e831203096f9e9"><div class="ttname"><a href="classForm.html#a88b9146a3f68e837c5e831203096f9e9">Form::hide</a></div><div class="ttdeci">void hide()</div><div class="ttdoc">Hides the form, or does nothing if the form is not on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00293">Form.cpp:293</a></div></div>
<div class="ttc" id="classForm_html_a7abd717029f9b19ee7318470072cd697"><div class="ttname"><a href="classForm.html#a7abd717029f9b19ee7318470072cd697">Form::removeField</a></div><div class="ttdeci">void removeField(Field *field)</div><div class="ttdoc">Removes field from this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00187">Form.cpp:187</a></div></div>
<div class="ttc" id="classForm_html_ae6004fedfa07191ffd47d7b12370b4e5"><div class="ttname"><a href="classForm.html#ae6004fedfa07191ffd47d7b12370b4e5">Form::setCurrentField</a></div><div class="ttdeci">void setCurrentField(Field *field)</div><div class="ttdoc">Sets the current field that is displayed on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00230">Form.cpp:230</a></div></div>
<div class="ttc" id="classForm_html_a9cda7cce41e81bfaca51e922d4f9b98f"><div class="ttname"><a href="classForm.html#a9cda7cce41e81bfaca51e922d4f9b98f">Form::~Form</a></div><div class="ttdeci">~Form()</div><div class="ttdoc">Detaches all remaining fields and destroys this form. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00058">Form.cpp:58</a></div></div>
<div class="ttc" id="classForm_html_a9e8d718ab55a8034c22c606ccfa90d65"><div class="ttname"><a href="classForm.html#a9e8d718ab55a8034c22c606ccfa90d65">Form::show</a></div><div class="ttdeci">void show()</div><div class="ttdoc">Shows the form, or does nothing if the form is already on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00274">Form.cpp:274</a></div></div>
<div class="ttc" id="classForm_html_aba75b59f68b31dd77dbbac9ab5c3124b"><div class="ttname"><a href="classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b">Form::defaultField</a></div><div class="ttdeci">void defaultField()</div><div class="ttdoc">Changes to default field (i.e., the first field). </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00152">Form.cpp:152</a></div></div>
<div class="ttc" id="classForm_html_a48fb77f93e77b28b0397b59e1e9bf789"><div class="ttname"><a href="classForm.html#a48fb77f93e77b28b0397b59e1e9bf789">Form::isCurrent</a></div><div class="ttdeci">bool isCurrent(Field &amp;field) const </div><div class="ttdoc">Returns true if field is currently displayed on-screen, false otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00049">Form.h:49</a></div></div>
<div class="ttc" id="classForm_html_acb080fe4f4631e9060e6efab8eaa0a90"><div class="ttname"><a href="classForm.html#acb080fe4f4631e9060e6efab8eaa0a90">Form::prevField</a></div><div class="ttdeci">void prevField()</div><div class="ttdoc">Changes to the previous field in the &quot;tab order&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8cpp_source.html#l00135">Form.cpp:135</a></div></div>
<div class="ttc" id="classForm_html_a85a219a73294cef1f89a2182b5c25bf8"><div class="ttname"><a href="classForm.html#a85a219a73294cef1f89a2182b5c25bf8">Form::currentField</a></div><div class="ttdeci">Field * currentField() const </div><div class="ttdoc">Returns the current field that is displayed on-screen. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00046">Form.h:46</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

133
Hash_8cpp_source.html Normal file
View File

@ -0,0 +1,133 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Hash.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Hash.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;Hash.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classHash.html#af482880ad75b67a09d2dcb5e86244d80"> 35</a></span>&#160;<a class="code" href="classHash.html#af482880ad75b67a09d2dcb5e86244d80">Hash::Hash</a>()</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classHash.html#a4e4b4797dda8678aaed058bae155813e"> 47</a></span>&#160;<a class="code" href="classHash.html#a4e4b4797dda8678aaed058bae155813e">Hash::~Hash</a>()</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="ttc" id="classHash_html_af482880ad75b67a09d2dcb5e86244d80"><div class="ttname"><a href="classHash.html#af482880ad75b67a09d2dcb5e86244d80">Hash::Hash</a></div><div class="ttdeci">Hash()</div><div class="ttdoc">Constructs a new hash object. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8cpp_source.html#l00035">Hash.cpp:35</a></div></div>
<div class="ttc" id="classHash_html_a4e4b4797dda8678aaed058bae155813e"><div class="ttname"><a href="classHash.html#a4e4b4797dda8678aaed058bae155813e">Hash::~Hash</a></div><div class="ttdeci">virtual ~Hash()</div><div class="ttdoc">Destroys this hash object. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8cpp_source.html#l00047">Hash.cpp:47</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

153
Hash_8h_source.html Normal file
View File

@ -0,0 +1,153 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Hash.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Hash.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_HASH_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_HASH_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classHash.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classHash.html">Hash</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classHash.html#af482880ad75b67a09d2dcb5e86244d80">Hash</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classHash.html#a4e4b4797dda8678aaed058bae155813e">~Hash</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classHash.html#adcdd30de3e5ecaa2f798c0c5644d9ef8">hashSize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classHash.html#a4e4297812e3483410556830fe5d47bdf">blockSize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classHash.html#a7b94309acaa5f52386785fb780e5be61">reset</a>() = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classHash.html#aec9761ee427d122e7450de8df200265c">update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classHash.html#a09b3ccec22763fc86b1415695862977c">finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len) = 0;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classHash.html#a4a959469433cd9348ab7f3ac6228bb34">clear</a>() = 0;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;};</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classHash_html_a4e4297812e3483410556830fe5d47bdf"><div class="ttname"><a href="classHash.html#a4e4297812e3483410556830fe5d47bdf">Hash::blockSize</a></div><div class="ttdeci">virtual size_t blockSize() const =0</div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div></div>
<div class="ttc" id="classHash_html_a4a959469433cd9348ab7f3ac6228bb34"><div class="ttname"><a href="classHash.html#a4a959469433cd9348ab7f3ac6228bb34">Hash::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div></div>
<div class="ttc" id="classHash_html_af482880ad75b67a09d2dcb5e86244d80"><div class="ttname"><a href="classHash.html#af482880ad75b67a09d2dcb5e86244d80">Hash::Hash</a></div><div class="ttdeci">Hash()</div><div class="ttdoc">Constructs a new hash object. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8cpp_source.html#l00035">Hash.cpp:35</a></div></div>
<div class="ttc" id="classHash_html"><div class="ttname"><a href="classHash.html">Hash</a></div><div class="ttdoc">Abstract base class for cryptographic hash algorithms. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8h_source.html#l00029">Hash.h:29</a></div></div>
<div class="ttc" id="classHash_html_a7b94309acaa5f52386785fb780e5be61"><div class="ttname"><a href="classHash.html#a7b94309acaa5f52386785fb780e5be61">Hash::reset</a></div><div class="ttdeci">virtual void reset()=0</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div></div>
<div class="ttc" id="classHash_html_adcdd30de3e5ecaa2f798c0c5644d9ef8"><div class="ttname"><a href="classHash.html#adcdd30de3e5ecaa2f798c0c5644d9ef8">Hash::hashSize</a></div><div class="ttdeci">virtual size_t hashSize() const =0</div><div class="ttdoc">Size of the hash result from finalize(). </div></div>
<div class="ttc" id="classHash_html_a4e4b4797dda8678aaed058bae155813e"><div class="ttname"><a href="classHash.html#a4e4b4797dda8678aaed058bae155813e">Hash::~Hash</a></div><div class="ttdeci">virtual ~Hash()</div><div class="ttdoc">Destroys this hash object. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8cpp_source.html#l00047">Hash.cpp:47</a></div></div>
<div class="ttc" id="classHash_html_aec9761ee427d122e7450de8df200265c"><div class="ttname"><a href="classHash.html#aec9761ee427d122e7450de8df200265c">Hash::update</a></div><div class="ttdeci">virtual void update(const void *data, size_t len)=0</div><div class="ttdoc">Updates the hash with more data. </div></div>
<div class="ttc" id="classHash_html_a09b3ccec22763fc86b1415695862977c"><div class="ttname"><a href="classHash.html#a09b3ccec22763fc86b1415695862977c">Hash::finalize</a></div><div class="ttdeci">virtual void finalize(void *hash, size_t len)=0</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: I2CMaster.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,9 +115,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: I2CMaster.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,26 +115,34 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classI2CMaster.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classI2CMaster.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classI2CMaster.html">I2CMaster</a> {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classI2CMaster.html#a3cd0cea8169ac4e6dd6f39fd6cfb1926" title="Returns the maximum number of bytes that can be read or written in a single request by this bus maste...">maxTransferSize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classI2CMaster.html#a3cd0cea8169ac4e6dd6f39fd6cfb1926">maxTransferSize</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960" title="Writes a single byte value on the I2C bus.">write</a>(uint8_t value) = 0;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41" title="Ends the current write operation.">endWrite</a>() = 0;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">startWrite</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">write</a>(uint8_t value) = 0;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">endWrite</a>() = 0;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classI2CMaster.html#a6458fa99cfd9e6270ae6dff993955833" title="Returns the number of bytes that are still available for reading.">available</a>() = 0;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> uint8_t <a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd" title="Reads a single byte from the I2C bus.">read</a>() = 0;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">startRead</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classI2CMaster.html#a6458fa99cfd9e6270ae6dff993955833">available</a>() = 0;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> uint8_t <a class="code" href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">read</a>() = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;};</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classI2CMaster_html_a0bf6b84cb1e2b3a37a4a0260d0b6f960"><div class="ttname"><a href="classI2CMaster.html#a0bf6b84cb1e2b3a37a4a0260d0b6f960">I2CMaster::write</a></div><div class="ttdeci">virtual void write(uint8_t value)=0</div><div class="ttdoc">Writes a single byte value on the I2C bus. </div></div>
<div class="ttc" id="classI2CMaster_html_a4e5f1a1a4c2242699be5a35fc4872fde"><div class="ttname"><a href="classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde">I2CMaster::startRead</a></div><div class="ttdeci">virtual bool startRead(unsigned int address, unsigned int count)=0</div><div class="ttdoc">Starts a read operation for count bytes by sending the start condition and the I2C control byte...</div></div>
<div class="ttc" id="classI2CMaster_html_a3cd0cea8169ac4e6dd6f39fd6cfb1926"><div class="ttname"><a href="classI2CMaster.html#a3cd0cea8169ac4e6dd6f39fd6cfb1926">I2CMaster::maxTransferSize</a></div><div class="ttdeci">virtual unsigned int maxTransferSize() const =0</div><div class="ttdoc">Returns the maximum number of bytes that can be read or written in a single request by this bus maste...</div></div>
<div class="ttc" id="classI2CMaster_html_a6458fa99cfd9e6270ae6dff993955833"><div class="ttname"><a href="classI2CMaster.html#a6458fa99cfd9e6270ae6dff993955833">I2CMaster::available</a></div><div class="ttdeci">virtual unsigned int available()=0</div><div class="ttdoc">Returns the number of bytes that are still available for reading. </div></div>
<div class="ttc" id="classI2CMaster_html_a01960fc821cb25e4c88c26d2c6107e35"><div class="ttname"><a href="classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35">I2CMaster::startWrite</a></div><div class="ttdeci">virtual void startWrite(unsigned int address)</div><div class="ttdoc">Starts a write operation by sending a start condition and the I2C control byte. </div></div>
<div class="ttc" id="classI2CMaster_html_ab29f63551ddeb032a91505d1c0b8ac41"><div class="ttname"><a href="classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41">I2CMaster::endWrite</a></div><div class="ttdeci">virtual bool endWrite()=0</div><div class="ttdoc">Ends the current write operation. </div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classI2CMaster_html_a49eeebb57f6bc06de39973fe836369cd"><div class="ttname"><a href="classI2CMaster.html#a49eeebb57f6bc06de39973fe836369cd">I2CMaster::read</a></div><div class="ttdeci">virtual uint8_t read()=0</div><div class="ttdoc">Reads a single byte from the I2C bus. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: IRreceiver.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -116,14 +117,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &lt;WProgram.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="keyword">static</span> <a class="code" href="classIRreceiver.html" title="Manages the reception of RC-5 commands from an infrared remote control.">IRreceiver</a> *receiver = 0;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="keyword">static</span> <a class="code" href="classIRreceiver.html">IRreceiver</a> *receiver = 0;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keywordtype">void</span> _IR_receive_interrupt(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; receiver-&gt;handleInterrupt();</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div>
<div class="line"><a name="l00176"></a><span class="lineno"><a class="code" href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3"> 176</a></span>&#160;<a class="code" href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3" title="Constructs a new infrared remote control receiver that is attached to interruptNumber.">IRreceiver::IRreceiver</a>(<span class="keywordtype">int</span> interruptNumber)</div>
<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3"> 176</a></span>&#160;<a class="code" href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3">IRreceiver::IRreceiver</a>(<span class="keywordtype">int</span> interruptNumber)</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; : _system(0)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; , _systemFilter(-1)</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; , started(false)</div>
@ -146,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; attachInterrupt(interruptNumber, _IR_receive_interrupt, CHANGE);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
<div class="line"><a name="l00220"></a><span class="lineno"><a class="code" href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda"> 220</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda" title="Returns the next command from the remote control.">IRreceiver::command</a>()</div>
<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda"> 220</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda">IRreceiver::command</a>()</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;{</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">unsigned</span> buf;</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
@ -176,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// Is this a new command or an auto-repeat of the previous command?</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// Bit 11 will toggle whenever a new button press is started.</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (lastBuffer == buf)</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; cmd += <a class="code" href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9" title="Flag that is added to the output of command() when the command is an auto-repeated button press rathe...">AUTO_REPEAT</a>;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; cmd += <a class="code" href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9">AUTO_REPEAT</a>;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; lastBuffer = buf;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; _system = (buf &gt;&gt; 6) &amp; 0x1F;</div>
@ -253,12 +254,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div>
<div class="ttc" id="classIRreceiver_html_a06eccb8b8311eac395e4b20c4e0163e3"><div class="ttname"><a href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3">IRreceiver::IRreceiver</a></div><div class="ttdeci">IRreceiver(int interruptNumber=0)</div><div class="ttdoc">Constructs a new infrared remote control receiver that is attached to interruptNumber. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8cpp_source.html#l00176">IRreceiver.cpp:176</a></div></div>
<div class="ttc" id="classIRreceiver_html"><div class="ttname"><a href="classIRreceiver.html">IRreceiver</a></div><div class="ttdoc">Manages the reception of RC-5 commands from an infrared remote control. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00029">IRreceiver.h:29</a></div></div>
<div class="ttc" id="classIRreceiver_html_a4b021592a2b089dc2f1e138a38506fda"><div class="ttname"><a href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda">IRreceiver::command</a></div><div class="ttdeci">int command()</div><div class="ttdoc">Returns the next command from the remote control. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8cpp_source.html#l00220">IRreceiver.cpp:220</a></div></div>
<div class="ttc" id="classIRreceiver_html_a9c37631cc1291dc47cabcfef2f631cf9"><div class="ttname"><a href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9">IRreceiver::AUTO_REPEAT</a></div><div class="ttdeci">static const int AUTO_REPEAT</div><div class="ttdoc">Flag that is added to the output of command() when the command is an auto-repeated button press rathe...</div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00034">IRreceiver.h:34</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: IRreceiver.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -115,18 +116,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;RC5.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="classIRreceiver.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classIRreceiver.html" title="Manages the reception of RC-5 commands from an infrared remote control.">IRreceiver</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classIRreceiver.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classIRreceiver.html">IRreceiver</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3" title="Constructs a new infrared remote control receiver that is attached to interruptNumber.">IRreceiver</a>(<span class="keywordtype">int</span> interruptNumber = 0);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3">IRreceiver</a>(<span class="keywordtype">int</span> interruptNumber = 0);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9"> 34</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9" title="Flag that is added to the output of command() when the command is an auto-repeated button press rathe...">AUTO_REPEAT</a> = 128;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9"> 34</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9">AUTO_REPEAT</a> = 128;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda" title="Returns the next command from the remote control.">command</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f"> 37</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f" title="Returns the system number of the previous command(), indicating whether the command was for a TV...">system</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _system; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda">command</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f"> 37</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f">system</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _system; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classIRreceiver.html#a2c6adc404f71f263ba535ec1ed9cff1a"> 39</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a2c6adc404f71f263ba535ec1ed9cff1a" title="Returns the system to filter commands against, or -1 if no filter is set.">systemFilter</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _systemFilter; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classIRreceiver.html#a920828f1411fa12d1856cd933066bd08"> 40</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIRreceiver.html#a920828f1411fa12d1856cd933066bd08" title="Sets the system to filter commands against, or -1 to turn off the system filter.">setSystemFilter</a>(<span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f" title="Returns the system number of the previous command(), indicating whether the command was for a TV...">system</a>) { _systemFilter = <a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f" title="Returns the system number of the previous command(), indicating whether the command was for a TV...">system</a>; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classIRreceiver.html#a2c6adc404f71f263ba535ec1ed9cff1a"> 39</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a2c6adc404f71f263ba535ec1ed9cff1a">systemFilter</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _systemFilter; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classIRreceiver.html#a920828f1411fa12d1856cd933066bd08"> 40</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIRreceiver.html#a920828f1411fa12d1856cd933066bd08">setSystemFilter</a>(<span class="keywordtype">int</span> <a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f">system</a>) { _systemFilter = <a class="code" href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f">system</a>; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">int</span> _system;</div>
@ -146,12 +147,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;};</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classIRreceiver_html_a19e9334ae97812fa85078507d105478f"><div class="ttname"><a href="classIRreceiver.html#a19e9334ae97812fa85078507d105478f">IRreceiver::system</a></div><div class="ttdeci">int system() const </div><div class="ttdoc">Returns the system number of the previous command(), indicating whether the command was for a TV...</div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00037">IRreceiver.h:37</a></div></div>
<div class="ttc" id="classIRreceiver_html_a06eccb8b8311eac395e4b20c4e0163e3"><div class="ttname"><a href="classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3">IRreceiver::IRreceiver</a></div><div class="ttdeci">IRreceiver(int interruptNumber=0)</div><div class="ttdoc">Constructs a new infrared remote control receiver that is attached to interruptNumber. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8cpp_source.html#l00176">IRreceiver.cpp:176</a></div></div>
<div class="ttc" id="classIRreceiver_html"><div class="ttname"><a href="classIRreceiver.html">IRreceiver</a></div><div class="ttdoc">Manages the reception of RC-5 commands from an infrared remote control. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00029">IRreceiver.h:29</a></div></div>
<div class="ttc" id="classIRreceiver_html_a4b021592a2b089dc2f1e138a38506fda"><div class="ttname"><a href="classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda">IRreceiver::command</a></div><div class="ttdeci">int command()</div><div class="ttdoc">Returns the next command from the remote control. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8cpp_source.html#l00220">IRreceiver.cpp:220</a></div></div>
<div class="ttc" id="classIRreceiver_html_a920828f1411fa12d1856cd933066bd08"><div class="ttname"><a href="classIRreceiver.html#a920828f1411fa12d1856cd933066bd08">IRreceiver::setSystemFilter</a></div><div class="ttdeci">void setSystemFilter(int system)</div><div class="ttdoc">Sets the system to filter commands against, or -1 to turn off the system filter. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00040">IRreceiver.h:40</a></div></div>
<div class="ttc" id="classIRreceiver_html_a9c37631cc1291dc47cabcfef2f631cf9"><div class="ttname"><a href="classIRreceiver.html#a9c37631cc1291dc47cabcfef2f631cf9">IRreceiver::AUTO_REPEAT</a></div><div class="ttdeci">static const int AUTO_REPEAT</div><div class="ttdoc">Flag that is added to the output of command() when the command is an auto-repeated button press rathe...</div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00034">IRreceiver.h:34</a></div></div>
<div class="ttc" id="classIRreceiver_html_a2c6adc404f71f263ba535ec1ed9cff1a"><div class="ttname"><a href="classIRreceiver.html#a2c6adc404f71f263ba535ec1ed9cff1a">IRreceiver::systemFilter</a></div><div class="ttdeci">int systemFilter() const </div><div class="ttdoc">Returns the system to filter commands against, or -1 if no filter is set. </div><div class="ttdef"><b>Definition:</b> <a href="IRreceiver_8h_source.html#l00039">IRreceiver.h:39</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: IntField.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -111,8 +112,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;IntField.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6"> 71</a></span>&#160;<a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6" title="Constructs a new integer field with a specific label.">IntField::IntField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(label)</div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6"> 71</a></span>&#160;<a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField::IntField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; : <a class="code" href="classField.html">Field</a>(label)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; , _minValue(0)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; , _maxValue(100)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; , _stepValue(1)</div>
@ -121,8 +122,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="classIntField.html#a10c9c958bcde276698f1f1f9bff949dd"> 88</a></span>&#160;<a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6" title="Constructs a new integer field with a specific label.">IntField::IntField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> minValue, <span class="keywordtype">int</span> maxValue, <span class="keywordtype">int</span> stepValue, <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(form, label)</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classIntField.html#a10c9c958bcde276698f1f1f9bff949dd"> 88</a></span>&#160;<a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField::IntField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> minValue, <span class="keywordtype">int</span> maxValue, <span class="keywordtype">int</span> stepValue, <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; : <a class="code" href="classField.html">Field</a>(form, label)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; , _minValue(minValue)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; , _maxValue(maxValue)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; , _stepValue(stepValue)</div>
@ -131,8 +132,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;}</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="classIntField.html#a2b99fa19be6a0ed01ddc4939352b372e"> 103</a></span>&#160;<a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6" title="Constructs a new integer field with a specific label.">IntField::IntField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> minValue, <span class="keywordtype">int</span> maxValue, <span class="keywordtype">int</span> stepValue, <span class="keywordtype">int</span> value, <span class="keyword">const</span> String &amp;suffix)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(form, label)</div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classIntField.html#a2b99fa19be6a0ed01ddc4939352b372e"> 103</a></span>&#160;<a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField::IntField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> minValue, <span class="keywordtype">int</span> maxValue, <span class="keywordtype">int</span> stepValue, <span class="keywordtype">int</span> value, <span class="keyword">const</span> String &amp;suffix)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; : <a class="code" href="classField.html">Field</a>(form, label)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; , _minValue(minValue)</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; , _maxValue(maxValue)</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; , _stepValue(stepValue)</div>
@ -142,41 +143,41 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
<div class="line"><a name="l00114"></a><span class="lineno"><a class="code" href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f"> 114</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f" title="Dispatches event via this field.">IntField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f"> 114</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f">IntField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (event == LCD_BUTTON_UP) {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7" title="Sets the current value of this field.">setValue</a>(_value + _stepValue);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7">setValue</a>(_value + _stepValue);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event == LCD_BUTTON_DOWN) {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7" title="Sets the current value of this field.">setValue</a>(_value - _stepValue);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7">setValue</a>(_value - _stepValue);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a"> 126</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a" title="Enters the field due to form navigation.">IntField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a"> 126</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a">IntField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;{</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a" title="Enters the field due to form navigation.">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; printValue();</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div>
<div class="line"><a name="l00198"></a><span class="lineno"><a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7"> 198</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7" title="Sets the current value of this field.">IntField::setValue</a>(<span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7"> 198</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7">IntField::setValue</a>(<span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;{</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (value &lt; _minValue)</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; value = _minValue;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value &gt; _maxValue)</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; value = _maxValue;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (value != _value) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; _value = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52" title="Returns the current value of this field.">value</a>;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; _value = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">value</a>;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; printValue();</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
<div class="line"><a name="l00231"></a><span class="lineno"><a class="code" href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd"> 231</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd" title="Sets the suffix string to be displayed after the field&#39;s value.">IntField::setSuffix</a>(<span class="keyword">const</span> String &amp;suffix)</div>
<div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd"> 231</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd">IntField::setSuffix</a>(<span class="keyword">const</span> String &amp;suffix)</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; _suffix = <a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05" title="Returns the suffix string to be displayed after the field&#39;s value.">suffix</a>;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; _suffix = <a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05">suffix</a>;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; printValue();</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div>
@ -185,19 +186,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; String str(_value);</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">if</span> (_suffix.length())</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; str += _suffix;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(str);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(str);</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = str.length();</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">while</span> (len++ &lt; _printLen)</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; _printLen = str.length();</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;}</div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classIntField_html_aed421e2c52946f2c7643534b4f6f13f7"><div class="ttname"><a href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7">IntField::setValue</a></div><div class="ttdeci">void setValue(int value)</div><div class="ttdoc">Sets the current value of this field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00198">IntField.cpp:198</a></div></div>
<div class="ttc" id="classIntField_html_a01a17d5a89c76c42c4f0516984ce653f"><div class="ttname"><a href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f">IntField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00114">IntField.cpp:114</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classIntField_html_a1a1de6a1836dfdb820c92b7f188a1b05"><div class="ttname"><a href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05">IntField::suffix</a></div><div class="ttdeci">const String &amp; suffix() const </div><div class="ttdoc">Returns the suffix string to be displayed after the field&#39;s value. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00050">IntField.h:50</a></div></div>
<div class="ttc" id="classIntField_html_a2fb650827ce8cb4662253bb6c32acb52"><div class="ttname"><a href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">IntField::value</a></div><div class="ttdeci">int value() const </div><div class="ttdoc">Returns the current value of this field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00047">IntField.h:47</a></div></div>
<div class="ttc" id="classIntField_html_a9df274c4100ed37d2d78738f09fc53b6"><div class="ttname"><a href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField::IntField</a></div><div class="ttdeci">IntField(const String &amp;label)</div><div class="ttdoc">Constructs a new integer field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00071">IntField.cpp:71</a></div></div>
<div class="ttc" id="classIntField_html_a9324bba994389f3a4563d9c18bd2f1cd"><div class="ttname"><a href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd">IntField::setSuffix</a></div><div class="ttdeci">void setSuffix(const String &amp;suffix)</div><div class="ttdoc">Sets the suffix string to be displayed after the field&#39;s value. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00231">IntField.cpp:231</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
<div class="ttc" id="classIntField_html_a51d9127b660e8dd7f87718acd230202a"><div class="ttname"><a href="classIntField.html#a51d9127b660e8dd7f87718acd230202a">IntField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00126">IntField.cpp:126</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: IntField.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,30 +115,30 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Field.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classIntField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classIntField.html" title="Field that manages the input of an integer value.">IntField</a> : <span class="keyword">public</span> <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classIntField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classIntField.html">IntField</a> : <span class="keyword">public</span> <a class="code" href="classField.html">Field</a> {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6" title="Constructs a new integer field with a specific label.">IntField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6" title="Constructs a new integer field with a specific label.">IntField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb" title="Returns the minimum value for the input field.">minValue</a>, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad" title="Returns the maximum value for the input field.">maxValue</a>, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd" title="Returns the step value to use when increasing or decreasing the value() due to Up and Down button pre...">stepValue</a>, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52" title="Returns the current value of this field.">value</a>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6" title="Constructs a new integer field with a specific label.">IntField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> minValue, <span class="keywordtype">int</span> maxValue, <span class="keywordtype">int</span> stepValue, <span class="keywordtype">int</span> value, <span class="keyword">const</span> String &amp;<a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05" title="Returns the suffix string to be displayed after the field&#39;s value.">suffix</a>);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField</a>(<a class="code" href="classForm.html">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb">minValue</a>, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad">maxValue</a>, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd">stepValue</a>, <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">value</a>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> minValue, <span class="keywordtype">int</span> maxValue, <span class="keywordtype">int</span> stepValue, <span class="keywordtype">int</span> value, <span class="keyword">const</span> String &amp;<a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05">suffix</a>);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f" title="Dispatches event via this field.">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a" title="Enters the field due to form navigation.">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a51d9127b660e8dd7f87718acd230202a">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb"> 38</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb" title="Returns the minimum value for the input field.">minValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _minValue; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classIntField.html#afffe7be6721a043cec7a5a85c19e0ada"> 39</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#afffe7be6721a043cec7a5a85c19e0ada" title="Sets the minimum value for the input field.">setMinValue</a>(<span class="keywordtype">int</span> value) { _minValue = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52" title="Returns the current value of this field.">value</a>; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb"> 38</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb">minValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _minValue; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classIntField.html#afffe7be6721a043cec7a5a85c19e0ada"> 39</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#afffe7be6721a043cec7a5a85c19e0ada">setMinValue</a>(<span class="keywordtype">int</span> value) { _minValue = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">value</a>; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad"> 41</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad" title="Returns the maximum value for the input field.">maxValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _maxValue; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="classIntField.html#a36cbd7c24480cc3fcf0c7634d5e22bf1"> 42</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a36cbd7c24480cc3fcf0c7634d5e22bf1" title="Sets the maximum value for the input field.">setMaxValue</a>(<span class="keywordtype">int</span> value) { _maxValue = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52" title="Returns the current value of this field.">value</a>; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad"> 41</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad">maxValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _maxValue; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classIntField.html#a36cbd7c24480cc3fcf0c7634d5e22bf1"> 42</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a36cbd7c24480cc3fcf0c7634d5e22bf1">setMaxValue</a>(<span class="keywordtype">int</span> value) { _maxValue = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">value</a>; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd"> 44</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd" title="Returns the step value to use when increasing or decreasing the value() due to Up and Down button pre...">stepValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _stepValue; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="classIntField.html#a8fb6e207bd906062bb788e19dbe58bcb"> 45</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a8fb6e207bd906062bb788e19dbe58bcb" title="Sets the step value value to use when increasing or decreasing the value() due to Up and Down button ...">setStepValue</a>(<span class="keywordtype">int</span> value) { _stepValue = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52" title="Returns the current value of this field.">value</a>; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd"> 44</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd">stepValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _stepValue; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classIntField.html#a8fb6e207bd906062bb788e19dbe58bcb"> 45</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a8fb6e207bd906062bb788e19dbe58bcb">setStepValue</a>(<span class="keywordtype">int</span> value) { _stepValue = <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">value</a>; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52"> 47</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52" title="Returns the current value of this field.">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7" title="Sets the current value of this field.">setValue</a>(<span class="keywordtype">int</span> value);</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52"> 47</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7">setValue</a>(<span class="keywordtype">int</span> value);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05"> 50</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05" title="Returns the suffix string to be displayed after the field&#39;s value.">suffix</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _suffix; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd" title="Sets the suffix string to be displayed after the field&#39;s value.">setSuffix</a>(<span class="keyword">const</span> String &amp;suffix);</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05"> 50</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05">suffix</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _suffix; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd">setSuffix</a>(<span class="keyword">const</span> String &amp;suffix);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">int</span> _minValue;</div>
@ -151,12 +152,30 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;};</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classIntField_html"><div class="ttname"><a href="classIntField.html">IntField</a></div><div class="ttdoc">Field that manages the input of an integer value. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00028">IntField.h:28</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_a27427319be1cc92db3128637d8884ee5"><div class="ttname"><a href="classField.html#a27427319be1cc92db3128637d8884ee5">Field::form</a></div><div class="ttdeci">Form * form() const </div><div class="ttdoc">Returns the Form that owns this field; null if not associated with a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00034">Field.h:34</a></div></div>
<div class="ttc" id="classIntField_html_aed421e2c52946f2c7643534b4f6f13f7"><div class="ttname"><a href="classIntField.html#aed421e2c52946f2c7643534b4f6f13f7">IntField::setValue</a></div><div class="ttdeci">void setValue(int value)</div><div class="ttdoc">Sets the current value of this field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00198">IntField.cpp:198</a></div></div>
<div class="ttc" id="classIntField_html_af3dab3f2b46d29136d7a93ce46b0b8fb"><div class="ttname"><a href="classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb">IntField::minValue</a></div><div class="ttdeci">int minValue() const </div><div class="ttdoc">Returns the minimum value for the input field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00038">IntField.h:38</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classIntField_html_a01a17d5a89c76c42c4f0516984ce653f"><div class="ttname"><a href="classIntField.html#a01a17d5a89c76c42c4f0516984ce653f">IntField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00114">IntField.cpp:114</a></div></div>
<div class="ttc" id="classIntField_html_afffe7be6721a043cec7a5a85c19e0ada"><div class="ttname"><a href="classIntField.html#afffe7be6721a043cec7a5a85c19e0ada">IntField::setMinValue</a></div><div class="ttdeci">void setMinValue(int value)</div><div class="ttdoc">Sets the minimum value for the input field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00039">IntField.h:39</a></div></div>
<div class="ttc" id="classIntField_html_a1a1de6a1836dfdb820c92b7f188a1b05"><div class="ttname"><a href="classIntField.html#a1a1de6a1836dfdb820c92b7f188a1b05">IntField::suffix</a></div><div class="ttdeci">const String &amp; suffix() const </div><div class="ttdoc">Returns the suffix string to be displayed after the field&#39;s value. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00050">IntField.h:50</a></div></div>
<div class="ttc" id="classIntField_html_a49025ee3473fe066a6a6c546af98bfbd"><div class="ttname"><a href="classIntField.html#a49025ee3473fe066a6a6c546af98bfbd">IntField::stepValue</a></div><div class="ttdeci">int stepValue() const </div><div class="ttdoc">Returns the step value to use when increasing or decreasing the value() due to Up and Down button pre...</div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00044">IntField.h:44</a></div></div>
<div class="ttc" id="classIntField_html_a2fb650827ce8cb4662253bb6c32acb52"><div class="ttname"><a href="classIntField.html#a2fb650827ce8cb4662253bb6c32acb52">IntField::value</a></div><div class="ttdeci">int value() const </div><div class="ttdoc">Returns the current value of this field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00047">IntField.h:47</a></div></div>
<div class="ttc" id="classIntField_html_a36cbd7c24480cc3fcf0c7634d5e22bf1"><div class="ttname"><a href="classIntField.html#a36cbd7c24480cc3fcf0c7634d5e22bf1">IntField::setMaxValue</a></div><div class="ttdeci">void setMaxValue(int value)</div><div class="ttdoc">Sets the maximum value for the input field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00042">IntField.h:42</a></div></div>
<div class="ttc" id="classIntField_html_a9df274c4100ed37d2d78738f09fc53b6"><div class="ttname"><a href="classIntField.html#a9df274c4100ed37d2d78738f09fc53b6">IntField::IntField</a></div><div class="ttdeci">IntField(const String &amp;label)</div><div class="ttdoc">Constructs a new integer field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00071">IntField.cpp:71</a></div></div>
<div class="ttc" id="classIntField_html_aaa0adcb0d16e822e5f176be5cb9ca8ad"><div class="ttname"><a href="classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad">IntField::maxValue</a></div><div class="ttdeci">int maxValue() const </div><div class="ttdoc">Returns the maximum value for the input field. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00041">IntField.h:41</a></div></div>
<div class="ttc" id="classIntField_html_a8fb6e207bd906062bb788e19dbe58bcb"><div class="ttname"><a href="classIntField.html#a8fb6e207bd906062bb788e19dbe58bcb">IntField::setStepValue</a></div><div class="ttdeci">void setStepValue(int value)</div><div class="ttdoc">Sets the step value value to use when increasing or decreasing the value() due to Up and Down button ...</div><div class="ttdef"><b>Definition:</b> <a href="IntField_8h_source.html#l00045">IntField.h:45</a></div></div>
<div class="ttc" id="classIntField_html_a9324bba994389f3a4563d9c18bd2f1cd"><div class="ttname"><a href="classIntField.html#a9324bba994389f3a4563d9c18bd2f1cd">IntField::setSuffix</a></div><div class="ttdeci">void setSuffix(const String &amp;suffix)</div><div class="ttdoc">Sets the suffix string to be displayed after the field&#39;s value. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00231">IntField.cpp:231</a></div></div>
<div class="ttc" id="classIntField_html_a51d9127b660e8dd7f87718acd230202a"><div class="ttname"><a href="classIntField.html#a51d9127b660e8dd7f87718acd230202a">IntField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="IntField_8cpp_source.html#l00126">IntField.cpp:126</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: LCD.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -145,10 +146,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; timeout = 0;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; lastRestore = millis();</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; screenSaved = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; mode = <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f" title="Turn off both the display and the backlight when the screen saver is activated.">DisplayOff</a>;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; mode = <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f">DisplayOff</a>;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="code" href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8"> 182</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8" title="Sets the back light pin for the LCD shield.">LCD::setBacklightPin</a>(uint8_t pin)</div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8"> 182</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8">LCD::setBacklightPin</a>(uint8_t pin)</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (_backlightPin != pin) {</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (backlightInit) {</div>
@ -163,9 +164,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;}</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div>
<div class="line"><a name="l00206"></a><span class="lineno"><a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89"> 206</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">LCD::display</a>()</div>
<div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89"> 206</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">LCD::display</a>()</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;{</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">LiquidCrystal::display</a>();</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; LiquidCrystal::display();</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; pinMode(_backlightPin, OUTPUT);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; digitalWrite(_backlightPin, HIGH);</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; screenSaved = <span class="keyword">false</span>;</div>
@ -173,40 +174,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; lastRestore = millis();</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;}</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div>
<div class="line"><a name="l00223"></a><span class="lineno"><a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108"> 223</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108" title="Turns off the display of text on the LCD and the back light.">LCD::noDisplay</a>()</div>
<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classLCD.html#af3974da6d988ba2d21c25135ada12108"> 223</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108">LCD::noDisplay</a>()</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;{</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f" title="Turn off both the display and the backlight when the screen saver is activated.">DisplayOff</a>)</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108" title="Turns off the display of text on the LCD and the back light.">LiquidCrystal::noDisplay</a>();</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f">DisplayOff</a>)</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; LiquidCrystal::noDisplay();</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; pinMode(_backlightPin, OUTPUT);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; digitalWrite(_backlightPin, LOW);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; screenSaved = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; backlightInit = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;}</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div>
<div class="line"><a name="l00268"></a><span class="lineno"><a class="code" href="classLCD.html#a56d1f68532c779c65fbbd071fb444801"> 268</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a56d1f68532c779c65fbbd071fb444801" title="Sets the current screen saver mode.">LCD::setScreenSaverMode</a>(<a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28" title="Screen saver mode that controls the display and back light.">ScreenSaverMode</a> mode)</div>
<div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classLCD.html#a56d1f68532c779c65fbbd071fb444801"> 268</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a56d1f68532c779c65fbbd071fb444801">LCD::setScreenSaverMode</a>(<a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">ScreenSaverMode</a> mode)</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (this-&gt;mode != mode) {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; this-&gt;mode = mode;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span> (screenSaved)</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108" title="Turns off the display of text on the LCD and the back light.">noDisplay</a>();</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108">noDisplay</a>();</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;}</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="code" href="classLCD.html#af9a2326d034fa159d384ec16223c924f"> 294</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#af9a2326d034fa159d384ec16223c924f" title="Enables the screen saver and causes it to activate after timeoutSecs of inactivity on the buttons...">LCD::enableScreenSaver</a>(<span class="keywordtype">int</span> timeoutSecs)</div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classLCD.html#af9a2326d034fa159d384ec16223c924f"> 294</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#af9a2326d034fa159d384ec16223c924f">LCD::enableScreenSaver</a>(<span class="keywordtype">int</span> timeoutSecs)</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;{</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (timeoutSecs &lt; 0)</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; timeout = 0;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; timeout = ((<span class="keywordtype">unsigned</span> long)timeoutSecs) * 1000;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;}</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div>
<div class="line"><a name="l00308"></a><span class="lineno"><a class="code" href="classLCD.html#a85c3a4694b105731404df36e35e5b26e"> 308</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a85c3a4694b105731404df36e35e5b26e" title="Disables the screen saver.">LCD::disableScreenSaver</a>()</div>
<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classLCD.html#a85c3a4694b105731404df36e35e5b26e"> 308</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classLCD.html#a85c3a4694b105731404df36e35e5b26e">LCD::disableScreenSaver</a>()</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;{</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; timeout = 0;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment">// Button mapping table generated by genlookup.c</span></div>
@ -216,11 +217,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;};</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="preprocessor">#define mapButton(value) (pgm_read_byte(&amp;(buttonMappings[(value) &gt;&gt; 5])))</span></div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00353"></a><span class="lineno"><a class="code" href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292"> 353</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292" title="Gets the next button press, release, or idle event.">LCD::getButton</a>()</div>
<div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292"> 353</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292">LCD::getButton</a>()</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;{</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="comment">// Initialize the backlight for the first time if necessary.</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (!backlightInit)</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// Read the currently pressed button.</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">int</span> button = mapButton(analogRead(LCD_BUTTON_PIN));</div>
@ -238,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; prevButton = button;</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">if</span> (screenSaved) {</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// Button pressed when screen saver active.</span></div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35" title="Same as BacklightOff but the screen saver is only deactivated when Select is pressed; other buttons h...">BacklightOnSelect</a>) {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35">BacklightOnSelect</a>) {</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// Turn on the back light only if Select was pressed.</span></div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span> (button == LCD_BUTTON_SELECT) {</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; pinMode(_backlightPin, OUTPUT);</div>
@ -246,14 +247,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; screenSaved = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; backlightInit = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f" title="Turn off both the display and the backlight when the screen saver is activated.">DisplayOff</a>) {</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f">DisplayOff</a>) {</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; eatRelease = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">return</span> LCD_BUTTON_NONE;</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35" title="Same as BacklightOff but the screen saver is only deactivated when Select is pressed; other buttons h...">BacklightOnSelect</a> &amp;&amp; button != LCD_BUTTON_SELECT) {</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mode == <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35">BacklightOnSelect</a> &amp;&amp; button != LCD_BUTTON_SELECT) {</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; eatRelease = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">return</span> button;</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
@ -272,16 +273,26 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (!screenSaved &amp;&amp; prevButton == LCD_BUTTON_NONE &amp;&amp;</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; timeout != 0 &amp;&amp; (currentTime - lastRestore) &gt;= timeout)</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108" title="Turns off the display of text on the LCD and the back light.">noDisplay</a>(); <span class="comment">// Activate screen saver.</span></div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108">noDisplay</a>(); <span class="comment">// Activate screen saver.</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">return</span> LCD_BUTTON_NONE;</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;}</div>
<div class="ttc" id="classLCD_html_a56d1f68532c779c65fbbd071fb444801"><div class="ttname"><a href="classLCD.html#a56d1f68532c779c65fbbd071fb444801">LCD::setScreenSaverMode</a></div><div class="ttdeci">void setScreenSaverMode(ScreenSaverMode mode)</div><div class="ttdoc">Sets the current screen saver mode. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00268">LCD.cpp:268</a></div></div>
<div class="ttc" id="classLCD_html_ac1e80e2603bd1cf0276c36092c416292"><div class="ttname"><a href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292">LCD::getButton</a></div><div class="ttdeci">int getButton()</div><div class="ttdoc">Gets the next button press, release, or idle event. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00353">LCD.cpp:353</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35">LCD::BacklightOnSelect</a></div><div class="ttdoc">Same as BacklightOff but the screen saver is only deactivated when Select is pressed; other buttons h...</div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00066">LCD.h:66</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">LCD::ScreenSaverMode</a></div><div class="ttdeci">ScreenSaverMode</div><div class="ttdoc">Screen saver mode that controls the display and back light. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00062">LCD.h:62</a></div></div>
<div class="ttc" id="classLCD_html_a0b9b3b954290e7a3d94cdc829582b0a8"><div class="ttname"><a href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8">LCD::setBacklightPin</a></div><div class="ttdeci">void setBacklightPin(uint8_t pin)</div><div class="ttdoc">Sets the back light pin for the LCD shield. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00182">LCD.cpp:182</a></div></div>
<div class="ttc" id="classLCD_html_af9a2326d034fa159d384ec16223c924f"><div class="ttname"><a href="classLCD.html#af9a2326d034fa159d384ec16223c924f">LCD::enableScreenSaver</a></div><div class="ttdeci">void enableScreenSaver(int timeoutSecs=10)</div><div class="ttdoc">Enables the screen saver and causes it to activate after timeoutSecs of inactivity on the buttons...</div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00294">LCD.cpp:294</a></div></div>
<div class="ttc" id="classLCD_html_af3974da6d988ba2d21c25135ada12108"><div class="ttname"><a href="classLCD.html#af3974da6d988ba2d21c25135ada12108">LCD::noDisplay</a></div><div class="ttdeci">void noDisplay()</div><div class="ttdoc">Turns off the display of text on the LCD and the back light. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00223">LCD.cpp:223</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f">LCD::DisplayOff</a></div><div class="ttdoc">Turn off both the display and the backlight when the screen saver is activated. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00064">LCD.h:64</a></div></div>
<div class="ttc" id="classLCD_html_a85c3a4694b105731404df36e35e5b26e"><div class="ttname"><a href="classLCD.html#a85c3a4694b105731404df36e35e5b26e">LCD::disableScreenSaver</a></div><div class="ttdeci">void disableScreenSaver()</div><div class="ttdoc">Disables the screen saver. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00308">LCD.cpp:308</a></div></div>
<div class="ttc" id="classLCD_html_a5b07cf05e8e5e7c53654f5ca0cf58b89"><div class="ttname"><a href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">LCD::display</a></div><div class="ttdeci">void display()</div><div class="ttdoc">Turns on the display of text on the LCD and the back light. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00206">LCD.cpp:206</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: LCD.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -134,55 +135,75 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define LCD_BUTTON_DOWN_RELEASED -4</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define LCD_BUTTON_SELECT_RELEASED -5</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="classLCD.html"> 48</a></span>&#160;<span class="keyword">class </span><a class="code" href="classLCD.html" title="Enhanced library for Freetronics 16x2 LCD shields.">LCD</a> : <span class="keyword">public</span> LiquidCrystal {</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classLCD.html"> 48</a></span>&#160;<span class="keyword">class </span><a class="code" href="classLCD.html">LCD</a> : <span class="keyword">public</span> LiquidCrystal {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8"> 50</a></span>&#160; <a class="code" href="classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8" title="Initialize the Freetronics LCD display with the default pin assignment.">LCD</a>() : LiquidCrystal(8, 9, 4, 5, 6, 7) { init(); }</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="code" href="classLCD.html#a067bc741cf27f143aba5d9f147908401"> 51</a></span>&#160; <a class="code" href="classLCD.html#a067bc741cf27f143aba5d9f147908401" title="Initialize the Freetronics LCD display for USBDroid.">LCD</a>(uint8_t pin9) : LiquidCrystal(8, pin9, 4, 5, 6, 7) { init(); }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="classLCD.html#a171f59ba80e7775ebd3a399f56482a9c"> 53</a></span>&#160; uint8_t <a class="code" href="classLCD.html#a171f59ba80e7775ebd3a399f56482a9c" title="Returns the pin that is being used to control the back light. The default is 3.">backlightPin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _backlightPin; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8" title="Sets the back light pin for the LCD shield.">setBacklightPin</a>(uint8_t pin);</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8"> 50</a></span>&#160; <a class="code" href="classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8">LCD</a>() : LiquidCrystal(8, 9, 4, 5, 6, 7) { init(); }</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classLCD.html#a067bc741cf27f143aba5d9f147908401"> 51</a></span>&#160; <a class="code" href="classLCD.html#a067bc741cf27f143aba5d9f147908401">LCD</a>(uint8_t pin9) : LiquidCrystal(8, pin9, 4, 5, 6, 7) { init(); }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8">LCD</a>(uint8_t rs, uint8_t enable,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; : LiquidCrystal(rs, enable, d0, d1, d2, d3) { init(); }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89" title="Turns on the display of text on the LCD and the back light.">display</a>();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108" title="Turns off the display of text on the LCD and the back light.">noDisplay</a>();</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classLCD.html#a171f59ba80e7775ebd3a399f56482a9c"> 56</a></span>&#160; uint8_t <a class="code" href="classLCD.html#a171f59ba80e7775ebd3a399f56482a9c">backlightPin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _backlightPin; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8">setBacklightPin</a>(uint8_t pin);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28"> 59</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28" title="Screen saver mode that controls the display and back light.">ScreenSaverMode</a></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f"> 61</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f" title="Turn off both the display and the backlight when the screen saver is activated.">DisplayOff</a>,</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a9931c078cfd1023c69f1da431f9a656c"> 62</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a9931c078cfd1023c69f1da431f9a656c" title="Turn off the back light but leave the display on when the screen saver is activated.">BacklightOff</a>,</div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35"> 63</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35" title="Same as BacklightOff but the screen saver is only deactivated when Select is pressed; other buttons h...">BacklightOnSelect</a></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; };</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="classLCD.html#a1917fa285f81f476b4c7cc20d15456b8"> 66</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28" title="Screen saver mode that controls the display and back light.">ScreenSaverMode</a> <a class="code" href="classLCD.html#a1917fa285f81f476b4c7cc20d15456b8" title="Returns the current screen saver mode; default is DisplayOff.">screenSaverMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mode; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a56d1f68532c779c65fbbd071fb444801" title="Sets the current screen saver mode.">setScreenSaverMode</a>(<a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28" title="Screen saver mode that controls the display and back light.">ScreenSaverMode</a> mode);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">display</a>();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#af3974da6d988ba2d21c25135ada12108">noDisplay</a>();</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28"> 62</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">ScreenSaverMode</a></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f"> 64</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f">DisplayOff</a>,</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a9931c078cfd1023c69f1da431f9a656c"> 65</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a9931c078cfd1023c69f1da431f9a656c">BacklightOff</a>,</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35"> 66</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35">BacklightOnSelect</a></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; };</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#af9a2326d034fa159d384ec16223c924f" title="Enables the screen saver and causes it to activate after timeoutSecs of inactivity on the buttons...">enableScreenSaver</a>(<span class="keywordtype">int</span> timeoutSecs = 10);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a85c3a4694b105731404df36e35e5b26e" title="Disables the screen saver.">disableScreenSaver</a>();</div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="classLCD.html#af5d5ca618a3161aa352027b58fe09d0e"> 71</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classLCD.html#af5d5ca618a3161aa352027b58fe09d0e" title="Returns true if the screen has been saved; false otherwise.">isScreenSaved</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> screenSaved; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292" title="Gets the next button press, release, or idle event.">getButton</a>();</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; uint8_t _backlightPin;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">bool</span> backlightInit;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">int</span> prevButton;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">int</span> debounceButton;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> lastRestore;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> lastDebounce;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">bool</span> screenSaved;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">bool</span> eatRelease;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28" title="Screen saver mode that controls the display and back light.">ScreenSaverMode</a> mode;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">void</span> init();</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;};</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classLCD.html#a1917fa285f81f476b4c7cc20d15456b8"> 69</a></span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">ScreenSaverMode</a> <a class="code" href="classLCD.html#a1917fa285f81f476b4c7cc20d15456b8">screenSaverMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mode; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a56d1f68532c779c65fbbd071fb444801">setScreenSaverMode</a>(<a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">ScreenSaverMode</a> mode);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#af9a2326d034fa159d384ec16223c924f">enableScreenSaver</a>(<span class="keywordtype">int</span> timeoutSecs = 10);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classLCD.html#a85c3a4694b105731404df36e35e5b26e">disableScreenSaver</a>();</div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classLCD.html#af5d5ca618a3161aa352027b58fe09d0e"> 74</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classLCD.html#af5d5ca618a3161aa352027b58fe09d0e">isScreenSaved</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> screenSaved; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292">getButton</a>();</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; uint8_t _backlightPin;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">bool</span> backlightInit;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">int</span> prevButton;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">int</span> debounceButton;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> lastRestore;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> lastDebounce;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">bool</span> screenSaved;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">bool</span> eatRelease;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">ScreenSaverMode</a> mode;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">void</span> init();</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;};</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classLCD_html_a56d1f68532c779c65fbbd071fb444801"><div class="ttname"><a href="classLCD.html#a56d1f68532c779c65fbbd071fb444801">LCD::setScreenSaverMode</a></div><div class="ttdeci">void setScreenSaverMode(ScreenSaverMode mode)</div><div class="ttdoc">Sets the current screen saver mode. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00268">LCD.cpp:268</a></div></div>
<div class="ttc" id="classLCD_html_ac1e80e2603bd1cf0276c36092c416292"><div class="ttname"><a href="classLCD.html#ac1e80e2603bd1cf0276c36092c416292">LCD::getButton</a></div><div class="ttdeci">int getButton()</div><div class="ttdoc">Gets the next button press, release, or idle event. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00353">LCD.cpp:353</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35">LCD::BacklightOnSelect</a></div><div class="ttdoc">Same as BacklightOff but the screen saver is only deactivated when Select is pressed; other buttons h...</div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00066">LCD.h:66</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28">LCD::ScreenSaverMode</a></div><div class="ttdeci">ScreenSaverMode</div><div class="ttdoc">Screen saver mode that controls the display and back light. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00062">LCD.h:62</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28a9931c078cfd1023c69f1da431f9a656c"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a9931c078cfd1023c69f1da431f9a656c">LCD::BacklightOff</a></div><div class="ttdoc">Turn off the back light but leave the display on when the screen saver is activated. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00065">LCD.h:65</a></div></div>
<div class="ttc" id="classLCD_html_a0b9b3b954290e7a3d94cdc829582b0a8"><div class="ttname"><a href="classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8">LCD::setBacklightPin</a></div><div class="ttdeci">void setBacklightPin(uint8_t pin)</div><div class="ttdoc">Sets the back light pin for the LCD shield. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00182">LCD.cpp:182</a></div></div>
<div class="ttc" id="classLCD_html_a00bb2db1390721abc7b24ac4b8c276c8"><div class="ttname"><a href="classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8">LCD::LCD</a></div><div class="ttdeci">LCD()</div><div class="ttdoc">Initialize the Freetronics LCD display with the default pin assignment. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00050">LCD.h:50</a></div></div>
<div class="ttc" id="classLCD_html_af9a2326d034fa159d384ec16223c924f"><div class="ttname"><a href="classLCD.html#af9a2326d034fa159d384ec16223c924f">LCD::enableScreenSaver</a></div><div class="ttdeci">void enableScreenSaver(int timeoutSecs=10)</div><div class="ttdoc">Enables the screen saver and causes it to activate after timeoutSecs of inactivity on the buttons...</div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00294">LCD.cpp:294</a></div></div>
<div class="ttc" id="classLCD_html_a067bc741cf27f143aba5d9f147908401"><div class="ttname"><a href="classLCD.html#a067bc741cf27f143aba5d9f147908401">LCD::LCD</a></div><div class="ttdeci">LCD(uint8_t pin9)</div><div class="ttdoc">Initialize the Freetronics LCD display for USBDroid. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00051">LCD.h:51</a></div></div>
<div class="ttc" id="classLCD_html_af3974da6d988ba2d21c25135ada12108"><div class="ttname"><a href="classLCD.html#af3974da6d988ba2d21c25135ada12108">LCD::noDisplay</a></div><div class="ttdeci">void noDisplay()</div><div class="ttdoc">Turns off the display of text on the LCD and the back light. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00223">LCD.cpp:223</a></div></div>
<div class="ttc" id="classLCD_html_a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f"><div class="ttname"><a href="classLCD.html#a264bf94308c95d8598426e13dc8cdb28a3f1e62d5fcd314d6ff067d3e74c4bf5f">LCD::DisplayOff</a></div><div class="ttdoc">Turn off both the display and the backlight when the screen saver is activated. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00064">LCD.h:64</a></div></div>
<div class="ttc" id="classLCD_html_a85c3a4694b105731404df36e35e5b26e"><div class="ttname"><a href="classLCD.html#a85c3a4694b105731404df36e35e5b26e">LCD::disableScreenSaver</a></div><div class="ttdeci">void disableScreenSaver()</div><div class="ttdoc">Disables the screen saver. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00308">LCD.cpp:308</a></div></div>
<div class="ttc" id="classLCD_html_a5b07cf05e8e5e7c53654f5ca0cf58b89"><div class="ttname"><a href="classLCD.html#a5b07cf05e8e5e7c53654f5ca0cf58b89">LCD::display</a></div><div class="ttdeci">void display()</div><div class="ttdoc">Turns on the display of text on the LCD and the back light. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8cpp_source.html#l00206">LCD.cpp:206</a></div></div>
<div class="ttc" id="classLCD_html_a171f59ba80e7775ebd3a399f56482a9c"><div class="ttname"><a href="classLCD.html#a171f59ba80e7775ebd3a399f56482a9c">LCD::backlightPin</a></div><div class="ttdeci">uint8_t backlightPin() const </div><div class="ttdoc">Returns the pin that is being used to control the back light. The default is 3. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00056">LCD.h:56</a></div></div>
<div class="ttc" id="classLCD_html"><div class="ttname"><a href="classLCD.html">LCD</a></div><div class="ttdoc">Enhanced library for Freetronics 16x2 LCD shields. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00048">LCD.h:48</a></div></div>
<div class="ttc" id="classLCD_html_af5d5ca618a3161aa352027b58fe09d0e"><div class="ttname"><a href="classLCD.html#af5d5ca618a3161aa352027b58fe09d0e">LCD::isScreenSaved</a></div><div class="ttdeci">bool isScreenSaved() const </div><div class="ttdoc">Returns true if the screen has been saved; false otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00074">LCD.h:74</a></div></div>
<div class="ttc" id="classLCD_html_a1917fa285f81f476b4c7cc20d15456b8"><div class="ttname"><a href="classLCD.html#a1917fa285f81f476b4c7cc20d15456b8">LCD::screenSaverMode</a></div><div class="ttdeci">ScreenSaverMode screenSaverMode() const </div><div class="ttdoc">Returns the current screen saver mode; default is DisplayOff. </div><div class="ttdef"><b>Definition:</b> <a href="LCD_8h_source.html#l00069">LCD.h:69</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: ListField.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -112,8 +113,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;ListField.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9"> 64</a></span>&#160;<a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9" title="Constructs a new list field with a specific label.">ListField::ListField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(label)</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9"> 64</a></span>&#160;<a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9">ListField::ListField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; : <a class="code" href="classField.html">Field</a>(label)</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; , _items(0)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; , _itemCount(0)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; , _value(-1)</div>
@ -121,96 +122,108 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="classListField.html#aa303898a1f74b52c1c4982653de488b7"> 77</a></span>&#160;<a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9" title="Constructs a new list field with a specific label.">ListField::ListField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, ListItems items, <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(form, label)</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classListField.html#aa303898a1f74b52c1c4982653de488b7"> 77</a></span>&#160;<a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9">ListField::ListField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, ListItems items, <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classField.html">Field</a>(form, label)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; , _items(0)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; , _itemCount(0)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; , _value(value)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; , _printLen(0)</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classListField.html#ae6709bce9355451b651893691456704e" title="Sets the array of items for this list.">setItems</a>(items);</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classListField.html#ae6709bce9355451b651893691456704e">setItems</a>(items);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;}</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="classListField.html#a5d752bd561cde735b175bcdfda55832a"> 87</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classListField.html#a5d752bd561cde735b175bcdfda55832a" title="Dispatches event via this field.">ListField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classListField.html#a5d752bd561cde735b175bcdfda55832a"> 87</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classListField.html#a5d752bd561cde735b175bcdfda55832a">ListField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (event == LCD_BUTTON_DOWN) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (_value &gt;= (_itemCount - 1))</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24" title="Sets the value of this list; i.e. the index within items() of the selected item.">setValue</a>(0);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">setValue</a>(0);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24" title="Sets the value of this list; i.e. the index within items() of the selected item.">setValue</a>(_value + 1);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">setValue</a>(_value + 1);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event == LCD_BUTTON_UP) {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (_value &lt;= 0)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24" title="Sets the value of this list; i.e. the index within items() of the selected item.">setValue</a>(_itemCount - 1);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">setValue</a>(_itemCount - 1);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24" title="Sets the value of this list; i.e. the index within items() of the selected item.">setValue</a>(_value - 1);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">setValue</a>(_value - 1);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="classListField.html#a191b79b460e45cf48e04b04eface2888"> 105</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classListField.html#a191b79b460e45cf48e04b04eface2888" title="Enters the field due to form navigation.">ListField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classListField.html#a191b79b460e45cf48e04b04eface2888"> 105</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classListField.html#a191b79b460e45cf48e04b04eface2888">ListField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;{</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classListField.html#a191b79b460e45cf48e04b04eface2888" title="Enters the field due to form navigation.">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; _printLen = 0;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; printValue();</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="code" href="classListField.html#ae6709bce9355451b651893691456704e"> 141</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classListField.html#ae6709bce9355451b651893691456704e" title="Sets the array of items for this list.">ListField::setItems</a>(ListItems items)</div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classListField.html#ae6709bce9355451b651893691456704e"> 141</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classListField.html#ae6709bce9355451b651893691456704e">ListField::setItems</a>(ListItems items)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; _items = <a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0" title="Returns the array of items in this list.">items</a>;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; _items = <a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0">items</a>;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; _itemCount = 0;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (items) {</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">for</span> (;;) {</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; ListItem item = (ListItem)pgm_read_word(items);</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (!item)</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; ++<a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0" title="Returns the array of items in this list.">items</a>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; ++<a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0">items</a>;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; ++_itemCount;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (_value &gt;= _itemCount)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; _value = _itemCount - 1;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; printValue();</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24"> 178</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24" title="Sets the value of this list; i.e. the index within items() of the selected item.">ListField::setValue</a>(<span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24"> 178</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">ListField::setValue</a>(<span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;{</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (_value != value) {</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; _value = <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1" title="Returns the value of this list; i.e. the index within items() of the selected item.">value</a>;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; _value = <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1">value</a>;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (_value &lt; 0)</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; _value = 0;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (_value &gt;= _itemCount)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; _value = _itemCount - 1;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; printValue();</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;}</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keywordtype">void</span> ListField::printValue()</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">int</span> len = 0;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span> (_value &gt;= 0) {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; ListItem str = (ListItem)pgm_read_word(&amp;(_items[_value]));</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">char</span> ch;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">while</span> ((ch = pgm_read_byte(str)) != 0) {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(ch);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(ch);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; ++len;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; ++str;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">while</span> (_printLen-- &gt; len)</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; _printLen = len;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;}</div>
<div class="ttc" id="classListField_html_a118501da7edb0b0bc6b493734975b4e9"><div class="ttname"><a href="classListField.html#a118501da7edb0b0bc6b493734975b4e9">ListField::ListField</a></div><div class="ttdeci">ListField(const String &amp;label)</div><div class="ttdoc">Constructs a new list field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00064">ListField.cpp:64</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classListField_html_aab8477757cd89bacd242c85bac2dccb1"><div class="ttname"><a href="classListField.html#aab8477757cd89bacd242c85bac2dccb1">ListField::value</a></div><div class="ttdeci">int value() const </div><div class="ttdoc">Returns the value of this list; i.e. the index within items() of the selected item. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8h_source.html#l00044">ListField.h:44</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classListField_html_ae6709bce9355451b651893691456704e"><div class="ttname"><a href="classListField.html#ae6709bce9355451b651893691456704e">ListField::setItems</a></div><div class="ttdeci">void setItems(ListItems items)</div><div class="ttdoc">Sets the array of items for this list. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00141">ListField.cpp:141</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classListField_html_a4dbbdeebd386551eb8f245b42b45ccf0"><div class="ttname"><a href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0">ListField::items</a></div><div class="ttdeci">ListItems items() const </div><div class="ttdoc">Returns the array of items in this list. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8h_source.html#l00041">ListField.h:41</a></div></div>
<div class="ttc" id="classListField_html_a191b79b460e45cf48e04b04eface2888"><div class="ttname"><a href="classListField.html#a191b79b460e45cf48e04b04eface2888">ListField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00105">ListField.cpp:105</a></div></div>
<div class="ttc" id="classListField_html_a266193631e897fb0b46e1270b1d0eb24"><div class="ttname"><a href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">ListField::setValue</a></div><div class="ttdeci">void setValue(int value)</div><div class="ttdoc">Sets the value of this list; i.e. the index within items() of the selected item. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00178">ListField.cpp:178</a></div></div>
<div class="ttc" id="classListField_html_a5d752bd561cde735b175bcdfda55832a"><div class="ttname"><a href="classListField.html#a5d752bd561cde735b175bcdfda55832a">ListField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00087">ListField.cpp:87</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: ListField.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -118,20 +119,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">typedef</span> PGM_P ListItem;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> PROGMEM ListItem *ListItems;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="classListField.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classListField.html" title="Field that manages selection from a static list of items.">ListField</a> : <span class="keyword">public</span> <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> {</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classListField.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classListField.html">ListField</a> : <span class="keyword">public</span> <a class="code" href="classField.html">Field</a> {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9" title="Constructs a new list field with a specific label.">ListField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9" title="Constructs a new list field with a specific label.">ListField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>, <span class="keyword">const</span> String &amp;label, ListItems <a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0" title="Returns the array of items in this list.">items</a>, <span class="keywordtype">int</span> <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1" title="Returns the value of this list; i.e. the index within items() of the selected item.">value</a> = 0);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9">ListField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classListField.html#a118501da7edb0b0bc6b493734975b4e9">ListField</a>(<a class="code" href="classForm.html">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>, <span class="keyword">const</span> String &amp;label, ListItems <a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0">items</a>, <span class="keywordtype">int</span> <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1">value</a> = 0);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classListField.html#a5d752bd561cde735b175bcdfda55832a" title="Dispatches event via this field.">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classListField.html#a5d752bd561cde735b175bcdfda55832a">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classListField.html#a191b79b460e45cf48e04b04eface2888" title="Enters the field due to form navigation.">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classListField.html#a191b79b460e45cf48e04b04eface2888">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0"> 41</a></span>&#160; ListItems <a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0" title="Returns the array of items in this list.">items</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _items; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classListField.html#ae6709bce9355451b651893691456704e" title="Sets the array of items for this list.">setItems</a>(ListItems items);</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0"> 41</a></span>&#160; ListItems <a class="code" href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0">items</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _items; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classListField.html#ae6709bce9355451b651893691456704e">setItems</a>(ListItems items);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1"> 44</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1" title="Returns the value of this list; i.e. the index within items() of the selected item.">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24" title="Sets the value of this list; i.e. the index within items() of the selected item.">setValue</a>(<span class="keywordtype">int</span> <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1" title="Returns the value of this list; i.e. the index within items() of the selected item.">value</a>);</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1"> 44</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">setValue</a>(<span class="keywordtype">int</span> <a class="code" href="classListField.html#aab8477757cd89bacd242c85bac2dccb1">value</a>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; ListItems _items;</div>
@ -143,12 +144,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;};</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classListField_html_a118501da7edb0b0bc6b493734975b4e9"><div class="ttname"><a href="classListField.html#a118501da7edb0b0bc6b493734975b4e9">ListField::ListField</a></div><div class="ttdeci">ListField(const String &amp;label)</div><div class="ttdoc">Constructs a new list field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00064">ListField.cpp:64</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classListField_html_aab8477757cd89bacd242c85bac2dccb1"><div class="ttname"><a href="classListField.html#aab8477757cd89bacd242c85bac2dccb1">ListField::value</a></div><div class="ttdeci">int value() const </div><div class="ttdoc">Returns the value of this list; i.e. the index within items() of the selected item. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8h_source.html#l00044">ListField.h:44</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_a27427319be1cc92db3128637d8884ee5"><div class="ttname"><a href="classField.html#a27427319be1cc92db3128637d8884ee5">Field::form</a></div><div class="ttdeci">Form * form() const </div><div class="ttdoc">Returns the Form that owns this field; null if not associated with a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00034">Field.h:34</a></div></div>
<div class="ttc" id="classListField_html_ae6709bce9355451b651893691456704e"><div class="ttname"><a href="classListField.html#ae6709bce9355451b651893691456704e">ListField::setItems</a></div><div class="ttdeci">void setItems(ListItems items)</div><div class="ttdoc">Sets the array of items for this list. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00141">ListField.cpp:141</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classListField_html_a4dbbdeebd386551eb8f245b42b45ccf0"><div class="ttname"><a href="classListField.html#a4dbbdeebd386551eb8f245b42b45ccf0">ListField::items</a></div><div class="ttdeci">ListItems items() const </div><div class="ttdoc">Returns the array of items in this list. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8h_source.html#l00041">ListField.h:41</a></div></div>
<div class="ttc" id="classListField_html_a191b79b460e45cf48e04b04eface2888"><div class="ttname"><a href="classListField.html#a191b79b460e45cf48e04b04eface2888">ListField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00105">ListField.cpp:105</a></div></div>
<div class="ttc" id="classListField_html_a266193631e897fb0b46e1270b1d0eb24"><div class="ttname"><a href="classListField.html#a266193631e897fb0b46e1270b1d0eb24">ListField::setValue</a></div><div class="ttdeci">void setValue(int value)</div><div class="ttdoc">Sets the value of this list; i.e. the index within items() of the selected item. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00178">ListField.cpp:178</a></div></div>
<div class="ttc" id="classListField_html"><div class="ttname"><a href="classListField.html">ListField</a></div><div class="ttdoc">Field that manages selection from a static list of items. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8h_source.html#l00032">ListField.h:32</a></div></div>
<div class="ttc" id="classListField_html_a5d752bd561cde735b175bcdfda55832a"><div class="ttname"><a href="classListField.html#a5d752bd561cde735b175bcdfda55832a">ListField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="ListField_8cpp_source.html#l00087">ListField.cpp:87</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Melody.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -116,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &lt;WProgram.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9"> 85</a></span>&#160;<a class="code" href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9" title="Constructs a new melody playing object for pin.">Melody::Melody</a>(uint8_t pin)</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9"> 85</a></span>&#160;<a class="code" href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9">Melody::Melody</a>(uint8_t pin)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; : _pin(pin)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; , playing(false)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; , _loopCount(0)</div>
@ -130,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;{</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="code" href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006"> 131</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006" title="Sets the maximum number of loops to last no longer than ms milliseconds.">Melody::setLoopDuration</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms)</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006"> 131</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006">Melody::setLoopDuration</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> duration = 0;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index &lt; size; ++index)</div>
@ -140,9 +141,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; _loopCount = 1; <span class="comment">// Play the melody at least once.</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;}</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="code" href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5"> 146</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5" title="Starts playing the melody, or restarts it if already playing.">Melody::play</a>()</div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5"> 146</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5">Melody::play</a>()</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b" title="Stops playing the melody.">stop</a>();</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">stop</a>();</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (size == 0)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// No melody to play.</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; loopsLeft = _loopCount;</div>
@ -151,9 +152,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; nextNote();</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div>
<div class="line"><a name="l00162"></a><span class="lineno"><a class="code" href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932"> 162</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932" title="Plays the melody once and then stops.">Melody::playOnce</a>()</div>
<div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932"> 162</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932">Melody::playOnce</a>()</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;{</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b" title="Stops playing the melody.">stop</a>();</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">stop</a>();</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (size == 0)</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// No melody to play.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; loopsLeft = 1;</div>
@ -162,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; nextNote();</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b"> 178</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b" title="Stops playing the melody.">Melody::stop</a>()</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b"> 178</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">Melody::stop</a>()</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;{</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (!playing)</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span>;</div>
@ -170,15 +171,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; noTone(_pin);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;}</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div>
<div class="line"><a name="l00199"></a><span class="lineno"><a class="code" href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254"> 199</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254" title="Sets the melody to the size elements of notes and lengths.">Melody::setMelody</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> *notes, <span class="keyword">const</span> uint8_t *lengths, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)</div>
<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254"> 199</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254">Melody::setMelody</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> *notes, <span class="keyword">const</span> uint8_t *lengths, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b" title="Stops playing the melody.">stop</a>();</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">stop</a>();</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; this-&gt;notes = notes;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; this-&gt;lengths = lengths;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; this-&gt;size = size;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
<div class="line"><a name="l00214"></a><span class="lineno"><a class="code" href="classMelody.html#ad1103b970be1f59058cc7d927be68955"> 214</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#ad1103b970be1f59058cc7d927be68955" title="Runs the melody control loop.">Melody::run</a>()</div>
<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classMelody.html#ad1103b970be1f59058cc7d927be68955"> 214</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classMelody.html#ad1103b970be1f59058cc7d927be68955">Melody::run</a>()</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;{</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (!playing)</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span>;</div>
@ -192,7 +193,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (posn &gt;= size) {</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (loopsLeft != 0 &amp;&amp; --loopsLeft &lt;= 0) {</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b" title="Stops playing the melody.">stop</a>();</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">stop</a>();</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; posn = 0;</div>
@ -204,12 +205,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; duration = duration * 13 / 10; <span class="comment">// i.e., duration * 1.3</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; startNote = millis();</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div>
<div class="ttc" id="classMelody_html_adb6ad8e8cfe8c9a137e470f4e85c7254"><div class="ttname"><a href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254">Melody::setMelody</a></div><div class="ttdeci">void setMelody(const int *notes, const uint8_t *lengths, unsigned int size)</div><div class="ttdoc">Sets the melody to the size elements of notes and lengths. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00199">Melody.cpp:199</a></div></div>
<div class="ttc" id="classMelody_html_ac0c552233c41d85f2766d2e4df376b2b"><div class="ttname"><a href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">Melody::stop</a></div><div class="ttdeci">void stop()</div><div class="ttdoc">Stops playing the melody. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00178">Melody.cpp:178</a></div></div>
<div class="ttc" id="classMelody_html_ad1103b970be1f59058cc7d927be68955"><div class="ttname"><a href="classMelody.html#ad1103b970be1f59058cc7d927be68955">Melody::run</a></div><div class="ttdeci">void run()</div><div class="ttdoc">Runs the melody control loop. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00214">Melody.cpp:214</a></div></div>
<div class="ttc" id="classMelody_html_aecc9185c9cb1246e8a55521b17d72932"><div class="ttname"><a href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932">Melody::playOnce</a></div><div class="ttdeci">void playOnce()</div><div class="ttdoc">Plays the melody once and then stops. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00162">Melody.cpp:162</a></div></div>
<div class="ttc" id="classMelody_html_a9edc4165a49368dd5d78eedf982c38b9"><div class="ttname"><a href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9">Melody::Melody</a></div><div class="ttdeci">Melody(uint8_t pin)</div><div class="ttdoc">Constructs a new melody playing object for pin. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00085">Melody.cpp:85</a></div></div>
<div class="ttc" id="classMelody_html_ae88ad06c2acb728f56dd213d5dad6006"><div class="ttname"><a href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006">Melody::setLoopDuration</a></div><div class="ttdeci">void setLoopDuration(unsigned long ms)</div><div class="ttdoc">Sets the maximum number of loops to last no longer than ms milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00131">Melody.cpp:131</a></div></div>
<div class="ttc" id="classMelody_html_a9fd8e0d48833d8da3cd3b3b58408b0b5"><div class="ttname"><a href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5">Melody::play</a></div><div class="ttdeci">void play()</div><div class="ttdoc">Starts playing the melody, or restarts it if already playing. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00146">Melody.cpp:146</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Melody.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -208,24 +209,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment">// Special note value that indicates a rest.</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#define NOTE_REST 0</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="code" href="classMelody.html"> 122</a></span>&#160;<span class="keyword">class </span><a class="code" href="classMelody.html" title="Plays a melody on a digital output pin using tone().">Melody</a> {</div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classMelody.html"> 122</a></span>&#160;<span class="keyword">class </span><a class="code" href="classMelody.html">Melody</a> {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9" title="Constructs a new melody playing object for pin.">Melody</a>(uint8_t pin);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9">Melody</a>(uint8_t pin);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="classMelody.html#ad38db3338ed87d72238c0ea9440c633c"> 126</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classMelody.html#ad38db3338ed87d72238c0ea9440c633c" title="Returns true if the melody is currently playing; false if not.">isPlaying</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> playing; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classMelody.html#ad38db3338ed87d72238c0ea9440c633c"> 126</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classMelody.html#ad38db3338ed87d72238c0ea9440c633c">isPlaying</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> playing; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
<div class="line"><a name="l00128"></a><span class="lineno"><a class="code" href="classMelody.html#ab78253ae9abc8478b05f415f5d878a60"> 128</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classMelody.html#ab78253ae9abc8478b05f415f5d878a60" title="Returns the number of times the melody should loop before stopping.">loopCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _loopCount; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="code" href="classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b"> 129</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b" title="Sets the number of times the melody should loop to count.">setLoopCount</a>(<span class="keywordtype">int</span> count) { _loopCount = count; }</div>
<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classMelody.html#ab78253ae9abc8478b05f415f5d878a60"> 128</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classMelody.html#ab78253ae9abc8478b05f415f5d878a60">loopCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _loopCount; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b"> 129</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b">setLoopCount</a>(<span class="keywordtype">int</span> count) { _loopCount = count; }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006" title="Sets the maximum number of loops to last no longer than ms milliseconds.">setLoopDuration</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006">setLoopDuration</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms);</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5" title="Starts playing the melody, or restarts it if already playing.">play</a>();</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932" title="Plays the melody once and then stops.">playOnce</a>();</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b" title="Stops playing the melody.">stop</a>();</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5">play</a>();</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932">playOnce</a>();</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">stop</a>();</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254" title="Sets the melody to the size elements of notes and lengths.">setMelody</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> *notes, <span class="keyword">const</span> uint8_t *lengths, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254">setMelody</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> *notes, <span class="keyword">const</span> uint8_t *lengths, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#ad1103b970be1f59058cc7d927be68955" title="Runs the melody control loop.">run</a>();</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classMelody.html#ad1103b970be1f59058cc7d927be68955">run</a>();</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; uint8_t _pin;</div>
@ -243,12 +244,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;};</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classMelody_html_adb6ad8e8cfe8c9a137e470f4e85c7254"><div class="ttname"><a href="classMelody.html#adb6ad8e8cfe8c9a137e470f4e85c7254">Melody::setMelody</a></div><div class="ttdeci">void setMelody(const int *notes, const uint8_t *lengths, unsigned int size)</div><div class="ttdoc">Sets the melody to the size elements of notes and lengths. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00199">Melody.cpp:199</a></div></div>
<div class="ttc" id="classMelody_html_ac0c552233c41d85f2766d2e4df376b2b"><div class="ttname"><a href="classMelody.html#ac0c552233c41d85f2766d2e4df376b2b">Melody::stop</a></div><div class="ttdeci">void stop()</div><div class="ttdoc">Stops playing the melody. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00178">Melody.cpp:178</a></div></div>
<div class="ttc" id="classMelody_html_ad1103b970be1f59058cc7d927be68955"><div class="ttname"><a href="classMelody.html#ad1103b970be1f59058cc7d927be68955">Melody::run</a></div><div class="ttdeci">void run()</div><div class="ttdoc">Runs the melody control loop. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00214">Melody.cpp:214</a></div></div>
<div class="ttc" id="classMelody_html_ad38db3338ed87d72238c0ea9440c633c"><div class="ttname"><a href="classMelody.html#ad38db3338ed87d72238c0ea9440c633c">Melody::isPlaying</a></div><div class="ttdeci">bool isPlaying() const </div><div class="ttdoc">Returns true if the melody is currently playing; false if not. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8h_source.html#l00126">Melody.h:126</a></div></div>
<div class="ttc" id="classMelody_html_aecc9185c9cb1246e8a55521b17d72932"><div class="ttname"><a href="classMelody.html#aecc9185c9cb1246e8a55521b17d72932">Melody::playOnce</a></div><div class="ttdeci">void playOnce()</div><div class="ttdoc">Plays the melody once and then stops. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00162">Melody.cpp:162</a></div></div>
<div class="ttc" id="classMelody_html_a9edc4165a49368dd5d78eedf982c38b9"><div class="ttname"><a href="classMelody.html#a9edc4165a49368dd5d78eedf982c38b9">Melody::Melody</a></div><div class="ttdeci">Melody(uint8_t pin)</div><div class="ttdoc">Constructs a new melody playing object for pin. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00085">Melody.cpp:85</a></div></div>
<div class="ttc" id="classMelody_html_ab78253ae9abc8478b05f415f5d878a60"><div class="ttname"><a href="classMelody.html#ab78253ae9abc8478b05f415f5d878a60">Melody::loopCount</a></div><div class="ttdeci">int loopCount() const </div><div class="ttdoc">Returns the number of times the melody should loop before stopping. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8h_source.html#l00128">Melody.h:128</a></div></div>
<div class="ttc" id="classMelody_html"><div class="ttname"><a href="classMelody.html">Melody</a></div><div class="ttdoc">Plays a melody on a digital output pin using tone(). </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8h_source.html#l00122">Melody.h:122</a></div></div>
<div class="ttc" id="classMelody_html_ae88ad06c2acb728f56dd213d5dad6006"><div class="ttname"><a href="classMelody.html#ae88ad06c2acb728f56dd213d5dad6006">Melody::setLoopDuration</a></div><div class="ttdeci">void setLoopDuration(unsigned long ms)</div><div class="ttdoc">Sets the maximum number of loops to last no longer than ms milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00131">Melody.cpp:131</a></div></div>
<div class="ttc" id="classMelody_html_a9fd8e0d48833d8da3cd3b3b58408b0b5"><div class="ttname"><a href="classMelody.html#a9fd8e0d48833d8da3cd3b3b58408b0b5">Melody::play</a></div><div class="ttdeci">void play()</div><div class="ttdoc">Starts playing the melody, or restarts it if already playing. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8cpp_source.html#l00146">Melody.cpp:146</a></div></div>
<div class="ttc" id="classMelody_html_a507097a2e8ff51a5e9157e3a320ae35b"><div class="ttname"><a href="classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b">Melody::setLoopCount</a></div><div class="ttdeci">void setLoopCount(int count)</div><div class="ttdoc">Sets the number of times the melody should loop to count. </div><div class="ttdef"><b>Definition:</b> <a href="Melody_8h_source.html#l00129">Melody.h:129</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Mono5x7.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -245,9 +246,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -0,0 +1,140 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: NoiseSource.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">NoiseSource.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;NoiseSource.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;RNG.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classNoiseSource.html#a601479b7d8cc215f97f2f8a18d3ef4c2"> 36</a></span>&#160;<a class="code" href="classNoiseSource.html#a601479b7d8cc215f97f2f8a18d3ef4c2">NoiseSource::NoiseSource</a>()</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb"> 43</a></span>&#160;<a class="code" href="classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb">NoiseSource::~NoiseSource</a>()</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1"> 102</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1">NoiseSource::output</a>(<span class="keyword">const</span> uint8_t *data, <span class="keywordtype">size_t</span> len, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> credit)</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; RNG.<a class="code" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">stir</a>(data, len, credit);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;}</div>
<div class="ttc" id="classNoiseSource_html_a601479b7d8cc215f97f2f8a18d3ef4c2"><div class="ttname"><a href="classNoiseSource.html#a601479b7d8cc215f97f2f8a18d3ef4c2">NoiseSource::NoiseSource</a></div><div class="ttdeci">NoiseSource()</div><div class="ttdoc">Constructs a new random noise source. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00036">NoiseSource.cpp:36</a></div></div>
<div class="ttc" id="classNoiseSource_html_a1af7449a5ae4a8acd34ac218c9eec6c1"><div class="ttname"><a href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1">NoiseSource::output</a></div><div class="ttdeci">virtual void output(const uint8_t *data, size_t len, unsigned int credit)</div><div class="ttdoc">Called from subclasses to output noise to the global random number pool. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00102">NoiseSource.cpp:102</a></div></div>
<div class="ttc" id="classNoiseSource_html_a4eca1e894a5d719fb9bf4df34a791cdb"><div class="ttname"><a href="classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb">NoiseSource::~NoiseSource</a></div><div class="ttdeci">virtual ~NoiseSource()</div><div class="ttdoc">Destroys this random noise source. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00043">NoiseSource.cpp:43</a></div></div>
<div class="ttc" id="classRNGClass_html_ad99535ea23ae2fec55bdebb8c24def02"><div class="ttname"><a href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">RNGClass::stir</a></div><div class="ttdeci">void stir(const uint8_t *data, size_t len, unsigned int credit=0)</div><div class="ttdoc">Stirs additional entropy data into the random pool. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00387">RNG.cpp:387</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

147
NoiseSource_8h_source.html Normal file
View File

@ -0,0 +1,147 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: NoiseSource.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">NoiseSource.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_NOISESOURCE_H</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_NOISESOURCE_H</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classNoiseSource.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classNoiseSource.html">NoiseSource</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classNoiseSource.html#a601479b7d8cc215f97f2f8a18d3ef4c2">NoiseSource</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb">~NoiseSource</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classNoiseSource.html#ac8ac086f830efb5ffe3e8d506aa61c85">calibrating</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classNoiseSource.html#a7ce647815524fe84f562aca5256e12f3">stir</a>() = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1">output</a>(<span class="keyword">const</span> uint8_t *data, <span class="keywordtype">size_t</span> len, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> credit);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classNoiseSource_html_a601479b7d8cc215f97f2f8a18d3ef4c2"><div class="ttname"><a href="classNoiseSource.html#a601479b7d8cc215f97f2f8a18d3ef4c2">NoiseSource::NoiseSource</a></div><div class="ttdeci">NoiseSource()</div><div class="ttdoc">Constructs a new random noise source. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00036">NoiseSource.cpp:36</a></div></div>
<div class="ttc" id="classNoiseSource_html_a7ce647815524fe84f562aca5256e12f3"><div class="ttname"><a href="classNoiseSource.html#a7ce647815524fe84f562aca5256e12f3">NoiseSource::stir</a></div><div class="ttdeci">virtual void stir()=0</div><div class="ttdoc">Stirs entropy from this noise source into the global random number pool. </div></div>
<div class="ttc" id="classNoiseSource_html"><div class="ttname"><a href="classNoiseSource.html">NoiseSource</a></div><div class="ttdoc">Abstract base class for random noise sources. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8h_source.html#l00029">NoiseSource.h:29</a></div></div>
<div class="ttc" id="classNoiseSource_html_a1af7449a5ae4a8acd34ac218c9eec6c1"><div class="ttname"><a href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1">NoiseSource::output</a></div><div class="ttdeci">virtual void output(const uint8_t *data, size_t len, unsigned int credit)</div><div class="ttdoc">Called from subclasses to output noise to the global random number pool. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00102">NoiseSource.cpp:102</a></div></div>
<div class="ttc" id="classNoiseSource_html_a4eca1e894a5d719fb9bf4df34a791cdb"><div class="ttname"><a href="classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb">NoiseSource::~NoiseSource</a></div><div class="ttdeci">virtual ~NoiseSource()</div><div class="ttdoc">Destroys this random noise source. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00043">NoiseSource.cpp:43</a></div></div>
<div class="ttc" id="classNoiseSource_html_ac8ac086f830efb5ffe3e8d506aa61c85"><div class="ttname"><a href="classNoiseSource.html#ac8ac086f830efb5ffe3e8d506aa61c85">NoiseSource::calibrating</a></div><div class="ttdeci">virtual bool calibrating() const =0</div><div class="ttdoc">Determine if the noise source is still calibrating itself. </div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

214
OFB_8cpp_source.html Normal file
View File

@ -0,0 +1,214 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: OFB.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">OFB.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;OFB.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d"> 42</a></span>&#160;<a class="code" href="classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d">OFBCommon::OFBCommon</a>()</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; : blockCipher(0)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; , posn(16)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01"> 51</a></span>&#160;<a class="code" href="classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01">OFBCommon::~OFBCommon</a>()</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; clean(iv);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce"> 56</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce">OFBCommon::keySize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">keySize</a>();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a67b4639aaece17a796fcba3a2ce8b43c"> 61</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classOFBCommon.html#a67b4639aaece17a796fcba3a2ce8b43c">OFBCommon::ivSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> 16;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb"> 66</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb">OFBCommon::setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Verify the cipher&#39;s block size, just in case.</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (blockCipher-&gt;<a class="code" href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">blockSize</a>() != 16)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Set the key on the underlying block cipher.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> blockCipher-&gt;<a class="code" href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">setKey</a>(key, len);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf"> 76</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf">OFBCommon::setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (len != 16)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; memcpy(this-&gt;iv, iv, 16);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; posn = 16;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8"> 85</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8">OFBCommon::encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; uint8_t size;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// If we have exhausted the current keystream block, then encrypt</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// the IV/ciphertext to get another keystream block.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (posn &gt;= 16) {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">encryptBlock</a>(iv, iv);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; posn = 0;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// XOR the plaintext with the encrypted IV to get the new ciphertext.</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; size = 16 - posn;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (size &gt; len)</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; size = len;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; len -= size;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">while</span> (size &gt; 0) {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; *output++ = *input++ ^ iv[posn++];</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; --size;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div>
<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36"> 108</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36">OFBCommon::decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8">encrypt</a>(output, input, len);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123"> 113</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123">OFBCommon::clear</a>()</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; blockCipher-&gt;<a class="code" href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">clear</a>();</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; clean(iv);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; posn = 16;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
<div class="ttc" id="classOFBCommon_html_a55bf2396beb91c457bfc4c20ef5c8123"><div class="ttname"><a href="classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123">OFBCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00113">OFB.cpp:113</a></div></div>
<div class="ttc" id="classOFBCommon_html_ac3a98e81d95ebc6c883baef5f4cfbefb"><div class="ttname"><a href="classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb">OFBCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00066">OFB.cpp:66</a></div></div>
<div class="ttc" id="classBlockCipher_html_aed0788b25f6bb2f1bd47d5a5f0c5db33"><div class="ttname"><a href="classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33">BlockCipher::encryptBlock</a></div><div class="ttdeci">virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0</div><div class="ttdoc">Encrypts a single block using this cipher. </div></div>
<div class="ttc" id="classOFBCommon_html_a7f7e0cffcd7e2d7e06b7b1ae978a8f7d"><div class="ttname"><a href="classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d">OFBCommon::OFBCommon</a></div><div class="ttdeci">OFBCommon()</div><div class="ttdoc">Constructs a new cipher in OFB mode. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00042">OFB.cpp:42</a></div></div>
<div class="ttc" id="classOFBCommon_html_a984d81a460e0799895b19dc48c3b5cf8"><div class="ttname"><a href="classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8">OFBCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00085">OFB.cpp:85</a></div></div>
<div class="ttc" id="classBlockCipher_html_a9a05307664469777592799c8f77397c4"><div class="ttname"><a href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">BlockCipher::setKey</a></div><div class="ttdeci">virtual bool setKey(const uint8_t *key, size_t len)=0</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div></div>
<div class="ttc" id="classOFBCommon_html_aeb3636d7175b150e2bf16367e51c2e36"><div class="ttname"><a href="classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36">OFBCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00108">OFB.cpp:108</a></div></div>
<div class="ttc" id="classOFBCommon_html_a76ea9f9ea9dd137778338813e534a8ce"><div class="ttname"><a href="classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce">OFBCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00056">OFB.cpp:56</a></div></div>
<div class="ttc" id="classBlockCipher_html_a6f27d46e9dfa7761d014d828ad5f955b"><div class="ttname"><a href="classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b">BlockCipher::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all security-sensitive state from this block cipher. </div></div>
<div class="ttc" id="classOFBCommon_html_a4a35364cf30d78f1968cc00803686caf"><div class="ttname"><a href="classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf">OFBCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00076">OFB.cpp:76</a></div></div>
<div class="ttc" id="classBlockCipher_html_a7059a310487c128db034b0ce0ad425a0"><div class="ttname"><a href="classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0">BlockCipher::blockSize</a></div><div class="ttdeci">virtual size_t blockSize() const =0</div><div class="ttdoc">Size of a single block processed by this cipher, in bytes. </div></div>
<div class="ttc" id="classBlockCipher_html_afde6004a859e015d877eab3c37042a0f"><div class="ttname"><a href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">BlockCipher::keySize</a></div><div class="ttdeci">virtual size_t keySize() const =0</div><div class="ttdoc">Default size of the key for this block cipher, in bytes. </div></div>
<div class="ttc" id="classOFBCommon_html_aae7435157e51bf977d3481e94e17ae01"><div class="ttname"><a href="classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01">OFBCommon::~OFBCommon</a></div><div class="ttdeci">virtual ~OFBCommon()</div><div class="ttdoc">Destroys this cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00051">OFB.cpp:51</a></div></div>
<div class="ttc" id="classOFBCommon_html_a67b4639aaece17a796fcba3a2ce8b43c"><div class="ttname"><a href="classOFBCommon.html#a67b4639aaece17a796fcba3a2ce8b43c">OFBCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00061">OFB.cpp:61</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

179
OFB_8h_source.html Normal file
View File

@ -0,0 +1,179 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: OFB.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">OFB.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_OFB_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_OFB_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Cipher.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;BlockCipher.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classOFBCommon.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classOFBCommon.html">OFBCommon</a> : <span class="keyword">public</span> <a class="code" href="classCipher.html">Cipher</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01">~OFBCommon</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce">keySize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classOFBCommon.html#a67b4639aaece17a796fcba3a2ce8b43c">ivSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb">setKey</a>(<span class="keyword">const</span> uint8_t *key, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf">setIV</a>(<span class="keyword">const</span> uint8_t *iv, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8">encrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36">decrypt</a>(uint8_t *output, <span class="keyword">const</span> uint8_t *input, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123">clear</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d">OFBCommon</a>();</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04"> 47</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04">setBlockCipher</a>(<a class="code" href="classBlockCipher.html">BlockCipher</a> *cipher) { blockCipher = cipher; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classBlockCipher.html">BlockCipher</a> *blockCipher;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint8_t iv[16];</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classOFB.html"> 56</a></span>&#160;<span class="keyword">class </span><a class="code" href="classOFB.html">OFB</a> : <span class="keyword">public</span> <a class="code" href="classOFBCommon.html">OFBCommon</a></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classOFB.html#a0b71b5cbcf01254799cd5eb37074a8cb"> 59</a></span>&#160; <a class="code" href="classOFB.html#a0b71b5cbcf01254799cd5eb37074a8cb">OFB</a>() { <a class="code" href="classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04">setBlockCipher</a>(&amp;cipher); }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; T cipher;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;};</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classCipher_html"><div class="ttname"><a href="classCipher.html">Cipher</a></div><div class="ttdoc">Abstract base class for stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="Cipher_8h_source.html#l00029">Cipher.h:29</a></div></div>
<div class="ttc" id="classBlockCipher_html"><div class="ttname"><a href="classBlockCipher.html">BlockCipher</a></div><div class="ttdoc">Abstract base class for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="BlockCipher_8h_source.html#l00029">BlockCipher.h:29</a></div></div>
<div class="ttc" id="classOFBCommon_html"><div class="ttname"><a href="classOFBCommon.html">OFBCommon</a></div><div class="ttdoc">Concrete base class to assist with implementing OFB for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8h_source.html#l00029">OFB.h:29</a></div></div>
<div class="ttc" id="classOFBCommon_html_a55bf2396beb91c457bfc4c20ef5c8123"><div class="ttname"><a href="classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123">OFBCommon::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears all security-sensitive state from this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00113">OFB.cpp:113</a></div></div>
<div class="ttc" id="classOFBCommon_html_ac3a98e81d95ebc6c883baef5f4cfbefb"><div class="ttname"><a href="classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb">OFBCommon::setKey</a></div><div class="ttdeci">bool setKey(const uint8_t *key, size_t len)</div><div class="ttdoc">Sets the key to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00066">OFB.cpp:66</a></div></div>
<div class="ttc" id="classOFBCommon_html_a7f7e0cffcd7e2d7e06b7b1ae978a8f7d"><div class="ttname"><a href="classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d">OFBCommon::OFBCommon</a></div><div class="ttdeci">OFBCommon()</div><div class="ttdoc">Constructs a new cipher in OFB mode. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00042">OFB.cpp:42</a></div></div>
<div class="ttc" id="classOFBCommon_html_a984d81a460e0799895b19dc48c3b5cf8"><div class="ttname"><a href="classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8">OFBCommon::encrypt</a></div><div class="ttdeci">void encrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Encrypts an input buffer and writes the ciphertext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00085">OFB.cpp:85</a></div></div>
<div class="ttc" id="classOFBCommon_html_aeb3636d7175b150e2bf16367e51c2e36"><div class="ttname"><a href="classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36">OFBCommon::decrypt</a></div><div class="ttdeci">void decrypt(uint8_t *output, const uint8_t *input, size_t len)</div><div class="ttdoc">Decrypts an input buffer and writes the plaintext to an output buffer. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00108">OFB.cpp:108</a></div></div>
<div class="ttc" id="classOFBCommon_html_a76ea9f9ea9dd137778338813e534a8ce"><div class="ttname"><a href="classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce">OFBCommon::keySize</a></div><div class="ttdeci">size_t keySize() const </div><div class="ttdoc">Default size of the key for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00056">OFB.cpp:56</a></div></div>
<div class="ttc" id="classOFB_html_a0b71b5cbcf01254799cd5eb37074a8cb"><div class="ttname"><a href="classOFB.html#a0b71b5cbcf01254799cd5eb37074a8cb">OFB::OFB</a></div><div class="ttdeci">OFB()</div><div class="ttdoc">Constructs a new OFB object for the block cipher T. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8h_source.html#l00059">OFB.h:59</a></div></div>
<div class="ttc" id="classOFBCommon_html_a4a35364cf30d78f1968cc00803686caf"><div class="ttname"><a href="classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf">OFBCommon::setIV</a></div><div class="ttdeci">bool setIV(const uint8_t *iv, size_t len)</div><div class="ttdoc">Sets the initialization vector to use for future encryption and decryption operations. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00076">OFB.cpp:76</a></div></div>
<div class="ttc" id="classOFBCommon_html_aae7435157e51bf977d3481e94e17ae01"><div class="ttname"><a href="classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01">OFBCommon::~OFBCommon</a></div><div class="ttdeci">virtual ~OFBCommon()</div><div class="ttdoc">Destroys this cipher object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00051">OFB.cpp:51</a></div></div>
<div class="ttc" id="classOFBCommon_html_a0053e2566a88859effffacbf1e4ade04"><div class="ttname"><a href="classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04">OFBCommon::setBlockCipher</a></div><div class="ttdeci">void setBlockCipher(BlockCipher *cipher)</div><div class="ttdoc">Sets the block cipher to use for this OFB object. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8h_source.html#l00047">OFB.h:47</a></div></div>
<div class="ttc" id="classOFBCommon_html_a67b4639aaece17a796fcba3a2ce8b43c"><div class="ttname"><a href="classOFBCommon.html#a67b4639aaece17a796fcba3a2ce8b43c">OFBCommon::ivSize</a></div><div class="ttdeci">size_t ivSize() const </div><div class="ttdoc">Size of the initialization vector for this cipher, in bytes. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8cpp_source.html#l00061">OFB.cpp:61</a></div></div>
<div class="ttc" id="classOFB_html"><div class="ttname"><a href="classOFB.html">OFB</a></div><div class="ttdoc">Implementation of the Output Feedback (OFB) mode for 128-bit block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="OFB_8h_source.html#l00056">OFB.h:56</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: PowerSave.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -121,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; wdt_disable();</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="code" href="group__power__save.html#ga95c1666038493a7f95be6768882eebad"> 132</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="group__power__save.html#ga95c1666038493a7f95be6768882eebad" title="Puts the CPU to sleep for a specific duration.The analog to digital converter and the brown out detec...">sleepFor</a>(<a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36" title="Duration to put the CPU to sleep with sleepFor().">SleepDuration</a> duration, uint8_t mode)</div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="group__power__save.html#ga95c1666038493a7f95be6768882eebad"> 132</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="group__power__save.html#ga95c1666038493a7f95be6768882eebad">sleepFor</a>(<a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36">SleepDuration</a> duration, uint8_t mode)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;{</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// Turn off the analog to digital converter.</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; ADCSRA &amp;= ~(1 &lt;&lt; ADEN);</div>
@ -149,12 +150,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment">/*\@}*/</span></div>
<div class="ttc" id="group__power__save_html_ga95c1666038493a7f95be6768882eebad"><div class="ttname"><a href="group__power__save.html#ga95c1666038493a7f95be6768882eebad">sleepFor</a></div><div class="ttdeci">void sleepFor(SleepDuration duration, uint8_t mode)</div><div class="ttdoc">Puts the CPU to sleep for a specific duration.The analog to digital converter and the brown out detec...</div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8cpp_source.html#l00132">PowerSave.cpp:132</a></div></div>
<div class="ttc" id="group__power__save_html_gabdc6266a040b28c4d79028ddb0ceae36"><div class="ttname"><a href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36">SleepDuration</a></div><div class="ttdeci">SleepDuration</div><div class="ttdoc">Duration to put the CPU to sleep with sleepFor(). </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00038">PowerSave.h:38</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: PowerSave.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -118,35 +119,48 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &lt;WProgram.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792"> 32</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792" title="Marks an I/O pin as unused.This function sets pin to be an input with pullups enabled, which will reduce power consumption compared to pins that are left floating.">unusedPin</a>(uint8_t pin)</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792"> 32</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792">unusedPin</a>(uint8_t pin)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; pinMode(pin, INPUT);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; digitalWrite(pin, HIGH);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;}</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36"> 38</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36" title="Duration to put the CPU to sleep with sleepFor().">SleepDuration</a></div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36"> 38</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36">SleepDuration</a></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a3d16487a7386c6348f1c1d886564e3c4"> 40</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a3d16487a7386c6348f1c1d886564e3c4" title="Sleep for 15 milliseconds.">SLEEP_15_MS</a>,</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36af31050c5ef733b3e231920143b041825"> 41</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36af31050c5ef733b3e231920143b041825" title="Sleep for 30 milliseconds.">SLEEP_30_MS</a>,</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a716f5a9f35e77a2d334ad71f05bd5fdc"> 42</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a716f5a9f35e77a2d334ad71f05bd5fdc" title="Sleep for 60 milliseconds.">SLEEP_60_MS</a>,</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a96fa577b54aa6f2341ea5ddd839aa8bc"> 43</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a96fa577b54aa6f2341ea5ddd839aa8bc" title="Sleep for 120 milliseconds.">SLEEP_120_MS</a>,</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36abcbf68cfdb688220da61ac98b1a2ec69"> 44</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36abcbf68cfdb688220da61ac98b1a2ec69" title="Sleep for 250 milliseconds.">SLEEP_250_MS</a>,</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36aa49e4d5f92a5f48070dde0babf75a9b0"> 45</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36aa49e4d5f92a5f48070dde0babf75a9b0" title="Sleep for 500 milliseconds.">SLEEP_500_MS</a>,</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a92310daf29e5899770b80c1c4e850b9b"> 46</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a92310daf29e5899770b80c1c4e850b9b" title="Sleep for 1 second.">SLEEP_1_SEC</a>,</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a04571aa0b801c28cd756513303b229cd"> 47</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a04571aa0b801c28cd756513303b229cd" title="Sleep for 2 seconds.">SLEEP_2_SEC</a>,</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a4cba1036d7a69225110b68b372f10410"> 48</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a4cba1036d7a69225110b68b372f10410" title="Sleep for 4 seconds.">SLEEP_4_SEC</a>,</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a8c47dd1ef81c2f41da7525b5ee4bfc3a"> 49</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a8c47dd1ef81c2f41da7525b5ee4bfc3a" title="Sleep for 8 seconds.">SLEEP_8_SEC</a></div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a3d16487a7386c6348f1c1d886564e3c4"> 40</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a3d16487a7386c6348f1c1d886564e3c4">SLEEP_15_MS</a>,</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36af31050c5ef733b3e231920143b041825"> 41</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36af31050c5ef733b3e231920143b041825">SLEEP_30_MS</a>,</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a716f5a9f35e77a2d334ad71f05bd5fdc"> 42</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a716f5a9f35e77a2d334ad71f05bd5fdc">SLEEP_60_MS</a>,</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a96fa577b54aa6f2341ea5ddd839aa8bc"> 43</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a96fa577b54aa6f2341ea5ddd839aa8bc">SLEEP_120_MS</a>,</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36abcbf68cfdb688220da61ac98b1a2ec69"> 44</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36abcbf68cfdb688220da61ac98b1a2ec69">SLEEP_250_MS</a>,</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36aa49e4d5f92a5f48070dde0babf75a9b0"> 45</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36aa49e4d5f92a5f48070dde0babf75a9b0">SLEEP_500_MS</a>,</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a92310daf29e5899770b80c1c4e850b9b"> 46</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a92310daf29e5899770b80c1c4e850b9b">SLEEP_1_SEC</a>,</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a04571aa0b801c28cd756513303b229cd"> 47</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a04571aa0b801c28cd756513303b229cd">SLEEP_2_SEC</a>,</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a4cba1036d7a69225110b68b372f10410"> 48</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a4cba1036d7a69225110b68b372f10410">SLEEP_4_SEC</a>,</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a8c47dd1ef81c2f41da7525b5ee4bfc3a"> 49</a></span>&#160; <a class="code" href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a8c47dd1ef81c2f41da7525b5ee4bfc3a">SLEEP_8_SEC</a></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;};</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group__power__save.html#ga95c1666038493a7f95be6768882eebad" title="Puts the CPU to sleep for a specific duration.The analog to digital converter and the brown out detec...">sleepFor</a>(<a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36" title="Duration to put the CPU to sleep with sleepFor().">SleepDuration</a> duration, uint8_t mode = 0);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group__power__save.html#ga95c1666038493a7f95be6768882eebad">sleepFor</a>(<a class="code" href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36">SleepDuration</a> duration, uint8_t mode = 0);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="group__power__save_html_ga6dbe8e20a70e83cf5b068177675ec792"><div class="ttname"><a href="group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792">unusedPin</a></div><div class="ttdeci">void unusedPin(uint8_t pin)</div><div class="ttdoc">Marks an I/O pin as unused.This function sets pin to be an input with pullups enabled, which will reduce power consumption compared to pins that are left floating. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00032">PowerSave.h:32</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a716f5a9f35e77a2d334ad71f05bd5fdc"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a716f5a9f35e77a2d334ad71f05bd5fdc">SLEEP_60_MS</a></div><div class="ttdoc">Sleep for 60 milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00042">PowerSave.h:42</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36abcbf68cfdb688220da61ac98b1a2ec69"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36abcbf68cfdb688220da61ac98b1a2ec69">SLEEP_250_MS</a></div><div class="ttdoc">Sleep for 250 milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00044">PowerSave.h:44</a></div></div>
<div class="ttc" id="group__power__save_html_ga95c1666038493a7f95be6768882eebad"><div class="ttname"><a href="group__power__save.html#ga95c1666038493a7f95be6768882eebad">sleepFor</a></div><div class="ttdeci">void sleepFor(SleepDuration duration, uint8_t mode=0)</div><div class="ttdoc">Puts the CPU to sleep for a specific duration.The analog to digital converter and the brown out detec...</div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8cpp_source.html#l00132">PowerSave.cpp:132</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a96fa577b54aa6f2341ea5ddd839aa8bc"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a96fa577b54aa6f2341ea5ddd839aa8bc">SLEEP_120_MS</a></div><div class="ttdoc">Sleep for 120 milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00043">PowerSave.h:43</a></div></div>
<div class="ttc" id="group__power__save_html_gabdc6266a040b28c4d79028ddb0ceae36"><div class="ttname"><a href="group__power__save.html#gabdc6266a040b28c4d79028ddb0ceae36">SleepDuration</a></div><div class="ttdeci">SleepDuration</div><div class="ttdoc">Duration to put the CPU to sleep with sleepFor(). </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00038">PowerSave.h:38</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36af31050c5ef733b3e231920143b041825"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36af31050c5ef733b3e231920143b041825">SLEEP_30_MS</a></div><div class="ttdoc">Sleep for 30 milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00041">PowerSave.h:41</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a04571aa0b801c28cd756513303b229cd"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a04571aa0b801c28cd756513303b229cd">SLEEP_2_SEC</a></div><div class="ttdoc">Sleep for 2 seconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00047">PowerSave.h:47</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a8c47dd1ef81c2f41da7525b5ee4bfc3a"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a8c47dd1ef81c2f41da7525b5ee4bfc3a">SLEEP_8_SEC</a></div><div class="ttdoc">Sleep for 8 seconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00049">PowerSave.h:49</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a92310daf29e5899770b80c1c4e850b9b"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a92310daf29e5899770b80c1c4e850b9b">SLEEP_1_SEC</a></div><div class="ttdoc">Sleep for 1 second. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00046">PowerSave.h:46</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a4cba1036d7a69225110b68b372f10410"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a4cba1036d7a69225110b68b372f10410">SLEEP_4_SEC</a></div><div class="ttdoc">Sleep for 4 seconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00048">PowerSave.h:48</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36aa49e4d5f92a5f48070dde0babf75a9b0"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36aa49e4d5f92a5f48070dde0babf75a9b0">SLEEP_500_MS</a></div><div class="ttdoc">Sleep for 500 milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00045">PowerSave.h:45</a></div></div>
<div class="ttc" id="group__power__save_html_ggabdc6266a040b28c4d79028ddb0ceae36a3d16487a7386c6348f1c1d886564e3c4"><div class="ttname"><a href="group__power__save.html#ggabdc6266a040b28c4d79028ddb0ceae36a3d16487a7386c6348f1c1d886564e3c4">SLEEP_15_MS</a></div><div class="ttdoc">Sleep for 15 milliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="PowerSave_8h_source.html#l00040">PowerSave.h:40</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: RC5.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -434,9 +435,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

373
RNG_8cpp_source.html Normal file
View File

@ -0,0 +1,373 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: RNG.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">RNG.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;RNG.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;NoiseSource.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;ChaCha.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;utility/ProgMemUtil.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;Arduino.h&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;avr/eeprom.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<a class="code" href="classRNGClass.html">RNGClass</a> RNG;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment">// Number of ChaCha hash rounds to use for random number generation.</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor">#define RNG_ROUNDS 20</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">// Force a rekey after this many blocks of random data.</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor">#define RNG_REKEY_BLOCKS 16</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment">// Maximum entropy credit that can be contained in the pool.</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#define RNG_MAX_CREDITS 384</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment">// Tag for 256-bit ChaCha20 keys. This will always appear in the</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">// first 16 bytes of the block. The remaining 48 bytes are the seed.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> tagRNG[16] PROGMEM = {</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;p&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;d&#39;</span>, <span class="charliteral">&#39; &#39;</span>, <span class="charliteral">&#39;3&#39;</span>,</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;-&#39;</span>, <span class="charliteral">&#39;b&#39;</span>, <span class="charliteral">&#39;y&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39; &#39;</span>, <span class="charliteral">&#39;k&#39;</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;};</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment">// Initialization seed. This is the ChaCha20 output of hashing</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment">// &quot;expand 32-byte k&quot; followed by 48 bytes set to the numbers 1 to 48.</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment">// The ChaCha20 output block is then truncated to the first 48 bytes.</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment">// This value is intended to start the RNG in a semi-chaotic state if</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// we don&#39;t have a previously saved seed in EEPROM.</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint8_t initRNG[48] PROGMEM = {</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; 0xB0, 0x2A, 0xAE, 0x7D, 0xEE, 0xCB, 0xBB, 0xB1,</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; 0xFC, 0x03, 0x6F, 0xDD, 0xDC, 0x7D, 0x76, 0x67,</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; 0x0C, 0xE8, 0x1F, 0x0D, 0xA3, 0xA0, 0xAA, 0x1E,</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; 0xB0, 0xBD, 0x72, 0x6B, 0x2B, 0x4C, 0x8A, 0x7E,</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; 0x34, 0xFC, 0x37, 0x60, 0xF4, 0x1E, 0x22, 0xA0,</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; 0x0B, 0xFB, 0x18, 0x84, 0x60, 0xA5, 0x77, 0x72</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;};</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classRNGClass.html#acbcf327242f51ae2d9209aeaa45e30e9"> 167</a></span>&#160;<a class="code" href="classRNGClass.html#acbcf327242f51ae2d9209aeaa45e30e9">RNGClass::RNGClass</a>()</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; : address(0)</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; , credits(0)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; , firstSave(1)</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; , timer(0)</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; , timeout(3600000UL) <span class="comment">// 1 hour in milliseconds</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;}</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31"> 179</a></span>&#160;<a class="code" href="classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31">RNGClass::~RNGClass</a>()</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; clean(block);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; clean(stream);</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
<div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8"> 202</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8">RNGClass::begin</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag, <span class="keywordtype">int</span> eepromAddress)</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// Save the EEPROM address for use by save().</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; address = eepromAddress;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// Initialize the ChaCha20 input block from the saved seed.</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; memcpy_P(block, tagRNG, <span class="keyword">sizeof</span>(tagRNG));</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; memcpy_P(block + 4, initRNG, <span class="keyword">sizeof</span>(initRNG));</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (eeprom_read_byte((<span class="keyword">const</span> uint8_t *)address) == <span class="charliteral">&#39;S&#39;</span>) {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// We have a saved seed: XOR it with the initialization block.</span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> posn = 0; posn &lt; 12; ++posn) {</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; block[posn + 4] ^=</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; eeprom_read_dword((<span class="keyword">const</span> uint32_t *)(address + posn * 4 + 1));</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">// No entropy credits for the saved seed.</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; credits = 0;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// Trigger an automatic save once the entropy credits max out.</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; firstSave = 1;</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Rekey the random number generator immediately.</span></div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; rekey();</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Stir in the supplied tag data but don&#39;t credit any entropy to it.</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span> (tag)</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">stir</a>((<span class="keyword">const</span> uint8_t *)tag, strlen(tag));</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// Re-save the seed to obliterate the previous value and to ensure</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// that if the system is reset without a call to save() that we won&#39;t</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// accidentally generate the same sequence of random data again.</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">save</a>();</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;}</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div>
<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d"> 253</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d">RNGClass::setAutoSaveTime</a>(uint16_t minutes)</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span> (!minutes)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; minutes = 1; <span class="comment">// Just in case.</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; timeout = ((uint32_t)minutes) * 60000U;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div>
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29"> 277</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">RNGClass::rand</a>(uint8_t *data, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;{</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// Decrease the amount of entropy in the pool.</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (len &gt; (credits / 8))</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; credits = 0;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; credits -= len * 8;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// Generate the random data.</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; uint8_t count = 0;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Force a rekey if we have generated too many blocks in this request.</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (count &gt;= RNG_REKEY_BLOCKS) {</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; rekey();</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; count = 1;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; ++count;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Increment the low counter word and generate a new keystream block.</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; ++(block[12]);</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a>(stream, block, RNG_ROUNDS);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// Copy the data to the return buffer.</span></div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (len &lt; 64) {</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; memcpy(data, stream, len);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; memcpy(data, stream, 64);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; data += 64;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; len -= 64;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// Force a rekey after every request.</span></div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; rekey();</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div>
<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classRNGClass.html#a49e3231ba65a5e4b045bc90976e0a659"> 354</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classRNGClass.html#a49e3231ba65a5e4b045bc90976e0a659">RNGClass::available</a>(<span class="keywordtype">size_t</span> len)<span class="keyword"> const</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (len &gt;= (RNG_MAX_CREDITS / 8))</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">return</span> credits &gt;= RNG_MAX_CREDITS;</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> len &lt;= (credits / 8);</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;}</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div>
<div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02"> 387</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">RNGClass::stir</a>(<span class="keyword">const</span> uint8_t *data, <span class="keywordtype">size_t</span> len, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> credit)</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;{</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// Increase the entropy credit.</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span> ((credit / 8) &gt;= len)</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; credit = len * 8;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span> ((RNG_MAX_CREDITS - credits) &gt; credit)</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; credits += credit;</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; credits = RNG_MAX_CREDITS;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// Process the supplied input data.</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">if</span> (len &gt; 0) {</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// XOR the data with the ChaCha input block in 48 byte</span></div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// chunks and rekey the ChaCha cipher for each chunk to mix</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// the data in. This should scatter any &quot;true entropy&quot; in</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// the input across the entire block.</span></div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordtype">size_t</span> templen = len;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">if</span> (templen &gt; 48)</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; templen = 48;</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; uint8_t *output = ((uint8_t *)block) + 16;</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; len -= templen;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">while</span> (templen &gt; 0) {</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; *output++ ^= *data++;</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; --templen;</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; rekey();</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// There was no input data, so just force a rekey so we</span></div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// get some mixing of the state even without new data.</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; rekey();</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// Save if this is the first time we have reached max entropy.</span></div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// This provides some protection if the system is powered off before</span></div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// the first auto-save timeout occurs.</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (firstSave &amp;&amp; credits &gt;= RNG_MAX_CREDITS) {</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; firstSave = 0;</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">save</a>();</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;}</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div>
<div class="line"><a name="l00437"></a><span class="lineno"><a class="line" href="classRNGClass.html#a541e4118e2ed10617480bb9949f9c516"> 437</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">RNGClass::stir</a>(<a class="code" href="classNoiseSource.html">NoiseSource</a> &amp;source)</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;{</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; source.<a class="code" href="classNoiseSource.html#a7ce647815524fe84f562aca5256e12f3">stir</a>();</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;}</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;</div>
<div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classRNGClass.html#a139584fb249148e2058d1d645d090db7"> 468</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">RNGClass::save</a>()</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;{</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// Generate random data from the current state and save</span></div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// that as the seed. Then force a rekey.</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; ++(block[12]);</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a>(stream, block, RNG_ROUNDS);</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; eeprom_write_block(stream, (<span class="keywordtype">void</span> *)(address + 1), 48);</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; eeprom_update_byte((uint8_t *)address, <span class="charliteral">&#39;S&#39;</span>);</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; rekey();</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; timer = millis();</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div>
<div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classRNGClass.html#a8cb91e39f0c4591de5bf98b1e2880b13"> 486</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a8cb91e39f0c4591de5bf98b1e2880b13">RNGClass::loop</a>()</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;{</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// Save the seed if the auto-save timer has expired.</span></div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> ((millis() - timer) &gt;= timeout)</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">save</a>();</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;}</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div>
<div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00"> 513</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00">RNGClass::destroy</a>()</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;{</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; clean(block);</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; clean(stream);</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> posn = 0; posn &lt; <a class="code" href="classRNGClass.html#ae3a013bfc73795fd26ee36e70d89f4c2">SEED_SIZE</a>; ++posn)</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; eeprom_write_byte((uint8_t *)(address + posn), 0xFF);</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;}</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="keywordtype">void</span> RNGClass::rekey()</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;{</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// Rekey the cipher for the next request by generating a new block.</span></div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// This is intended to make it difficult to wind the random number</span></div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// backwards if the state is captured later. The first 16 bytes of</span></div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// &quot;block&quot; remain set to &quot;tagRNG&quot;.</span></div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; ++(block[12]);</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a>(stream, block, RNG_ROUNDS);</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; memcpy(block + 4, stream, 48);</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// Permute the high word of the counter using the system microsecond</span></div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// counter to introduce a little bit of non-stir randomness for each</span></div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// request. Note: If random data is requested on a predictable schedule</span></div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// then this may not help very much. It is still necessary to stir in</span></div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// high quality entropy data on a regular basis using stir().</span></div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; block[13] ^= micros();</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;}</div>
<div class="ttc" id="classRNGClass_html_a139584fb249148e2058d1d645d090db7"><div class="ttname"><a href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">RNGClass::save</a></div><div class="ttdeci">void save()</div><div class="ttdoc">Saves the random seed to EEPROM. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00468">RNG.cpp:468</a></div></div>
<div class="ttc" id="classRNGClass_html_a418a833cf18198fd7e5d6dbd78c99c29"><div class="ttname"><a href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">RNGClass::rand</a></div><div class="ttdeci">void rand(uint8_t *data, size_t len)</div><div class="ttdoc">Generates random bytes into a caller-supplied buffer. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00277">RNG.cpp:277</a></div></div>
<div class="ttc" id="classRNGClass_html_a7f1aab3c324f8e8a424d683425e0fcf8"><div class="ttname"><a href="classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8">RNGClass::begin</a></div><div class="ttdeci">void begin(const char *tag, int eepromAddress)</div><div class="ttdoc">Initializes the random number generator. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00202">RNG.cpp:202</a></div></div>
<div class="ttc" id="classNoiseSource_html_a7ce647815524fe84f562aca5256e12f3"><div class="ttname"><a href="classNoiseSource.html#a7ce647815524fe84f562aca5256e12f3">NoiseSource::stir</a></div><div class="ttdeci">virtual void stir()=0</div><div class="ttdoc">Stirs entropy from this noise source into the global random number pool. </div></div>
<div class="ttc" id="classNoiseSource_html"><div class="ttname"><a href="classNoiseSource.html">NoiseSource</a></div><div class="ttdoc">Abstract base class for random noise sources. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8h_source.html#l00029">NoiseSource.h:29</a></div></div>
<div class="ttc" id="classRNGClass_html_aef3ee2fb14a39caf650dc90a0226dd31"><div class="ttname"><a href="classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31">RNGClass::~RNGClass</a></div><div class="ttdeci">~RNGClass()</div><div class="ttdoc">Destroys this random number generator instance. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00179">RNG.cpp:179</a></div></div>
<div class="ttc" id="classRNGClass_html_acbcf327242f51ae2d9209aeaa45e30e9"><div class="ttname"><a href="classRNGClass.html#acbcf327242f51ae2d9209aeaa45e30e9">RNGClass::RNGClass</a></div><div class="ttdeci">RNGClass()</div><div class="ttdoc">Constructs a new random number generator instance. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00167">RNG.cpp:167</a></div></div>
<div class="ttc" id="classRNGClass_html_a9901367d86f2303a59bbc12fe91cad00"><div class="ttname"><a href="classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00">RNGClass::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Destroys the data in the random number pool and the saved seed in EEPROM. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00513">RNG.cpp:513</a></div></div>
<div class="ttc" id="classRNGClass_html_a49e3231ba65a5e4b045bc90976e0a659"><div class="ttname"><a href="classRNGClass.html#a49e3231ba65a5e4b045bc90976e0a659">RNGClass::available</a></div><div class="ttdeci">bool available(size_t len) const </div><div class="ttdoc">Determine if there is sufficient entropy available for a specific request size. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00354">RNG.cpp:354</a></div></div>
<div class="ttc" id="classRNGClass_html_a8cb91e39f0c4591de5bf98b1e2880b13"><div class="ttname"><a href="classRNGClass.html#a8cb91e39f0c4591de5bf98b1e2880b13">RNGClass::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdoc">Run periodic housekeeping tasks on the random number generator. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00486">RNG.cpp:486</a></div></div>
<div class="ttc" id="classRNGClass_html"><div class="ttname"><a href="classRNGClass.html">RNGClass</a></div><div class="ttdoc">Pseudo random number generator suitable for cryptography. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8h_source.html#l00031">RNG.h:31</a></div></div>
<div class="ttc" id="classRNGClass_html_ae3a013bfc73795fd26ee36e70d89f4c2"><div class="ttname"><a href="classRNGClass.html#ae3a013bfc73795fd26ee36e70d89f4c2">RNGClass::SEED_SIZE</a></div><div class="ttdeci">static const int SEED_SIZE</div><div class="ttdoc">Size of a saved random number seed in EEPROM space. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8h_source.html#l00053">RNG.h:53</a></div></div>
<div class="ttc" id="classChaCha_html_a41ac3262e52ff49dcd916d0b3b2e2038"><div class="ttname"><a href="classChaCha.html#a41ac3262e52ff49dcd916d0b3b2e2038">ChaCha::hashCore</a></div><div class="ttdeci">static void hashCore(uint32_t *output, const uint32_t *input, uint8_t rounds)</div><div class="ttdoc">Executes the ChaCha hash core on an input memory block. </div><div class="ttdef"><b>Definition:</b> <a href="ChaCha_8cpp_source.html#l00230">ChaCha.cpp:230</a></div></div>
<div class="ttc" id="classRNGClass_html_ad99535ea23ae2fec55bdebb8c24def02"><div class="ttname"><a href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">RNGClass::stir</a></div><div class="ttdeci">void stir(const uint8_t *data, size_t len, unsigned int credit=0)</div><div class="ttdoc">Stirs additional entropy data into the random pool. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00387">RNG.cpp:387</a></div></div>
<div class="ttc" id="classRNGClass_html_a5848e87a5f2f0302c88b0377f0e3366d"><div class="ttname"><a href="classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d">RNGClass::setAutoSaveTime</a></div><div class="ttdeci">void setAutoSaveTime(uint16_t minutes)</div><div class="ttdoc">Sets the amount of time between automatic seed saves. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00253">RNG.cpp:253</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

181
RNG_8h_source.html Normal file
View File

@ -0,0 +1,181 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: RNG.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">RNG.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_RNG_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_RNG_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">class </span><a class="code" href="classNoiseSource.html">NoiseSource</a>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classRNGClass.html"> 31</a></span>&#160;<span class="keyword">class </span><a class="code" href="classRNGClass.html">RNGClass</a></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classRNGClass.html#acbcf327242f51ae2d9209aeaa45e30e9">RNGClass</a>();</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31">~RNGClass</a>();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8">begin</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag, <span class="keywordtype">int</span> eepromAddress);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d">setAutoSaveTime</a>(uint16_t minutes);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">rand</a>(uint8_t *data, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classRNGClass.html#a49e3231ba65a5e4b045bc90976e0a659">available</a>(<span class="keywordtype">size_t</span> len) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">stir</a>(<span class="keyword">const</span> uint8_t *data, <span class="keywordtype">size_t</span> len, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> credit = 0);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">stir</a>(<a class="code" href="classNoiseSource.html">NoiseSource</a> &amp;source);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">save</a>();</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a8cb91e39f0c4591de5bf98b1e2880b13">loop</a>();</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00">destroy</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classRNGClass.html#ae3a013bfc73795fd26ee36e70d89f4c2"> 53</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classRNGClass.html#ae3a013bfc73795fd26ee36e70d89f4c2">SEED_SIZE</a> = 49;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; uint32_t block[16];</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; uint32_t stream[16];</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">int</span> address;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; uint16_t credits : 15;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; uint16_t firstSave : 1;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timer;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">void</span> rekey();</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;};</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">extern</span> <a class="code" href="classRNGClass.html">RNGClass</a> RNG;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classRNGClass_html_a139584fb249148e2058d1d645d090db7"><div class="ttname"><a href="classRNGClass.html#a139584fb249148e2058d1d645d090db7">RNGClass::save</a></div><div class="ttdeci">void save()</div><div class="ttdoc">Saves the random seed to EEPROM. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00468">RNG.cpp:468</a></div></div>
<div class="ttc" id="classRNGClass_html_a418a833cf18198fd7e5d6dbd78c99c29"><div class="ttname"><a href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">RNGClass::rand</a></div><div class="ttdeci">void rand(uint8_t *data, size_t len)</div><div class="ttdoc">Generates random bytes into a caller-supplied buffer. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00277">RNG.cpp:277</a></div></div>
<div class="ttc" id="classRNGClass_html_a7f1aab3c324f8e8a424d683425e0fcf8"><div class="ttname"><a href="classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8">RNGClass::begin</a></div><div class="ttdeci">void begin(const char *tag, int eepromAddress)</div><div class="ttdoc">Initializes the random number generator. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00202">RNG.cpp:202</a></div></div>
<div class="ttc" id="classNoiseSource_html"><div class="ttname"><a href="classNoiseSource.html">NoiseSource</a></div><div class="ttdoc">Abstract base class for random noise sources. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8h_source.html#l00029">NoiseSource.h:29</a></div></div>
<div class="ttc" id="classRNGClass_html_aef3ee2fb14a39caf650dc90a0226dd31"><div class="ttname"><a href="classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31">RNGClass::~RNGClass</a></div><div class="ttdeci">~RNGClass()</div><div class="ttdoc">Destroys this random number generator instance. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00179">RNG.cpp:179</a></div></div>
<div class="ttc" id="classRNGClass_html_acbcf327242f51ae2d9209aeaa45e30e9"><div class="ttname"><a href="classRNGClass.html#acbcf327242f51ae2d9209aeaa45e30e9">RNGClass::RNGClass</a></div><div class="ttdeci">RNGClass()</div><div class="ttdoc">Constructs a new random number generator instance. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00167">RNG.cpp:167</a></div></div>
<div class="ttc" id="classRNGClass_html_a9901367d86f2303a59bbc12fe91cad00"><div class="ttname"><a href="classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00">RNGClass::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Destroys the data in the random number pool and the saved seed in EEPROM. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00513">RNG.cpp:513</a></div></div>
<div class="ttc" id="classRNGClass_html_a49e3231ba65a5e4b045bc90976e0a659"><div class="ttname"><a href="classRNGClass.html#a49e3231ba65a5e4b045bc90976e0a659">RNGClass::available</a></div><div class="ttdeci">bool available(size_t len) const </div><div class="ttdoc">Determine if there is sufficient entropy available for a specific request size. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00354">RNG.cpp:354</a></div></div>
<div class="ttc" id="classRNGClass_html_a8cb91e39f0c4591de5bf98b1e2880b13"><div class="ttname"><a href="classRNGClass.html#a8cb91e39f0c4591de5bf98b1e2880b13">RNGClass::loop</a></div><div class="ttdeci">void loop()</div><div class="ttdoc">Run periodic housekeeping tasks on the random number generator. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00486">RNG.cpp:486</a></div></div>
<div class="ttc" id="classRNGClass_html"><div class="ttname"><a href="classRNGClass.html">RNGClass</a></div><div class="ttdoc">Pseudo random number generator suitable for cryptography. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8h_source.html#l00031">RNG.h:31</a></div></div>
<div class="ttc" id="classRNGClass_html_ae3a013bfc73795fd26ee36e70d89f4c2"><div class="ttname"><a href="classRNGClass.html#ae3a013bfc73795fd26ee36e70d89f4c2">RNGClass::SEED_SIZE</a></div><div class="ttdeci">static const int SEED_SIZE</div><div class="ttdoc">Size of a saved random number seed in EEPROM space. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8h_source.html#l00053">RNG.h:53</a></div></div>
<div class="ttc" id="classRNGClass_html_ad99535ea23ae2fec55bdebb8c24def02"><div class="ttname"><a href="classRNGClass.html#ad99535ea23ae2fec55bdebb8c24def02">RNGClass::stir</a></div><div class="ttdeci">void stir(const uint8_t *data, size_t len, unsigned int credit=0)</div><div class="ttdoc">Stirs additional entropy data into the random pool. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00387">RNG.cpp:387</a></div></div>
<div class="ttc" id="classRNGClass_html_a5848e87a5f2f0302c88b0377f0e3366d"><div class="ttname"><a href="classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d">RNGClass::setAutoSaveTime</a></div><div class="ttdeci">void setAutoSaveTime(uint16_t minutes)</div><div class="ttdoc">Sets the amount of time between automatic seed saves. </div><div class="ttdef"><b>Definition:</b> <a href="RNG_8cpp_source.html#l00253">RNG.cpp:253</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: RTC.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -152,28 +153,28 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> (year % 4) == 0;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">inline</span> uint8_t monthLength(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">inline</span> uint8_t monthLength(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *date)</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> != 2 || !isLeapYear(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>))</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> monthLengths[date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> - 1];</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> != 2 || !isLeapYear(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>))</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> monthLengths[date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> - 1];</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> 29;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2"> 105</a></span>&#160;<a class="code" href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2" title="Constructs a new realtime clock handler.">RTC::RTC</a>()</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2"> 105</a></span>&#160;<a class="code" href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2">RTC::RTC</a>()</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; : midnight(millis() - 9 * MILLIS_PER_HOUR) <span class="comment">// Simulated clock starts at 9am</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; , nvram(0)</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;{</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// Start the simulated date at 1 Jan, 2000.</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; date.<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = 1;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; date.<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 1;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; date.<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = 2000;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; date.<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = 1;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; date.<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 1;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; date.<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = 2000;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// Set all simulated alarms to 6am by default.</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 0; index &lt; <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a>; ++index) {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; alarms[index].<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a> = 6;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; alarms[index].<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a> = 0;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; alarms[index].<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a> = 0;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span> (uint8_t index = 0; index &lt; <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a>; ++index) {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; alarms[index].<a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a> = 6;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; alarms[index].<a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a> = 0;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; alarms[index].<a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a> = 0;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div>
@ -183,12 +184,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; free(nvram);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="code" href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30"> 134</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30" title="Returns true if the realtime clock has updated since the last call to this function.">RTC::hasUpdates</a>()</div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30"> 134</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30">RTC::hasUpdates</a>()</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;{</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;}</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div>
<div class="line"><a name="l00144"></a><span class="lineno"><a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec"> 144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec" title="Reads the current time from the realtime clock into value.">RTC::readTime</a>(<a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value)</div>
<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec"> 144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a>(<a class="code" href="structRTCTime.html">RTCTime</a> *value)</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Determine the number of seconds since the last midnight event.</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sinceMidnight = millis() - midnight;</div>
@ -198,49 +199,49 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; sinceMidnight -= MILLIS_PER_DAY;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// Increment the simulated date.</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d" title="Adjusts date up or down one day according to flags.">adjustDays</a>(&amp;date, <a class="code" href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37" title="Increment the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().">INCREMENT</a>);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d">adjustDays</a>(&amp;date, <a class="code" href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37">INCREMENT</a>);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a> = (uint8_t)(((sinceMidnight / MILLIS_PER_SECOND) % 60));</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a> = (uint8_t)(((sinceMidnight / MILLIS_PER_MINUTE) % 60));</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a> = (uint8_t)(sinceMidnight / MILLIS_PER_HOUR);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a> = (uint8_t)(((sinceMidnight / MILLIS_PER_SECOND) % 60));</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a> = (uint8_t)(((sinceMidnight / MILLIS_PER_MINUTE) % 60));</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a> = (uint8_t)(sinceMidnight / MILLIS_PER_HOUR);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e"> 169</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e" title="Reads the current date from the realtime clock into value.">RTC::readDate</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value)</div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e"> 169</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *value)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; *value = date;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;}</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e"> 179</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e" title="Updates the time in the realtime clock to match value.">RTC::writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value)</div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e"> 179</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html">RTCTime</a> *value)</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// Adjust the position of the last simulated midnight event.</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sinceMidnight =</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a> * MILLIS_PER_SECOND +</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a> * MILLIS_PER_MINUTE +</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a> * MILLIS_PER_HOUR;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a> * MILLIS_PER_SECOND +</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a> * MILLIS_PER_MINUTE +</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; value-&gt;<a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a> * MILLIS_PER_HOUR;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; midnight = millis() - sinceMidnight;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;}</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
<div class="line"><a name="l00194"></a><span class="lineno"><a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7"> 194</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7" title="Updates the date in the realtime clock to match value.">RTC::writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value)</div>
<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7"> 194</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *value)</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;{</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; date = *value;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
<div class="line"><a name="l00209"></a><span class="lineno"><a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66"> 209</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66" title="Reads the details of the alarm with index alarmNum into value.">RTC::readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66"> 209</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;{</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; *value = alarms[alarmNum];</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;}</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e"> 224</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e" title="Updates the details of the alarm with index alarmNum from value.">RTC::writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e"> 224</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value)</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; alarms[alarmNum] = *value;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;}</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="code" href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8"> 235</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8" title="Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...">RTC::byteCount</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8"> 235</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8">RTC::byteCount</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> DEFAULT_BYTE_COUNT;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;}</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431"> 247</a></span>&#160;uint8_t <a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">RTC::readByte</a>(uint8_t offset)</div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431"> 247</a></span>&#160;uint8_t <a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a>(uint8_t offset)</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;{</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (nvram)</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> nvram[offset];</div>
@ -248,7 +249,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;}</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div>
<div class="line"><a name="l00262"></a><span class="lineno"><a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749"> 262</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">RTC::writeByte</a>(uint8_t offset, uint8_t value)</div>
<div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749"> 262</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a>(uint8_t offset, uint8_t value)</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;{</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">if</span> (nvram) {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; nvram[offset] = value;</div>
@ -261,93 +262,127 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;}</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="code" href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a"> 288</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a" title="Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...">RTC::readTemperature</a>()</div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a"> 288</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a">RTC::readTemperature</a>()</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;{</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8" title="Value that is returned from readTemperature() if the realtime clock chip cannot determine the tempera...">NO_TEMPERATURE</a>;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8">NO_TEMPERATURE</a>;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;}</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div>
<div class="line"><a name="l00313"></a><span class="lineno"><a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d"> 313</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d" title="Adjusts date up or down one day according to flags.">RTC::adjustDays</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date, uint8_t flags)</div>
<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d"> 313</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d">RTC::adjustDays</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *date, uint8_t flags)</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (flags &amp; <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f" title="Decrement the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().">DECREMENT</a>) {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a>);</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> == 0) {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb" title="Wrap around to the beginning of the current month/year rather than advance to the next one...">WRAP</a>)) {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>);</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> == 0)</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 12;</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (flags &amp; <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f">DECREMENT</a>) {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a>);</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> == 0) {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb">WRAP</a>)) {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>);</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> == 0)</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 12;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = monthLength(date);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = monthLength(date);</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a>);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> &gt; monthLength(date)) {</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb" title="Wrap around to the beginning of the current month/year rather than advance to the next one...">WRAP</a>)) {</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>);</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> == 13)</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 1;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a>);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> &gt; monthLength(date)) {</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb">WRAP</a>)) {</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>);</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> == 13)</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 1;</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = 1;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = 1;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div>
<div class="line"><a name="l00343"></a><span class="lineno"><a class="code" href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4"> 343</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4" title="Adjusts date up or down one month according to flags.">RTC::adjustMonths</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date, uint8_t flags)</div>
<div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4"> 343</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4">RTC::adjustMonths</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *date, uint8_t flags)</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;{</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (flags &amp; <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f" title="Decrement the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().">DECREMENT</a>) {</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> == 0) {</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 12;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb" title="Wrap around to the beginning of the current month/year rather than advance to the next one...">WRAP</a>) &amp;&amp; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> &gt; 2000)</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>);</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (flags &amp; <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f">DECREMENT</a>) {</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> == 0) {</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 12;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb">WRAP</a>) &amp;&amp; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> &gt; 2000)</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>);</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> == 13) {</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> = 1;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb" title="Wrap around to the beginning of the current month/year rather than advance to the next one...">WRAP</a>) &amp;&amp; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> &lt; 2099)</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>);</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> == 13) {</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> = 1;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (!(flags &amp; <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb">WRAP</a>) &amp;&amp; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> &lt; 2099)</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>);</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; uint8_t len = monthLength(date);</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> &gt; len)</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = len;</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> &gt; len)</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = len;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;}</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div>
<div class="line"><a name="l00370"></a><span class="lineno"><a class="code" href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d"> 370</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d" title="Adjusts date up or down one year according to flags.">RTC::adjustYears</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date, uint8_t flags)</div>
<div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d"> 370</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d">RTC::adjustYears</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *date, uint8_t flags)</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;{</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (flags &amp; <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f" title="Decrement the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().">DECREMENT</a>) {</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>);</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> &lt; 2000)</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = 2000;</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (flags &amp; <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f">DECREMENT</a>) {</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; --(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>);</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> &lt; 2000)</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = 2000;</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>);</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> &gt; 2099)</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> = 2099;</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; ++(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>);</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> &gt; 2099)</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> = 2099;</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; }</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; uint8_t len = monthLength(date);</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> &gt; len)</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> = len;</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> &gt; len)</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> = len;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;}</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div>
<div class="line"><a name="l00399"></a><span class="lineno"><a class="code" href="classRTC.html#a525a9c1dad89613708f47a683eb316aa"> 399</a></span>&#160;<a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11" title="Day of the week corresponding to a date.">RTC::DayOfWeek</a> <a class="code" href="classRTC.html#a525a9c1dad89613708f47a683eb316aa" title="Returns the day of the week corresponding to date.">RTC::dayOfWeek</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date)</div>
<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classRTC.html#a525a9c1dad89613708f47a683eb316aa"> 399</a></span>&#160;<a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11">RTC::DayOfWeek</a> <a class="code" href="classRTC.html#a525a9c1dad89613708f47a683eb316aa">RTC::dayOfWeek</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *date)</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;{</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// The +4 here adjusts for Jan 1, 2000 being a Saturday.</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> daynum = date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a> + 4;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; daynum += monthOffsets[date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> - 1];</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a> &gt; 2 &amp;&amp; isLeapYear(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>))</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> daynum = date-&gt;<a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a> + 4;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; daynum += monthOffsets[date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> - 1];</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a> &gt; 2 &amp;&amp; isLeapYear(date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>))</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; ++daynum;</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; daynum += 365UL * (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> - 2000);</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> &gt; 2000)</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; daynum += ((date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a> - 2001) / 4) + 1;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11" title="Day of the week corresponding to a date.">DayOfWeek</a>)((daynum % 7) + 1);</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; daynum += 365UL * (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> - 2000);</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> &gt; 2000)</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; daynum += ((date-&gt;<a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a> - 2001) / 4) + 1;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11">DayOfWeek</a>)((daynum % 7) + 1);</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;}</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div>
<div class="ttc" id="structRTCDate_html_a6e6196059b36186041a5312400ea9202"><div class="ttname"><a href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">RTCDate::month</a></div><div class="ttdeci">uint8_t month</div><div class="ttdoc">Month of the year (1-12) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00038">RTC.h:38</a></div></div>
<div class="ttc" id="classRTC_html_a102e2ec15bf0273d8f7e9ce4b6dcc96e"><div class="ttname"><a href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a></div><div class="ttdeci">virtual void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00179">RTC.cpp:179</a></div></div>
<div class="ttc" id="classRTC_html_ada31c5120d18d2dd2863b3d440308da2"><div class="ttname"><a href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2">RTC::RTC</a></div><div class="ttdeci">RTC()</div><div class="ttdoc">Constructs a new realtime clock handler. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00105">RTC.cpp:105</a></div></div>
<div class="ttc" id="classRTC_html_a525a9c1dad89613708f47a683eb316aa"><div class="ttname"><a href="classRTC.html#a525a9c1dad89613708f47a683eb316aa">RTC::dayOfWeek</a></div><div class="ttdeci">static DayOfWeek dayOfWeek(const RTCDate *date)</div><div class="ttdoc">Returns the day of the week corresponding to date. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00399">RTC.cpp:399</a></div></div>
<div class="ttc" id="structRTCTime_html_acf2161ca037080dc4b767e636ad8db84"><div class="ttname"><a href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">RTCTime::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute within the hour (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00031">RTC.h:31</a></div></div>
<div class="ttc" id="classRTC_html_ade282d7a60147c3f0269f1fcd59c8d66"><div class="ttname"><a href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a></div><div class="ttdeci">virtual void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00209">RTC.cpp:209</a></div></div>
<div class="ttc" id="classRTC_html_aa1e21bf42ebd4456919744ae0f4f631e"><div class="ttname"><a href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a></div><div class="ttdeci">virtual void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00169">RTC.cpp:169</a></div></div>
<div class="ttc" id="classRTC_html_a05b1bd1479afc80682abdd4f3e58dc6f"><div class="ttname"><a href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f">RTC::DECREMENT</a></div><div class="ttdeci">static const uint8_t DECREMENT</div><div class="ttdoc">Decrement the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00089">RTC.h:89</a></div></div>
<div class="ttc" id="classRTC_html_ab2ca0cbee608ec32d3d6e04d40298f11"><div class="ttname"><a href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11">RTC::DayOfWeek</a></div><div class="ttdeci">DayOfWeek</div><div class="ttdoc">Day of the week corresponding to a date. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00055">RTC.h:55</a></div></div>
<div class="ttc" id="classRTC_html_a0e96c91efd9e7a6340effdae3eadf17e"><div class="ttname"><a href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a></div><div class="ttdeci">virtual void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00224">RTC.cpp:224</a></div></div>
<div class="ttc" id="classRTC_html_aee5ae8f600ee5296e65635c0d836fca3"><div class="ttname"><a href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">RTC::ALARM_COUNT</a></div><div class="ttdeci">static const uint8_t ALARM_COUNT</div><div class="ttdoc">Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00074">RTC.h:74</a></div></div>
<div class="ttc" id="classRTC_html_ae667600d05c8e7b06a93574dd068a4d7"><div class="ttname"><a href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a></div><div class="ttdeci">virtual void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00194">RTC.cpp:194</a></div></div>
<div class="ttc" id="classRTC_html_acfdebfb449710e44e11f9a3675e14fd8"><div class="ttname"><a href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8">RTC::byteCount</a></div><div class="ttdeci">virtual int byteCount() const </div><div class="ttdoc">Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00235">RTC.cpp:235</a></div></div>
<div class="ttc" id="structRTCAlarm_html_a75bdc42acd3ab3ad495680c6b6a34692"><div class="ttname"><a href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">RTCAlarm::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day for the alarm (0-23). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00044">RTC.h:44</a></div></div>
<div class="ttc" id="classRTC_html_a9ed5480b362a83f1f45c4d3bcf7c3bf8"><div class="ttname"><a href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8">RTC::NO_TEMPERATURE</a></div><div class="ttdeci">static const int NO_TEMPERATURE</div><div class="ttdoc">Value that is returned from readTemperature() if the realtime clock chip cannot determine the tempera...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00083">RTC.h:83</a></div></div>
<div class="ttc" id="structRTCAlarm_html_a0f2ef7363cb60a26642d5295b77ca19e"><div class="ttname"><a href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">RTCAlarm::flags</a></div><div class="ttdeci">uint8_t flags</div><div class="ttdoc">Additional flags for the alarm. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00046">RTC.h:46</a></div></div>
<div class="ttc" id="structRTCDate_html"><div class="ttname"><a href="structRTCDate.html">RTCDate</a></div><div class="ttdoc">Stores date information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00035">RTC.h:35</a></div></div>
<div class="ttc" id="structRTCDate_html_a7d31822daff3c3fc947386abd897732f"><div class="ttname"><a href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">RTCDate::year</a></div><div class="ttdeci">unsigned int year</div><div class="ttdoc">Year (4-digit) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00037">RTC.h:37</a></div></div>
<div class="ttc" id="classRTC_html_aeca3c8387332e8cabfd09c1806276e5a"><div class="ttname"><a href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a">RTC::readTemperature</a></div><div class="ttdeci">virtual int readTemperature()</div><div class="ttdoc">Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00288">RTC.cpp:288</a></div></div>
<div class="ttc" id="classRTC_html_a1cab6397ec04b1e2b3feea5b3cd1f749"><div class="ttname"><a href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a></div><div class="ttdeci">virtual void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00262">RTC.cpp:262</a></div></div>
<div class="ttc" id="classRTC_html_a31d10cb2f7cac8839bd4be2d858b802d"><div class="ttname"><a href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d">RTC::adjustYears</a></div><div class="ttdeci">static void adjustYears(RTCDate *date, uint8_t flags)</div><div class="ttdoc">Adjusts date up or down one year according to flags. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00370">RTC.cpp:370</a></div></div>
<div class="ttc" id="structRTCAlarm_html_ad9a75ceb4b4b3474baa66dd5466e62fe"><div class="ttname"><a href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">RTCAlarm::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute of the hour for the alarm (0-59). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00045">RTC.h:45</a></div></div>
<div class="ttc" id="classRTC_html_aacbe3ebbf893685950b05327c11d5c37"><div class="ttname"><a href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37">RTC::INCREMENT</a></div><div class="ttdeci">static const uint8_t INCREMENT</div><div class="ttdoc">Increment the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00088">RTC.h:88</a></div></div>
<div class="ttc" id="classRTC_html_a0f47b10b436e3f9d36e04ec907579431"><div class="ttname"><a href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a></div><div class="ttdeci">virtual uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00247">RTC.cpp:247</a></div></div>
<div class="ttc" id="classRTC_html_adc29d7c43efc5a192d21965da5c3ee1d"><div class="ttname"><a href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d">RTC::adjustDays</a></div><div class="ttdeci">static void adjustDays(RTCDate *date, uint8_t flags)</div><div class="ttdoc">Adjusts date up or down one day according to flags. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00313">RTC.cpp:313</a></div></div>
<div class="ttc" id="structRTCTime_html"><div class="ttname"><a href="structRTCTime.html">RTCTime</a></div><div class="ttdoc">Stores time information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00028">RTC.h:28</a></div></div>
<div class="ttc" id="structRTCAlarm_html"><div class="ttname"><a href="structRTCAlarm.html">RTCAlarm</a></div><div class="ttdoc">Stores alarm information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00042">RTC.h:42</a></div></div>
<div class="ttc" id="classRTC_html_aeca597e6e37a05716e664242f9cfc5f4"><div class="ttname"><a href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4">RTC::adjustMonths</a></div><div class="ttdeci">static void adjustMonths(RTCDate *date, uint8_t flags)</div><div class="ttdoc">Adjusts date up or down one month according to flags. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00343">RTC.cpp:343</a></div></div>
<div class="ttc" id="structRTCTime_html_a98ba717092ef856dd2b773ba02fcb1a4"><div class="ttname"><a href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">RTCTime::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day (0-23) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00030">RTC.h:30</a></div></div>
<div class="ttc" id="structRTCDate_html_a2d68ff3fb90240df522b41222362704c"><div class="ttname"><a href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">RTCDate::day</a></div><div class="ttdeci">uint8_t day</div><div class="ttdoc">Day of the month (1-31) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00039">RTC.h:39</a></div></div>
<div class="ttc" id="structRTCTime_html_a87b7c02e535d808dcba04c77e34abb91"><div class="ttname"><a href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">RTCTime::second</a></div><div class="ttdeci">uint8_t second</div><div class="ttdoc">Second within the minute (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00032">RTC.h:32</a></div></div>
<div class="ttc" id="classRTC_html_a3690761f29654a2c9e676fcbfa32dd30"><div class="ttname"><a href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30">RTC::hasUpdates</a></div><div class="ttdeci">virtual bool hasUpdates()</div><div class="ttdoc">Returns true if the realtime clock has updated since the last call to this function. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00134">RTC.cpp:134</a></div></div>
<div class="ttc" id="classRTC_html_aaf0a5c1f32f210a49718d148620b5bec"><div class="ttname"><a href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a></div><div class="ttdeci">virtual void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00144">RTC.cpp:144</a></div></div>
<div class="ttc" id="classRTC_html_a02ace2d775063be9a99035851c9274eb"><div class="ttname"><a href="classRTC.html#a02ace2d775063be9a99035851c9274eb">RTC::WRAP</a></div><div class="ttdeci">static const uint8_t WRAP</div><div class="ttdoc">Wrap around to the beginning of the current month/year rather than advance to the next one...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00090">RTC.h:90</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: RTC.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,34 +115,34 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="structRTCTime.html"> 28</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="structRTCTime.html"> 28</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structRTCTime.html">RTCTime</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4"> 30</a></span>&#160; uint8_t <a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4" title="Hour of the day (0-23)">hour</a>;</div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84"> 31</a></span>&#160; uint8_t <a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84" title="Minute within the hour (0-59)">minute</a>;</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91"> 32</a></span>&#160; uint8_t <a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91" title="Second within the minute (0-59)">second</a>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4"> 30</a></span>&#160; uint8_t <a class="code" href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">hour</a>;</div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84"> 31</a></span>&#160; uint8_t <a class="code" href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">minute</a>;</div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91"> 32</a></span>&#160; uint8_t <a class="code" href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">second</a>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;};</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="structRTCDate.html"> 35</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a></div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structRTCDate.html"> 35</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structRTCDate.html">RTCDate</a></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f"> 37</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f" title="Year (4-digit)">year</a>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202"> 38</a></span>&#160; uint8_t <a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202" title="Month of the year (1-12)">month</a>;</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c"> 39</a></span>&#160; uint8_t <a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c" title="Day of the month (1-31)">day</a>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f"> 37</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">year</a>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202"> 38</a></span>&#160; uint8_t <a class="code" href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">month</a>;</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c"> 39</a></span>&#160; uint8_t <a class="code" href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">day</a>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="structRTCAlarm.html"> 42</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a></div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="structRTCAlarm.html"> 42</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structRTCAlarm.html">RTCAlarm</a></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692"> 44</a></span>&#160; uint8_t <a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692" title="Hour of the day for the alarm (0-23).">hour</a>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe"> 45</a></span>&#160; uint8_t <a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe" title="Minute of the hour for the alarm (0-59).">minute</a>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e"> 46</a></span>&#160; uint8_t <a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e" title="Additional flags for the alarm.">flags</a>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692"> 44</a></span>&#160; uint8_t <a class="code" href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">hour</a>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe"> 45</a></span>&#160; uint8_t <a class="code" href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">minute</a>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e"> 46</a></span>&#160; uint8_t <a class="code" href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">flags</a>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;};</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="classRTC.html"> 49</a></span>&#160;<span class="keyword">class </span><a class="code" href="classRTC.html" title="Base class for realtime clock handlers.">RTC</a></div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classRTC.html"> 49</a></span>&#160;<span class="keyword">class </span><a class="code" href="classRTC.html">RTC</a></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2" title="Constructs a new realtime clock handler.">RTC</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ~<a class="code" href="classRTC.html" title="Base class for realtime clock handlers.">RTC</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2">RTC</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ~<a class="code" href="classRTC.html">RTC</a>();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11"> 55</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11" title="Day of the week corresponding to a date.">DayOfWeek</a></div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11"> 55</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11">DayOfWeek</a></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; Monday = 1,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; Tuesday,</div>
@ -152,52 +153,87 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; Sunday,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; };</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30" title="Returns true if the realtime clock has updated since the last call to this function.">hasUpdates</a>();</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30">hasUpdates</a>();</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec" title="Reads the current time from the realtime clock into value.">readTime</a>(<a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e" title="Reads the current date from the realtime clock into value.">readDate</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">readTime</a>(<a class="code" href="structRTCTime.html">RTCTime</a> *value);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">readDate</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *value);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e" title="Updates the time in the realtime clock to match value.">writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html" title="Stores time information from a realtime clock chip.">RTCTime</a> *value);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7" title="Updates the date in the realtime clock to match value.">writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *value);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">writeTime</a>(<span class="keyword">const</span> <a class="code" href="structRTCTime.html">RTCTime</a> *value);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">writeDate</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *value);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3"> 74</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a> = 4;</div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3"> 74</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a> = 4;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66" title="Reads the details of the alarm with index alarmNum into value.">readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e" title="Updates the details of the alarm with index alarmNum from value.">writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">readAlarm</a>(uint8_t alarmNum, <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">writeAlarm</a>(uint8_t alarmNum, <span class="keyword">const</span> <a class="code" href="structRTCAlarm.html">RTCAlarm</a> *value);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8" title="Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...">byteCount</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">virtual</span> uint8_t <a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431" title="Reads the byte at offset within the realtime clock&#39;s non-volatile memory.">readByte</a>(uint8_t offset);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749" title="Writes value to offset within the realtime clock&#39;s non-volatile memory.">writeByte</a>(uint8_t offset, uint8_t value);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8">byteCount</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">virtual</span> uint8_t <a class="code" href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">readByte</a>(uint8_t offset);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">writeByte</a>(uint8_t offset, uint8_t value);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8"> 83</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8" title="Value that is returned from readTemperature() if the realtime clock chip cannot determine the tempera...">NO_TEMPERATURE</a> = 32767;</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8"> 83</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8">NO_TEMPERATURE</a> = 32767;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a" title="Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...">readTemperature</a>();</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a">readTemperature</a>();</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// Flags for adjustDays(), adjustMonths(), and adjustYears().</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37"> 88</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37" title="Increment the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().">INCREMENT</a> = 0x0000;</div>
<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f"> 89</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f" title="Decrement the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().">DECREMENT</a> = 0x0001;</div>
<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb"> 90</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb" title="Wrap around to the beginning of the current month/year rather than advance to the next one...">WRAP</a> = 0x0002;</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37"> 88</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37">INCREMENT</a> = 0x0000;</div>
<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f"> 89</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f">DECREMENT</a> = 0x0001;</div>
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classRTC.html#a02ace2d775063be9a99035851c9274eb"> 90</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="classRTC.html#a02ace2d775063be9a99035851c9274eb">WRAP</a> = 0x0002;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d" title="Adjusts date up or down one day according to flags.">adjustDays</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date, uint8_t flags);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4" title="Adjusts date up or down one month according to flags.">adjustMonths</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date, uint8_t flags);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d" title="Adjusts date up or down one year according to flags.">adjustYears</a>(<a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date, uint8_t flags);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d">adjustDays</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *date, uint8_t flags);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4">adjustMonths</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *date, uint8_t flags);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d">adjustYears</a>(<a class="code" href="structRTCDate.html">RTCDate</a> *date, uint8_t flags);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">static</span> <a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11" title="Day of the week corresponding to a date.">DayOfWeek</a> <a class="code" href="classRTC.html#a525a9c1dad89613708f47a683eb316aa" title="Returns the day of the week corresponding to date.">dayOfWeek</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> *date);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">static</span> <a class="code" href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11">DayOfWeek</a> <a class="code" href="classRTC.html#a525a9c1dad89613708f47a683eb316aa">dayOfWeek</a>(<span class="keyword">const</span> <a class="code" href="structRTCDate.html">RTCDate</a> *date);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> midnight;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="structRTCDate.html" title="Stores date information from a realtime clock chip.">RTCDate</a> date;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="structRTCAlarm.html" title="Stores alarm information from a realtime clock chip.">RTCAlarm</a> alarms[<a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3" title="Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm().">ALARM_COUNT</a>];</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="structRTCDate.html">RTCDate</a> date;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="structRTCAlarm.html">RTCAlarm</a> alarms[<a class="code" href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">ALARM_COUNT</a>];</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; uint8_t *nvram;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;};</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="structRTCDate_html_a6e6196059b36186041a5312400ea9202"><div class="ttname"><a href="structRTCDate.html#a6e6196059b36186041a5312400ea9202">RTCDate::month</a></div><div class="ttdeci">uint8_t month</div><div class="ttdoc">Month of the year (1-12) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00038">RTC.h:38</a></div></div>
<div class="ttc" id="classRTC_html_a102e2ec15bf0273d8f7e9ce4b6dcc96e"><div class="ttname"><a href="classRTC.html#a102e2ec15bf0273d8f7e9ce4b6dcc96e">RTC::writeTime</a></div><div class="ttdeci">virtual void writeTime(const RTCTime *value)</div><div class="ttdoc">Updates the time in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00179">RTC.cpp:179</a></div></div>
<div class="ttc" id="classRTC_html_ada31c5120d18d2dd2863b3d440308da2"><div class="ttname"><a href="classRTC.html#ada31c5120d18d2dd2863b3d440308da2">RTC::RTC</a></div><div class="ttdeci">RTC()</div><div class="ttdoc">Constructs a new realtime clock handler. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00105">RTC.cpp:105</a></div></div>
<div class="ttc" id="classRTC_html_a525a9c1dad89613708f47a683eb316aa"><div class="ttname"><a href="classRTC.html#a525a9c1dad89613708f47a683eb316aa">RTC::dayOfWeek</a></div><div class="ttdeci">static DayOfWeek dayOfWeek(const RTCDate *date)</div><div class="ttdoc">Returns the day of the week corresponding to date. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00399">RTC.cpp:399</a></div></div>
<div class="ttc" id="structRTCTime_html_acf2161ca037080dc4b767e636ad8db84"><div class="ttname"><a href="structRTCTime.html#acf2161ca037080dc4b767e636ad8db84">RTCTime::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute within the hour (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00031">RTC.h:31</a></div></div>
<div class="ttc" id="classRTC_html_ade282d7a60147c3f0269f1fcd59c8d66"><div class="ttname"><a href="classRTC.html#ade282d7a60147c3f0269f1fcd59c8d66">RTC::readAlarm</a></div><div class="ttdeci">virtual void readAlarm(uint8_t alarmNum, RTCAlarm *value)</div><div class="ttdoc">Reads the details of the alarm with index alarmNum into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00209">RTC.cpp:209</a></div></div>
<div class="ttc" id="classRTC_html_aa1e21bf42ebd4456919744ae0f4f631e"><div class="ttname"><a href="classRTC.html#aa1e21bf42ebd4456919744ae0f4f631e">RTC::readDate</a></div><div class="ttdeci">virtual void readDate(RTCDate *value)</div><div class="ttdoc">Reads the current date from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00169">RTC.cpp:169</a></div></div>
<div class="ttc" id="classRTC_html_a05b1bd1479afc80682abdd4f3e58dc6f"><div class="ttname"><a href="classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f">RTC::DECREMENT</a></div><div class="ttdeci">static const uint8_t DECREMENT</div><div class="ttdoc">Decrement the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00089">RTC.h:89</a></div></div>
<div class="ttc" id="classRTC_html_ab2ca0cbee608ec32d3d6e04d40298f11"><div class="ttname"><a href="classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11">RTC::DayOfWeek</a></div><div class="ttdeci">DayOfWeek</div><div class="ttdoc">Day of the week corresponding to a date. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00055">RTC.h:55</a></div></div>
<div class="ttc" id="classRTC_html_a0e96c91efd9e7a6340effdae3eadf17e"><div class="ttname"><a href="classRTC.html#a0e96c91efd9e7a6340effdae3eadf17e">RTC::writeAlarm</a></div><div class="ttdeci">virtual void writeAlarm(uint8_t alarmNum, const RTCAlarm *value)</div><div class="ttdoc">Updates the details of the alarm with index alarmNum from value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00224">RTC.cpp:224</a></div></div>
<div class="ttc" id="classRTC_html_aee5ae8f600ee5296e65635c0d836fca3"><div class="ttname"><a href="classRTC.html#aee5ae8f600ee5296e65635c0d836fca3">RTC::ALARM_COUNT</a></div><div class="ttdeci">static const uint8_t ALARM_COUNT</div><div class="ttdoc">Number of alarms that are supported by RTC::readAlarm() and RTC::writeAlarm(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00074">RTC.h:74</a></div></div>
<div class="ttc" id="classRTC_html_ae667600d05c8e7b06a93574dd068a4d7"><div class="ttname"><a href="classRTC.html#ae667600d05c8e7b06a93574dd068a4d7">RTC::writeDate</a></div><div class="ttdeci">virtual void writeDate(const RTCDate *value)</div><div class="ttdoc">Updates the date in the realtime clock to match value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00194">RTC.cpp:194</a></div></div>
<div class="ttc" id="classRTC_html_acfdebfb449710e44e11f9a3675e14fd8"><div class="ttname"><a href="classRTC.html#acfdebfb449710e44e11f9a3675e14fd8">RTC::byteCount</a></div><div class="ttdeci">virtual int byteCount() const </div><div class="ttdoc">Returns the number of bytes of non-volatile memory that can be used for storage of arbitrary settings...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00235">RTC.cpp:235</a></div></div>
<div class="ttc" id="structRTCAlarm_html_a75bdc42acd3ab3ad495680c6b6a34692"><div class="ttname"><a href="structRTCAlarm.html#a75bdc42acd3ab3ad495680c6b6a34692">RTCAlarm::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day for the alarm (0-23). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00044">RTC.h:44</a></div></div>
<div class="ttc" id="classRTC_html_a9ed5480b362a83f1f45c4d3bcf7c3bf8"><div class="ttname"><a href="classRTC.html#a9ed5480b362a83f1f45c4d3bcf7c3bf8">RTC::NO_TEMPERATURE</a></div><div class="ttdeci">static const int NO_TEMPERATURE</div><div class="ttdoc">Value that is returned from readTemperature() if the realtime clock chip cannot determine the tempera...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00083">RTC.h:83</a></div></div>
<div class="ttc" id="structRTCAlarm_html_a0f2ef7363cb60a26642d5295b77ca19e"><div class="ttname"><a href="structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e">RTCAlarm::flags</a></div><div class="ttdeci">uint8_t flags</div><div class="ttdoc">Additional flags for the alarm. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00046">RTC.h:46</a></div></div>
<div class="ttc" id="structRTCDate_html"><div class="ttname"><a href="structRTCDate.html">RTCDate</a></div><div class="ttdoc">Stores date information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00035">RTC.h:35</a></div></div>
<div class="ttc" id="structRTCDate_html_a7d31822daff3c3fc947386abd897732f"><div class="ttname"><a href="structRTCDate.html#a7d31822daff3c3fc947386abd897732f">RTCDate::year</a></div><div class="ttdeci">unsigned int year</div><div class="ttdoc">Year (4-digit) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00037">RTC.h:37</a></div></div>
<div class="ttc" id="classRTC_html_aeca3c8387332e8cabfd09c1806276e5a"><div class="ttname"><a href="classRTC.html#aeca3c8387332e8cabfd09c1806276e5a">RTC::readTemperature</a></div><div class="ttdeci">virtual int readTemperature()</div><div class="ttdoc">Reads the value of the temperature sensor and returns the temperature in quarters of a degree celcius...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00288">RTC.cpp:288</a></div></div>
<div class="ttc" id="classRTC_html_a1cab6397ec04b1e2b3feea5b3cd1f749"><div class="ttname"><a href="classRTC.html#a1cab6397ec04b1e2b3feea5b3cd1f749">RTC::writeByte</a></div><div class="ttdeci">virtual void writeByte(uint8_t offset, uint8_t value)</div><div class="ttdoc">Writes value to offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00262">RTC.cpp:262</a></div></div>
<div class="ttc" id="classRTC_html_a31d10cb2f7cac8839bd4be2d858b802d"><div class="ttname"><a href="classRTC.html#a31d10cb2f7cac8839bd4be2d858b802d">RTC::adjustYears</a></div><div class="ttdeci">static void adjustYears(RTCDate *date, uint8_t flags)</div><div class="ttdoc">Adjusts date up or down one year according to flags. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00370">RTC.cpp:370</a></div></div>
<div class="ttc" id="structRTCAlarm_html_ad9a75ceb4b4b3474baa66dd5466e62fe"><div class="ttname"><a href="structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe">RTCAlarm::minute</a></div><div class="ttdeci">uint8_t minute</div><div class="ttdoc">Minute of the hour for the alarm (0-59). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00045">RTC.h:45</a></div></div>
<div class="ttc" id="classRTC_html_aacbe3ebbf893685950b05327c11d5c37"><div class="ttname"><a href="classRTC.html#aacbe3ebbf893685950b05327c11d5c37">RTC::INCREMENT</a></div><div class="ttdeci">static const uint8_t INCREMENT</div><div class="ttdoc">Increment the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears(). </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00088">RTC.h:88</a></div></div>
<div class="ttc" id="classRTC_html_a0f47b10b436e3f9d36e04ec907579431"><div class="ttname"><a href="classRTC.html#a0f47b10b436e3f9d36e04ec907579431">RTC::readByte</a></div><div class="ttdeci">virtual uint8_t readByte(uint8_t offset)</div><div class="ttdoc">Reads the byte at offset within the realtime clock&#39;s non-volatile memory. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00247">RTC.cpp:247</a></div></div>
<div class="ttc" id="classRTC_html_adc29d7c43efc5a192d21965da5c3ee1d"><div class="ttname"><a href="classRTC.html#adc29d7c43efc5a192d21965da5c3ee1d">RTC::adjustDays</a></div><div class="ttdeci">static void adjustDays(RTCDate *date, uint8_t flags)</div><div class="ttdoc">Adjusts date up or down one day according to flags. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00313">RTC.cpp:313</a></div></div>
<div class="ttc" id="structRTCTime_html"><div class="ttname"><a href="structRTCTime.html">RTCTime</a></div><div class="ttdoc">Stores time information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00028">RTC.h:28</a></div></div>
<div class="ttc" id="structRTCAlarm_html"><div class="ttname"><a href="structRTCAlarm.html">RTCAlarm</a></div><div class="ttdoc">Stores alarm information from a realtime clock chip. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00042">RTC.h:42</a></div></div>
<div class="ttc" id="classRTC_html_aeca597e6e37a05716e664242f9cfc5f4"><div class="ttname"><a href="classRTC.html#aeca597e6e37a05716e664242f9cfc5f4">RTC::adjustMonths</a></div><div class="ttdeci">static void adjustMonths(RTCDate *date, uint8_t flags)</div><div class="ttdoc">Adjusts date up or down one month according to flags. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00343">RTC.cpp:343</a></div></div>
<div class="ttc" id="structRTCTime_html_a98ba717092ef856dd2b773ba02fcb1a4"><div class="ttname"><a href="structRTCTime.html#a98ba717092ef856dd2b773ba02fcb1a4">RTCTime::hour</a></div><div class="ttdeci">uint8_t hour</div><div class="ttdoc">Hour of the day (0-23) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00030">RTC.h:30</a></div></div>
<div class="ttc" id="structRTCDate_html_a2d68ff3fb90240df522b41222362704c"><div class="ttname"><a href="structRTCDate.html#a2d68ff3fb90240df522b41222362704c">RTCDate::day</a></div><div class="ttdeci">uint8_t day</div><div class="ttdoc">Day of the month (1-31) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00039">RTC.h:39</a></div></div>
<div class="ttc" id="structRTCTime_html_a87b7c02e535d808dcba04c77e34abb91"><div class="ttname"><a href="structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91">RTCTime::second</a></div><div class="ttdeci">uint8_t second</div><div class="ttdoc">Second within the minute (0-59) </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00032">RTC.h:32</a></div></div>
<div class="ttc" id="classRTC_html_a3690761f29654a2c9e676fcbfa32dd30"><div class="ttname"><a href="classRTC.html#a3690761f29654a2c9e676fcbfa32dd30">RTC::hasUpdates</a></div><div class="ttdeci">virtual bool hasUpdates()</div><div class="ttdoc">Returns true if the realtime clock has updated since the last call to this function. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00134">RTC.cpp:134</a></div></div>
<div class="ttc" id="classRTC_html_aaf0a5c1f32f210a49718d148620b5bec"><div class="ttname"><a href="classRTC.html#aaf0a5c1f32f210a49718d148620b5bec">RTC::readTime</a></div><div class="ttdeci">virtual void readTime(RTCTime *value)</div><div class="ttdoc">Reads the current time from the realtime clock into value. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8cpp_source.html#l00144">RTC.cpp:144</a></div></div>
<div class="ttc" id="classRTC_html"><div class="ttname"><a href="classRTC.html">RTC</a></div><div class="ttdoc">Base class for realtime clock handlers. </div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00049">RTC.h:49</a></div></div>
<div class="ttc" id="classRTC_html_a02ace2d775063be9a99035851c9274eb"><div class="ttname"><a href="classRTC.html#a02ace2d775063be9a99035851c9274eb">RTC::WRAP</a></div><div class="ttdeci">static const uint8_t WRAP</div><div class="ttdoc">Wrap around to the beginning of the current month/year rather than advance to the next one...</div><div class="ttdef"><b>Definition:</b> <a href="RTC_8h_source.html#l00090">RTC.h:90</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

318
SHA1_8cpp_source.html Normal file
View File

@ -0,0 +1,318 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: SHA1.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SHA1.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;SHA1.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;utility/RotateUtil.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;utility/EndianUtil.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSHA1.html#ad49a5108ffd6996b1133bf41224ff726"> 41</a></span>&#160;<a class="code" href="classSHA1.html#ad49a5108ffd6996b1133bf41224ff726">SHA1::SHA1</a>()</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">reset</a>();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSHA1.html#a8485d7c14fa29286cd3c7acfe438606d"> 49</a></span>&#160;<a class="code" href="classSHA1.html#a8485d7c14fa29286cd3c7acfe438606d">SHA1::~SHA1</a>()</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; clean(state);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSHA1.html#ab8cdb7233a8b81be07877049960ddfdd"> 54</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classSHA1.html#ab8cdb7233a8b81be07877049960ddfdd">SHA1::hashSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> 20;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSHA1.html#a816e3fd1a02cf1ecc67866cd8c7c309a"> 59</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classSHA1.html#a816e3fd1a02cf1ecc67866cd8c7c309a">SHA1::blockSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> 64;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f"> 64</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">SHA1::reset</a>()</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; state.h[0] = 0x67452301;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; state.h[1] = 0xEFCDAB89;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; state.h[2] = 0x98BADCFE;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; state.h[3] = 0x10325476;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; state.h[4] = 0xC3D2E1F0;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; state.finalized = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; state.length = 0;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSHA1.html#aec77fbc5015f82bbf7055e535085656a"> 76</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA1.html#aec77fbc5015f82bbf7055e535085656a">SHA1::update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// Reset the hashing process if finalize() was called previously.</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (state.finalized)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">reset</a>();</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// Update the total length (in bits, not bytes).</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; state.length += ((uint64_t)len) &lt;&lt; 3;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// Break the input up into 512-bit chunks and process each in turn.</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> uint8_t *d = (<span class="keyword">const</span> uint8_t *)data;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; uint8_t size = 64 - state.chunkSize;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (size &gt; len)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; size = len;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; memcpy(((uint8_t *)state.w) + state.chunkSize, d, size);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; state.chunkSize += size;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; len -= size;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; d += size;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (state.chunkSize == 64) {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; processChunk();</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSHA1.html#a5a6a8a6169aa48e0bccadb22a149ab7c"> 102</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA1.html#a5a6a8a6169aa48e0bccadb22a149ab7c">SHA1::finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// Finalize the hash if necessary.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span> (!state.finalized) {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Pad the last chunk. We may need two padding chunks if there</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// isn&#39;t enough room in the first for the padding and length.</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; uint8_t *wbytes = (uint8_t *)state.w;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; if (state.chunkSize &lt;= (64 - 9)) {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; wbytes[state.chunkSize] = 0x80;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; memset(wbytes + state.chunkSize + 1, 0x00, 64 - 8 - (state.chunkSize + 1));</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; state.w[14] = htobe32((uint32_t)(state.length &gt;&gt; 32));</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; state.w[15] = htobe32((uint32_t)state.length);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; processChunk();</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; wbytes[state.chunkSize] = 0x80;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; memset(wbytes + state.chunkSize + 1, 0x00, 64 - (state.chunkSize + 1));</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; processChunk();</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; memset(wbytes, 0x00, 64 - 8);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; state.w[14] = htobe32((uint32_t)(state.length &gt;&gt; 32));</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; state.w[15] = htobe32((uint32_t)state.length);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; processChunk();</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// Convert the result into big endian and return it.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 5; ++posn)</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; state.w[posn] = htobe32(state.h[posn]);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; state.finalized = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Copy the hash to the caller&#39;s return buffer.</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (len &gt; 20)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; len = 20;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; memcpy(hash, state.w, len);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSHA1.html#a41a159d6565b04d3f620dcd720faaf3f"> 137</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA1.html#a41a159d6565b04d3f620dcd720faaf3f">SHA1::clear</a>()</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;{</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; clean(state);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">reset</a>();</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keywordtype">void</span> SHA1::processChunk()</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;{</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; uint8_t index;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Convert the first 16 words from big endian to host byte order.</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">for</span> (index = 0; index &lt; 16; ++index)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; state.w[index] = be32toh(state.w[index]);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// Initialize the hash value for this chunk.</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; uint32_t a = state.h[0];</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; uint32_t b = state.h[1];</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; uint32_t c = state.h[2];</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; uint32_t d = state.h[3];</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; uint32_t e = state.h[4];</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// Perform the first 16 rounds of the compression function main loop.</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; uint32_t temp;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">for</span> (index = 0; index &lt; 16; ++index) {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; temp = leftRotate5(a) + ((b &amp; c) | ((~b) &amp; d)) + e + 0x5A827999 + state.w[index];</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; e = d;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; d = c;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; c = leftRotate30(b);</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; b = a;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; a = temp;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// Perform the 64 remaining rounds. We expand the first 16 words to</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// 80 in-place in the &quot;w&quot; array. This saves 256 bytes of memory</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// that would have otherwise need to be allocated to the &quot;w&quot; array.</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span> (; index &lt; 20; ++index) {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; temp = state.w[index &amp; 0x0F] = leftRotate1</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; (state.w[(index - 3) &amp; 0x0F] ^ state.w[(index - 8) &amp; 0x0F] ^</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; state.w[(index - 14) &amp; 0x0F] ^ state.w[(index - 16) &amp; 0x0F]);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; temp = leftRotate5(a) + ((b &amp; c) | ((~b) &amp; d)) + e + 0x5A827999 + temp;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; e = d;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; d = c;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; c = leftRotate30(b);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; b = a;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; a = temp;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">for</span> (; index &lt; 40; ++index) {</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; temp = state.w[index &amp; 0x0F] = leftRotate1</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; (state.w[(index - 3) &amp; 0x0F] ^ state.w[(index - 8) &amp; 0x0F] ^</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; state.w[(index - 14) &amp; 0x0F] ^ state.w[(index - 16) &amp; 0x0F]);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; temp = leftRotate5(a) + (b ^ c ^ d) + e + 0x6ED9EBA1 + temp;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; e = d;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; d = c;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; c = leftRotate30(b);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; b = a;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; a = temp;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">for</span> (; index &lt; 60; ++index) {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; temp = state.w[index &amp; 0x0F] = leftRotate1</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; (state.w[(index - 3) &amp; 0x0F] ^ state.w[(index - 8) &amp; 0x0F] ^</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; state.w[(index - 14) &amp; 0x0F] ^ state.w[(index - 16) &amp; 0x0F]);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; temp = leftRotate5(a) + ((b &amp; c) | (b &amp; d) | (c &amp; d)) + e + 0x8F1BBCDC + temp;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; e = d;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; d = c;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; c = leftRotate30(b);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; b = a;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; a = temp;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (; index &lt; 80; ++index) {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; temp = state.w[index &amp; 0x0F] = leftRotate1</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; (state.w[(index - 3) &amp; 0x0F] ^ state.w[(index - 8) &amp; 0x0F] ^</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; state.w[(index - 14) &amp; 0x0F] ^ state.w[(index - 16) &amp; 0x0F]);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; temp = leftRotate5(a) + (b ^ c ^ d) + e + 0xCA62C1D6 + temp;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; e = d;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; d = c;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; c = leftRotate30(b);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; b = a;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; a = temp;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// Add this chunk&#39;s hash to the result so far.</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; state.h[0] += a;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; state.h[1] += b;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; state.h[2] += c;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; state.h[3] += d;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; state.h[4] += e;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Attempt to clean up the stack.</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; a = b = c = d = e = temp = 0;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;}</div>
<div class="ttc" id="classSHA1_html_a8485d7c14fa29286cd3c7acfe438606d"><div class="ttname"><a href="classSHA1.html#a8485d7c14fa29286cd3c7acfe438606d">SHA1::~SHA1</a></div><div class="ttdeci">virtual ~SHA1()</div><div class="ttdoc">Destroys this SHA-1 hash object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00049">SHA1.cpp:49</a></div></div>
<div class="ttc" id="classSHA1_html_ab71aaf39ed956320054861a2fbfa454f"><div class="ttname"><a href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">SHA1::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00064">SHA1.cpp:64</a></div></div>
<div class="ttc" id="classSHA1_html_aec77fbc5015f82bbf7055e535085656a"><div class="ttname"><a href="classSHA1.html#aec77fbc5015f82bbf7055e535085656a">SHA1::update</a></div><div class="ttdeci">void update(const void *data, size_t len)</div><div class="ttdoc">Updates the hash with more data. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00076">SHA1.cpp:76</a></div></div>
<div class="ttc" id="classSHA1_html_a41a159d6565b04d3f620dcd720faaf3f"><div class="ttname"><a href="classSHA1.html#a41a159d6565b04d3f620dcd720faaf3f">SHA1::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00137">SHA1.cpp:137</a></div></div>
<div class="ttc" id="classSHA1_html_a816e3fd1a02cf1ecc67866cd8c7c309a"><div class="ttname"><a href="classSHA1.html#a816e3fd1a02cf1ecc67866cd8c7c309a">SHA1::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00059">SHA1.cpp:59</a></div></div>
<div class="ttc" id="classSHA1_html_a5a6a8a6169aa48e0bccadb22a149ab7c"><div class="ttname"><a href="classSHA1.html#a5a6a8a6169aa48e0bccadb22a149ab7c">SHA1::finalize</a></div><div class="ttdeci">void finalize(void *hash, size_t len)</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00102">SHA1.cpp:102</a></div></div>
<div class="ttc" id="classSHA1_html_ab8cdb7233a8b81be07877049960ddfdd"><div class="ttname"><a href="classSHA1.html#ab8cdb7233a8b81be07877049960ddfdd">SHA1::hashSize</a></div><div class="ttdeci">size_t hashSize() const </div><div class="ttdoc">Size of the hash result from finalize(). </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00054">SHA1.cpp:54</a></div></div>
<div class="ttc" id="classSHA1_html_ad49a5108ffd6996b1133bf41224ff726"><div class="ttname"><a href="classSHA1.html#ad49a5108ffd6996b1133bf41224ff726">SHA1::SHA1</a></div><div class="ttdeci">SHA1()</div><div class="ttdoc">Constructs a SHA-1 hash object. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00041">SHA1.cpp:41</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

164
SHA1_8h_source.html Normal file
View File

@ -0,0 +1,164 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: SHA1.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SHA1.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_SHA1_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_SHA1_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Hash.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSHA1.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSHA1.html">SHA1</a> : <span class="keyword">public</span> <a class="code" href="classHash.html">Hash</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classSHA1.html#ad49a5108ffd6996b1133bf41224ff726">SHA1</a>();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSHA1.html#a8485d7c14fa29286cd3c7acfe438606d">~SHA1</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSHA1.html#ab8cdb7233a8b81be07877049960ddfdd">hashSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSHA1.html#a816e3fd1a02cf1ecc67866cd8c7c309a">blockSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">reset</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA1.html#aec77fbc5015f82bbf7055e535085656a">update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA1.html#a5a6a8a6169aa48e0bccadb22a149ab7c">finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA1.html#a41a159d6565b04d3f620dcd720faaf3f">clear</a>();</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">struct </span>{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint32_t h[5];</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint32_t w[16];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint8_t chunkSize;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">bool</span> finalized;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint64_t length;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; } state;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> processChunk();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classSHA1_html_a8485d7c14fa29286cd3c7acfe438606d"><div class="ttname"><a href="classSHA1.html#a8485d7c14fa29286cd3c7acfe438606d">SHA1::~SHA1</a></div><div class="ttdeci">virtual ~SHA1()</div><div class="ttdoc">Destroys this SHA-1 hash object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00049">SHA1.cpp:49</a></div></div>
<div class="ttc" id="classSHA1_html_ab71aaf39ed956320054861a2fbfa454f"><div class="ttname"><a href="classSHA1.html#ab71aaf39ed956320054861a2fbfa454f">SHA1::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00064">SHA1.cpp:64</a></div></div>
<div class="ttc" id="classHash_html"><div class="ttname"><a href="classHash.html">Hash</a></div><div class="ttdoc">Abstract base class for cryptographic hash algorithms. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8h_source.html#l00029">Hash.h:29</a></div></div>
<div class="ttc" id="classSHA1_html_aec77fbc5015f82bbf7055e535085656a"><div class="ttname"><a href="classSHA1.html#aec77fbc5015f82bbf7055e535085656a">SHA1::update</a></div><div class="ttdeci">void update(const void *data, size_t len)</div><div class="ttdoc">Updates the hash with more data. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00076">SHA1.cpp:76</a></div></div>
<div class="ttc" id="classSHA1_html_a41a159d6565b04d3f620dcd720faaf3f"><div class="ttname"><a href="classSHA1.html#a41a159d6565b04d3f620dcd720faaf3f">SHA1::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00137">SHA1.cpp:137</a></div></div>
<div class="ttc" id="classSHA1_html_a816e3fd1a02cf1ecc67866cd8c7c309a"><div class="ttname"><a href="classSHA1.html#a816e3fd1a02cf1ecc67866cd8c7c309a">SHA1::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00059">SHA1.cpp:59</a></div></div>
<div class="ttc" id="classSHA1_html"><div class="ttname"><a href="classSHA1.html">SHA1</a></div><div class="ttdoc">SHA-1 hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8h_source.html#l00028">SHA1.h:28</a></div></div>
<div class="ttc" id="classSHA1_html_a5a6a8a6169aa48e0bccadb22a149ab7c"><div class="ttname"><a href="classSHA1.html#a5a6a8a6169aa48e0bccadb22a149ab7c">SHA1::finalize</a></div><div class="ttdeci">void finalize(void *hash, size_t len)</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00102">SHA1.cpp:102</a></div></div>
<div class="ttc" id="classSHA1_html_ab8cdb7233a8b81be07877049960ddfdd"><div class="ttname"><a href="classSHA1.html#ab8cdb7233a8b81be07877049960ddfdd">SHA1::hashSize</a></div><div class="ttdeci">size_t hashSize() const </div><div class="ttdoc">Size of the hash result from finalize(). </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00054">SHA1.cpp:54</a></div></div>
<div class="ttc" id="classSHA1_html_ad49a5108ffd6996b1133bf41224ff726"><div class="ttname"><a href="classSHA1.html#ad49a5108ffd6996b1133bf41224ff726">SHA1::SHA1</a></div><div class="ttdeci">SHA1()</div><div class="ttdoc">Constructs a SHA-1 hash object. </div><div class="ttdef"><b>Definition:</b> <a href="SHA1_8cpp_source.html#l00041">SHA1.cpp:41</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

334
SHA256_8cpp_source.html Normal file
View File

@ -0,0 +1,334 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: SHA256.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SHA256.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;SHA256.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;utility/RotateUtil.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;utility/EndianUtil.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;utility/ProgMemUtil.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSHA256.html#ab672831c542df07ff03ded25760feec2"> 42</a></span>&#160;<a class="code" href="classSHA256.html#ab672831c542df07ff03ded25760feec2">SHA256::SHA256</a>()</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">reset</a>();</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSHA256.html#ad82f2925b612de315b289017e023a73b"> 51</a></span>&#160;<a class="code" href="classSHA256.html#ad82f2925b612de315b289017e023a73b">SHA256::~SHA256</a>()</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; clean(state);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSHA256.html#a103d5bc5ced792464a82cb1d7986de94"> 56</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classSHA256.html#a103d5bc5ced792464a82cb1d7986de94">SHA256::hashSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> 32;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSHA256.html#a71bbd9064f9d6191d0647f867953a858"> 61</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classSHA256.html#a71bbd9064f9d6191d0647f867953a858">SHA256::blockSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> 64;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65"> 66</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">SHA256::reset</a>()</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; state.h[0] = 0x6a09e667;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; state.h[1] = 0xbb67ae85;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; state.h[2] = 0x3c6ef372;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; state.h[3] = 0xa54ff53a,</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; state.h[4] = 0x510e527f;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; state.h[5] = 0x9b05688c;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; state.h[6] = 0x1f83d9ab;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; state.h[7] = 0x5be0cd19;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; state.finalized = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; state.length = 0;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b"> 81</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b">SHA256::update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// Reset the hashing process if finalize() was called previously.</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (state.finalized)</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">reset</a>();</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// Update the total length (in bits, not bytes).</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; state.length += ((uint64_t)len) &lt;&lt; 3;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// Break the input up into 512-bit chunks and process each in turn.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">const</span> uint8_t *d = (<span class="keyword">const</span> uint8_t *)data;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">while</span> (len &gt; 0) {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; uint8_t size = 64 - state.chunkSize;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span> (size &gt; len)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; size = len;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; memcpy(((uint8_t *)state.w) + state.chunkSize, d, size);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; state.chunkSize += size;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; len -= size;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; d += size;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (state.chunkSize == 64) {</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; processChunk();</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; state.chunkSize = 0;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;}</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div>
<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSHA256.html#a695157bcdf5495ba892ebac309f3abd6"> 107</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA256.html#a695157bcdf5495ba892ebac309f3abd6">SHA256::finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len)</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;{</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// Finalize the hash if necessary.</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (!state.finalized) {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// Pad the last chunk. We may need two padding chunks if there</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// isn&#39;t enough room in the first for the padding and length.</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; uint8_t *wbytes = (uint8_t *)state.w;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; if (state.chunkSize &lt;= (64 - 9)) {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; wbytes[state.chunkSize] = 0x80;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; memset(wbytes + state.chunkSize + 1, 0x00, 64 - 8 - (state.chunkSize + 1));</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; state.w[14] = htobe32((uint32_t)(state.length &gt;&gt; 32));</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; state.w[15] = htobe32((uint32_t)state.length);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; processChunk();</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; wbytes[state.chunkSize] = 0x80;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; memset(wbytes + state.chunkSize + 1, 0x00, 64 - (state.chunkSize + 1));</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; processChunk();</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; memset(wbytes, 0x00, 64 - 8);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; state.w[14] = htobe32((uint32_t)(state.length &gt;&gt; 32));</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; state.w[15] = htobe32((uint32_t)state.length);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; processChunk();</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// Convert the result into big endian and return it.</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">for</span> (uint8_t posn = 0; posn &lt; 8; ++posn)</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; state.w[posn] = htobe32(state.h[posn]);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; state.finalized = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Copy the hash to the caller&#39;s return buffer.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (len &gt; 32)</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; len = 32;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; memcpy(hash, state.w, len);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div>
<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSHA256.html#add0d1649d533b27005ccd8508398c689"> 142</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSHA256.html#add0d1649d533b27005ccd8508398c689">SHA256::clear</a>()</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;{</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; clean(state);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">reset</a>();</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keywordtype">void</span> SHA256::processChunk()</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;{</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// Round constants for SHA-256.</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">static</span> uint32_t <span class="keyword">const</span> k[64] PROGMEM = {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; };</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Convert the first 16 words from big endian to host byte order.</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; uint8_t index;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span> (index = 0; index &lt; 16; ++index)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; state.w[index] = be32toh(state.w[index]);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// Initialise working variables to the current hash value.</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; uint32_t a = state.h[0];</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; uint32_t b = state.h[1];</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; uint32_t c = state.h[2];</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; uint32_t d = state.h[3];</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; uint32_t e = state.h[4];</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; uint32_t f = state.h[5];</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; uint32_t g = state.h[6];</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; uint32_t h = state.h[7];</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// Perform the first 16 rounds of the compression function main loop.</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; uint32_t temp1, temp2;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">for</span> (index = 0; index &lt; 16; ++index) {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; temp1 = h + pgm_read_dword(k + index) + state.w[index] +</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; (rightRotate6(e) ^ rightRotate11(e) ^ rightRotate25(e)) +</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; ((e &amp; f) ^ ((~e) &amp; g));</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; temp2 = (rightRotate2(a) ^ rightRotate13(a) ^ rightRotate22(a)) +</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; ((a &amp; b) ^ (a &amp; c) ^ (b &amp; c));</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; h = g;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; g = f;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; f = e;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; e = d + temp1;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; d = c;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; c = b;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; b = a;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; a = temp1 + temp2;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Perform the 48 remaining rounds. We expand the first 16 words to</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// 64 in-place in the &quot;w&quot; array. This saves 192 bytes of memory</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// that would have otherwise need to be allocated to the &quot;w&quot; array.</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">for</span> (; index &lt; 64; ++index) {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// Expand the next word.</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; temp1 = state.w[(index - 15) &amp; 0x0F];</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; temp2 = state.w[(index - 2) &amp; 0x0F];</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; temp1 = state.w[index &amp; 0x0F] =</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; state.w[(index - 16) &amp; 0x0F] + state.w[(index - 7) &amp; 0x0F] +</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; (rightRotate7(temp1) ^ rightRotate18(temp1) ^ (temp1 &gt;&gt; 3)) +</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; (rightRotate17(temp2) ^ rightRotate19(temp2) ^ (temp2 &gt;&gt; 10));</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Perform the round.</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; temp1 = h + pgm_read_dword(k + index) + temp1 +</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; (rightRotate6(e) ^ rightRotate11(e) ^ rightRotate25(e)) +</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; ((e &amp; f) ^ ((~e) &amp; g));</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; temp2 = (rightRotate2(a) ^ rightRotate13(a) ^ rightRotate22(a)) +</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; ((a &amp; b) ^ (a &amp; c) ^ (b &amp; c));</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; h = g;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; g = f;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; f = e;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; e = d + temp1;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; d = c;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; c = b;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; b = a;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; a = temp1 + temp2;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Add the compressed chunk to the current hash value.</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; state.h[0] += a;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; state.h[1] += b;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; state.h[2] += c;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; state.h[3] += d;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; state.h[4] += e;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; state.h[5] += f;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; state.h[6] += g;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; state.h[7] += h;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// Attempt to clean up the stack.</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; a = b = c = d = e = f = g = h = temp1 = temp2 = 0;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;}</div>
<div class="ttc" id="classSHA256_html_ad9d80d8fdccffb15497bd36285afce65"><div class="ttname"><a href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">SHA256::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00066">SHA256.cpp:66</a></div></div>
<div class="ttc" id="classSHA256_html_ab672831c542df07ff03ded25760feec2"><div class="ttname"><a href="classSHA256.html#ab672831c542df07ff03ded25760feec2">SHA256::SHA256</a></div><div class="ttdeci">SHA256()</div><div class="ttdoc">Constructs a SHA-256 hash object. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00042">SHA256.cpp:42</a></div></div>
<div class="ttc" id="classSHA256_html_a695157bcdf5495ba892ebac309f3abd6"><div class="ttname"><a href="classSHA256.html#a695157bcdf5495ba892ebac309f3abd6">SHA256::finalize</a></div><div class="ttdeci">void finalize(void *hash, size_t len)</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00107">SHA256.cpp:107</a></div></div>
<div class="ttc" id="classSHA256_html_ad82f2925b612de315b289017e023a73b"><div class="ttname"><a href="classSHA256.html#ad82f2925b612de315b289017e023a73b">SHA256::~SHA256</a></div><div class="ttdeci">virtual ~SHA256()</div><div class="ttdoc">Destroys this SHA-256 hash object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00051">SHA256.cpp:51</a></div></div>
<div class="ttc" id="classSHA256_html_a71bbd9064f9d6191d0647f867953a858"><div class="ttname"><a href="classSHA256.html#a71bbd9064f9d6191d0647f867953a858">SHA256::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00061">SHA256.cpp:61</a></div></div>
<div class="ttc" id="classSHA256_html_a555bf8efb17afd4842d2e55a1f39f27b"><div class="ttname"><a href="classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b">SHA256::update</a></div><div class="ttdeci">void update(const void *data, size_t len)</div><div class="ttdoc">Updates the hash with more data. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00081">SHA256.cpp:81</a></div></div>
<div class="ttc" id="classSHA256_html_a103d5bc5ced792464a82cb1d7986de94"><div class="ttname"><a href="classSHA256.html#a103d5bc5ced792464a82cb1d7986de94">SHA256::hashSize</a></div><div class="ttdeci">size_t hashSize() const </div><div class="ttdoc">Size of the hash result from finalize(). </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00056">SHA256.cpp:56</a></div></div>
<div class="ttc" id="classSHA256_html_add0d1649d533b27005ccd8508398c689"><div class="ttname"><a href="classSHA256.html#add0d1649d533b27005ccd8508398c689">SHA256::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00142">SHA256.cpp:142</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

164
SHA256_8h_source.html Normal file
View File

@ -0,0 +1,164 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: SHA256.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SHA256.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_SHA256_h</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_SHA256_h</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Hash.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSHA256.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSHA256.html">SHA256</a> : <span class="keyword">public</span> <a class="code" href="classHash.html">Hash</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classSHA256.html#ab672831c542df07ff03ded25760feec2">SHA256</a>();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSHA256.html#ad82f2925b612de315b289017e023a73b">~SHA256</a>();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSHA256.html#a103d5bc5ced792464a82cb1d7986de94">hashSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSHA256.html#a71bbd9064f9d6191d0647f867953a858">blockSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">reset</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b">update</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA256.html#a695157bcdf5495ba892ebac309f3abd6">finalize</a>(<span class="keywordtype">void</span> *hash, <span class="keywordtype">size_t</span> len);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSHA256.html#add0d1649d533b27005ccd8508398c689">clear</a>();</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">struct </span>{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint32_t h[8];</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint32_t w[16];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint8_t chunkSize;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">bool</span> finalized;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint64_t length;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; } state;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> processChunk();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classSHA256_html_ad9d80d8fdccffb15497bd36285afce65"><div class="ttname"><a href="classSHA256.html#ad9d80d8fdccffb15497bd36285afce65">SHA256::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Resets the hash ready for a new hashing process. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00066">SHA256.cpp:66</a></div></div>
<div class="ttc" id="classSHA256_html_ab672831c542df07ff03ded25760feec2"><div class="ttname"><a href="classSHA256.html#ab672831c542df07ff03ded25760feec2">SHA256::SHA256</a></div><div class="ttdeci">SHA256()</div><div class="ttdoc">Constructs a SHA-256 hash object. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00042">SHA256.cpp:42</a></div></div>
<div class="ttc" id="classHash_html"><div class="ttname"><a href="classHash.html">Hash</a></div><div class="ttdoc">Abstract base class for cryptographic hash algorithms. </div><div class="ttdef"><b>Definition:</b> <a href="Hash_8h_source.html#l00029">Hash.h:29</a></div></div>
<div class="ttc" id="classSHA256_html_a695157bcdf5495ba892ebac309f3abd6"><div class="ttname"><a href="classSHA256.html#a695157bcdf5495ba892ebac309f3abd6">SHA256::finalize</a></div><div class="ttdeci">void finalize(void *hash, size_t len)</div><div class="ttdoc">Finalizes the hashing process and returns the hash. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00107">SHA256.cpp:107</a></div></div>
<div class="ttc" id="classSHA256_html_ad82f2925b612de315b289017e023a73b"><div class="ttname"><a href="classSHA256.html#ad82f2925b612de315b289017e023a73b">SHA256::~SHA256</a></div><div class="ttdeci">virtual ~SHA256()</div><div class="ttdoc">Destroys this SHA-256 hash object after clearing sensitive information. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00051">SHA256.cpp:51</a></div></div>
<div class="ttc" id="classSHA256_html"><div class="ttname"><a href="classSHA256.html">SHA256</a></div><div class="ttdoc">SHA-256 hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8h_source.html#l00028">SHA256.h:28</a></div></div>
<div class="ttc" id="classSHA256_html_a71bbd9064f9d6191d0647f867953a858"><div class="ttname"><a href="classSHA256.html#a71bbd9064f9d6191d0647f867953a858">SHA256::blockSize</a></div><div class="ttdeci">size_t blockSize() const </div><div class="ttdoc">Size of the internal block used by the hash algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00061">SHA256.cpp:61</a></div></div>
<div class="ttc" id="classSHA256_html_a555bf8efb17afd4842d2e55a1f39f27b"><div class="ttname"><a href="classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b">SHA256::update</a></div><div class="ttdeci">void update(const void *data, size_t len)</div><div class="ttdoc">Updates the hash with more data. </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00081">SHA256.cpp:81</a></div></div>
<div class="ttc" id="classSHA256_html_a103d5bc5ced792464a82cb1d7986de94"><div class="ttname"><a href="classSHA256.html#a103d5bc5ced792464a82cb1d7986de94">SHA256::hashSize</a></div><div class="ttdeci">size_t hashSize() const </div><div class="ttdoc">Size of the hash result from finalize(). </div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00056">SHA256.cpp:56</a></div></div>
<div class="ttc" id="classSHA256_html_add0d1649d533b27005ccd8508398c689"><div class="ttname"><a href="classSHA256.html#add0d1649d533b27005ccd8508398c689">SHA256::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing ...</div><div class="ttdef"><b>Definition:</b> <a href="SHA256_8cpp_source.html#l00142">SHA256.cpp:142</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: SoftI2C.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -118,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#define i2cDelay() delayMicroseconds(5)</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc"> 50</a></span>&#160;<a class="code" href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc" title="Constructs a new software I2C master on dataPin and clockPin.">SoftI2C::SoftI2C</a>(uint8_t dataPin, uint8_t clockPin)</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc"> 50</a></span>&#160;<a class="code" href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc">SoftI2C::SoftI2C</a>(uint8_t dataPin, uint8_t clockPin)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; : _dataPin(dataPin)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; , _clockPin(clockPin)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; , started(false)</div>
@ -133,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; digitalWrite(_dataPin, HIGH);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4"> 65</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4" title="Returns the maximum number of bytes that can be read or written in a single request by this bus maste...">SoftI2C::maxTransferSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4"> 65</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4">SoftI2C::maxTransferSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> 0xFFFF;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div>
@ -172,21 +173,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_READ 0x01</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_READ10 0xF1</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9"> 104</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9" title="Starts a write operation by sending a start condition and the I2C control byte.">SoftI2C::startWrite</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address)</div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9"> 104</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9">SoftI2C::startWrite</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; start();</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; inWrite = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (address &lt; 0x80) {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// 7-bit address.</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)((address &lt;&lt; 1) | I2C_WRITE));</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>((uint8_t)((address &lt;&lt; 1) | I2C_WRITE));</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// 10-bit address.</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)(((address &gt;&gt; 7) &amp; 0x06)) | I2C_WRITE10);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>((uint8_t)(((address &gt;&gt; 7) &amp; 0x06)) | I2C_WRITE10);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73"> 118</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">SoftI2C::write</a>(uint8_t value)</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73"> 118</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">SoftI2C::write</a>(uint8_t value)</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; uint8_t mask = 0x80;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">while</span> (mask != 0) {</div>
@ -197,23 +198,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; acked = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="code" href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3"> 129</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3" title="Ends the current write operation.">SoftI2C::endWrite</a>()</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3"> 129</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3">SoftI2C::endWrite</a>()</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; stop();</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> acked;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="code" href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3"> 135</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">SoftI2C::startRead</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count)</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3"> 135</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3">SoftI2C::startRead</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count)</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; start();</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; inWrite = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (address &lt; 0x80) {</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// 7-bit address.</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)((address &lt;&lt; 1) | I2C_READ));</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>((uint8_t)((address &lt;&lt; 1) | I2C_READ));</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// 10-bit address.</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)(((address &gt;&gt; 7) &amp; 0x06)) | I2C_READ10);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>((uint8_t)(((address &gt;&gt; 7) &amp; 0x06)) | I2C_READ10);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>((uint8_t)address);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (!acked) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; readCount = 0;</div>
@ -223,12 +224,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="code" href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e"> 155</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e" title="Returns the number of bytes that are still available for reading.">SoftI2C::available</a>()</div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e"> 155</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e">SoftI2C::available</a>()</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> readCount;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="code" href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc"> 160</a></span>&#160;uint8_t <a class="code" href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc" title="Reads a single byte from the I2C bus.">SoftI2C::read</a>()</div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc"> 160</a></span>&#160;uint8_t <a class="code" href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc">SoftI2C::read</a>()</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; uint8_t value = 0;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">for</span> (uint8_t bit = 0; bit &lt; 8; ++bit)</div>
@ -271,12 +272,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; i2cDelay();</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">return</span> bit;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;}</div>
<div class="ttc" id="classSoftI2C_html_aa0dafc067cfa374af75e060dca647ec3"><div class="ttname"><a href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3">SoftI2C::startRead</a></div><div class="ttdeci">bool startRead(unsigned int address, unsigned int count)</div><div class="ttdoc">Starts a read operation for count bytes by sending the start condition and the I2C control byte...</div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00135">SoftI2C.cpp:135</a></div></div>
<div class="ttc" id="classSoftI2C_html_aa12ae82813598b2e9ea70463c23c5bf3"><div class="ttname"><a href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3">SoftI2C::endWrite</a></div><div class="ttdeci">bool endWrite()</div><div class="ttdoc">Ends the current write operation. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00129">SoftI2C.cpp:129</a></div></div>
<div class="ttc" id="classSoftI2C_html_adb6e00ee3f930f1d32010a18feb5f6cc"><div class="ttname"><a href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc">SoftI2C::SoftI2C</a></div><div class="ttdeci">SoftI2C(uint8_t dataPin, uint8_t clockPin)</div><div class="ttdoc">Constructs a new software I2C master on dataPin and clockPin. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00050">SoftI2C.cpp:50</a></div></div>
<div class="ttc" id="classSoftI2C_html_a849af91018caedbb82e83f02c543305e"><div class="ttname"><a href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e">SoftI2C::available</a></div><div class="ttdeci">unsigned int available()</div><div class="ttdoc">Returns the number of bytes that are still available for reading. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00155">SoftI2C.cpp:155</a></div></div>
<div class="ttc" id="classSoftI2C_html_a330dbba5b726fa161a6b01a9ca49e1bc"><div class="ttname"><a href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc">SoftI2C::read</a></div><div class="ttdeci">uint8_t read()</div><div class="ttdoc">Reads a single byte from the I2C bus. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00160">SoftI2C.cpp:160</a></div></div>
<div class="ttc" id="classSoftI2C_html_ab46f0b6363c9cfe6fb3ab907956d5d73"><div class="ttname"><a href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">SoftI2C::write</a></div><div class="ttdeci">void write(uint8_t value)</div><div class="ttdoc">Writes a single byte value on the I2C bus. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00118">SoftI2C.cpp:118</a></div></div>
<div class="ttc" id="classSoftI2C_html_aad488669f28f6a5a4ceaae3de61d38f4"><div class="ttname"><a href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4">SoftI2C::maxTransferSize</a></div><div class="ttdeci">unsigned int maxTransferSize() const </div><div class="ttdoc">Returns the maximum number of bytes that can be read or written in a single request by this bus maste...</div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00065">SoftI2C.cpp:65</a></div></div>
<div class="ttc" id="classSoftI2C_html_aa8a3219f4e6ff52306cc3c219f37d8f9"><div class="ttname"><a href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9">SoftI2C::startWrite</a></div><div class="ttdeci">void startWrite(unsigned int address)</div><div class="ttdoc">Starts a write operation by sending a start condition and the I2C control byte. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00104">SoftI2C.cpp:104</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: SoftI2C.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,19 +115,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;I2CMaster.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classSoftI2C.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSoftI2C.html" title="Bit-banged implementation of an I2C master.">SoftI2C</a> : <span class="keyword">public</span> <a class="code" href="classI2CMaster.html" title="Abstract base class for I2C master implementations.">I2CMaster</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSoftI2C.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSoftI2C.html">SoftI2C</a> : <span class="keyword">public</span> <a class="code" href="classI2CMaster.html">I2CMaster</a> {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc" title="Constructs a new software I2C master on dataPin and clockPin.">SoftI2C</a>(uint8_t dataPin, uint8_t clockPin);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc">SoftI2C</a>(uint8_t dataPin, uint8_t clockPin);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4" title="Returns the maximum number of bytes that can be read or written in a single request by this bus maste...">maxTransferSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4">maxTransferSize</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9" title="Starts a write operation by sending a start condition and the I2C control byte.">startWrite</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73" title="Writes a single byte value on the I2C bus.">write</a>(uint8_t value);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3" title="Ends the current write operation.">endWrite</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9">startWrite</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">write</a>(uint8_t value);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3">endWrite</a>();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3" title="Starts a read operation for count bytes by sending the start condition and the I2C control byte...">startRead</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e" title="Returns the number of bytes that are still available for reading.">available</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; uint8_t <a class="code" href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc" title="Reads a single byte from the I2C bus.">read</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3">startRead</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e">available</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; uint8_t <a class="code" href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc">read</a>();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; uint8_t _dataPin;</div>
@ -143,12 +144,22 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;};</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classSoftI2C_html"><div class="ttname"><a href="classSoftI2C.html">SoftI2C</a></div><div class="ttdoc">Bit-banged implementation of an I2C master. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8h_source.html#l00028">SoftI2C.h:28</a></div></div>
<div class="ttc" id="classSoftI2C_html_aa0dafc067cfa374af75e060dca647ec3"><div class="ttname"><a href="classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3">SoftI2C::startRead</a></div><div class="ttdeci">bool startRead(unsigned int address, unsigned int count)</div><div class="ttdoc">Starts a read operation for count bytes by sending the start condition and the I2C control byte...</div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00135">SoftI2C.cpp:135</a></div></div>
<div class="ttc" id="classSoftI2C_html_aa12ae82813598b2e9ea70463c23c5bf3"><div class="ttname"><a href="classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3">SoftI2C::endWrite</a></div><div class="ttdeci">bool endWrite()</div><div class="ttdoc">Ends the current write operation. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00129">SoftI2C.cpp:129</a></div></div>
<div class="ttc" id="classSoftI2C_html_adb6e00ee3f930f1d32010a18feb5f6cc"><div class="ttname"><a href="classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc">SoftI2C::SoftI2C</a></div><div class="ttdeci">SoftI2C(uint8_t dataPin, uint8_t clockPin)</div><div class="ttdoc">Constructs a new software I2C master on dataPin and clockPin. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00050">SoftI2C.cpp:50</a></div></div>
<div class="ttc" id="classSoftI2C_html_a849af91018caedbb82e83f02c543305e"><div class="ttname"><a href="classSoftI2C.html#a849af91018caedbb82e83f02c543305e">SoftI2C::available</a></div><div class="ttdeci">unsigned int available()</div><div class="ttdoc">Returns the number of bytes that are still available for reading. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00155">SoftI2C.cpp:155</a></div></div>
<div class="ttc" id="classSoftI2C_html_a330dbba5b726fa161a6b01a9ca49e1bc"><div class="ttname"><a href="classSoftI2C.html#a330dbba5b726fa161a6b01a9ca49e1bc">SoftI2C::read</a></div><div class="ttdeci">uint8_t read()</div><div class="ttdoc">Reads a single byte from the I2C bus. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00160">SoftI2C.cpp:160</a></div></div>
<div class="ttc" id="classSoftI2C_html_ab46f0b6363c9cfe6fb3ab907956d5d73"><div class="ttname"><a href="classSoftI2C.html#ab46f0b6363c9cfe6fb3ab907956d5d73">SoftI2C::write</a></div><div class="ttdeci">void write(uint8_t value)</div><div class="ttdoc">Writes a single byte value on the I2C bus. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00118">SoftI2C.cpp:118</a></div></div>
<div class="ttc" id="classSoftI2C_html_aad488669f28f6a5a4ceaae3de61d38f4"><div class="ttname"><a href="classSoftI2C.html#aad488669f28f6a5a4ceaae3de61d38f4">SoftI2C::maxTransferSize</a></div><div class="ttdeci">unsigned int maxTransferSize() const </div><div class="ttdoc">Returns the maximum number of bytes that can be read or written in a single request by this bus maste...</div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00065">SoftI2C.cpp:65</a></div></div>
<div class="ttc" id="classI2CMaster_html"><div class="ttname"><a href="classI2CMaster.html">I2CMaster</a></div><div class="ttdoc">Abstract base class for I2C master implementations. </div><div class="ttdef"><b>Definition:</b> <a href="I2CMaster_8h_source.html#l00028">I2CMaster.h:28</a></div></div>
<div class="ttc" id="classSoftI2C_html_aa8a3219f4e6ff52306cc3c219f37d8f9"><div class="ttname"><a href="classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9">SoftI2C::startWrite</a></div><div class="ttdeci">void startWrite(unsigned int address)</div><div class="ttdoc">Starts a write operation by sending a start condition and the I2C control byte. </div><div class="ttdef"><b>Definition:</b> <a href="SoftI2C_8cpp_source.html#l00104">SoftI2C.cpp:104</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: TextField.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -111,44 +112,53 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;TextField.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382"> 66</a></span>&#160;<a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382" title="Constructs a new text field with a specific label.">TextField::TextField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(label)</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382"> 66</a></span>&#160;<a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382">TextField::TextField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; : <a class="code" href="classField.html">Field</a>(label)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;{</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="classTextField.html#a24096a344d9161b2c99ce724ec2ee93c"> 77</a></span>&#160;<a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382" title="Constructs a new text field with a specific label.">TextField::TextField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;value)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(form, label)</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classTextField.html#a24096a344d9161b2c99ce724ec2ee93c"> 77</a></span>&#160;<a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382">TextField::TextField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;value)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classField.html">Field</a>(form, label)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; , _value(value)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;{</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32"> 83</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32" title="Enters the field due to form navigation.">TextField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32"> 83</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32">TextField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;{</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32" title="Enters the field due to form navigation.">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(_value);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(_value);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="code" href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033"> 102</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033" title="Sets the text value that is displayed by this field.">TextField::setValue</a>(<span class="keyword">const</span> String &amp;value)</div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033"> 102</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033">TextField::setValue</a>(<span class="keyword">const</span> String &amp;value)</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>()) {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>()) {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> prevLen = _value.length();</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newLen = value.length();</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; _value = <a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1" title="Returns the text value that is currently displayed by this field.">value</a>;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;print(value);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; _value = <a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1">value</a>;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;print(value);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">while</span> (newLen++ &lt; prevLen)</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; _value = <a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1" title="Returns the text value that is currently displayed by this field.">value</a>;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; _value = <a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1">value</a>;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div>
<div class="ttc" id="classTextField_html_a24b98c5bb744331bf0a5facc8ea9c033"><div class="ttname"><a href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033">TextField::setValue</a></div><div class="ttdeci">void setValue(const String &amp;value)</div><div class="ttdoc">Sets the text value that is displayed by this field. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8cpp_source.html#l00102">TextField.cpp:102</a></div></div>
<div class="ttc" id="classTextField_html_a5108741ab147b2cd5a399fefbe0a2382"><div class="ttname"><a href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382">TextField::TextField</a></div><div class="ttdeci">TextField(const String &amp;label)</div><div class="ttdoc">Constructs a new text field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8cpp_source.html#l00066">TextField.cpp:66</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classTextField_html_aa78f1354f9240b64fabd6f996e312f32"><div class="ttname"><a href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32">TextField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8cpp_source.html#l00083">TextField.cpp:83</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classTextField_html_a124764b6fc7c19aaf683f72cd42636b1"><div class="ttname"><a href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1">TextField::value</a></div><div class="ttdeci">const String &amp; value() const </div><div class="ttdoc">Returns the text value that is currently displayed by this field. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8h_source.html#l00035">TextField.h:35</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: TextField.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -114,27 +115,36 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;Field.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="classTextField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classTextField.html" title="Field that displays a read-only text value.">TextField</a> : <span class="keyword">public</span> <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classTextField.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="classTextField.html">TextField</a> : <span class="keyword">public</span> <a class="code" href="classField.html">Field</a> {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382" title="Constructs a new text field with a specific label.">TextField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382" title="Constructs a new text field with a specific label.">TextField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;<a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1" title="Returns the text value that is currently displayed by this field.">value</a>);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382">TextField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382">TextField</a>(<a class="code" href="classForm.html">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keyword">const</span> String &amp;<a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1">value</a>);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32" title="Enters the field due to form navigation.">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1"> 35</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1" title="Returns the text value that is currently displayed by this field.">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033" title="Sets the text value that is displayed by this field.">setValue</a>(<span class="keyword">const</span> String &amp;value);</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1"> 35</a></span>&#160; <span class="keyword">const</span> String &amp;<a class="code" href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033">setValue</a>(<span class="keyword">const</span> String &amp;value);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; String _value;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classTextField_html_a24b98c5bb744331bf0a5facc8ea9c033"><div class="ttname"><a href="classTextField.html#a24b98c5bb744331bf0a5facc8ea9c033">TextField::setValue</a></div><div class="ttdeci">void setValue(const String &amp;value)</div><div class="ttdoc">Sets the text value that is displayed by this field. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8cpp_source.html#l00102">TextField.cpp:102</a></div></div>
<div class="ttc" id="classTextField_html_a5108741ab147b2cd5a399fefbe0a2382"><div class="ttname"><a href="classTextField.html#a5108741ab147b2cd5a399fefbe0a2382">TextField::TextField</a></div><div class="ttdeci">TextField(const String &amp;label)</div><div class="ttdoc">Constructs a new text field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8cpp_source.html#l00066">TextField.cpp:66</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_a27427319be1cc92db3128637d8884ee5"><div class="ttname"><a href="classField.html#a27427319be1cc92db3128637d8884ee5">Field::form</a></div><div class="ttdeci">Form * form() const </div><div class="ttdoc">Returns the Form that owns this field; null if not associated with a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00034">Field.h:34</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classTextField_html_aa78f1354f9240b64fabd6f996e312f32"><div class="ttname"><a href="classTextField.html#aa78f1354f9240b64fabd6f996e312f32">TextField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8cpp_source.html#l00083">TextField.cpp:83</a></div></div>
<div class="ttc" id="classTextField_html_a124764b6fc7c19aaf683f72cd42636b1"><div class="ttname"><a href="classTextField.html#a124764b6fc7c19aaf683f72cd42636b1">TextField::value</a></div><div class="ttdeci">const String &amp; value() const </div><div class="ttdoc">Returns the text value that is currently displayed by this field. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8h_source.html#l00035">TextField.h:35</a></div></div>
<div class="ttc" id="classTextField_html"><div class="ttname"><a href="classTextField.html">TextField</a></div><div class="ttdoc">Field that displays a read-only text value. </div><div class="ttdef"><b>Definition:</b> <a href="TextField_8h_source.html#l00028">TextField.h:28</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: TimeField.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -117,8 +118,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define EDIT_SECOND_TENS 3</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define EDIT_SECOND 4</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431"> 82</a></span>&#160;<a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431" title="Constructs a new time field with a specific label.">TimeField::TimeField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(label)</div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classTimeField.html#a138e2425379705828a87eb2d8a836431"> 82</a></span>&#160;<a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431">TimeField::TimeField</a>(<span class="keyword">const</span> String &amp;label)</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; : <a class="code" href="classField.html">Field</a>(label)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; , _value(0)</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; , _maxHours(24)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; , _printLen(0)</div>
@ -127,8 +128,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;{</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="classTimeField.html#a87f222bc098367963ed21a7edc4624de"> 105</a></span>&#160;<a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431" title="Constructs a new time field with a specific label.">TimeField::TimeField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> maxHours, <span class="keywordtype">bool</span> readOnly)</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; : <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a>(form, label)</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classTimeField.html#a87f222bc098367963ed21a7edc4624de"> 105</a></span>&#160;<a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431">TimeField::TimeField</a>(<a class="code" href="classForm.html">Form</a> &amp;form, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> maxHours, <span class="keywordtype">bool</span> readOnly)</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; : <a class="code" href="classField.html">Field</a>(form, label)</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; , _value(0)</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; , _maxHours(maxHours)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; , _printLen(0)</div>
@ -137,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5"> 115</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5" title="Dispatches event via this field.">TimeField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5"> 115</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5">TimeField::dispatch</a>(<span class="keywordtype">int</span> event)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;{</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> newValue;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (_readOnly)</div>
@ -167,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; newValue += 1;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1" title="Sets the value of this time field, in seconds.">setValue</a>(newValue);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1">setValue</a>(newValue);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event == LCD_BUTTON_DOWN) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; newValue = _value;</div>
@ -197,7 +198,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; newValue -= 1;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1" title="Sets the value of this time field, in seconds.">setValue</a>(newValue);</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1">setValue</a>(newValue);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> FORM_CHANGED;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event == LCD_BUTTON_LEFT) {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span> (editField != EDIT_HOUR) {</div>
@ -215,86 +216,86 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;}</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
<div class="line"><a name="l00193"></a><span class="lineno"><a class="code" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b"> 193</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b" title="Enters the field due to form navigation.">TimeField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b"> 193</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b">TimeField::enterField</a>(<span class="keywordtype">bool</span> reverse)</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;{</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b" title="Enters the field due to form navigation.">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a>(reverse);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span> (reverse)</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; editField = EDIT_SECOND;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; editField = EDIT_HOUR;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; printTime();</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">if</span> (!_readOnly)</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;cursor();</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;cursor();</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="code" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541"> 205</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541" title="Exits the field due to form navigation.">TimeField::exitField</a>()</div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541"> 205</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541">TimeField::exitField</a>()</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (!_readOnly)</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;noCursor();</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541" title="Exits the field due to form navigation.">Field::exitField</a>();</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;noCursor();</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">Field::exitField</a>();</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;}</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1"> 227</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1" title="Sets the value of this time field, in seconds.">TimeField::setValue</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value)</div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1"> 227</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1">TimeField::setValue</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value)</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;{</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxSecs = ((<span class="keywordtype">unsigned</span> long)_maxHours) * 60 * 60;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; value %= maxSecs;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (value != _value) {</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; _value = <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f" title="Returns the current value of this time field, in seconds.">value</a>;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>())</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; _value = <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">value</a>;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>())</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; printTime();</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div>
<div class="line"><a name="l00268"></a><span class="lineno"><a class="code" href="classTimeField.html#a3f002a0729e90e88d04025908be102fe"> 268</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a3f002a0729e90e88d04025908be102fe" title="Sets the read-only state of this field to value.">TimeField::setReadOnly</a>(<span class="keywordtype">bool</span> value)</div>
<div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classTimeField.html#a3f002a0729e90e88d04025908be102fe"> 268</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a3f002a0729e90e88d04025908be102fe">TimeField::setReadOnly</a>(<span class="keywordtype">bool</span> value)</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (_readOnly != value) {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; _readOnly = <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f" title="Returns the current value of this time field, in seconds.">value</a>;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; _readOnly = <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">value</a>;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; printTime();</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72" title="Returns true if this field is the currently-displayed field in its owning form; false otherwise...">isCurrent</a>()) {</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classField.html#a25d86a67b321e8c642edf75a10a35f72">isCurrent</a>()) {</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (value)</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;cursor();</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;cursor();</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;noCursor();</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;noCursor();</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;}</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="keywordtype">void</span> TimeField::printTime()</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;{</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(0, 1);</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">int</span> col = printField(_value / (60 * 60));</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordtype">int</span> hourCol = col - 1;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39;:&#39;</span>);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39;:&#39;</span>);</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; ++col;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; col += printField((_value / 60) % 60);</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">int</span> minuteCol = col - 1;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39;:&#39;</span>);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39;:&#39;</span>);</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; ++col;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; col += printField(_value % 60);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordtype">int</span> secondCol = col - 1;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordtype">int</span> tempCol = col;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">while</span> (tempCol++ &lt; _printLen)</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; _printLen = col;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (!_readOnly) {</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (editField == EDIT_HOUR)</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(hourCol, 1);</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(hourCol, 1);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (editField == EDIT_MINUTE_TENS)</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(minuteCol - 1, 1);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(minuteCol - 1, 1);</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (editField == EDIT_MINUTE)</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(minuteCol, 1);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(minuteCol, 1);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (editField == EDIT_SECOND_TENS)</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(secondCol - 1, 1);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(secondCol - 1, 1);</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;setCursor(secondCol, 1);</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;setCursor(secondCol, 1);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="keywordtype">int</span> TimeField::printField(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value)</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (value &lt; 100) {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39;0&#39;</span> + (<span class="keywordtype">int</span>)(value / 10));</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39;0&#39;</span> + (<span class="keywordtype">int</span>)(value % 10));</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39;0&#39;</span> + (<span class="keywordtype">int</span>)(value / 10));</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39;0&#39;</span> + (<span class="keywordtype">int</span>)(value % 10));</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> 2;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> divisor = 100;</div>
@ -302,18 +303,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; divisor *= 10;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">int</span> digits = 0;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">while</span> (divisor &gt; 0) {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1" title="Returns the LCD that this field is being drawn on.">lcd</a>()-&gt;write(<span class="charliteral">&#39;0&#39;</span> + (<span class="keywordtype">int</span>)((value / divisor) % 10));</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <a class="code" href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">lcd</a>()-&gt;write(<span class="charliteral">&#39;0&#39;</span> + (<span class="keywordtype">int</span>)((value / divisor) % 10));</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; divisor /= 10;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; ++digits;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> digits;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;}</div>
<div class="ttc" id="classTimeField_html_a400aaa72a83b3b872e1de1c3af1a240f"><div class="ttname"><a href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">TimeField::value</a></div><div class="ttdeci">unsigned long value() const </div><div class="ttdoc">Returns the current value of this time field, in seconds. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8h_source.html#l00041">TimeField.h:41</a></div></div>
<div class="ttc" id="classTimeField_html_a3f002a0729e90e88d04025908be102fe"><div class="ttname"><a href="classTimeField.html#a3f002a0729e90e88d04025908be102fe">TimeField::setReadOnly</a></div><div class="ttdeci">void setReadOnly(bool value)</div><div class="ttdoc">Sets the read-only state of this field to value. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00268">TimeField.cpp:268</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_aa032bbeacb405c56546cb56fbbee94f5"><div class="ttname"><a href="classField.html#aa032bbeacb405c56546cb56fbbee94f5">Field::enterField</a></div><div class="ttdeci">virtual void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00116">Field.cpp:116</a></div></div>
<div class="ttc" id="classField_html_a5cf21bf958a71e51feac9e1bf9f599d1"><div class="ttname"><a href="classField.html#a5cf21bf958a71e51feac9e1bf9f599d1">Field::lcd</a></div><div class="ttdeci">LiquidCrystal * lcd() const </div><div class="ttdoc">Returns the LCD that this field is being drawn on. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00047">Field.h:47</a></div></div>
<div class="ttc" id="classTimeField_html_a9b953d9abdbe960a3fa34938462832e5"><div class="ttname"><a href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5">TimeField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00115">TimeField.cpp:115</a></div></div>
<div class="ttc" id="classField_html_ad6805c75ee1e62f8cd8bd550c4530c07"><div class="ttname"><a href="classField.html#ad6805c75ee1e62f8cd8bd550c4530c07">Field::exitField</a></div><div class="ttdeci">virtual void exitField()</div><div class="ttdoc">Exits the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00129">Field.cpp:129</a></div></div>
<div class="ttc" id="classTimeField_html_ae914d6b870283a334d2d669460f7646b"><div class="ttname"><a href="classTimeField.html#ae914d6b870283a334d2d669460f7646b">TimeField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00193">TimeField.cpp:193</a></div></div>
<div class="ttc" id="classTimeField_html_a138e2425379705828a87eb2d8a836431"><div class="ttname"><a href="classTimeField.html#a138e2425379705828a87eb2d8a836431">TimeField::TimeField</a></div><div class="ttdeci">TimeField(const String &amp;label)</div><div class="ttdoc">Constructs a new time field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00082">TimeField.cpp:82</a></div></div>
<div class="ttc" id="classField_html_a25d86a67b321e8c642edf75a10a35f72"><div class="ttname"><a href="classField.html#a25d86a67b321e8c642edf75a10a35f72">Field::isCurrent</a></div><div class="ttdeci">bool isCurrent() const </div><div class="ttdoc">Returns true if this field is the currently-displayed field in its owning form; false otherwise...</div><div class="ttdef"><b>Definition:</b> <a href="Field_8cpp_source.html#l00169">Field.cpp:169</a></div></div>
<div class="ttc" id="classTimeField_html_a5a6b7db2e3fda7745e0ff9c3d8d9a541"><div class="ttname"><a href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541">TimeField::exitField</a></div><div class="ttdeci">void exitField()</div><div class="ttdoc">Exits the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00205">TimeField.cpp:205</a></div></div>
<div class="ttc" id="classTimeField_html_a063b6df2bd6fa7970ee445ab4e5d1fc1"><div class="ttname"><a href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1">TimeField::setValue</a></div><div class="ttdeci">void setValue(unsigned long value)</div><div class="ttdoc">Sets the value of this time field, in seconds. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00227">TimeField.cpp:227</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: TimeField.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -117,24 +118,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#define TIMEFIELD_READ_ONLY true</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define TIMEFIELD_READ_WRITE false</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="code" href="classTimeField.html"> 31</a></span>&#160;<span class="keyword">class </span><a class="code" href="classTimeField.html" title="Field that manages the display and editing of a time value.">TimeField</a> : <span class="keyword">public</span> <a class="code" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> {</div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classTimeField.html"> 31</a></span>&#160;<span class="keyword">class </span><a class="code" href="classTimeField.html">TimeField</a> : <span class="keyword">public</span> <a class="code" href="classField.html">Field</a> {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431" title="Constructs a new time field with a specific label.">TimeField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe" title="Returns the label to display in the first line of this field.">label</a>);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431" title="Constructs a new time field with a specific label.">TimeField</a>(<a class="code" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5" title="Returns the Form that owns this field; null if not associated with a Form.">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> <a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7" title="Returns the maximum number of hours before the field wraps around.">maxHours</a>, <span class="keywordtype">bool</span> <a class="code" href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1" title="Returns TIMEFIELD_READ_ONLY (true) or TIMEFIELD_READ_WRITE (false).">readOnly</a>);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431">TimeField</a>(<span class="keyword">const</span> String &amp;<a class="code" href="classField.html#aaa861ef917130c989a955bc75c683afe">label</a>);</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classTimeField.html#a138e2425379705828a87eb2d8a836431">TimeField</a>(<a class="code" href="classForm.html">Form</a> &amp;<a class="code" href="classField.html#a27427319be1cc92db3128637d8884ee5">form</a>, <span class="keyword">const</span> String &amp;label, <span class="keywordtype">int</span> <a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7">maxHours</a>, <span class="keywordtype">bool</span> <a class="code" href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1">readOnly</a>);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5" title="Dispatches event via this field.">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5">dispatch</a>(<span class="keywordtype">int</span> event);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b" title="Enters the field due to form navigation.">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541" title="Exits the field due to form navigation.">exitField</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#ae914d6b870283a334d2d669460f7646b">enterField</a>(<span class="keywordtype">bool</span> reverse);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541">exitField</a>();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f"> 41</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f" title="Returns the current value of this time field, in seconds.">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1" title="Sets the value of this time field, in seconds.">setValue</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f" title="Returns the current value of this time field, in seconds.">value</a>);</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f"> 41</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _value; }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1">setValue</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">value</a>);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7"> 44</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7" title="Returns the maximum number of hours before the field wraps around.">maxHours</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _maxHours; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="classTimeField.html#a7ac124eb9dde01c18c711c421736b5ed"> 45</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a7ac124eb9dde01c18c711c421736b5ed" title="Sets the maximum number of hours before the field wraps around to maxHours.">setMaxHours</a>(<span class="keywordtype">int</span> maxHours) { _maxHours = <a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7" title="Returns the maximum number of hours before the field wraps around.">maxHours</a>; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7"> 44</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7">maxHours</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _maxHours; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classTimeField.html#a7ac124eb9dde01c18c711c421736b5ed"> 45</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a7ac124eb9dde01c18c711c421736b5ed">setMaxHours</a>(<span class="keywordtype">int</span> maxHours) { _maxHours = <a class="code" href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7">maxHours</a>; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1"> 47</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1" title="Returns TIMEFIELD_READ_ONLY (true) or TIMEFIELD_READ_WRITE (false).">readOnly</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _readOnly; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a3f002a0729e90e88d04025908be102fe" title="Sets the read-only state of this field to value.">setReadOnly</a>(<span class="keywordtype">bool</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f" title="Returns the current value of this time field, in seconds.">value</a>);</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1"> 47</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1">readOnly</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _readOnly; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTimeField.html#a3f002a0729e90e88d04025908be102fe">setReadOnly</a>(<span class="keywordtype">bool</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">value</a>);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _value;</div>
@ -144,16 +145,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; uint8_t editField;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> printTime();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">int</span> printField(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f" title="Returns the current value of this time field, in seconds.">value</a>);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">int</span> printField(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">value</a>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classTimeField_html_a7ac124eb9dde01c18c711c421736b5ed"><div class="ttname"><a href="classTimeField.html#a7ac124eb9dde01c18c711c421736b5ed">TimeField::setMaxHours</a></div><div class="ttdeci">void setMaxHours(int maxHours)</div><div class="ttdoc">Sets the maximum number of hours before the field wraps around to maxHours. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8h_source.html#l00045">TimeField.h:45</a></div></div>
<div class="ttc" id="classTimeField_html_a400aaa72a83b3b872e1de1c3af1a240f"><div class="ttname"><a href="classTimeField.html#a400aaa72a83b3b872e1de1c3af1a240f">TimeField::value</a></div><div class="ttdeci">unsigned long value() const </div><div class="ttdoc">Returns the current value of this time field, in seconds. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8h_source.html#l00041">TimeField.h:41</a></div></div>
<div class="ttc" id="classTimeField_html_a3f002a0729e90e88d04025908be102fe"><div class="ttname"><a href="classTimeField.html#a3f002a0729e90e88d04025908be102fe">TimeField::setReadOnly</a></div><div class="ttdeci">void setReadOnly(bool value)</div><div class="ttdoc">Sets the read-only state of this field to value. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00268">TimeField.cpp:268</a></div></div>
<div class="ttc" id="classField_html"><div class="ttname"><a href="classField.html">Field</a></div><div class="ttdoc">Manages a single data input/output field within a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00028">Field.h:28</a></div></div>
<div class="ttc" id="classForm_html"><div class="ttname"><a href="classForm.html">Form</a></div><div class="ttdoc">Manager for a form containing data input/output fields. </div><div class="ttdef"><b>Definition:</b> <a href="Form_8h_source.html#l00032">Form.h:32</a></div></div>
<div class="ttc" id="classField_html_a27427319be1cc92db3128637d8884ee5"><div class="ttname"><a href="classField.html#a27427319be1cc92db3128637d8884ee5">Field::form</a></div><div class="ttdeci">Form * form() const </div><div class="ttdoc">Returns the Form that owns this field; null if not associated with a Form. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00034">Field.h:34</a></div></div>
<div class="ttc" id="classTimeField_html_aa73f5a62c330ac7d2f647dfe27d026b7"><div class="ttname"><a href="classTimeField.html#aa73f5a62c330ac7d2f647dfe27d026b7">TimeField::maxHours</a></div><div class="ttdeci">int maxHours() const </div><div class="ttdoc">Returns the maximum number of hours before the field wraps around. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8h_source.html#l00044">TimeField.h:44</a></div></div>
<div class="ttc" id="classField_html_aaa861ef917130c989a955bc75c683afe"><div class="ttname"><a href="classField.html#aaa861ef917130c989a955bc75c683afe">Field::label</a></div><div class="ttdeci">const String &amp; label() const </div><div class="ttdoc">Returns the label to display in the first line of this field. </div><div class="ttdef"><b>Definition:</b> <a href="Field_8h_source.html#l00041">Field.h:41</a></div></div>
<div class="ttc" id="classTimeField_html_a9b953d9abdbe960a3fa34938462832e5"><div class="ttname"><a href="classTimeField.html#a9b953d9abdbe960a3fa34938462832e5">TimeField::dispatch</a></div><div class="ttdeci">int dispatch(int event)</div><div class="ttdoc">Dispatches event via this field. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00115">TimeField.cpp:115</a></div></div>
<div class="ttc" id="classTimeField_html"><div class="ttname"><a href="classTimeField.html">TimeField</a></div><div class="ttdoc">Field that manages the display and editing of a time value. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8h_source.html#l00031">TimeField.h:31</a></div></div>
<div class="ttc" id="classTimeField_html_aa0795c873ba9941c8a1a3bf8c06668f1"><div class="ttname"><a href="classTimeField.html#aa0795c873ba9941c8a1a3bf8c06668f1">TimeField::readOnly</a></div><div class="ttdeci">bool readOnly() const </div><div class="ttdoc">Returns TIMEFIELD_READ_ONLY (true) or TIMEFIELD_READ_WRITE (false). </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8h_source.html#l00047">TimeField.h:47</a></div></div>
<div class="ttc" id="classTimeField_html_ae914d6b870283a334d2d669460f7646b"><div class="ttname"><a href="classTimeField.html#ae914d6b870283a334d2d669460f7646b">TimeField::enterField</a></div><div class="ttdeci">void enterField(bool reverse)</div><div class="ttdoc">Enters the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00193">TimeField.cpp:193</a></div></div>
<div class="ttc" id="classTimeField_html_a138e2425379705828a87eb2d8a836431"><div class="ttname"><a href="classTimeField.html#a138e2425379705828a87eb2d8a836431">TimeField::TimeField</a></div><div class="ttdeci">TimeField(const String &amp;label)</div><div class="ttdoc">Constructs a new time field with a specific label. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00082">TimeField.cpp:82</a></div></div>
<div class="ttc" id="classTimeField_html_a5a6b7db2e3fda7745e0ff9c3d8d9a541"><div class="ttname"><a href="classTimeField.html#a5a6b7db2e3fda7745e0ff9c3d8d9a541">TimeField::exitField</a></div><div class="ttdeci">void exitField()</div><div class="ttdoc">Exits the field due to form navigation. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00205">TimeField.cpp:205</a></div></div>
<div class="ttc" id="classTimeField_html_a063b6df2bd6fa7970ee445ab4e5d1fc1"><div class="ttname"><a href="classTimeField.html#a063b6df2bd6fa7970ee445ab4e5d1fc1">TimeField::setValue</a></div><div class="ttdeci">void setValue(unsigned long value)</div><div class="ttdoc">Sets the value of this time field, in seconds. </div><div class="ttdef"><b>Definition:</b> <a href="TimeField_8cpp_source.html#l00227">TimeField.cpp:227</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -0,0 +1,303 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: TransistorNoiseSource.cpp 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">TransistorNoiseSource.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;TransistorNoiseSource.h&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;RNG.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;Crypto.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;Arduino.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">Theory of operation:</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">From Rob Seward&#39;s original design we need to find the median of the input</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">signal. That is, the threshold at which half the signal is below the</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">threshold (a zero) and the other half is above the threshold (a one).</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">Rob used a histogram table to find the median which is memory-intensive.</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">We cannot afford to spend that much memory finding the median.</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">In this implementation we divide the signal up into &quot;buckets&quot; of 1024</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">samples. We pick a starting threshold and count the number of ones</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">within the bucket. If the number of ones is between 45% to 55% of the</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">total number of samples, then we use that threshold to convert the</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">bucket into output bits. Otherwise we adjust the threshold up or down,</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment">discard the bucket, and try again.</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">After a few buckets, the threshold naturally settles at the median without</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">needing a histogram. The rest of the bucket processing can be done online</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">with storage needed only for the debiased output bits.</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">If the input voltage to the noise source is too low to generate noise,</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">then the delta between the minimum and maximum samples in the bucket will</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment">be quite small. This is used to detect disconnection of the noise source.</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">No output is generated when the noise source is disconnected.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">With 1024 raw input samples we get roughly 256 output bits after</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">Von Neumann debiasing. As a further check, the output will be discarded</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment">if less than 192 bits are generated. This can happen when the noise source</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">is connected or disconnected: only part of the bucket is valid.</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment">One of the properties of Rob&#39;s circuit design is that over time the median</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment">changes due to environmental factors and component wear. Because we adjust</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">the threshold from bucket to bucket, it should naturally float up or down</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">to the new median level as the circuit&#39;s properties change.</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">// Number of ADC values that can be generated by analogRead().</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#define ADC_NUM 1024</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment">// Number of samples to collect for a single noise &quot;bucket&quot;.</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#define SAMPLES_NUM 1024</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment">// Calculate a percentage of the sample bucket size.</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#define SAMPLES_PCT(num) ((int)(((long)SAMPLES_NUM) * (num) / 100L))</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment">// Expected spread between the minimum and maximum ADC readings for</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment">// the noise source to be considered as operating correctly.</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="preprocessor">#define NOISE_SPREAD (ADC_NUM / 8)</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">// Calibration states.</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor">#define NOISE_NOT_CALIBRATING 0</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NOISE_CALIBRATING 1</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classTransistorNoiseSource.html#a05bab61c301a5397021048c95ca3107d"> 138</a></span>&#160;<a class="code" href="classTransistorNoiseSource.html#a05bab61c301a5397021048c95ca3107d">TransistorNoiseSource::TransistorNoiseSource</a>(uint8_t pin)</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; : threshold(ADC_NUM / 2)</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; , _pin(pin)</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; , calState(NOISE_CALIBRATING)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// Configure the pin as an analog input with no pull-up.</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; pinMode(pin, INPUT);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; digitalWrite(pin, LOW);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// Start the bit collection routines.</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; restart();</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;}</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;TransistorNoiseSource::~TransistorNoiseSource()</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;{</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; restart();</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classTransistorNoiseSource.html#a9244b327c291c737396e769da9c66af9"> 156</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classTransistorNoiseSource.html#a9244b327c291c737396e769da9c66af9">TransistorNoiseSource::calibrating</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">return</span> calState != NOISE_NOT_CALIBRATING;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
<div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classTransistorNoiseSource.html#add25c6a14b0506bc30ca781f2d923917"> 161</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classTransistorNoiseSource.html#add25c6a14b0506bc30ca781f2d923917">TransistorNoiseSource::stir</a>()</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// Keep track of the minimum and maximum while generating data</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="comment">// so that we can detect when the input voltage falls too low</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// for the circuit to generate noise.</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordtype">int</span> value = analogRead(_pin);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (value &lt; minValue)</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; minValue = value;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (value &gt; maxValue)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; maxValue = value;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// Collect two bits of input and remove bias using the Von Neumann method.</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// If both bits are the same, then discard both. Otherwise choose one</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// of the bits and output that one. We have to do this carefully so that</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// instruction timing does not reveal the value of the bit that is chosen.</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; uint8_t bit = ((threshold - value) &gt;&gt; 15) &amp; 1; <span class="comment">// Subtract and extract sign.</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (count &amp; 1) {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span> (prevBit ^ bit) {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// The bits are different: add the new bit to the buffer.</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (posn &lt; <span class="keyword">sizeof</span>(buffer)) {</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; buffer[posn] = (buffer[posn] &lt;&lt; 1) | bit;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (++bitNum &gt;= 8) {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; ++posn;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; bitNum = 0;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; prevBit = bit;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// Keep a count of the number of raw 1 bits.</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; ones += bit;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Bail out if we haven&#39;t collected enough samples for a full bucket yet.</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span> (++count &lt; SAMPLES_NUM)</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// If the maximum minus the minimum is too small, then there probably</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// is no signal or the input voltage is insufficient to generate noise.</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// Discard the entire bucket and return to calibration.</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> ((maxValue - minValue) &lt; NOISE_SPREAD) {</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; restart();</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; calState = NOISE_CALIBRATING;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; threshold = ADC_NUM / 2; <span class="comment">// Reacquire threshold when the signal returns.</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// If the number of 1&#39;s is between 45% and 55% of the total count,</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// then we have a good bucket. The threshold is at an appropriate level.</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (ones &gt;= SAMPLES_PCT(45) &amp;&amp; ones &lt;= SAMPLES_PCT(55)) {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (posn &gt;= (<span class="keyword">sizeof</span>(buffer) * 3 / 4)) {</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// The buffer is at least three-quarters full of debiased bits</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// so pass them onto output(). There may be less bits if we</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// lost or gained the signal half-way through the bucket.</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// Credit 4 bits of entropy for every 8 bits of output.</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1">output</a>(buffer, posn, posn * 4);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; restart();</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; calState = NOISE_NOT_CALIBRATING;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// The threshold is not close enough to the mid-point of the signal.</span></div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// Adjust the threshold, discard the bucket, and try again.</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (ones &lt; SAMPLES_PCT(25) || ones &gt; SAMPLES_PCT(75)) {</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// We are a long way away from the mid-point, so move the threshold</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// by a large amount based on the delta to get closer quicker.</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; threshold -= (SAMPLES_PCT(50) - ones) / 8;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ones &lt; SAMPLES_PCT(50)) {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// Not enough ones so move the threshold down a bit.</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; --threshold;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Too many ones so move the threshold up a bit.</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; ++threshold;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (threshold &lt; 0)</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; threshold = 0;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (threshold &gt;= ADC_NUM)</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; threshold = ADC_NUM - 1;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; restart();</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; calState = NOISE_CALIBRATING;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="keywordtype">void</span> TransistorNoiseSource::restart()</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;{</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; clean(buffer);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; prevBit = 0;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; posn = 0;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; bitNum = 0;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; minValue = ADC_NUM - 1;</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; maxValue = 0;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; count = 0;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; ones = 0;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
<div class="ttc" id="classTransistorNoiseSource_html_a9244b327c291c737396e769da9c66af9"><div class="ttname"><a href="classTransistorNoiseSource.html#a9244b327c291c737396e769da9c66af9">TransistorNoiseSource::calibrating</a></div><div class="ttdeci">bool calibrating() const </div><div class="ttdoc">Determine if the noise source is still calibrating itself. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8cpp_source.html#l00156">TransistorNoiseSource.cpp:156</a></div></div>
<div class="ttc" id="classNoiseSource_html_a1af7449a5ae4a8acd34ac218c9eec6c1"><div class="ttname"><a href="classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1">NoiseSource::output</a></div><div class="ttdeci">virtual void output(const uint8_t *data, size_t len, unsigned int credit)</div><div class="ttdoc">Called from subclasses to output noise to the global random number pool. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8cpp_source.html#l00102">NoiseSource.cpp:102</a></div></div>
<div class="ttc" id="classTransistorNoiseSource_html_a05bab61c301a5397021048c95ca3107d"><div class="ttname"><a href="classTransistorNoiseSource.html#a05bab61c301a5397021048c95ca3107d">TransistorNoiseSource::TransistorNoiseSource</a></div><div class="ttdeci">TransistorNoiseSource(uint8_t pin)</div><div class="ttdoc">Constructs a new transitor-based noise source handler. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8cpp_source.html#l00138">TransistorNoiseSource.cpp:138</a></div></div>
<div class="ttc" id="classTransistorNoiseSource_html_add25c6a14b0506bc30ca781f2d923917"><div class="ttname"><a href="classTransistorNoiseSource.html#add25c6a14b0506bc30ca781f2d923917">TransistorNoiseSource::stir</a></div><div class="ttdeci">void stir()</div><div class="ttdoc">Stirs entropy from this noise source into the global random number pool. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8cpp_source.html#l00161">TransistorNoiseSource.cpp:161</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -0,0 +1,159 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: TransistorNoiseSource.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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_bc0718b08fb2015b8e59c47b2805f60c.html">libraries</a></li><li class="navelem"><a class="el" href="dir_e2ce51835550ba18edf07a8311722290.html">Crypto</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">TransistorNoiseSource.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2015 Southern Storm Software, Pty Ltd.</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to deal in the Software without restriction, including without limitation</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Software is furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be included</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * in all copies or substantial portions of the Software.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifndef CRYPTO_TRANSISTORNOISESOURCE_H</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CRYPTO_TRANSISTORNOISESOURCE_H</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;NoiseSource.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classTransistorNoiseSource.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classTransistorNoiseSource.html">TransistorNoiseSource</a> : <span class="keyword">public</span> <a class="code" href="classNoiseSource.html">NoiseSource</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classTransistorNoiseSource.html#a05bab61c301a5397021048c95ca3107d">TransistorNoiseSource</a>(uint8_t pin);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classTransistorNoiseSource.html">TransistorNoiseSource</a>();</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classTransistorNoiseSource.html#a9244b327c291c737396e769da9c66af9">calibrating</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classTransistorNoiseSource.html#add25c6a14b0506bc30ca781f2d923917">stir</a>();</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">int</span> threshold;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; uint8_t _pin;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; uint8_t prevBit;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; uint8_t posn;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; uint8_t bitNum;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint8_t calState;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint8_t buffer[32];</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">int</span> minValue;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">int</span> maxValue;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">int</span> count;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">int</span> ones;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> restart();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="classTransistorNoiseSource_html_a9244b327c291c737396e769da9c66af9"><div class="ttname"><a href="classTransistorNoiseSource.html#a9244b327c291c737396e769da9c66af9">TransistorNoiseSource::calibrating</a></div><div class="ttdeci">bool calibrating() const </div><div class="ttdoc">Determine if the noise source is still calibrating itself. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8cpp_source.html#l00156">TransistorNoiseSource.cpp:156</a></div></div>
<div class="ttc" id="classNoiseSource_html"><div class="ttname"><a href="classNoiseSource.html">NoiseSource</a></div><div class="ttdoc">Abstract base class for random noise sources. </div><div class="ttdef"><b>Definition:</b> <a href="NoiseSource_8h_source.html#l00029">NoiseSource.h:29</a></div></div>
<div class="ttc" id="classTransistorNoiseSource_html"><div class="ttname"><a href="classTransistorNoiseSource.html">TransistorNoiseSource</a></div><div class="ttdoc">Processes the signal from a transistor-based noise source. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8h_source.html#l00029">TransistorNoiseSource.h:29</a></div></div>
<div class="ttc" id="classTransistorNoiseSource_html_a05bab61c301a5397021048c95ca3107d"><div class="ttname"><a href="classTransistorNoiseSource.html#a05bab61c301a5397021048c95ca3107d">TransistorNoiseSource::TransistorNoiseSource</a></div><div class="ttdeci">TransistorNoiseSource(uint8_t pin)</div><div class="ttdoc">Constructs a new transitor-based noise source handler. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8cpp_source.html#l00138">TransistorNoiseSource.cpp:138</a></div></div>
<div class="ttc" id="classTransistorNoiseSource_html_add25c6a14b0506bc30ca781f2d923917"><div class="ttname"><a href="classTransistorNoiseSource.html#add25c6a14b0506bc30ca781f2d923917">TransistorNoiseSource::stir</a></div><div class="ttdeci">void stir()</div><div class="ttdoc">Stirs entropy from this noise source into the global random number pool. </div><div class="ttdef"><b>Definition:</b> <a href="TransistorNoiseSource_8cpp_source.html#l00161">TransistorNoiseSource.cpp:161</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: alarm-clock.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -83,15 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="title">alarm-clock.dox File Reference</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock">
<p>Definition in file <a class="el" href="alarm-clock_8dox_source.html">alarm-clock.dox</a>.</p>
</div></div><!-- contents -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Alarm Clock</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -121,7 +122,7 @@ Controlling a radio</h1>
<h1><a class="anchor" id="clock_ds3232"></a>
Using DS3232 instead of DS1307</h1>
<p>For clock modules based on the DS3232 chip, such as the <a href="http://www.freetronics.com/products/real-time-clock-rtc-module">Freetronics Real Time Clock Module</a>, change the <code>Clock</code> typedef in <code>Clock.h</code> to the following:</p>
<div class="fragment"><div class="line"><span class="keyword">typedef</span> <a class="code" href="classDS3232RTC.html" title="Communicates with a DS3232 realtime clock chip via I2C.">DS3232RTC</a> Clock;</div>
<div class="fragment"><div class="line"><span class="keyword">typedef</span> <a class="code" href="classDS3232RTC.html">DS3232RTC</a> Clock;</div>
</div><!-- fragment --><p>The pads on the Freetronics module should be connected to the Arduino as follows:</p>
<ul>
<li>VCC and GND connected to 5V and GND on the Arduino. </li>
@ -139,9 +140,9 @@ Completed Clock</h1>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Class List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -88,38 +89,61 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBitmap.html" target="_self">Bitmap</a></td><td class="desc">Represents a monochrome bitmap within main memory</td></tr>
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBlinkLED.html" target="_self">BlinkLED</a></td><td class="desc">Blink a LED on a digital output pin</td></tr>
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBoolField.html" target="_self">BoolField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> that manages the input of a boolean value</td></tr>
<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCharlieplex.html" target="_self">Charlieplex</a></td><td class="desc">Manage an array of LED's in a charlieplexed arrangement</td></tr>
<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classChaseLEDs.html" target="_self">ChaseLEDs</a></td><td class="desc">Chase LED's on output pins in a defined sequence</td></tr>
<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDMD.html" target="_self">DMD</a></td><td class="desc">Handle large dot matrix displays composed of LED's</td></tr>
<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDS1307RTC.html" target="_self">DS1307RTC</a></td><td class="desc">Communicates with a DS1307 realtime clock chip via I2C</td></tr>
<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDS3232RTC.html" target="_self">DS3232RTC</a></td><td class="desc">Communicates with a DS3232 realtime clock chip via I2C</td></tr>
<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classEEPROM24.html" target="_self">EEPROM24</a></td><td class="desc">Reading and writing EEPROM's from the 24LCXX family</td></tr>
<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classField.html" target="_self">Field</a></td><td class="desc">Manages a single data input/output field within a <a class="el" href="classForm.html" title="Manager for a form containing data input/output fields.">Form</a></td></tr>
<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classForm.html" target="_self">Form</a></td><td class="desc">Manager for a form containing data input/output fields</td></tr>
<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classI2CMaster.html" target="_self">I2CMaster</a></td><td class="desc">Abstract base class for I2C master implementations</td></tr>
<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIntField.html" target="_self">IntField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> that manages the input of an integer value</td></tr>
<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIRreceiver.html" target="_self">IRreceiver</a></td><td class="desc">Manages the reception of RC-5 commands from an infrared remote control</td></tr>
<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classLCD.html" target="_self">LCD</a></td><td class="desc">Enhanced library for Freetronics 16x2 <a class="el" href="classLCD.html" title="Enhanced library for Freetronics 16x2 LCD shields.">LCD</a> shields</td></tr>
<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classListField.html" target="_self">ListField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> that manages selection from a static list of items</td></tr>
<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMelody.html" target="_self">Melody</a></td><td class="desc">Plays a melody on a digital output pin using tone()</td></tr>
<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classRTC.html" target="_self">RTC</a></td><td class="desc">Base class for realtime clock handlers</td></tr>
<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structRTCAlarm.html" target="_self">RTCAlarm</a></td><td class="desc">Stores alarm information from a realtime clock chip</td></tr>
<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structRTCDate.html" target="_self">RTCDate</a></td><td class="desc">Stores date information from a realtime clock chip</td></tr>
<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structRTCTime.html" target="_self">RTCTime</a></td><td class="desc">Stores time information from a realtime clock chip</td></tr>
<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSoftI2C.html" target="_self">SoftI2C</a></td><td class="desc">Bit-banged implementation of an I2C master</td></tr>
<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classTextField.html" target="_self">TextField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> that displays a read-only text value</td></tr>
<tr id="row_23_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classTimeField.html" target="_self">TimeField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form.">Field</a> that manages the display and editing of a time value</td></tr>
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classAES128.html" target="_self">AES128</a></td><td class="desc">AES block cipher with 128-bit keys </td></tr>
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classAES192.html" target="_self">AES192</a></td><td class="desc">AES block cipher with 192-bit keys </td></tr>
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classAES256.html" target="_self">AES256</a></td><td class="desc">AES block cipher with 256-bit keys </td></tr>
<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classAESCommon.html" target="_self">AESCommon</a></td><td class="desc">Abstract base class for AES block ciphers </td></tr>
<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBitmap.html" target="_self">Bitmap</a></td><td class="desc">Represents a monochrome bitmap within main memory </td></tr>
<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBLAKE2s.html" target="_self">BLAKE2s</a></td><td class="desc"><a class="el" href="classBLAKE2s.html" title="BLAKE2s hash algorithm. ">BLAKE2s</a> hash algorithm </td></tr>
<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBlinkLED.html" target="_self">BlinkLED</a></td><td class="desc">Blink a LED on a digital output pin </td></tr>
<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBlockCipher.html" target="_self">BlockCipher</a></td><td class="desc">Abstract base class for block ciphers </td></tr>
<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classBoolField.html" target="_self">BoolField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form. ">Field</a> that manages the input of a boolean value </td></tr>
<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCBC.html" target="_self">CBC</a></td><td class="desc">Implementation of the <a class="el" href="classCipher.html" title="Abstract base class for stream ciphers. ">Cipher</a> Block Chaining (<a class="el" href="classCBC.html" title="Implementation of the Cipher Block Chaining (CBC) mode for 128-bit block ciphers. ...">CBC</a>) mode for 128-bit block ciphers </td></tr>
<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCBCCommon.html" target="_self">CBCCommon</a></td><td class="desc">Concrete base class to assist with implementing <a class="el" href="classCBC.html" title="Implementation of the Cipher Block Chaining (CBC) mode for 128-bit block ciphers. ...">CBC</a> for 128-bit block ciphers </td></tr>
<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCFB.html" target="_self">CFB</a></td><td class="desc">Implementation of the <a class="el" href="classCipher.html" title="Abstract base class for stream ciphers. ">Cipher</a> Feedback (<a class="el" href="classCFB.html" title="Implementation of the Cipher Feedback (CFB) mode for 128-bit block ciphers. ">CFB</a>) mode for 128-bit block ciphers </td></tr>
<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCFBCommon.html" target="_self">CFBCommon</a></td><td class="desc">Concrete base class to assist with implementing <a class="el" href="classCFB.html" title="Implementation of the Cipher Feedback (CFB) mode for 128-bit block ciphers. ">CFB</a> for 128-bit block ciphers </td></tr>
<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classChaCha.html" target="_self">ChaCha</a></td><td class="desc"><a class="el" href="classChaCha.html" title="ChaCha stream cipher. ">ChaCha</a> stream cipher </td></tr>
<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCharlieplex.html" target="_self">Charlieplex</a></td><td class="desc">Manage an array of LED's in a charlieplexed arrangement </td></tr>
<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classChaseLEDs.html" target="_self">ChaseLEDs</a></td><td class="desc">Chase LED's on output pins in a defined sequence </td></tr>
<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCipher.html" target="_self">Cipher</a></td><td class="desc">Abstract base class for stream ciphers </td></tr>
<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCTR.html" target="_self">CTR</a></td><td class="desc">Implementation of the Counter (<a class="el" href="classCTR.html" title="Implementation of the Counter (CTR) mode for 128-bit block ciphers. ">CTR</a>) mode for 128-bit block ciphers </td></tr>
<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCTRCommon.html" target="_self">CTRCommon</a></td><td class="desc">Concrete base class to assist with implementing <a class="el" href="classCTR.html" title="Implementation of the Counter (CTR) mode for 128-bit block ciphers. ">CTR</a> mode for 128-bit block ciphers </td></tr>
<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCurve25519.html" target="_self">Curve25519</a></td><td class="desc">Diffie-Hellman key agreement based on the elliptic curve modulo 2^255 - 19 </td></tr>
<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDMD.html" target="_self">DMD</a></td><td class="desc">Handle large dot matrix displays composed of LED's </td></tr>
<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDS1307RTC.html" target="_self">DS1307RTC</a></td><td class="desc">Communicates with a DS1307 realtime clock chip via I2C </td></tr>
<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classDS3232RTC.html" target="_self">DS3232RTC</a></td><td class="desc">Communicates with a DS3232 realtime clock chip via I2C </td></tr>
<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classEEPROM24.html" target="_self">EEPROM24</a></td><td class="desc">Reading and writing EEPROM's from the 24LCXX family </td></tr>
<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classField.html" target="_self">Field</a></td><td class="desc">Manages a single data input/output field within a <a class="el" href="classForm.html" title="Manager for a form containing data input/output fields. ">Form</a> </td></tr>
<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classForm.html" target="_self">Form</a></td><td class="desc">Manager for a form containing data input/output fields </td></tr>
<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classHash.html" target="_self">Hash</a></td><td class="desc">Abstract base class for cryptographic hash algorithms </td></tr>
<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classI2CMaster.html" target="_self">I2CMaster</a></td><td class="desc">Abstract base class for I2C master implementations </td></tr>
<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIntField.html" target="_self">IntField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form. ">Field</a> that manages the input of an integer value </td></tr>
<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classIRreceiver.html" target="_self">IRreceiver</a></td><td class="desc">Manages the reception of RC-5 commands from an infrared remote control </td></tr>
<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classLCD.html" target="_self">LCD</a></td><td class="desc">Enhanced library for Freetronics 16x2 <a class="el" href="classLCD.html" title="Enhanced library for Freetronics 16x2 LCD shields. ">LCD</a> shields </td></tr>
<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classListField.html" target="_self">ListField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form. ">Field</a> that manages selection from a static list of items </td></tr>
<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classMelody.html" target="_self">Melody</a></td><td class="desc">Plays a melody on a digital output pin using tone() </td></tr>
<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classNoiseSource.html" target="_self">NoiseSource</a></td><td class="desc">Abstract base class for random noise sources </td></tr>
<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classOFB.html" target="_self">OFB</a></td><td class="desc">Implementation of the Output Feedback (<a class="el" href="classOFB.html" title="Implementation of the Output Feedback (OFB) mode for 128-bit block ciphers. ">OFB</a>) mode for 128-bit block ciphers </td></tr>
<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classOFBCommon.html" target="_self">OFBCommon</a></td><td class="desc">Concrete base class to assist with implementing <a class="el" href="classOFB.html" title="Implementation of the Output Feedback (OFB) mode for 128-bit block ciphers. ">OFB</a> for 128-bit block ciphers </td></tr>
<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classRNGClass.html" target="_self">RNGClass</a></td><td class="desc">Pseudo random number generator suitable for cryptography </td></tr>
<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classRTC.html" target="_self">RTC</a></td><td class="desc">Base class for realtime clock handlers </td></tr>
<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structRTCAlarm.html" target="_self">RTCAlarm</a></td><td class="desc">Stores alarm information from a realtime clock chip </td></tr>
<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structRTCDate.html" target="_self">RTCDate</a></td><td class="desc">Stores date information from a realtime clock chip </td></tr>
<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structRTCTime.html" target="_self">RTCTime</a></td><td class="desc">Stores time information from a realtime clock chip </td></tr>
<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSHA1.html" target="_self">SHA1</a></td><td class="desc">SHA-1 hash algorithm </td></tr>
<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSHA256.html" target="_self">SHA256</a></td><td class="desc">SHA-256 hash algorithm </td></tr>
<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classSoftI2C.html" target="_self">SoftI2C</a></td><td class="desc">Bit-banged implementation of an I2C master </td></tr>
<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classTextField.html" target="_self">TextField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form. ">Field</a> that displays a read-only text value </td></tr>
<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classTimeField.html" target="_self">TimeField</a></td><td class="desc"><a class="el" href="classField.html" title="Manages a single data input/output field within a Form. ">Field</a> that manages the display and editing of a time value </td></tr>
<tr id="row_46_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classTransistorNoiseSource.html" target="_self">TransistorNoiseSource</a></td><td class="desc">Processes the signal from a transistor-based noise source </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

BIN
bc_s.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 680 B

After

Width:  |  Height:  |  Size: 676 B

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: blink-blink.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -83,15 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="title">blink-blink.dox File Reference</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock">
<p>Definition in file <a class="el" href="blink-blink_8dox_source.html">blink-blink.dox</a>.</p>
</div></div><!-- contents -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: blink-charlieplex.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -83,15 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="title">blink-charlieplex.dox File Reference</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock">
<p>Definition in file <a class="el" href="blink-charlieplex_8dox_source.html">blink-charlieplex.dox</a>.</p>
</div></div><!-- contents -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: blink-cylon.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -83,15 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="title">blink-cylon.dox File Reference</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock">
<p>Definition in file <a class="el" href="blink-cylon_8dox_source.html">blink-cylon.dox</a>.</p>
</div></div><!-- contents -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: blink-startrek.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -83,15 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="title">blink-startrek.dox File Reference</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock">
<p>Definition in file <a class="el" href="blink-startrek_8dox_source.html">blink-startrek.dox</a>.</p>
</div></div><!-- contents -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Blinking LED Example</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -89,10 +90,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<p>We start this example by including the <a class="el" href="classBlinkLED.html" title="Blink a LED on a digital output pin. ">BlinkLED</a> class and instantiating an object instance:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;BlinkLED.h&gt;</span></div>
<div class="line"></div>
<div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> statusBlink(13, 70, 930);</div>
<div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> statusBlink(13, 70, 930);</div>
</div><!-- fragment --></p>
<p>In this example we have specified that the LED is on pin D13, the LED should be on for 70 milliseconds, and off for 930 milliseconds. This will cause the status LED to "strobe" once per second. The LED will be initially off for 930 milliseconds after device reset. To start with the LED on, use the following initialization code instead:</p>
<div class="fragment"><div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> statusBlink(13, 70, 930, <span class="keyword">true</span>);</div>
<div class="fragment"><div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> statusBlink(13, 70, 930, <span class="keyword">true</span>);</div>
</div><!-- fragment --><p>The remaining code we need is a call to <a class="el" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">BlinkLED::loop()</a> every time around the main application loop:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> loop() {</div>
<div class="line"> statusBlink.loop();</div>
@ -108,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"></div>
<div class="line"><span class="preprocessor">#include &lt;BlinkLED.h&gt;</span></div>
<div class="line"></div>
<div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> statusBlink(13, 70, 930);</div>
<div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> statusBlink(13, 70, 930);</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> setup() {}</div>
<div class="line"></div>
@ -119,9 +120,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Charlieplexing Example</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -87,7 +88,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Charlieplex.h&gt;</span></div>
<div class="line"></div>
<div class="line">byte pins[3] = {9, 10, 11};</div>
<div class="line"><a class="code" href="classCharlieplex.html" title="Manage an array of LED&#39;s in a charlieplexed arrangement.">Charlieplex</a> charlie(pins, <span class="keyword">sizeof</span>(pins));</div>
<div class="line"><a class="code" href="classCharlieplex.html">Charlieplex</a> charlie(pins, <span class="keyword">sizeof</span>(pins));</div>
</div><!-- fragment --></p>
<p>Then in <code>setup()</code> we use <a class="el" href="classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5" title="Sets the value of the LED at index in the charliplexed array. ">Charlieplex::setLed()</a> and <a class="el" href="classCharlieplex.html#a605a302e13005a1aa3d68d0e22bc474b" title="Sets the PWM value of the LED at index in the charliplexed array; between 0 and 255. ">Charlieplex::setPwmLed()</a> to set three of the six LED's to the desired output values:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> setup() {</div>
@ -96,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"> charlie.setPwmLed(5, 64); <span class="comment">// Set LED6 to one-quarter on</span></div>
<div class="line">}</div>
</div><!-- fragment --></p>
<p>Charlieplexing can only light a single LED at a time. It is therefore necessary to constantly scan the entire LED array, alternatively turning LED's on and off. The user's peristence of vision fills in the gaps. To do this, we call <a class="el" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a" title="Runs the multiplexing loop, to display the LED states on the charlieplexed array.">Charlieplex::loop()</a>:</p>
<p>Charlieplexing can only light a single LED at a time. It is therefore necessary to constantly scan the entire LED array, alternatively turning LED's on and off. The user's peristence of vision fills in the gaps. To do this, we call <a class="el" href="classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a" title="Runs the multiplexing loop, to display the LED states on the charlieplexed array. ...">Charlieplex::loop()</a>:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> loop() {</div>
<div class="line"> charlie.loop();</div>
<div class="line">}</div>
@ -108,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><span class="preprocessor">#include &lt;Charlieplex.h&gt;</span></div>
<div class="line"></div>
<div class="line">byte pins[3] = {9, 10, 11};</div>
<div class="line"><a class="code" href="classCharlieplex.html" title="Manage an array of LED&#39;s in a charlieplexed arrangement.">Charlieplex</a> charlie(pins, <span class="keyword">sizeof</span>(pins));</div>
<div class="line"><a class="code" href="classCharlieplex.html">Charlieplex</a> charlie(pins, <span class="keyword">sizeof</span>(pins));</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> setup() {</div>
<div class="line"> charlie.setLed(0, <span class="keyword">true</span>); <span class="comment">// Turn on LED1</span></div>
@ -125,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><span class="preprocessor">#include &lt;Charlieplex.h&gt;</span></div>
<div class="line"></div>
<div class="line">byte pins[3] = {9, 10, 11};</div>
<div class="line"><a class="code" href="classCharlieplex.html" title="Manage an array of LED&#39;s in a charlieplexed arrangement.">Charlieplex</a> charlie(pins, <span class="keyword">sizeof</span>(pins));</div>
<div class="line"><a class="code" href="classCharlieplex.html">Charlieplex</a> charlie(pins, <span class="keyword">sizeof</span>(pins));</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">int</span> previous = 1;</div>
<div class="line"><span class="keywordtype">int</span> current = 0;</div>
@ -159,9 +160,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Cylon Eyes Example</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -87,7 +88,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></p>
<p>The next step is to define the pins that the chase will run over:</p>
<div class="fragment"><div class="line">byte pins[] = {3, 5, 6, 9, 10, 11, 10, 9, 6, 5};</div>
<div class="line"><a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a> cylonEyes(pins, <span class="keyword">sizeof</span>(pins), 100);</div>
<div class="line"><a class="code" href="classChaseLEDs.html">ChaseLEDs</a> cylonEyes(pins, <span class="keyword">sizeof</span>(pins), 100);</div>
</div><!-- fragment --></p>
<p>The chase runs from the first pin to the sixth pin and back again, with each LED lit for 100 milliseconds before moving onto the next one. To complete the example, we need to call <a class="el" href="classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786">ChaseLEDs::loop()</a> each time around our main loop to cause the chase to run:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> loop() {</div>
@ -96,15 +97,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></p>
<p>While this example uses only six pins, it can be easily extended to any number of pins by modifying the <code>pins</code> array and altering the schematic accordingly.</p>
<p>So far we are chasing only a single LED. We could change this to chase two adjacent LED's instead by defining a new <code>CylonChase</code> class that inherits from <a class="el" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence. ">ChaseLEDs</a>:</p>
<div class="fragment"><div class="line"><span class="keyword">class </span>CylonChase : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a></div>
<div class="fragment"><div class="line"><span class="keyword">class </span>CylonChase : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html">ChaseLEDs</a></div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line"> CylonChase(<span class="keyword">const</span> byte *pins, <span class="keywordtype">int</span> num, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> advanceTime)</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a>(pins, num, advanceTime) {}</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html">ChaseLEDs</a>(pins, num, advanceTime) {}</div>
<div class="line"></div>
<div class="line"><span class="keyword">protected</span>:</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(2), LOW);</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(2), LOW);</div>
<div class="line"> digitalWrite(prevPin, HIGH);</div>
<div class="line"> digitalWrite(nextPin, HIGH);</div>
<div class="line"> }</div>
@ -143,18 +144,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"></div>
<div class="line"><span class="preprocessor">#include &lt;ChaseLEDs.h&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="keyword">class </span>CylonChase : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a></div>
<div class="line"><span class="keyword">class </span>CylonChase : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html">ChaseLEDs</a></div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line"> CylonChase(<span class="keyword">const</span> byte *pins, <span class="keywordtype">int</span> num, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> advanceTime)</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a>(pins, num, advanceTime) {}</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html">ChaseLEDs</a>(pins, num, advanceTime) {}</div>
<div class="line"></div>
<div class="line"><span class="keyword">protected</span>:</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(2), LOW);</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(2), LOW);</div>
<div class="line"> analogWrite(prevPin, 32);</div>
<div class="line"> digitalWrite(nextPin, HIGH);</div>
<div class="line"> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7" title="Sets the number of milliseconds to advance between LED&#39;s to advanceTime.">setAdvanceTime</a>(map(analogRead(A0), 0, 1023, 25, 250));</div>
<div class="line"> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7">setAdvanceTime</a>(map(analogRead(A0), 0, 1023, 25, 250));</div>
<div class="line"> }</div>
<div class="line">};</div>
<div class="line"></div>
@ -170,9 +171,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

View File

@ -3,6 +3,7 @@
<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.6"/>
<title>ArduinoLibs: Star Trek Example</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -29,7 +30,7 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@ -104,13 +105,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><span class="preprocessor">#define NAV_LIGHTS A2 // Output pin for controlling the navigation lights</span></div>
<div class="line"><span class="preprocessor">#define NAV_LIGHTS_ON 1000 // Time the navigation lights are on (milliseconds)</span></div>
<div class="line"><span class="preprocessor">#define NAV_LIGHTS_OFF 1000 // Time the navigation lights are off (milliseconds)</span></div>
<div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> navLights(NAV_LIGHTS, NAV_LIGHTS_ON, NAV_LIGHTS_OFF);</div>
<div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> navLights(NAV_LIGHTS, NAV_LIGHTS_ON, NAV_LIGHTS_OFF);</div>
</div><!-- fragment --></p>
<p>We repeat the process for the strobe LED on AOUT3, with a period of 70 milliseconds on, and 830 milliseconds off:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#define STROBE_LIGHT A3 // Output pin for controlling the strobe</span></div>
<div class="line"><span class="preprocessor">#define STROBE_LIGHT_ON 70 // Time the strobe light is on (milliseconds)</span></div>
<div class="line"><span class="preprocessor">#define STROBE_LIGHT_OFF 830 // Time the strobe light is off (milliseconds)</span></div>
<div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> strobeLight(STROBE_LIGHT, STROBE_LIGHT_ON, STROBE_LIGHT_OFF);</div>
<div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> strobeLight(STROBE_LIGHT, STROBE_LIGHT_ON, STROBE_LIGHT_OFF);</div>
</div><!-- fragment --></p>
<p>We also need to arrange for <a class="el" href="classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e">BlinkLED::loop()</a> to be called from the application's main <code>loop()</code> function:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> loop() {</div>
@ -127,18 +128,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><span class="comment">// Output pins to use for the nacelle chase</span></div>
<div class="line">byte nacelleChasePins[6] = {3, 5, 6, 9, 10, 11};</div>
<div class="line"></div>
<div class="line"><span class="keyword">class </span>NacelleChaseLEDs : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a></div>
<div class="line"><span class="keyword">class </span>NacelleChaseLEDs : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html">ChaseLEDs</a></div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line"> NacelleChaseLEDs(<span class="keyword">const</span> byte *pins, <span class="keywordtype">int</span> num)</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a>(pins, num, 0) {}</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html">ChaseLEDs</a>(pins, num, 0) {}</div>
<div class="line"></div>
<div class="line"><span class="keyword">protected</span>:</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(2), LOW);</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(2), LOW);</div>
<div class="line"> analogWrite(prevPin, NACELLE_DIM_VALUE);</div>
<div class="line"> digitalWrite(nextPin, HIGH);</div>
<div class="line"> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7" title="Sets the number of milliseconds to advance between LED&#39;s to advanceTime.">setAdvanceTime</a>(map(analogRead(NACELLE_RATE), 0, 1023, NACELLE_MIN_PERIOD, NACELLE_MAX_PERIOD));</div>
<div class="line"> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7">setAdvanceTime</a>(map(analogRead(NACELLE_RATE), 0, 1023, NACELLE_MIN_PERIOD, NACELLE_MAX_PERIOD));</div>
<div class="line"> }</div>
<div class="line">};</div>
<div class="line"></div>
@ -198,28 +199,28 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><span class="comment">// Output pins to use for the nacelle chase</span></div>
<div class="line">byte nacelleChasePins[6] = {3, 5, 6, 9, 10, 11};</div>
<div class="line"></div>
<div class="line"><span class="keyword">class </span>NacelleChaseLEDs : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a></div>
<div class="line"><span class="keyword">class </span>NacelleChaseLEDs : <span class="keyword">public</span> <a class="code" href="classChaseLEDs.html">ChaseLEDs</a></div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line"> NacelleChaseLEDs(<span class="keyword">const</span> byte *pins, <span class="keywordtype">int</span> num)</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html" title="Chase LED&#39;s on output pins in a defined sequence.">ChaseLEDs</a>(pins, num, 0) {}</div>
<div class="line"> : <a class="code" href="classChaseLEDs.html">ChaseLEDs</a>(pins, num, 0) {}</div>
<div class="line"></div>
<div class="line"><span class="keyword">protected</span>:</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b" title="Advances to the next LED in sequence, turning off prevPin, and turning on nextPin.">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(5), LOW);</div>
<div class="line"> analogWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(4), NACELLE_DIM_VALUE);</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(3), HIGH);</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525" title="Returns the pin that is n steps back in the sequence.">previousPin</a>(2), LOW);</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classChaseLEDs.html#aa0f4e0bd07dd65ee5574e894a612486b">advance</a>(byte prevPin, byte nextPin) {</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(5), LOW);</div>
<div class="line"> analogWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(4), NACELLE_DIM_VALUE);</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(3), HIGH);</div>
<div class="line"> digitalWrite(<a class="code" href="classChaseLEDs.html#a27c460fcb341c2dc2fcf9341616eb525">previousPin</a>(2), LOW);</div>
<div class="line"> analogWrite(prevPin, NACELLE_DIM_VALUE);</div>
<div class="line"> digitalWrite(nextPin, HIGH);</div>
<div class="line"> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7" title="Sets the number of milliseconds to advance between LED&#39;s to advanceTime.">setAdvanceTime</a>(map(analogRead(NACELLE_RATE), 0, 1023, NACELLE_MIN_PERIOD, NACELLE_MAX_PERIOD));</div>
<div class="line"> <a class="code" href="classChaseLEDs.html#af560270f72302c19fb7f95002089c9d7">setAdvanceTime</a>(map(analogRead(NACELLE_RATE), 0, 1023, NACELLE_MIN_PERIOD, NACELLE_MAX_PERIOD));</div>
<div class="line"> }</div>
<div class="line">};</div>
<div class="line"></div>
<div class="line">NacelleChaseLEDs nacelleChase(nacelleChasePins, NACELLE_CHASE_LEN);</div>
<div class="line"></div>
<div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> navLights(NAV_LIGHTS, NAV_LIGHTS_ON, NAV_LIGHTS_OFF);</div>
<div class="line"><a class="code" href="classBlinkLED.html" title="Blink a LED on a digital output pin.">BlinkLED</a> strobeLight(STROBE_LIGHT, STROBE_LIGHT_ON, STROBE_LIGHT_OFF);</div>
<div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> navLights(NAV_LIGHTS, NAV_LIGHTS_ON, NAV_LIGHTS_OFF);</div>
<div class="line"><a class="code" href="classBlinkLED.html">BlinkLED</a> strobeLight(STROBE_LIGHT, STROBE_LIGHT_ON, STROBE_LIGHT_OFF);</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> setup() {</div>
<div class="line"> <span class="comment">// Turn off the status LED on the Arduino board (we don&#39;t need it).</span></div>
@ -236,9 +237,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 29 2013 09:30:46 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</a> 1.8.6
</small></address>
</body>
</html>

113
classAES128-members.html Normal file
View File

@ -0,0 +1,113 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: Member List</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/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AES128 Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classAES128.html">AES128</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classAES128.html#af826ce33301767919bb60f27ad3ff693">AES128</a>()</td><td class="entry"><a class="el" href="classAES128.html">AES128</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classAESCommon.html#acf224a392659429bac80dc68c7471b21">AESCommon</a>()</td><td class="entry"><a class="el" href="classAESCommon.html">AESCommon</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f">BlockCipher</a>()</td><td class="entry"><a class="el" href="classBlockCipher.html">BlockCipher</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413">blockSize</a>() const </td><td class="entry"><a class="el" href="classAESCommon.html">AESCommon</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6">clear</a>()</td><td class="entry"><a class="el" href="classAESCommon.html">AESCommon</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classAESCommon.html#a95a806adf42f975765ff62907efdc639">decryptBlock</a>(uint8_t *output, const uint8_t *input)</td><td class="entry"><a class="el" href="classAESCommon.html">AESCommon</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296">encryptBlock</a>(uint8_t *output, const uint8_t *input)</td><td class="entry"><a class="el" href="classAESCommon.html">AESCommon</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classAES128.html#aa871832a156f0ea61b964e489670ae9d">keySize</a>() const </td><td class="entry"><a class="el" href="classAES128.html">AES128</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4">setKey</a>(const uint8_t *key, size_t len)</td><td class="entry"><a class="el" href="classAES128.html">AES128</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>~AES128</b>() (defined in <a class="el" href="classAES128.html">AES128</a>)</td><td class="entry"><a class="el" href="classAES128.html">AES128</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8">~AESCommon</a>()</td><td class="entry"><a class="el" href="classAESCommon.html">AESCommon</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9">~BlockCipher</a>()</td><td class="entry"><a class="el" href="classBlockCipher.html">BlockCipher</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

273
classAES128.html Normal file
View File

@ -0,0 +1,273 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.6"/>
<title>ArduinoLibs: AES128 Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">ArduinoLibs
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></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><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classAES128-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">AES128 Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>AES block cipher with 128-bit keys.
<a href="classAES128.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="AES_8h_source.html">AES.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for AES128:</div>
<div class="dyncontent">
<div class="center">
<img src="classAES128.png" usemap="#AES128_map" alt=""/>
<map id="AES128_map" name="AES128_map">
<area href="classAESCommon.html" title="Abstract base class for AES block ciphers. " alt="AESCommon" shape="rect" coords="0,56,85,80"/>
<area href="classBlockCipher.html" title="Abstract base class for block ciphers. " alt="BlockCipher" shape="rect" coords="0,0,85,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:af826ce33301767919bb60f27ad3ff693"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAES128.html#af826ce33301767919bb60f27ad3ff693">AES128</a> ()</td></tr>
<tr class="memdesc:af826ce33301767919bb60f27ad3ff693"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs an AES 128-bit block cipher with no initial key. <a href="#af826ce33301767919bb60f27ad3ff693">More...</a><br/></td></tr>
<tr class="separator:af826ce33301767919bb60f27ad3ff693"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa871832a156f0ea61b964e489670ae9d"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAES128.html#aa871832a156f0ea61b964e489670ae9d">keySize</a> () const </td></tr>
<tr class="memdesc:aa871832a156f0ea61b964e489670ae9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of a 128-bit AES key in bytes. <a href="#aa871832a156f0ea61b964e489670ae9d">More...</a><br/></td></tr>
<tr class="separator:aa871832a156f0ea61b964e489670ae9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42d7548eb5084a2c3e2d5aa5f6f98ba4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4">setKey</a> (const uint8_t *key, size_t len)</td></tr>
<tr class="memdesc:a42d7548eb5084a2c3e2d5aa5f6f98ba4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the key to use for future encryption and decryption operations. <a href="#a42d7548eb5084a2c3e2d5aa5f6f98ba4">More...</a><br/></td></tr>
<tr class="separator:a42d7548eb5084a2c3e2d5aa5f6f98ba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classAESCommon"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classAESCommon')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classAESCommon.html">AESCommon</a></td></tr>
<tr class="memitem:a8f67970c86c23affb0297fc1bb10fad8 inherit pub_methods_classAESCommon"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f67970c86c23affb0297fc1bb10fad8"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAESCommon.html#a8f67970c86c23affb0297fc1bb10fad8">~AESCommon</a> ()</td></tr>
<tr class="memdesc:a8f67970c86c23affb0297fc1bb10fad8 inherit pub_methods_classAESCommon"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroys this AES block cipher object after clearing sensitive information. <br/></td></tr>
<tr class="separator:a8f67970c86c23affb0297fc1bb10fad8 inherit pub_methods_classAESCommon"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae26afdcc6d18e8888974acae16df1413 inherit pub_methods_classAESCommon"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAESCommon.html#ae26afdcc6d18e8888974acae16df1413">blockSize</a> () const </td></tr>
<tr class="memdesc:ae26afdcc6d18e8888974acae16df1413 inherit pub_methods_classAESCommon"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of an AES block in bytes. <a href="#ae26afdcc6d18e8888974acae16df1413">More...</a><br/></td></tr>
<tr class="separator:ae26afdcc6d18e8888974acae16df1413 inherit pub_methods_classAESCommon"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d95f6159abfcd92b5841f9018e44296 inherit pub_methods_classAESCommon"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296">encryptBlock</a> (uint8_t *output, const uint8_t *input)</td></tr>
<tr class="memdesc:a2d95f6159abfcd92b5841f9018e44296 inherit pub_methods_classAESCommon"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encrypts a single block using this cipher. <a href="#a2d95f6159abfcd92b5841f9018e44296">More...</a><br/></td></tr>
<tr class="separator:a2d95f6159abfcd92b5841f9018e44296 inherit pub_methods_classAESCommon"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95a806adf42f975765ff62907efdc639 inherit pub_methods_classAESCommon"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAESCommon.html#a95a806adf42f975765ff62907efdc639">decryptBlock</a> (uint8_t *output, const uint8_t *input)</td></tr>
<tr class="memdesc:a95a806adf42f975765ff62907efdc639 inherit pub_methods_classAESCommon"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decrypts a single block using this cipher. <a href="#a95a806adf42f975765ff62907efdc639">More...</a><br/></td></tr>
<tr class="separator:a95a806adf42f975765ff62907efdc639 inherit pub_methods_classAESCommon"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83e43f7d07e31d90fd7b768a93ecfce6 inherit pub_methods_classAESCommon"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6">clear</a> ()</td></tr>
<tr class="memdesc:a83e43f7d07e31d90fd7b768a93ecfce6 inherit pub_methods_classAESCommon"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clears all security-sensitive state from this block cipher. <a href="#a83e43f7d07e31d90fd7b768a93ecfce6">More...</a><br/></td></tr>
<tr class="separator:a83e43f7d07e31d90fd7b768a93ecfce6 inherit pub_methods_classAESCommon"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classBlockCipher"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classBlockCipher')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classBlockCipher.html">BlockCipher</a></td></tr>
<tr class="memitem:adc3d7cba116cbea9ad017f4cded6fe2f inherit pub_methods_classBlockCipher"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc3d7cba116cbea9ad017f4cded6fe2f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f">BlockCipher</a> ()</td></tr>
<tr class="memdesc:adc3d7cba116cbea9ad017f4cded6fe2f inherit pub_methods_classBlockCipher"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a block cipher. <br/></td></tr>
<tr class="separator:adc3d7cba116cbea9ad017f4cded6fe2f inherit pub_methods_classBlockCipher"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acec1bc4faeaa6dda2d91bffd79a988f9 inherit pub_methods_classBlockCipher"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classBlockCipher.html#acec1bc4faeaa6dda2d91bffd79a988f9">~BlockCipher</a> ()</td></tr>
<tr class="memdesc:acec1bc4faeaa6dda2d91bffd79a988f9 inherit pub_methods_classBlockCipher"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroys this block cipher object. <a href="#acec1bc4faeaa6dda2d91bffd79a988f9">More...</a><br/></td></tr>
<tr class="separator:acec1bc4faeaa6dda2d91bffd79a988f9 inherit pub_methods_classBlockCipher"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_methods_classAESCommon"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classAESCommon')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classAESCommon.html">AESCommon</a></td></tr>
<tr class="memitem:acf224a392659429bac80dc68c7471b21 inherit pro_methods_classAESCommon"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf224a392659429bac80dc68c7471b21"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAESCommon.html#acf224a392659429bac80dc68c7471b21">AESCommon</a> ()</td></tr>
<tr class="memdesc:acf224a392659429bac80dc68c7471b21 inherit pro_methods_classAESCommon"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs an AES block cipher object. <br/></td></tr>
<tr class="separator:acf224a392659429bac80dc68c7471b21 inherit pro_methods_classAESCommon"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>AES block cipher with 128-bit keys. </p>
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classAES192.html" title="AES block cipher with 192-bit keys. ">AES192</a>, <a class="el" href="classAES256.html" title="AES block cipher with 256-bit keys. ">AES256</a> </dd></dl>
<p>Definition at line <a class="el" href="AES_8h_source.html#l00056">56</a> of file <a class="el" href="AES_8h_source.html">AES.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="af826ce33301767919bb60f27ad3ff693"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">AES128::AES128 </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructs an AES 128-bit block cipher with no initial key. </p>
<p>This constructor must be followed by a call to <a class="el" href="classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4" title="Sets the key to use for future encryption and decryption operations. ">setKey()</a> before the block cipher can be used for encryption or decryption. </p>
<p>Definition at line <a class="el" href="AES128_8cpp_source.html#l00040">40</a> of file <a class="el" href="AES128_8cpp_source.html">AES128.cpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="aa871832a156f0ea61b964e489670ae9d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">size_t AES128::keySize </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Size of a 128-bit AES key in bytes. </p>
<dl class="section return"><dt>Returns</dt><dd>Always returns 16. </dd></dl>
<p>Implements <a class="el" href="classBlockCipher.html#afde6004a859e015d877eab3c37042a0f">BlockCipher</a>.</p>
<p>Definition at line <a class="el" href="AES128_8cpp_source.html#l00055">55</a> of file <a class="el" href="AES128_8cpp_source.html">AES128.cpp</a>.</p>
</div>
</div>
<a class="anchor" id="a42d7548eb5084a2c3e2d5aa5f6f98ba4"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool AES128::setKey </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the key to use for future encryption and decryption operations. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td>The key to use. </td></tr>
<tr><td class="paramname">len</td><td>The length of the key. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns false if the key length is not supported, or the key is somehow "weak" and unusable by this cipher.</dd></dl>
<p>Use <a class="el" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6" title="Clears all security-sensitive state from this block cipher. ">clear()</a> or the destructor to remove the key and any other sensitive data from the object once encryption or decryption is complete.</p>
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classAES128.html#aa871832a156f0ea61b964e489670ae9d" title="Size of a 128-bit AES key in bytes. ">keySize()</a>, <a class="el" href="classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6" title="Clears all security-sensitive state from this block cipher. ">clear()</a> </dd></dl>
<p>Implements <a class="el" href="classBlockCipher.html#a9a05307664469777592799c8f77397c4">BlockCipher</a>.</p>
<p>Definition at line <a class="el" href="AES128_8cpp_source.html#l00060">60</a> of file <a class="el" href="AES128_8cpp_source.html">AES128.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="AES_8h_source.html">AES.h</a></li>
<li><a class="el" href="AES128_8cpp_source.html">AES128.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 12 2015 19:02:05 for ArduinoLibs by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More