Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FastLED/FastLED.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Garcia <danielgarcia@gmail.com>2015-08-11 07:59:01 +0300
committerDaniel Garcia <danielgarcia@gmail.com>2015-08-11 07:59:01 +0300
commite421cdc8d843dfb0072b76e98267a052c6432926 (patch)
tree0faed24fad40cba188fb370111f391df0dd09a15
parent78b34f2f17acb7a1a0bd07a1fca2bcef75415f3b (diff)
adding new files
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html113
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md51
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.pngbin0 -> 9392 bytes
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md51
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.pngbin0 -> 9392 bytes
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html113
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md51
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.pngbin0 -> 10373 bytes
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md51
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.pngbin0 -> 10373 bytes
-rw-r--r--docs/3.1/dir_fbb9e787cf27434374136273d35a9c17.html115
-rw-r--r--docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.map3
-rw-r--r--docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.md51
-rw-r--r--docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.pngbin0 -> 1334 bytes
-rw-r--r--docs/3.1/fastled__delay_8h_source.html214
-rw-r--r--docs/3.1/fastled__progmem_8h_source.html159
-rw-r--r--docs/3.1/group___dimming.html129
-rw-r--r--docs/3.1/group___math.html397
-rw-r--r--docs/3.1/group___math.map3
-rw-r--r--docs/3.1/group___math.md51
-rw-r--r--docs/3.1/group___math.pngbin0 -> 4037 bytes
-rw-r--r--docs/3.1/group___random.html270
-rw-r--r--docs/3.1/group___random.map3
-rw-r--r--docs/3.1/group___random.md51
-rw-r--r--docs/3.1/group___random.pngbin0 -> 4969 bytes
-rw-r--r--docs/3.1/group___scaling.html504
-rw-r--r--docs/3.1/group___scaling.map3
-rw-r--r--docs/3.1/group___scaling.md51
-rw-r--r--docs/3.1/group___scaling.pngbin0 -> 3900 bytes
-rw-r--r--docs/3.1/group___trig.html289
-rw-r--r--docs/3.1/group___trig.map3
-rw-r--r--docs/3.1/group___trig.md51
-rw-r--r--docs/3.1/group___trig.pngbin0 -> 3716 bytes
-rw-r--r--docs/3.1/group__lib8tion.html305
-rw-r--r--docs/3.1/group__lib8tion.map6
-rw-r--r--docs/3.1/group__lib8tion.md51
-rw-r--r--docs/3.1/group__lib8tion.pngbin0 -> 14283 bytes
-rw-r--r--docs/3.1/math8_8h_source.html413
-rw-r--r--docs/3.1/md__m0-clocklessnotes.html94
-rw-r--r--docs/3.1/md__p_o_r_t_i_n_g.html117
-rw-r--r--docs/3.1/random8_8h_source.html180
-rw-r--r--docs/3.1/scale8_8h_source.html548
-rw-r--r--docs/3.1/scale_8h_source.html552
-rw-r--r--docs/3.1/search/functions_10.html26
-rw-r--r--docs/3.1/search/functions_10.js8
-rw-r--r--docs/3.1/search/functions_11.html26
-rw-r--r--docs/3.1/search/functions_11.js25
-rw-r--r--docs/3.1/search/functions_e.html26
-rw-r--r--docs/3.1/search/functions_e.js4
-rw-r--r--docs/3.1/search/functions_f.html26
-rw-r--r--docs/3.1/search/functions_f.js6
-rw-r--r--docs/3.1/search/groups_4.html26
-rw-r--r--docs/3.1/search/groups_4.js4
-rw-r--r--docs/3.1/search/groups_5.html26
-rw-r--r--docs/3.1/search/groups_5.js4
-rw-r--r--docs/3.1/search/groups_6.html26
-rw-r--r--docs/3.1/search/groups_6.js4
-rw-r--r--docs/3.1/search/pages_3.html26
-rw-r--r--docs/3.1/search/pages_3.js4
-rw-r--r--docs/3.1/search/pages_4.html26
-rw-r--r--docs/3.1/search/pages_4.js5
-rw-r--r--docs/3.1/search/variables_1.html26
-rw-r--r--docs/3.1/search/variables_1.js4
-rw-r--r--docs/3.1/trig8_8h_source.html328
-rw-r--r--docs/3.1/union_t_r_g_b_gradient_palette_entry_union-members.html109
-rw-r--r--docs/3.1/union_t_r_g_b_gradient_palette_entry_union.html132
70 files changed, 5448 insertions, 0 deletions
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
new file mode 100644
index 00000000..873b6186
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
@@ -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.9.1"/>
+<title>FastLED: SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt; Class Template 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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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="inherits.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)">
+</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">SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+<div class="center"><img src="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png" border="0" usemap="#_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+<div class="center"><img src="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png" border="0" usemap="#_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="fastspi_8h_source.html">fastspi.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map
new file mode 100644
index 00000000..e56890a8
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;" name="SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;">
+</map>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md5 b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md5
new file mode 100644
index 00000000..bad18512
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md5
@@ -0,0 +1 @@
+d8bb3a7d82ba07c3cb36dc63b94304fa \ No newline at end of file
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png
new file mode 100644
index 00000000..d5169017
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png
Binary files differ
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map
new file mode 100644
index 00000000..e56890a8
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;" name="SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;">
+</map>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md5 b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md5
new file mode 100644
index 00000000..bad18512
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md5
@@ -0,0 +1 @@
+d8bb3a7d82ba07c3cb36dc63b94304fa \ No newline at end of file
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png
new file mode 100644
index 00000000..d5169017
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png
Binary files differ
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
new file mode 100644
index 00000000..07cc92bb
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
@@ -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.9.1"/>
+<title>FastLED: SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt; Class Template 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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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="inherits.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)">
+</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">SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+<div class="center"><img src="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png" border="0" usemap="#_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4_inherit__map" alt="Inheritance graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+<div class="center"><img src="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png" border="0" usemap="#_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4_coll__map" alt="Collaboration graph"/></div>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="fastspi_8h_source.html">fastspi.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map
new file mode 100644
index 00000000..d2b52976
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.map
@@ -0,0 +1,2 @@
+<map id="SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;" name="SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;">
+</map>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md5 b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md5
new file mode 100644
index 00000000..46574779
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.md5
@@ -0,0 +1 @@
+ae70fe9c14b06f86ae422c2e06599d7f \ No newline at end of file
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png
new file mode 100644
index 00000000..4015b3e9
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__coll__graph.png
Binary files differ
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map
new file mode 100644
index 00000000..d2b52976
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.map
@@ -0,0 +1,2 @@
+<map id="SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;" name="SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;">
+</map>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md5 b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md5
new file mode 100644
index 00000000..46574779
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.md5
@@ -0,0 +1 @@
+ae70fe9c14b06f86ae422c2e06599d7f \ No newline at end of file
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png
new file mode 100644
index 00000000..4015b3e9
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4__inherit__graph.png
Binary files differ
diff --git a/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17.html b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17.html
new file mode 100644
index 00000000..a61341c4
--- /dev/null
+++ b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17.html
@@ -0,0 +1,115 @@
+<!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.9.1"/>
+<title>FastLED: lib8tion Directory 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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_fbb9e787cf27434374136273d35a9c17.html">lib8tion</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">lib8tion Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Directory dependency graph for lib8tion:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_fbb9e787cf27434374136273d35a9c17_dep.png" border="0" usemap="#dir__fbb9e787cf27434374136273d35a9c17__dep" alt="lib8tion"/></div>
+<map name="dir__fbb9e787cf27434374136273d35a9c17__dep" id="dir__fbb9e787cf27434374136273d35a9c17__dep">
+<area shape="rect" id="node1" href="dir_fbb9e787cf27434374136273d35a9c17.html" title="lib8tion" alt="" coords="5,5,77,53"/></map>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:math8_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>math8.h</b> <a href="math8_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:random8_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>random8.h</b> <a href="random8_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:scale8_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>scale8.h</b> <a href="scale8_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:trig8_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>trig8.h</b> <a href="trig8_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.map b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.map
new file mode 100644
index 00000000..94a9febd
--- /dev/null
+++ b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.map
@@ -0,0 +1,3 @@
+<map id="lib8tion" name="lib8tion">
+<area shape="rect" id="node1" href="dir_fbb9e787cf27434374136273d35a9c17.html" title="lib8tion" alt="" coords="5,5,77,53"/>
+</map>
diff --git a/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.md5 b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.md5
new file mode 100644
index 00000000..4ca0b943
--- /dev/null
+++ b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.md5
@@ -0,0 +1 @@
+1b20a6f148fe0d34379d52f7f15a91eb \ No newline at end of file
diff --git a/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.png b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.png
new file mode 100644
index 00000000..947e3781
--- /dev/null
+++ b/docs/3.1/dir_fbb9e787cf27434374136273d35a9c17_dep.png
Binary files differ
diff --git a/docs/3.1/fastled__delay_8h_source.html b/docs/3.1/fastled__delay_8h_source.html
new file mode 100644
index 00000000..609d20be
--- /dev/null
+++ b/docs/3.1/fastled__delay_8h_source.html
@@ -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.9.1"/>
+<title>FastLED: fastled_delay.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastled_delay.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="preprocessor">#ifndef __INC_FL_DELAY_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FL_DELAY_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"><a class="line" href="class_c_min_wait.html"> 8</a></span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> WAIT&gt; <span class="keyword">class </span><a class="code" href="class_c_min_wait.html">CMinWait</a> {</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; uint16_t mLastMicros;</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; <a class="code" href="class_c_min_wait.html">CMinWait</a>() { mLastMicros = 0; }</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; <span class="keywordtype">void</span> wait() {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; uint16_t diff;</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; diff = (micros() &amp; 0xFFFF) - mLastMicros;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; } <span class="keywordflow">while</span>(diff &lt; WAIT);</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; }</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordtype">void</span> mark() { mLastMicros = micros() &amp; 0xFFFF; }</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;};</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;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// Clock cycle counted delay loop</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// Default is now just &#39;nop&#39;, with special case for AVR</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor"># define NOP __asm__ __volatile__ (&quot;cp r0,r0\n&quot;);</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor"># define NOP2 __asm__ __volatile__ (&quot;rjmp .+0&quot;);</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor"># define NOP __asm__ __volatile__ (&quot;nop\n&quot;);</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor"># define NOP2 __asm__ __volatile__ (&quot;nop\n\t nop\n&quot;);</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></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="comment">// predeclaration to not upset the compiler</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> CYCLES&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> delaycycles();</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="comment">// TODO: ARM version of _delaycycles_</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="comment">// usable definition</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#if defined(FASTLED_AVR)</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// worker template - this will nop for LOOP * 3 + PAD cycles total</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> LOOP, <span class="keywordtype">int</span> PAD&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> _delaycycles_AVR() {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; delaycycles&lt;PAD&gt;();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// the loop below is 3 cycles * LOOP. the LDI is one cycle,</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// the DEC is 1 cycle, the BRNE is 2 cycles if looping back and</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// 1 if not (the LDI balances out the BRNE being 1 cycle on exit)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; __asm__ __volatile__ (</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="stringliteral">&quot; LDI R16, %0\n&quot;</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="stringliteral">&quot;L_%=: DEC R16\n&quot;</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="stringliteral">&quot; BRNE L_%=\n&quot;</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; : <span class="comment">/* no outputs */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; : <span class="stringliteral">&quot;M&quot;</span> (LOOP)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; : <span class="stringliteral">&quot;r16&quot;</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="l00061"></a><span class="lineno"> 61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0"> 62</a></span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> CYCLES&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles() {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; _delaycycles_AVR&lt;CYCLES / 3, CYCLES % 3&gt;();</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">#else</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">// template&lt;int LOOP, int PAD&gt; inline void _delaycycles_ARM() {</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// delaycycles&lt;PAD&gt;();</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">// // the loop below is 3 cycles * LOOP. the LDI is one cycle,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">// // the DEC is 1 cycle, the BRNE is 2 cycles if looping back and</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// // 1 if not (the LDI balances out the BRNE being 1 cycle on exit)</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// __asm__ __volatile__ (</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// &quot; mov.w r9, %0\n&quot;</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// &quot;L_%=: subs.w r9, r9, #1\n&quot;</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// &quot; bne.n L_%=\n&quot;</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// : /* no outputs */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// : &quot;M&quot; (LOOP)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// : &quot;r9&quot;</span></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;</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"><a class="line" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0"> 82</a></span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> CYCLES&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles() {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// _delaycycles_ARM&lt;CYCLES / 3, CYCLES % 3&gt;();</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; NOP; delaycycles&lt;CYCLES-1&gt;();</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="preprocessor">#endif</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="comment">// pre-instantiations for values small enough to not need the loop, as well as sanity holders</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">// for some negative values.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0"> 90</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-6&gt;() {}</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-5&gt;() {}</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-4&gt;() {}</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-3&gt;() {}</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-2&gt;() {}</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-1&gt;() {}</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;0&gt;() {}</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;1&gt;() {NOP;}</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;2&gt;() {NOP2;}</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;3&gt;() {NOP;NOP2;}</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;4&gt;() {NOP2;NOP2;}</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword">template</span>&lt;&gt; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;5&gt;() {NOP2;NOP2;NOP;}</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;<span class="comment">// Some timing related macros/definitions</span></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="comment">// Macro to convert from nano-seconds to clocks and clocks to nano-seconds</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment">// #define NS(_NS) (_NS / (1000 / (F_CPU / 1000000L)))</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#define F_CPU_MHZ (F_CPU / 1000000L)</span></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">// #define NS(_NS) ( (_NS * (F_CPU / 1000000L))) / 1000</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor">#define NS(_NS) (((_NS * F_CPU_MHZ) + 999) / 1000)</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#define CLKS_TO_MICROS(_CLKS) ((long)(_CLKS)) / (F_CPU / 1000000L)</span></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">// Macro for making sure there&#39;s enough time available</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="preprocessor">#define NO_TIME(A, B, C) (NS(A) &lt; 3 || NS(B) &lt; 3 || NS(C) &lt; 6)</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;FASTLED_NAMESPACE_END</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;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_c_min_wait_html"><div class="ttname"><a href="class_c_min_wait.html">CMinWait</a></div><div class="ttdoc">Class to ensure that a minimum amount of time has kicked since the last time run - and delay if not e...</div><div class="ttdef"><b>Definition:</b> fastled_delay.h:8</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void delaycycles()</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:62</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastled__progmem_8h_source.html b/docs/3.1/fastled__progmem_8h_source.html
new file mode 100644
index 00000000..b6f7a158
--- /dev/null
+++ b/docs/3.1/fastled__progmem_8h_source.html
@@ -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.9.1"/>
+<title>FastLED: fastled_progmem.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastled_progmem.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="preprocessor">#ifndef __INC_FL_PROGMEM_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FL_PROGMEM_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// Compatibility layer for devices that do or don&#39;t</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// have &quot;PROGMEM&quot; and the associated pgm_ accessors.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// If a platform supports PROGMEM, it should define</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// &quot;FASTLED_USE_PROGMEM&quot; as 1, otherwise FastLED will</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// fall back to NOT using PROGMEM.</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// Whether or not pgmspace.h is #included is separately</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// controllable by FASTLED_INCLUDE_PGMSPACE, if needed.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// If FASTLED_USE_PROGMEM is 1, we&#39;ll map FL_PROGMEM</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// and the FL_PGM_* accessors to the Arduino equivalents.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#if FASTLED_USE_PROGMEM == 1</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifndef FASTLED_INCLUDE_PGMSPACE</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#define FASTLED_INCLUDE_PGMSPACE 1</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#if FASTLED_INCLUDE_PGMSPACE == 1</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;avr/pgmspace.h&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#define FL_PROGMEM PROGMEM</span></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="comment">// Note: only the &#39;near&#39; memory wrappers are provided.</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// If you&#39;re using &#39;far&#39; memory, you already have</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">// portability issues to work through, but you could</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// add more support here if needed.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define FL_PGM_READ_BYTE_NEAR(x) (pgm_read_byte_near(x))</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#define FL_PGM_READ_WORD_NEAR(x) (pgm_read_word_near(x))</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#define FL_PGM_READ_DWORD_NEAR(x) (pgm_read_dword_near(x))</span></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="comment">// Workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifdef FASTLED_AVR</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#ifdef PROGMEM</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#undef PROGMEM</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#define PROGMEM __attribute__((section(&quot;.progmem.data&quot;)))</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#else</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// If FASTLED_USE_PROGMEM is 0 or undefined,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">// we&#39;ll use regular memory (RAM) access.</span></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="comment">//empty PROGMEM simulation</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#define FL_PROGMEM</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#define FL_PGM_READ_BYTE_NEAR(x) (*((const uint8_t*)(x)))</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#define FL_PGM_READ_WORD_NEAR(x) (*((const uint16_t*)(x)))</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define FL_PGM_READ_DWORD_NEAR(x) (*((const uint32_t*)(x)))</span></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="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;FASTLED_NAMESPACE_END</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><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group___dimming.html b/docs/3.1/group___dimming.html
new file mode 100644
index 00000000..3ac53a9c
--- /dev/null
+++ b/docs/3.1/group___dimming.html
@@ -0,0 +1,129 @@
+<!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.9.1"/>
+<title>FastLED: Dimming and brightening functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Dimming and brightening functions</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Dimming and brightening functions.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae51352a3522bb8eae5e17dbee97aa1aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae51352a3522bb8eae5e17dbee97aa1aa"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___dimming.html#gae51352a3522bb8eae5e17dbee97aa1aa">dim8_raw</a> (uint8_t x)</td></tr>
+<tr class="memdesc:gae51352a3522bb8eae5e17dbee97aa1aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adjust a scaling value for dimming. <br /></td></tr>
+<tr class="separator:gae51352a3522bb8eae5e17dbee97aa1aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga40a13446a2022dc489be8b2a8f2fa494"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga40a13446a2022dc489be8b2a8f2fa494"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___dimming.html#ga40a13446a2022dc489be8b2a8f2fa494">dim8_video</a> (uint8_t x)</td></tr>
+<tr class="memdesc:ga40a13446a2022dc489be8b2a8f2fa494"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adjust a scaling value for dimming for video (value will never go below 1) <br /></td></tr>
+<tr class="separator:ga40a13446a2022dc489be8b2a8f2fa494"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3f94d2455e0aa92133f77af8747b5914"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3f94d2455e0aa92133f77af8747b5914"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___dimming.html#ga3f94d2455e0aa92133f77af8747b5914">dim8_lin</a> (uint8_t x)</td></tr>
+<tr class="memdesc:ga3f94d2455e0aa92133f77af8747b5914"><td class="mdescLeft">&#160;</td><td class="mdescRight">Linear version of the dimming function that halves for values &lt; 128. <br /></td></tr>
+<tr class="separator:ga3f94d2455e0aa92133f77af8747b5914"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae8e36472a70f3016595048532d6c3a2d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae8e36472a70f3016595048532d6c3a2d"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___dimming.html#gae8e36472a70f3016595048532d6c3a2d">brighten8_raw</a> (uint8_t x)</td></tr>
+<tr class="memdesc:gae8e36472a70f3016595048532d6c3a2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">inverse of the dimming function, brighten a value <br /></td></tr>
+<tr class="separator:gae8e36472a70f3016595048532d6c3a2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad21876a676bcf26c47f957faed23f9bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad21876a676bcf26c47f957faed23f9bb"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___dimming.html#gad21876a676bcf26c47f957faed23f9bb">brighten8_video</a> (uint8_t x)</td></tr>
+<tr class="memdesc:gad21876a676bcf26c47f957faed23f9bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">inverse of the dimming function, brighten a value <br /></td></tr>
+<tr class="separator:gad21876a676bcf26c47f957faed23f9bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga094bda002b416c66e57521fc93878830"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga094bda002b416c66e57521fc93878830"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___dimming.html#ga094bda002b416c66e57521fc93878830">brighten8_lin</a> (uint8_t x)</td></tr>
+<tr class="memdesc:ga094bda002b416c66e57521fc93878830"><td class="mdescLeft">&#160;</td><td class="mdescRight">inverse of the dimming function, brighten a value <br /></td></tr>
+<tr class="separator:ga094bda002b416c66e57521fc93878830"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Dimming and brightening functions. </p>
+<p>The eye does not respond in a linear way to light. High speed PWM'd LEDs at 50% duty cycle appear far brighter then the 'half as bright' you might expect.</p>
+<p>If you want your midpoint brightness leve (128) to appear half as bright as 'full' brightness (255), you have to apply a 'dimming function'. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group___math.html b/docs/3.1/group___math.html
new file mode 100644
index 00000000..3057cffd
--- /dev/null
+++ b/docs/3.1/group___math.html
@@ -0,0 +1,397 @@
+<!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.9.1"/>
+<title>FastLED: Basic math operations</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Basic math operations<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>add one byte to another, saturating at 0xFF
+<a href="#details">More...</a></p>
+<div class="dynheader">
+Collaboration diagram for Basic math operations:</div>
+<div class="dyncontent">
+<center><table><tr><td><img src="group___math.png" border="0" alt="" usemap="#group______math"/>
+<map name="group______math" id="group______math">
+<area shape="rect" id="node2" href="group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,5,144,32"/></map>
+</td></tr></table></center>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga38e9f9a8830353f9cbfecad7c8758b1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga38e9f9a8830353f9cbfecad7c8758b1f"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>qadd8</b> (uint8_t i, uint8_t j)</td></tr>
+<tr class="separator:ga38e9f9a8830353f9cbfecad7c8758b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf60ccff727f52078aecdd5873b6f0bc"><td class="memItemLeft" align="right" valign="top">LIB8STATIC int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#gadf60ccff727f52078aecdd5873b6f0bc">qadd7</a> (int8_t i, int8_t j)</td></tr>
+<tr class="memdesc:gadf60ccff727f52078aecdd5873b6f0bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add one byte to another, saturating at 0x7F. <a href="#gadf60ccff727f52078aecdd5873b6f0bc">More...</a><br /></td></tr>
+<tr class="separator:gadf60ccff727f52078aecdd5873b6f0bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaaa16f47aca46653d51793b1af177587"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a> (uint8_t i, uint8_t j)</td></tr>
+<tr class="memdesc:gaaaa16f47aca46653d51793b1af177587"><td class="mdescLeft">&#160;</td><td class="mdescRight">subtract one byte from another, saturating at 0x00 <a href="#gaaaa16f47aca46653d51793b1af177587">More...</a><br /></td></tr>
+<tr class="separator:gaaaa16f47aca46653d51793b1af177587"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9f1f93145ca1955562b7f50f5db96ac1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9f1f93145ca1955562b7f50f5db96ac1"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga9f1f93145ca1955562b7f50f5db96ac1">add8</a> (uint8_t i, uint8_t j)</td></tr>
+<tr class="memdesc:ga9f1f93145ca1955562b7f50f5db96ac1"><td class="mdescLeft">&#160;</td><td class="mdescRight">add one byte to another, with one byte result <br /></td></tr>
+<tr class="separator:ga9f1f93145ca1955562b7f50f5db96ac1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0c40c15ab5af36ddabded161941f2091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0c40c15ab5af36ddabded161941f2091"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga0c40c15ab5af36ddabded161941f2091">sub8</a> (uint8_t i, uint8_t j)</td></tr>
+<tr class="memdesc:ga0c40c15ab5af36ddabded161941f2091"><td class="mdescLeft">&#160;</td><td class="mdescRight">subtract one byte from another, 8-bit result <br /></td></tr>
+<tr class="separator:ga0c40c15ab5af36ddabded161941f2091"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6bfedf0473d4c3705e8feeb6a25b9ea5"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga6bfedf0473d4c3705e8feeb6a25b9ea5">avg8</a> (uint8_t i, uint8_t j)</td></tr>
+<tr class="memdesc:ga6bfedf0473d4c3705e8feeb6a25b9ea5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate an integer average of two unsigned 8-bit integer values (uint8_t). <a href="#ga6bfedf0473d4c3705e8feeb6a25b9ea5">More...</a><br /></td></tr>
+<tr class="separator:ga6bfedf0473d4c3705e8feeb6a25b9ea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga30558a835c484b418165909118e702b1"><td class="memItemLeft" align="right" valign="top">LIB8STATIC int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga30558a835c484b418165909118e702b1">avg7</a> (int8_t i, int8_t j)</td></tr>
+<tr class="memdesc:ga30558a835c484b418165909118e702b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate an integer average of two signed 7-bit integers (int8_t) If the first argument is even, result is rounded down. <a href="#ga30558a835c484b418165909118e702b1">More...</a><br /></td></tr>
+<tr class="separator:ga30558a835c484b418165909118e702b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa5e80daec10cc13bf1eca8b125ee0e88"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#gaa5e80daec10cc13bf1eca8b125ee0e88">mod8</a> (uint8_t a, uint8_t m)</td></tr>
+<tr class="memdesc:gaa5e80daec10cc13bf1eca8b125ee0e88"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the remainder of one unsigned 8-bit value divided by anoter, aka A % M. <a href="#gaa5e80daec10cc13bf1eca8b125ee0e88">More...</a><br /></td></tr>
+<tr class="separator:gaa5e80daec10cc13bf1eca8b125ee0e88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2bcd51c47538dbc933999382e272a7a7"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga2bcd51c47538dbc933999382e272a7a7">addmod8</a> (uint8_t a, uint8_t b, uint8_t m)</td></tr>
+<tr class="memdesc:ga2bcd51c47538dbc933999382e272a7a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add two numbers, and calculate the modulo of the sum and a third number, M. <a href="#ga2bcd51c47538dbc933999382e272a7a7">More...</a><br /></td></tr>
+<tr class="separator:ga2bcd51c47538dbc933999382e272a7a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga10181a03cf8b8428fc524aa78e7fbf7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga10181a03cf8b8428fc524aa78e7fbf7f"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga10181a03cf8b8428fc524aa78e7fbf7f">mul8</a> (uint8_t i, uint8_t j)</td></tr>
+<tr class="memdesc:ga10181a03cf8b8428fc524aa78e7fbf7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">8x8 bit multiplication, with 8 bit result <br /></td></tr>
+<tr class="separator:ga10181a03cf8b8428fc524aa78e7fbf7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d113e85065df7c9006704ea6b6dcda4"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a> (uint8_t i, uint8_t j)</td></tr>
+<tr class="memdesc:ga9d113e85065df7c9006704ea6b6dcda4"><td class="mdescLeft">&#160;</td><td class="mdescRight">saturating 8x8 bit multiplication, with 8 bit result <a href="#ga9d113e85065df7c9006704ea6b6dcda4">More...</a><br /></td></tr>
+<tr class="separator:ga9d113e85065df7c9006704ea6b6dcda4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4bf8996c4a130e96521495d4a1395a01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4bf8996c4a130e96521495d4a1395a01"></a>
+LIB8STATIC int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga4bf8996c4a130e96521495d4a1395a01">abs8</a> (int8_t i)</td></tr>
+<tr class="memdesc:ga4bf8996c4a130e96521495d4a1395a01"><td class="mdescLeft">&#160;</td><td class="mdescRight">take abs() of a signed 8-bit uint8_t <br /></td></tr>
+<tr class="separator:ga4bf8996c4a130e96521495d4a1395a01"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga66ecef97faa5f9b92c49766651c5afe9"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html#ga66ecef97faa5f9b92c49766651c5afe9">sqrt16</a> (uint16_t x)</td></tr>
+<tr class="memdesc:ga66ecef97faa5f9b92c49766651c5afe9"><td class="mdescLeft">&#160;</td><td class="mdescRight">square root for 16-bit integers About three times faster and five times smaller than Arduino's general sqrt on AVR. <a href="#ga66ecef97faa5f9b92c49766651c5afe9">More...</a><br /></td></tr>
+<tr class="separator:ga66ecef97faa5f9b92c49766651c5afe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>add one byte to another, saturating at 0xFF </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">i</td><td>- first byte to add </td></tr>
+ <tr><td class="paramname">j</td><td>- second byte to add </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the sum of i &amp; j, capped at 0xFF </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga2bcd51c47538dbc933999382e272a7a7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t addmod8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>m</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Add two numbers, and calculate the modulo of the sum and a third number, M. </p>
+<p>In other words, it returns (A+B) % M. It is designed as a compact mechanism for incrementing a 'mode' switch and wrapping around back to 'mode 0' when the switch goes past the end of the available range. e.g. if you have seven modes, this switches to the next one and wraps around if needed: mode = addmod8( mode, 1, 7); See 'mod8' for notes on performance. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga30558a835c484b418165909118e702b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC int8_t avg7 </td>
+ <td>(</td>
+ <td class="paramtype">int8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int8_t&#160;</td>
+ <td class="paramname"><em>j</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculate an integer average of two signed 7-bit integers (int8_t) If the first argument is even, result is rounded down. </p>
+<p>If the first argument is odd, result is result up. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6bfedf0473d4c3705e8feeb6a25b9ea5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t avg8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>j</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculate an integer average of two unsigned 8-bit integer values (uint8_t). </p>
+<p>Fractional results are rounded down, e.g. avg8(20,41) = 30 </p>
+
+</div>
+</div>
+<a class="anchor" id="gaa5e80daec10cc13bf1eca8b125ee0e88"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t mod8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>m</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculate the remainder of one unsigned 8-bit value divided by anoter, aka A % M. </p>
+<p>Implemented by repeated subtraction, which is very compact, and very fast if A is 'probably' less than M. If A is a large multiple of M, the loop has to execute multiple times. However, even in that case, the loop is only two instructions long on AVR, i.e., quick. </p>
+
+</div>
+</div>
+<a class="anchor" id="gadf60ccff727f52078aecdd5873b6f0bc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC int8_t qadd7 </td>
+ <td>(</td>
+ <td class="paramtype">int8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int8_t&#160;</td>
+ <td class="paramname"><em>j</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Add one byte to another, saturating at 0x7F. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">i</td><td>- first byte to add </td></tr>
+ <tr><td class="paramname">j</td><td>- second byte to add </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the sum of i &amp; j, capped at 0xFF </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9d113e85065df7c9006704ea6b6dcda4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t qmul8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>j</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>saturating 8x8 bit multiplication, with 8 bit result </p>
+<dl class="section return"><dt>Returns</dt><dd>the product of i * j, capping at 0xFF </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaaa16f47aca46653d51793b1af177587"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t qsub8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>j</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>subtract one byte from another, saturating at 0x00 </p>
+<dl class="section return"><dt>Returns</dt><dd>i - j with a floor of 0 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga66ecef97faa5f9b92c49766651c5afe9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t sqrt16 </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>square root for 16-bit integers About three times faster and five times smaller than Arduino's general sqrt on AVR. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group___math.map b/docs/3.1/group___math.map
new file mode 100644
index 00000000..d139d290
--- /dev/null
+++ b/docs/3.1/group___math.map
@@ -0,0 +1,3 @@
+<map id="Basic math operations" name="Basic math operations">
+<area shape="rect" id="node2" href="$group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,5,144,32"/>
+</map>
diff --git a/docs/3.1/group___math.md5 b/docs/3.1/group___math.md5
new file mode 100644
index 00000000..5906f3bb
--- /dev/null
+++ b/docs/3.1/group___math.md5
@@ -0,0 +1 @@
+c82b6e9e652aecb8a88daf5caadd2cea \ No newline at end of file
diff --git a/docs/3.1/group___math.png b/docs/3.1/group___math.png
new file mode 100644
index 00000000..5d76d5f2
--- /dev/null
+++ b/docs/3.1/group___math.png
Binary files differ
diff --git a/docs/3.1/group___random.html b/docs/3.1/group___random.html
new file mode 100644
index 00000000..fdc0b5ce
--- /dev/null
+++ b/docs/3.1/group___random.html
@@ -0,0 +1,270 @@
+<!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.9.1"/>
+<title>FastLED: Fast random number generators</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">Fast random number generators<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A 16-bit PNRG good enough for LED animations.
+<a href="#details">More...</a></p>
+<div class="dynheader">
+Collaboration diagram for Fast random number generators:</div>
+<div class="dyncontent">
+<center><table><tr><td><img src="group___random.png" border="0" alt="" usemap="#group______random"/>
+<map name="group______random" id="group______random">
+<area shape="rect" id="node2" href="group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,12,144,39"/></map>
+</td></tr></table></center>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4e63c74426f6516f28470dc1b814aefe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4e63c74426f6516f28470dc1b814aefe"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a> ()</td></tr>
+<tr class="memdesc:ga4e63c74426f6516f28470dc1b814aefe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate an 8-bit random number. <br /></td></tr>
+<tr class="separator:ga4e63c74426f6516f28470dc1b814aefe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga17034d936ef716efe820e11c1df043b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga17034d936ef716efe820e11c1df043b0"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a> ()</td></tr>
+<tr class="memdesc:ga17034d936ef716efe820e11c1df043b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a 16 bit random number. <br /></td></tr>
+<tr class="separator:ga17034d936ef716efe820e11c1df043b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga216b1cfe4f62f92f5493515c6b74220c"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga216b1cfe4f62f92f5493515c6b74220c">random8</a> (uint8_t lim)</td></tr>
+<tr class="memdesc:ga216b1cfe4f62f92f5493515c6b74220c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate an 8-bit random number between 0 and lim. <a href="#ga216b1cfe4f62f92f5493515c6b74220c">More...</a><br /></td></tr>
+<tr class="separator:ga216b1cfe4f62f92f5493515c6b74220c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2829e2c714f0a0f4617a65c4eddccec2"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga2829e2c714f0a0f4617a65c4eddccec2">random8</a> (uint8_t min, uint8_t lim)</td></tr>
+<tr class="memdesc:ga2829e2c714f0a0f4617a65c4eddccec2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate an 8-bit random number in the given range. <a href="#ga2829e2c714f0a0f4617a65c4eddccec2">More...</a><br /></td></tr>
+<tr class="separator:ga2829e2c714f0a0f4617a65c4eddccec2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7236600fa1c01fc63665a9b8db508359"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga7236600fa1c01fc63665a9b8db508359">random16</a> (uint16_t lim)</td></tr>
+<tr class="memdesc:ga7236600fa1c01fc63665a9b8db508359"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate an 16-bit random number between 0 and lim. <a href="#ga7236600fa1c01fc63665a9b8db508359">More...</a><br /></td></tr>
+<tr class="separator:ga7236600fa1c01fc63665a9b8db508359"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga69d2cf7b8d730a0c36eec8711dbb134f"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga69d2cf7b8d730a0c36eec8711dbb134f">random16</a> (uint16_t min, uint16_t lim)</td></tr>
+<tr class="memdesc:ga69d2cf7b8d730a0c36eec8711dbb134f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate an 16-bit random number in the given range. <a href="#ga69d2cf7b8d730a0c36eec8711dbb134f">More...</a><br /></td></tr>
+<tr class="separator:ga69d2cf7b8d730a0c36eec8711dbb134f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga95e371c2438843e0ed1ed83412b28c99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga95e371c2438843e0ed1ed83412b28c99"></a>
+LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga95e371c2438843e0ed1ed83412b28c99">random16_set_seed</a> (uint16_t seed)</td></tr>
+<tr class="memdesc:ga95e371c2438843e0ed1ed83412b28c99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the 16-bit seed used for the random number generator. <br /></td></tr>
+<tr class="separator:ga95e371c2438843e0ed1ed83412b28c99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga860bc64bfca4ada980e70cf1e03dedd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga860bc64bfca4ada980e70cf1e03dedd8"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga860bc64bfca4ada980e70cf1e03dedd8">random16_get_seed</a> ()</td></tr>
+<tr class="memdesc:ga860bc64bfca4ada980e70cf1e03dedd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current seed value for the random number generator. <br /></td></tr>
+<tr class="separator:ga860bc64bfca4ada980e70cf1e03dedd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1078b2029a50e86c93ccf4e3e1d85e7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1078b2029a50e86c93ccf4e3e1d85e7d"></a>
+LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga1078b2029a50e86c93ccf4e3e1d85e7d">random16_add_entropy</a> (uint16_t entropy)</td></tr>
+<tr class="memdesc:ga1078b2029a50e86c93ccf4e3e1d85e7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add entropy into the random number generator. <br /></td></tr>
+<tr class="separator:ga1078b2029a50e86c93ccf4e3e1d85e7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga6f2ab7e21aae59453832b2933632f016"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6f2ab7e21aae59453832b2933632f016"></a>
+uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a></td></tr>
+<tr class="memdesc:ga6f2ab7e21aae59453832b2933632f016"><td class="mdescLeft">&#160;</td><td class="mdescRight">random number seed <br /></td></tr>
+<tr class="separator:ga6f2ab7e21aae59453832b2933632f016"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A 16-bit PNRG good enough for LED animations. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga7236600fa1c01fc63665a9b8db508359"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint16_t random16 </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>lim</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate an 16-bit random number between 0 and lim. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lim</td><td>the upper bound for the result </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga69d2cf7b8d730a0c36eec8711dbb134f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint16_t random16 </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>min</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>lim</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate an 16-bit random number in the given range. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">min</td><td>the lower bound for the random number </td></tr>
+ <tr><td class="paramname">lim</td><td>the upper bound for the random number </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga216b1cfe4f62f92f5493515c6b74220c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t random8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>lim</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate an 8-bit random number between 0 and lim. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lim</td><td>the upper bound for the result </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2829e2c714f0a0f4617a65c4eddccec2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t random8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>min</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>lim</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate an 8-bit random number in the given range. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">min</td><td>the lower bound for the random number </td></tr>
+ <tr><td class="paramname">lim</td><td>the upper bound for the random number </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group___random.map b/docs/3.1/group___random.map
new file mode 100644
index 00000000..a5d5353c
--- /dev/null
+++ b/docs/3.1/group___random.map
@@ -0,0 +1,3 @@
+<map id="Fast random number generators" name="Fast random number generators">
+<area shape="rect" id="node2" href="$group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,12,144,39"/>
+</map>
diff --git a/docs/3.1/group___random.md5 b/docs/3.1/group___random.md5
new file mode 100644
index 00000000..889ed74f
--- /dev/null
+++ b/docs/3.1/group___random.md5
@@ -0,0 +1 @@
+e1e49b89dd0893741503457f99a0092e \ No newline at end of file
diff --git a/docs/3.1/group___random.png b/docs/3.1/group___random.png
new file mode 100644
index 00000000..ba0fb3de
--- /dev/null
+++ b/docs/3.1/group___random.png
Binary files differ
diff --git a/docs/3.1/group___scaling.html b/docs/3.1/group___scaling.html
new file mode 100644
index 00000000..55efaa31
--- /dev/null
+++ b/docs/3.1/group___scaling.html
@@ -0,0 +1,504 @@
+<!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.9.1"/>
+<title>FastLED: Scaling functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Scaling functions<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>for scaling 8 and 16 bit values, as well as dimming and brightening them
+<a href="#details">More...</a></p>
+<div class="dynheader">
+Collaboration diagram for Scaling functions:</div>
+<div class="dyncontent">
+<center><table><tr><td><img src="group___scaling.png" border="0" alt="" usemap="#group______scaling"/>
+<map name="group______scaling" id="group______scaling">
+<area shape="rect" id="node1" href="group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,5,144,32"/></map>
+</td></tr></table></center>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6c160f8c36ce9b3c5eda68e4992010af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6c160f8c36ce9b3c5eda68e4992010af"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a> (uint8_t i, fract8 scale)</td></tr>
+<tr class="memdesc:ga6c160f8c36ce9b3c5eda68e4992010af"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is 256 In other words, it computes i * (scale / 256) 4 clocks AVR with MUL, 2 clocks ARM <br /></td></tr>
+<tr class="separator:ga6c160f8c36ce9b3c5eda68e4992010af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga333095ffa436c94d3e77ee9dc39da1c1"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a> (uint8_t i, fract8 scale)</td></tr>
+<tr class="memdesc:ga333095ffa436c94d3e77ee9dc39da1c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">The "video" version of scale8 guarantees that the output will be only be zero if one or both of the inputs are zero. <a href="#ga333095ffa436c94d3e77ee9dc39da1c1">More...</a><br /></td></tr>
+<tr class="separator:ga333095ffa436c94d3e77ee9dc39da1c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39579fcf09743f15545fe0b831ca313c"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a> (uint8_t i, fract8 scale)</td></tr>
+<tr class="memdesc:ga39579fcf09743f15545fe0b831ca313c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This version of scale8 does not clean up the R1 register on AVR If you are doing several 'scale8's in a row, use this, and then explicitly call cleanup_R1. <a href="#ga39579fcf09743f15545fe0b831ca313c">More...</a><br /></td></tr>
+<tr class="separator:ga39579fcf09743f15545fe0b831ca313c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5f6dde3d9398f4b389c96e759a3f7b80"><td class="memItemLeft" align="right" valign="top">LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80">nscale8_LEAVING_R1_DIRTY</a> (uint8_t &amp;i, fract8 scale)</td></tr>
+<tr class="memdesc:ga5f6dde3d9398f4b389c96e759a3f7b80"><td class="mdescLeft">&#160;</td><td class="mdescRight">In place modifying version of scale8, also this version of nscale8 does not clean up the R1 register on AVR If you are doing several 'scale8's in a row, use this, and then explicitly call cleanup_R1. <a href="#ga5f6dde3d9398f4b389c96e759a3f7b80">More...</a><br /></td></tr>
+<tr class="separator:ga5f6dde3d9398f4b389c96e759a3f7b80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab341cef8d46232269bb70092fed9eb75"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75">scale8_video_LEAVING_R1_DIRTY</a> (uint8_t i, fract8 scale)</td></tr>
+<tr class="memdesc:gab341cef8d46232269bb70092fed9eb75"><td class="mdescLeft">&#160;</td><td class="mdescRight">This version of scale8_video does not clean up the R1 register on AVR If you are doing several 'scale8_video's in a row, use this, and then explicitly call cleanup_R1. <a href="#gab341cef8d46232269bb70092fed9eb75">More...</a><br /></td></tr>
+<tr class="separator:gab341cef8d46232269bb70092fed9eb75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2a580fcaa010558218faae95d1936635"><td class="memItemLeft" align="right" valign="top">LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a> (uint8_t &amp;i, fract8 scale)</td></tr>
+<tr class="memdesc:ga2a580fcaa010558218faae95d1936635"><td class="mdescLeft">&#160;</td><td class="mdescRight">In place modifying version of scale8_video, also this version of nscale8_video does not clean up the R1 register on AVR If you are doing several 'scale8_video's in a row, use this, and then explicitly call cleanup_R1. <a href="#ga2a580fcaa010558218faae95d1936635">More...</a><br /></td></tr>
+<tr class="separator:ga2a580fcaa010558218faae95d1936635"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga572d0b441676c9d8ceb071fe8284b7e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga572d0b441676c9d8ceb071fe8284b7e9"></a>
+LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a> ()</td></tr>
+<tr class="memdesc:ga572d0b441676c9d8ceb071fe8284b7e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clean up the r1 register after a series of *LEAVING_R1_DIRTY calls. <br /></td></tr>
+<tr class="separator:ga572d0b441676c9d8ceb071fe8284b7e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39bf87e5526120889086cab19ac749b1"><td class="memItemLeft" align="right" valign="top">LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a> (uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</td></tr>
+<tr class="memdesc:ga39bf87e5526120889086cab19ac749b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes r,g,b * (scale / 256) <a href="#ga39bf87e5526120889086cab19ac749b1">More...</a><br /></td></tr>
+<tr class="separator:ga39bf87e5526120889086cab19ac749b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga700b7f510f32e8c91385093c436c27d9"><td class="memItemLeft" align="right" valign="top">LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a> (uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</td></tr>
+<tr class="memdesc:ga700b7f510f32e8c91385093c436c27d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes r,g,b * (scale / 256), ensuring that non-zero values passed in remain non zero, no matter how low the scale argument. <a href="#ga700b7f510f32e8c91385093c436c27d9">More...</a><br /></td></tr>
+<tr class="separator:ga700b7f510f32e8c91385093c436c27d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6f419761a744efed4bae8875ac07aef0"><td class="memItemLeft" align="right" valign="top">LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga6f419761a744efed4bae8875ac07aef0">nscale8x2</a> (uint8_t &amp;i, uint8_t &amp;j, fract8 scale)</td></tr>
+<tr class="memdesc:ga6f419761a744efed4bae8875ac07aef0"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale two one byte values by a third one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes i,j * (scale / 256) <a href="#ga6f419761a744efed4bae8875ac07aef0">More...</a><br /></td></tr>
+<tr class="separator:ga6f419761a744efed4bae8875ac07aef0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4204edd4a3f8aac7124a10f1f5cfccfe"><td class="memItemLeft" align="right" valign="top">LIB8STATIC void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe">nscale8x2_video</a> (uint8_t &amp;i, uint8_t &amp;j, fract8 scale)</td></tr>
+<tr class="memdesc:ga4204edd4a3f8aac7124a10f1f5cfccfe"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale two one byte values by a third one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes i,j * (scale / 256), ensuring that non-zero values passed in remain non zero, no matter how low the scale argument. <a href="#ga4204edd4a3f8aac7124a10f1f5cfccfe">More...</a><br /></td></tr>
+<tr class="separator:ga4204edd4a3f8aac7124a10f1f5cfccfe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf34fde0746c9c2e5ed44f9c437a2267e"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a> (uint16_t i, fract8 scale)</td></tr>
+<tr class="memdesc:gaf34fde0746c9c2e5ed44f9c437a2267e"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale a 16-bit unsigned value by an 8-bit value, considered as numerator of a fraction whose denominator is 256. <a href="#gaf34fde0746c9c2e5ed44f9c437a2267e">More...</a><br /></td></tr>
+<tr class="separator:gaf34fde0746c9c2e5ed44f9c437a2267e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1ff8ac00ad78e22acc7bb7445bfdb145"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a> (uint16_t i, fract16 scale)</td></tr>
+<tr class="memdesc:ga1ff8ac00ad78e22acc7bb7445bfdb145"><td class="mdescLeft">&#160;</td><td class="mdescRight">scale a 16-bit unsigned value by a 16-bit value, considered as numerator of a fraction whose denominator is 65536. <a href="#ga1ff8ac00ad78e22acc7bb7445bfdb145">More...</a><br /></td></tr>
+<tr class="separator:ga1ff8ac00ad78e22acc7bb7445bfdb145"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>for scaling 8 and 16 bit values, as well as dimming and brightening them </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga5f6dde3d9398f4b389c96e759a3f7b80"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC void nscale8_LEAVING_R1_DIRTY </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>In place modifying version of scale8, also this version of nscale8 does not clean up the R1 register on AVR If you are doing several 'scale8's in a row, use this, and then explicitly call cleanup_R1. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga2a580fcaa010558218faae95d1936635"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC void nscale8_video_LEAVING_R1_DIRTY </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>In place modifying version of scale8_video, also this version of nscale8_video does not clean up the R1 register on AVR If you are doing several 'scale8_video's in a row, use this, and then explicitly call cleanup_R1. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6f419761a744efed4bae8875ac07aef0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC void nscale8x2 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>j</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>scale two one byte values by a third one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes i,j * (scale / 256) </p>
+<p>THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4204edd4a3f8aac7124a10f1f5cfccfe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC void nscale8x2_video </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>j</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>scale two one byte values by a third one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes i,j * (scale / 256), ensuring that non-zero values passed in remain non zero, no matter how low the scale argument. </p>
+<p>THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE </p>
+
+</div>
+</div>
+<a class="anchor" id="ga39bf87e5526120889086cab19ac749b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC void nscale8x3 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes r,g,b * (scale / 256) </p>
+<p>THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE </p>
+
+</div>
+</div>
+<a class="anchor" id="ga700b7f510f32e8c91385093c436c27d9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC void nscale8x3_video </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t &amp;&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose demominator is 256 In other words, it computes r,g,b * (scale / 256), ensuring that non-zero values passed in remain non zero, no matter how low the scale argument. </p>
+<p>THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE </p>
+
+</div>
+</div>
+<a class="anchor" id="ga1ff8ac00ad78e22acc7bb7445bfdb145"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint16_t scale16 </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract16&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>scale a 16-bit unsigned value by a 16-bit value, considered as numerator of a fraction whose denominator is 65536. </p>
+<p>In other words, it computes i * (scale / 65536) </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf34fde0746c9c2e5ed44f9c437a2267e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint16_t scale16by8 </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>scale a 16-bit unsigned value by an 8-bit value, considered as numerator of a fraction whose denominator is 256. </p>
+<p>In other words, it computes i * (scale / 256) </p>
+
+</div>
+</div>
+<a class="anchor" id="ga39579fcf09743f15545fe0b831ca313c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>This version of scale8 does not clean up the R1 register on AVR If you are doing several 'scale8's in a row, use this, and then explicitly call cleanup_R1. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga333095ffa436c94d3e77ee9dc39da1c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t scale8_video </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The "video" version of scale8 guarantees that the output will be only be zero if one or both of the inputs are zero. </p>
+<p>If both inputs are non-zero, the output is guaranteed to be non-zero. This makes for better 'video'/LED dimming, at the cost of several additional cycles. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab341cef8d46232269bb70092fed9eb75"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t scale8_video_LEAVING_R1_DIRTY </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">fract8&#160;</td>
+ <td class="paramname"><em>scale</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>This version of scale8_video does not clean up the R1 register on AVR If you are doing several 'scale8_video's in a row, use this, and then explicitly call cleanup_R1. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group___scaling.map b/docs/3.1/group___scaling.map
new file mode 100644
index 00000000..9bd73faa
--- /dev/null
+++ b/docs/3.1/group___scaling.map
@@ -0,0 +1,3 @@
+<map id="Scaling functions" name="Scaling functions">
+<area shape="rect" id="node1" href="$group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,5,144,32"/>
+</map>
diff --git a/docs/3.1/group___scaling.md5 b/docs/3.1/group___scaling.md5
new file mode 100644
index 00000000..8790bf78
--- /dev/null
+++ b/docs/3.1/group___scaling.md5
@@ -0,0 +1 @@
+b70c5dc2f03cddc663e2e61c2b17a7d6 \ No newline at end of file
diff --git a/docs/3.1/group___scaling.png b/docs/3.1/group___scaling.png
new file mode 100644
index 00000000..0ecd3305
--- /dev/null
+++ b/docs/3.1/group___scaling.png
Binary files differ
diff --git a/docs/3.1/group___trig.html b/docs/3.1/group___trig.html
new file mode 100644
index 00000000..0f06c5c5
--- /dev/null
+++ b/docs/3.1/group___trig.html
@@ -0,0 +1,289 @@
+<!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.9.1"/>
+<title>FastLED: Fast trig functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">Fast trig functions<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Collaboration diagram for Fast trig functions:</div>
+<div class="dyncontent">
+<center><table><tr><td><img src="group___trig.png" border="0" alt="" usemap="#group______trig"/>
+<map name="group______trig" id="group______trig">
+<area shape="rect" id="node2" href="group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,5,144,32"/></map>
+</td></tr></table></center>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga660ff60bfc5116525e50187de72009fc"><td class="memItemLeft" align="right" valign="top">LIB8STATIC int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html#ga660ff60bfc5116525e50187de72009fc">sin16_avr</a> (uint16_t theta)</td></tr>
+<tr class="memdesc:ga660ff60bfc5116525e50187de72009fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast 16-bit approximation of sin(x). <a href="#ga660ff60bfc5116525e50187de72009fc">More...</a><br /></td></tr>
+<tr class="separator:ga660ff60bfc5116525e50187de72009fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0890962cb06b267617f4b06d7e9be5eb"><td class="memItemLeft" align="right" valign="top">LIB8STATIC int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html#ga0890962cb06b267617f4b06d7e9be5eb">sin16_C</a> (uint16_t theta)</td></tr>
+<tr class="memdesc:ga0890962cb06b267617f4b06d7e9be5eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast 16-bit approximation of sin(x). <a href="#ga0890962cb06b267617f4b06d7e9be5eb">More...</a><br /></td></tr>
+<tr class="separator:ga0890962cb06b267617f4b06d7e9be5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga056952ebed39f55880bb353857b47075"><td class="memItemLeft" align="right" valign="top">LIB8STATIC int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html#ga056952ebed39f55880bb353857b47075">cos16</a> (uint16_t theta)</td></tr>
+<tr class="memdesc:ga056952ebed39f55880bb353857b47075"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast 16-bit approximation of cos(x). <a href="#ga056952ebed39f55880bb353857b47075">More...</a><br /></td></tr>
+<tr class="separator:ga056952ebed39f55880bb353857b47075"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6aa1f993cbbc427d80da1ee2ccca86e7"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html#ga6aa1f993cbbc427d80da1ee2ccca86e7">sin8_avr</a> (uint8_t theta)</td></tr>
+<tr class="memdesc:ga6aa1f993cbbc427d80da1ee2ccca86e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast 8-bit approximation of sin(x). <a href="#ga6aa1f993cbbc427d80da1ee2ccca86e7">More...</a><br /></td></tr>
+<tr class="separator:ga6aa1f993cbbc427d80da1ee2ccca86e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga46933a9b42921c6605588268d11f7c1e"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html#ga46933a9b42921c6605588268d11f7c1e">sin8_C</a> (uint8_t theta)</td></tr>
+<tr class="memdesc:ga46933a9b42921c6605588268d11f7c1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast 8-bit approximation of sin(x). <a href="#ga46933a9b42921c6605588268d11f7c1e">More...</a><br /></td></tr>
+<tr class="separator:ga46933a9b42921c6605588268d11f7c1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4432f985c94f5bff715db402d767b0e8"><td class="memItemLeft" align="right" valign="top">LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html#ga4432f985c94f5bff715db402d767b0e8">cos8</a> (uint8_t theta)</td></tr>
+<tr class="memdesc:ga4432f985c94f5bff715db402d767b0e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast 8-bit approximation of cos(x). <a href="#ga4432f985c94f5bff715db402d767b0e8">More...</a><br /></td></tr>
+<tr class="separator:ga4432f985c94f5bff715db402d767b0e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:gadc654138105ff193df0fbc7a0c21806c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadc654138105ff193df0fbc7a0c21806c"></a>
+const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>b_m16_interleave</b> [] = { 0, 49, 49, 41, 90, 27, 117, 10 }</td></tr>
+<tr class="separator:gadc654138105ff193df0fbc7a0c21806c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga056952ebed39f55880bb353857b47075"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC int16_t cos16 </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>theta</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast 16-bit approximation of cos(x). </p>
+<p>This approximation never varies more than 0.69% from the floating point value you'd get by doing </p><pre class="fragment">float s = cos(x) * 32767.0;
+</pre><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">theta</td><td>input angle from 0-65535 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>sin of theta, value between -32767 to 32767. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4432f985c94f5bff715db402d767b0e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t cos8 </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>theta</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast 8-bit approximation of cos(x). </p>
+<p>This approximation never varies more than 2% from the floating point value you'd get by doing </p><pre class="fragment">float s = (cos(x) * 128.0) + 128;
+</pre><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">theta</td><td>input angle from 0-255 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>sin of theta, value between 0 and 255 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga660ff60bfc5116525e50187de72009fc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC int16_t sin16_avr </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>theta</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast 16-bit approximation of sin(x). </p>
+<p>This approximation never varies more than 0.69% from the floating point value you'd get by doing </p><pre class="fragment">float s = sin(x) * 32767.0;
+</pre><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">theta</td><td>input angle from 0-65535 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>sin of theta, value between -32767 to 32767. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0890962cb06b267617f4b06d7e9be5eb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC int16_t sin16_C </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&#160;</td>
+ <td class="paramname"><em>theta</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast 16-bit approximation of sin(x). </p>
+<p>This approximation never varies more than 0.69% from the floating point value you'd get by doing </p><pre class="fragment">float s = sin(x) * 32767.0;
+</pre><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">theta</td><td>input angle from 0-65535 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>sin of theta, value between -32767 to 32767. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6aa1f993cbbc427d80da1ee2ccca86e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t sin8_avr </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>theta</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast 8-bit approximation of sin(x). </p>
+<p>This approximation never varies more than 2% from the floating point value you'd get by doing </p><pre class="fragment">float s = (sin(x) * 128.0) + 128;
+</pre><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">theta</td><td>input angle from 0-255 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>sin of theta, value between 0 and 255 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga46933a9b42921c6605588268d11f7c1e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LIB8STATIC uint8_t sin8_C </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&#160;</td>
+ <td class="paramname"><em>theta</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast 8-bit approximation of sin(x). </p>
+<p>This approximation never varies more than 2% from the floating point value you'd get by doing </p><pre class="fragment">float s = (sin(x) * 128.0) + 128;
+</pre><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">theta</td><td>input angle from 0-255 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>sin of theta, value between 0 and 255 </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group___trig.map b/docs/3.1/group___trig.map
new file mode 100644
index 00000000..caf81dd3
--- /dev/null
+++ b/docs/3.1/group___trig.map
@@ -0,0 +1,3 @@
+<map id="Fast trig functions" name="Fast trig functions">
+<area shape="rect" id="node2" href="$group__lib8tion.html" title="A variety of functions for working with numbers. " alt="" coords="5,5,144,32"/>
+</map>
diff --git a/docs/3.1/group___trig.md5 b/docs/3.1/group___trig.md5
new file mode 100644
index 00000000..7727087b
--- /dev/null
+++ b/docs/3.1/group___trig.md5
@@ -0,0 +1 @@
+8f428b40780d07789ab6dd80d97b51aa \ No newline at end of file
diff --git a/docs/3.1/group___trig.png b/docs/3.1/group___trig.png
new file mode 100644
index 00000000..696f8c37
--- /dev/null
+++ b/docs/3.1/group___trig.png
Binary files differ
diff --git a/docs/3.1/group__lib8tion.html b/docs/3.1/group__lib8tion.html
new file mode 100644
index 00000000..095d75fc
--- /dev/null
+++ b/docs/3.1/group__lib8tion.html
@@ -0,0 +1,305 @@
+<!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.9.1"/>
+<title>FastLED: Fast math functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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><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><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> &#124;
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Fast math functions</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A variety of functions for working with numbers.
+<a href="#details">More...</a></p>
+<div class="dynheader">
+Collaboration diagram for Fast math functions:</div>
+<div class="dyncontent">
+<center><table><tr><td><img src="group__lib8tion.png" border="0" alt="" usemap="#group____lib8tion"/>
+<map name="group____lib8tion" id="group____lib8tion">
+<area shape="rect" id="node1" href="group___math.html" title="add one byte to another, saturating at 0xFF " alt="" coords="193,5,346,32"/><area shape="rect" id="node2" href="group___random.html" title="A 16&#45;bit PNRG good enough for LED animations. " alt="" coords="197,57,342,98"/><area shape="rect" id="node3" href="group___trig.html" title="Fast trig functions" alt="" coords="206,123,333,149"/><area shape="rect" id="node5" href="group___scaling.html" title="for scaling 8 and 16 bit values, as well as dimming and brightening them " alt="" coords="208,173,331,200"/></map>
+</td></tr></table></center>
+</div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group___math"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___math.html">Basic math operations</a></td></tr>
+<tr class="memdesc:group___math"><td class="mdescLeft">&#160;</td><td class="mdescRight">add one byte to another, saturating at 0xFF <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group___random"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___random.html">Fast random number generators</a></td></tr>
+<tr class="memdesc:group___random"><td class="mdescLeft">&#160;</td><td class="mdescRight">A 16-bit PNRG good enough for LED animations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group___trig"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___trig.html">Fast trig functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group___scaling"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___scaling.html">Scaling functions</a></td></tr>
+<tr class="memdesc:group___scaling"><td class="mdescLeft">&#160;</td><td class="mdescRight">for scaling 8 and 16 bit values, as well as dimming and brightening them <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt; timeType, timeGetter &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga5d6d013429a5b8a09d564d6137217644"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d6d013429a5b8a09d564d6137217644"></a>
+typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>fract8</b></td></tr>
+<tr class="separator:ga5d6d013429a5b8a09d564d6137217644"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7d6219a7247ab1923ed623e7ae0f34ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7d6219a7247ab1923ed623e7ae0f34ae"></a>
+typedef int8_t&#160;</td><td class="memItemRight" valign="bottom"><b>sfract7</b></td></tr>
+<tr class="separator:ga7d6219a7247ab1923ed623e7ae0f34ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaf46b9f719ef3bdb574f8e967af6dbb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaaf46b9f719ef3bdb574f8e967af6dbb5"></a>
+typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>fract16</b></td></tr>
+<tr class="separator:gaaf46b9f719ef3bdb574f8e967af6dbb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga00cb5dc9e5b477a58669a3e40bc473c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga00cb5dc9e5b477a58669a3e40bc473c2"></a>
+typedef int16_t&#160;</td><td class="memItemRight" valign="bottom"><b>sfract15</b></td></tr>
+<tr class="separator:ga00cb5dc9e5b477a58669a3e40bc473c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga397f872082dbd788e04e8c6e443e563a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga397f872082dbd788e04e8c6e443e563a"></a>
+typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>accum88</b></td></tr>
+<tr class="separator:ga397f872082dbd788e04e8c6e443e563a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9585be88f27cab4c367399d8e91c8467"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9585be88f27cab4c367399d8e91c8467"></a>
+typedef int16_t&#160;</td><td class="memItemRight" valign="bottom"><b>saccum78</b></td></tr>
+<tr class="separator:ga9585be88f27cab4c367399d8e91c8467"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae3ac7def25ef5ddea2da1a3bc0c00f44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae3ac7def25ef5ddea2da1a3bc0c00f44"></a>
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>accum1616</b></td></tr>
+<tr class="separator:gae3ac7def25ef5ddea2da1a3bc0c00f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad2dad84f67c8a4cc6d4c92e2c7d3e89f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad2dad84f67c8a4cc6d4c92e2c7d3e89f"></a>
+typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>saccum1516</b></td></tr>
+<tr class="separator:gad2dad84f67c8a4cc6d4c92e2c7d3e89f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bcc9ebf20b0dd74d9999d5a630d443f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7bcc9ebf20b0dd74d9999d5a630d443f"></a>
+typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>accum124</b></td></tr>
+<tr class="separator:ga7bcc9ebf20b0dd74d9999d5a630d443f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga95e7a40d98aa0371e9adce9220d3a67c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga95e7a40d98aa0371e9adce9220d3a67c"></a>
+typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>saccum114</b></td></tr>
+<tr class="separator:ga95e7a40d98aa0371e9adce9220d3a67c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga85082c3ed8843d32076222e82d72f80d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga85082c3ed8843d32076222e82d72f80d"></a>
+typedef <a class="el" href="classq.html">q</a>&lt; uint8_t, 4, 4 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>q44</b></td></tr>
+<tr class="separator:ga85082c3ed8843d32076222e82d72f80d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafea4166e233d92817eada7203021089a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafea4166e233d92817eada7203021089a"></a>
+typedef <a class="el" href="classq.html">q</a>&lt; uint8_t, 6, 2 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>q62</b></td></tr>
+<tr class="separator:gafea4166e233d92817eada7203021089a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad5dca0e1248b916799dde6dc44ef369b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad5dca0e1248b916799dde6dc44ef369b"></a>
+typedef <a class="el" href="classq.html">q</a>&lt; uint16_t, 8, 8 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>q88</b></td></tr>
+<tr class="separator:gad5dca0e1248b916799dde6dc44ef369b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0f02a1da674754f48c5f89c1610e118c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0f02a1da674754f48c5f89c1610e118c"></a>
+typedef <a class="el" href="classq.html">q</a>&lt; uint16_t, 12, 4 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>q124</b></td></tr>
+<tr class="separator:ga0f02a1da674754f48c5f89c1610e118c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac973ea2f1107aac96ccc69dc272fbeda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac973ea2f1107aac96ccc69dc272fbeda"></a>
+typedef <a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>&lt; uint16_t, seconds16 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CEveryNSeconds</b></td></tr>
+<tr class="separator:gac973ea2f1107aac96ccc69dc272fbeda"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37df965999177c3a84f50eb246dfec3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga37df965999177c3a84f50eb246dfec3f"></a>
+typedef <a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>&lt; uint16_t, bseconds16 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CEveryNBSeconds</b></td></tr>
+<tr class="separator:ga37df965999177c3a84f50eb246dfec3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac72a56ef110a9763dc3f971d7ba3a7e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac72a56ef110a9763dc3f971d7ba3a7e9"></a>
+typedef <a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>&lt; uint32_t, millis &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CEveryNMillis</b></td></tr>
+<tr class="separator:gac72a56ef110a9763dc3f971d7ba3a7e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga567d6f1ff78e14a266d5ec93fc53429e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga567d6f1ff78e14a266d5ec93fc53429e"></a>
+typedef <a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>&lt; uint16_t, minutes16 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CEveryNMinutes</b></td></tr>
+<tr class="separator:ga567d6f1ff78e14a266d5ec93fc53429e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga877ab0f5d7cbb2f18e85348adcf1eb52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga877ab0f5d7cbb2f18e85348adcf1eb52"></a>
+typedef <a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>&lt; uint8_t, hours8 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CEveryNHours</b></td></tr>
+<tr class="separator:ga877ab0f5d7cbb2f18e85348adcf1eb52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab947c1150e3b9056cb91685a14270173"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab947c1150e3b9056cb91685a14270173"></a>
+LIB8STATIC float&#160;</td><td class="memItemRight" valign="bottom"><b>sfract15ToFloat</b> (sfract15 y)</td></tr>
+<tr class="separator:gab947c1150e3b9056cb91685a14270173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa2facbc0ec935e34c629aef43d6262c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa2facbc0ec935e34c629aef43d6262c0"></a>
+LIB8STATIC sfract15&#160;</td><td class="memItemRight" valign="bottom"><b>floatToSfract15</b> (float f)</td></tr>
+<tr class="separator:gaa2facbc0ec935e34c629aef43d6262c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga061b2dedbda73b683f7d383543cb2603"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga061b2dedbda73b683f7d383543cb2603"></a>
+void *&#160;</td><td class="memItemRight" valign="bottom"><b>memmove8</b> (void *dst, const void *src, uint16_t num)</td></tr>
+<tr class="separator:ga061b2dedbda73b683f7d383543cb2603"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0a153077d54784357424c31478ed1561"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0a153077d54784357424c31478ed1561"></a>
+void *&#160;</td><td class="memItemRight" valign="bottom"><b>memcpy8</b> (void *dst, const void *src, uint16_t num) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((noinline))</td></tr>
+<tr class="separator:ga0a153077d54784357424c31478ed1561"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac6e333b45df07459ed5b17224d814926"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac6e333b45df07459ed5b17224d814926"></a>
+void *&#160;</td><td class="memItemRight" valign="bottom"><b>memset8</b> (void *ptr, uint8_t value, uint16_t num) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((noinline))</td></tr>
+<tr class="separator:gac6e333b45df07459ed5b17224d814926"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga62ed4425400bc4140902347dc54ffb72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga62ed4425400bc4140902347dc54ffb72"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>lerp8by8</b> (uint8_t a, uint8_t b, fract8 frac)</td></tr>
+<tr class="separator:ga62ed4425400bc4140902347dc54ffb72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7c02960d0f26e90054c7312e5f9a55b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7c02960d0f26e90054c7312e5f9a55b3"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>lerp16by16</b> (uint16_t a, uint16_t b, fract16 frac)</td></tr>
+<tr class="separator:ga7c02960d0f26e90054c7312e5f9a55b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c8f06da86c5d7cf13f55c3a5bfdf251"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8c8f06da86c5d7cf13f55c3a5bfdf251"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>lerp16by8</b> (uint16_t a, uint16_t b, fract8 frac)</td></tr>
+<tr class="separator:ga8c8f06da86c5d7cf13f55c3a5bfdf251"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaacea0eaea98a065dfa08bb1c147c52a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaacea0eaea98a065dfa08bb1c147c52a1"></a>
+LIB8STATIC int16_t&#160;</td><td class="memItemRight" valign="bottom"><b>lerp15by8</b> (int16_t a, int16_t b, fract8 frac)</td></tr>
+<tr class="separator:gaacea0eaea98a065dfa08bb1c147c52a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad4b09aba4e188e14d3e71d1c9f77f1a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad4b09aba4e188e14d3e71d1c9f77f1a5"></a>
+LIB8STATIC int16_t&#160;</td><td class="memItemRight" valign="bottom"><b>lerp15by16</b> (int16_t a, int16_t b, fract16 frac)</td></tr>
+<tr class="separator:gad4b09aba4e188e14d3e71d1c9f77f1a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf65357c7aeca9778e5a2f80a6bac2b5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf65357c7aeca9778e5a2f80a6bac2b5d"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>map8</b> (uint8_t in, uint8_t rangeStart, uint8_t rangeEnd)</td></tr>
+<tr class="separator:gaf65357c7aeca9778e5a2f80a6bac2b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga381449070b2d6bfba356f87881ab28c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga381449070b2d6bfba356f87881ab28c0"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>ease8InOutQuad</b> (uint8_t i)</td></tr>
+<tr class="separator:ga381449070b2d6bfba356f87881ab28c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fa6d71702477e71d7c0dd864eb1d568"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3fa6d71702477e71d7c0dd864eb1d568"></a>
+LIB8STATIC fract8&#160;</td><td class="memItemRight" valign="bottom"><b>ease8InOutCubic</b> (fract8 i)</td></tr>
+<tr class="separator:ga3fa6d71702477e71d7c0dd864eb1d568"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa041cdbb17f073dbd352fcae6962dc23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa041cdbb17f073dbd352fcae6962dc23"></a>
+LIB8STATIC fract8&#160;</td><td class="memItemRight" valign="bottom"><b>ease8InOutApprox</b> (fract8 i)</td></tr>
+<tr class="separator:gaa041cdbb17f073dbd352fcae6962dc23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae9e011ff745ade1164ae77b0ef62bfac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae9e011ff745ade1164ae77b0ef62bfac"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>triwave8</b> (uint8_t in)</td></tr>
+<tr class="separator:gae9e011ff745ade1164ae77b0ef62bfac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga209d6cbdb109cc3139e7bb1e46c6228f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga209d6cbdb109cc3139e7bb1e46c6228f"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>quadwave8</b> (uint8_t in)</td></tr>
+<tr class="separator:ga209d6cbdb109cc3139e7bb1e46c6228f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga06b04a0cf955ec107d49b76e0cb35225"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga06b04a0cf955ec107d49b76e0cb35225"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>cubicwave8</b> (uint8_t in)</td></tr>
+<tr class="separator:ga06b04a0cf955ec107d49b76e0cb35225"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga17ae8fcfd9c485bb1120d908f836637a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga17ae8fcfd9c485bb1120d908f836637a"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>squarewave8</b> (uint8_t in, uint8_t pulsewidth=128)</td></tr>
+<tr class="separator:ga17ae8fcfd9c485bb1120d908f836637a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadb94fbd930038e1510574dd4bcf07fe1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadb94fbd930038e1510574dd4bcf07fe1"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>millis</b> ()</td></tr>
+<tr class="separator:gadb94fbd930038e1510574dd4bcf07fe1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga10c1e6e66d1679c0b54ceca0906245f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga10c1e6e66d1679c0b54ceca0906245f1"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>get_millisecond_timer</b> ()</td></tr>
+<tr class="separator:ga10c1e6e66d1679c0b54ceca0906245f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b48fc520db5f40910caf79974992395"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1b48fc520db5f40910caf79974992395"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>beat88</b> (accum88 beats_per_minute_88, uint32_t timebase=0)</td></tr>
+<tr class="separator:ga1b48fc520db5f40910caf79974992395"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gade6acbf6fd3c9d346148bccfcafb2fe2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gade6acbf6fd3c9d346148bccfcafb2fe2"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>beat16</b> (accum88 beats_per_minute, uint32_t timebase=0)</td></tr>
+<tr class="separator:gade6acbf6fd3c9d346148bccfcafb2fe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga12014943214a72eec31433d9682d4ebe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga12014943214a72eec31433d9682d4ebe"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>beat8</b> (accum88 beats_per_minute, uint32_t timebase=0)</td></tr>
+<tr class="separator:ga12014943214a72eec31433d9682d4ebe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf917825ff26c8e1174c5b674a2f3c631"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf917825ff26c8e1174c5b674a2f3c631"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>beatsin88</b> (accum88 beats_per_minute_88, uint16_t lowest=0, uint16_t highest=65535, uint32_t timebase=0, uint16_t phase_offset=0)</td></tr>
+<tr class="separator:gaf917825ff26c8e1174c5b674a2f3c631"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa46e5de1c4c27833359e7a97a18c839b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa46e5de1c4c27833359e7a97a18c839b"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>beatsin16</b> (accum88 beats_per_minute, uint16_t lowest=0, uint16_t highest=65535, uint32_t timebase=0, uint16_t phase_offset=0)</td></tr>
+<tr class="separator:gaa46e5de1c4c27833359e7a97a18c839b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaecd7cbfc2640407cabf75afcc7d9ddf4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaecd7cbfc2640407cabf75afcc7d9ddf4"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>beatsin8</b> (accum88 beats_per_minute, uint8_t lowest=0, uint8_t highest=255, uint32_t timebase=0, uint8_t phase_offset=0)</td></tr>
+<tr class="separator:gaecd7cbfc2640407cabf75afcc7d9ddf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa2abcee2fe76fafd7f3a2aeab03e3b69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa2abcee2fe76fafd7f3a2aeab03e3b69"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>seconds16</b> ()</td></tr>
+<tr class="separator:gaa2abcee2fe76fafd7f3a2aeab03e3b69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga223820399921e32ddf018a90223ff336"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga223820399921e32ddf018a90223ff336"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>minutes16</b> ()</td></tr>
+<tr class="separator:ga223820399921e32ddf018a90223ff336"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga837f5a688998f3340994613944e47d41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga837f5a688998f3340994613944e47d41"></a>
+LIB8STATIC uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>hours8</b> ()</td></tr>
+<tr class="separator:ga837f5a688998f3340994613944e47d41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5f95d6e55b4986bd88f662528cef717e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5f95d6e55b4986bd88f662528cef717e"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>div1024_32_16</b> (uint32_t in32)</td></tr>
+<tr class="separator:ga5f95d6e55b4986bd88f662528cef717e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga52659d1994f2f21eb05080c97417e93b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52659d1994f2f21eb05080c97417e93b"></a>
+LIB8STATIC uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>bseconds16</b> ()</td></tr>
+<tr class="separator:ga52659d1994f2f21eb05080c97417e93b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga08fb09ca0c948f6eec6402f5ef724209"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga08fb09ca0c948f6eec6402f5ef724209"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>INSTANTIATE_EVERY_N_TIME_PERIODS</b> (<a class="el" href="class_c_every_n_time_periods.html">CEveryNMillis</a>, uint32_t, GET_MILLIS)</td></tr>
+<tr class="separator:ga08fb09ca0c948f6eec6402f5ef724209"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga701c373893bd35aedd1a01a2cccdd020"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga701c373893bd35aedd1a01a2cccdd020"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>INSTANTIATE_EVERY_N_TIME_PERIODS</b> (<a class="el" href="class_c_every_n_time_periods.html">CEveryNSeconds</a>, uint16_t, seconds16)</td></tr>
+<tr class="separator:ga701c373893bd35aedd1a01a2cccdd020"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad9813d2fd3ed9e61acacda3ccf2f6bd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad9813d2fd3ed9e61acacda3ccf2f6bd4"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>INSTANTIATE_EVERY_N_TIME_PERIODS</b> (<a class="el" href="class_c_every_n_time_periods.html">CEveryNBSeconds</a>, uint16_t, bseconds16)</td></tr>
+<tr class="separator:gad9813d2fd3ed9e61acacda3ccf2f6bd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga47af9443c72741ca5989c43ce0f6239c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga47af9443c72741ca5989c43ce0f6239c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>INSTANTIATE_EVERY_N_TIME_PERIODS</b> (<a class="el" href="class_c_every_n_time_periods.html">CEveryNMinutes</a>, uint16_t, minutes16)</td></tr>
+<tr class="separator:ga47af9443c72741ca5989c43ce0f6239c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4274871603c32ccf29a2e90ad48dba82"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4274871603c32ccf29a2e90ad48dba82"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>INSTANTIATE_EVERY_N_TIME_PERIODS</b> (<a class="el" href="class_c_every_n_time_periods.html">CEveryNHours</a>, uint8_t, hours8)</td></tr>
+<tr class="separator:ga4274871603c32ccf29a2e90ad48dba82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A variety of functions for working with numbers. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/group__lib8tion.map b/docs/3.1/group__lib8tion.map
new file mode 100644
index 00000000..bcd28bc4
--- /dev/null
+++ b/docs/3.1/group__lib8tion.map
@@ -0,0 +1,6 @@
+<map id="Fast math functions" name="Fast math functions">
+<area shape="rect" id="node1" href="$group___math.html" title="add one byte to another, saturating at 0xFF " alt="" coords="193,5,346,32"/>
+<area shape="rect" id="node2" href="$group___random.html" title="A 16&#45;bit PNRG good enough for LED animations. " alt="" coords="197,57,342,98"/>
+<area shape="rect" id="node3" href="$group___trig.html" title="Fast trig functions" alt="" coords="206,123,333,149"/>
+<area shape="rect" id="node5" href="$group___scaling.html" title="for scaling 8 and 16 bit values, as well as dimming and brightening them " alt="" coords="208,173,331,200"/>
+</map>
diff --git a/docs/3.1/group__lib8tion.md5 b/docs/3.1/group__lib8tion.md5
new file mode 100644
index 00000000..8b269a1b
--- /dev/null
+++ b/docs/3.1/group__lib8tion.md5
@@ -0,0 +1 @@
+a6ffa220cdf8f7b71121b5b40cda0ac4 \ No newline at end of file
diff --git a/docs/3.1/group__lib8tion.png b/docs/3.1/group__lib8tion.png
new file mode 100644
index 00000000..c1782aba
--- /dev/null
+++ b/docs/3.1/group__lib8tion.png
Binary files differ
diff --git a/docs/3.1/math8_8h_source.html b/docs/3.1/math8_8h_source.html
new file mode 100644
index 00000000..01f40bca
--- /dev/null
+++ b/docs/3.1/math8_8h_source.html
@@ -0,0 +1,413 @@
+<!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.9.1"/>
+<title>FastLED: lib8tion/math8.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#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)">
+</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_fbb9e787cf27434374136273d35a9c17.html">lib8tion</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">math8.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="preprocessor">#ifndef __INC_LIB8TION_MATH_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_LIB8TION_MATH_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;LIB8STATIC uint8_t qadd8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;{</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#if QADD8_C == 1</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t = i + j;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">if</span>( t &gt; 255) t = 255;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#elif QADD8_AVRASM == 1</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">/* First, add j to i, conditioning the C flag */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</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="comment">/* Now test the C flag.</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> If C is clear, we branch around a load of 0xFF into i.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> If C is set, we go ahead and load 0xFF into i.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="stringliteral">&quot;brcc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="stringliteral">&quot;ldi %0, 0xFF \n\t&quot;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#elif QADD8_ARM_DSP_ASM == 1</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>( <span class="stringliteral">&quot;uqadd8 %0, %0, %1&quot;</span> : <span class="stringliteral">&quot;+r&quot;</span> (i) : <span class="stringliteral">&quot;r&quot;</span> (j));</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#error &quot;No implementation for qadd8 available.&quot;</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#endif</span></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="l00045"></a><span class="lineno"><a class="line" href="group___math.html#gadf60ccff727f52078aecdd5873b6f0bc"> 45</a></span>&#160;LIB8STATIC int8_t <a class="code" href="group___math.html#gadf60ccff727f52078aecdd5873b6f0bc">qadd7</a>( int8_t i, int8_t j)</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">#if QADD7_C == 1</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; int16_t t = i + j;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span>( t &gt; 127) t = 127;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#elif QADD7_AVRASM == 1</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">/* First, add j to i, conditioning the V flag */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></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="comment">/* Now test the V flag.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"> If V is clear, we branch around a load of 0x7F into i.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> If V is set, we go ahead and load 0x7F into i.</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="stringliteral">&quot;brvc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="stringliteral">&quot;ldi %0, 0x7F \n\t&quot;</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</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="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#elif QADD7_ARM_DSP_ASM == 1</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>( <span class="stringliteral">&quot;qadd8 %0, %0, %1&quot;</span> : <span class="stringliteral">&quot;+r&quot;</span> (i) : <span class="stringliteral">&quot;r&quot;</span> (j));</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#error &quot;No implementation for qadd7 available.&quot;</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#endif</span></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"> 74</span>&#160;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="group___math.html#gaaaa16f47aca46653d51793b1af177587"> 77</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( uint8_t i, uint8_t j)</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="preprocessor">#if QSUB8_C == 1</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">int</span> t = i - j;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span>( t &lt; 0) t = 0;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#elif QSUB8_AVRASM == 1</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; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">/* First, subtract j from i, conditioning the C flag */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="stringliteral">&quot;sub %0, %1 \n\t&quot;</span></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">/* Now test the C flag.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> If C is clear, we branch around a load of 0x00 into i.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> If C is set, we go ahead and load 0x00 into i.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="stringliteral">&quot;brcc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="stringliteral">&quot;ldi %0, 0x00 \n\t&quot;</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</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">return</span> i;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#error &quot;No implementation for qsub8 available.&quot;</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor">#endif</span></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="l00106"></a><span class="lineno"><a class="line" href="group___math.html#ga9f1f93145ca1955562b7f50f5db96ac1"> 106</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga9f1f93145ca1955562b7f50f5db96ac1">add8</a>( uint8_t i, uint8_t j)</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="preprocessor">#if ADD8_C == 1</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">int</span> t = i + j;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#elif ADD8_AVRASM == 1</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Add j to i, period.</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>( <span class="stringliteral">&quot;add %0, %1&quot;</span> : <span class="stringliteral">&quot;+a&quot;</span> (i) : <span class="stringliteral">&quot;a&quot;</span> (j));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#error &quot;No implementation for add8 available.&quot;</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#endif</span></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"> 120</span>&#160;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="group___math.html#ga0c40c15ab5af36ddabded161941f2091"> 122</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga0c40c15ab5af36ddabded161941f2091">sub8</a>( uint8_t i, uint8_t j)</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="preprocessor">#if SUB8_C == 1</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">int</span> t = i - j;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="preprocessor">#elif SUB8_AVRASM == 1</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// Subtract j from i, period.</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>( <span class="stringliteral">&quot;sub %0, %1&quot;</span> : <span class="stringliteral">&quot;+a&quot;</span> (i) : <span class="stringliteral">&quot;a&quot;</span> (j));</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#error &quot;No implementation for sub8 available.&quot;</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="preprocessor">#endif</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="l00139"></a><span class="lineno"><a class="line" href="group___math.html#ga6bfedf0473d4c3705e8feeb6a25b9ea5"> 139</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga6bfedf0473d4c3705e8feeb6a25b9ea5">avg8</a>( uint8_t i, uint8_t j)</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="preprocessor">#if AVG8_C == 1</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> (i + j) &gt;&gt; 1;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="preprocessor">#elif AVG8_AVRASM == 1</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">/* First, add j to i, 9th bit overflows into C flag */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">/* Divide by two, moving C flag into high 8th bit */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="stringliteral">&quot;ror %0 \n\t&quot;</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="preprocessor">#error &quot;No implementation for avg8 available.&quot;</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor">#endif</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="l00162"></a><span class="lineno"><a class="line" href="group___math.html#ga30558a835c484b418165909118e702b1"> 162</a></span>&#160;LIB8STATIC int8_t <a class="code" href="group___math.html#ga30558a835c484b418165909118e702b1">avg7</a>( int8_t i, int8_t j)</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;<span class="preprocessor">#if AVG7_C == 1</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> ((i + j) &gt;&gt; 1) + (i &amp; 0x1);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor">#elif AVG7_AVRASM == 1</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="stringliteral">&quot;asr %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="stringliteral">&quot;asr %0 \n\t&quot;</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="stringliteral">&quot;adc %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="preprocessor">#error &quot;No implementation for avg7 available.&quot;</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="preprocessor">#endif</span></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="line" href="group___math.html#gaa5e80daec10cc13bf1eca8b125ee0e88"> 187</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#gaa5e80daec10cc13bf1eca8b125ee0e88">mod8</a>( uint8_t a, uint8_t m)</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="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="stringliteral">&quot;L_%=: sub %[a],%[m] \n\t&quot;</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="stringliteral">&quot; brcc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="stringliteral">&quot; add %[a],%[m] \n\t&quot;</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; : [a] <span class="stringliteral">&quot;+r&quot;</span> (a)</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; : [m] <span class="stringliteral">&quot;r&quot;</span> (m)</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;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">while</span>( a &gt;= m) a -= m;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> 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="l00214"></a><span class="lineno"><a class="line" href="group___math.html#ga2bcd51c47538dbc933999382e272a7a7"> 214</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga2bcd51c47538dbc933999382e272a7a7">addmod8</a>( uint8_t a, uint8_t b, uint8_t m)</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="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="stringliteral">&quot; add %[a],%[b] \n\t&quot;</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="stringliteral">&quot;L_%=: sub %[a],%[m] \n\t&quot;</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="stringliteral">&quot; brcc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="stringliteral">&quot; add %[a],%[m] \n\t&quot;</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; : [a] <span class="stringliteral">&quot;+r&quot;</span> (a)</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; : [b] <span class="stringliteral">&quot;r&quot;</span> (b), [m] <span class="stringliteral">&quot;r&quot;</span> (m)</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="preprocessor">#else</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; a += b;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">while</span>( a &gt;= m) a -= m;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> a;</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;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="group___math.html#ga10181a03cf8b8428fc524aa78e7fbf7f"> 233</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga10181a03cf8b8428fc524aa78e7fbf7f">mul8</a>( uint8_t i, uint8_t j)</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;<span class="preprocessor">#if MUL8_C == 1</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> ((<span class="keywordtype">int</span>)i * (<span class="keywordtype">int</span>)(j) ) &amp; 0xFF;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="preprocessor">#elif MUL8_AVRASM == 1</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit j, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">/* Extract the LOW 8-bits (r0) */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="stringliteral">&quot;mov %0, r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">/* Restore r1 to &quot;0&quot;; it&#39;s expected to always be that */</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</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">return</span> i;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#error &quot;No implementation for mul8 available.&quot;</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="preprocessor">#endif</span></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="l00255"></a><span class="lineno"> 255</span>&#160;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4"> 258</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( uint8_t i, uint8_t j)</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="preprocessor">#if QMUL8_C == 1</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordtype">int</span> p = ((int)i * (<span class="keywordtype">int</span>)(j) );</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span>( p &gt; 255) p = 255;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> p;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#elif QMUL8_AVRASM == 1</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit j, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="stringliteral">&quot; mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">/* If high byte of result is zero, all is well. */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="stringliteral">&quot; tst r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="stringliteral">&quot; breq Lnospill_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">/* If high byte of result &gt; 0, saturate low byte to 0xFF */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="stringliteral">&quot; ldi %0,0xFF \n\t&quot;</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="stringliteral">&quot; rjmp Ldone_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="stringliteral">&quot;Lnospill_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">/* Extract the LOW 8-bits (r0) */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="stringliteral">&quot; mov %0, r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="stringliteral">&quot;Ldone_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">/* Restore r1 to &quot;0&quot;; it&#39;s expected to always be that */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j)</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</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; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="preprocessor">#error &quot;No implementation for qmul8 available.&quot;</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="preprocessor">#endif</span></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;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="group___math.html#ga4bf8996c4a130e96521495d4a1395a01"> 292</a></span>&#160;LIB8STATIC int8_t <a class="code" href="group___math.html#ga4bf8996c4a130e96521495d4a1395a01">abs8</a>( int8_t i)</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;<span class="preprocessor">#if ABS8_C == 1</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span>( i &lt; 0) i = -i;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="preprocessor">#elif ABS8_AVRASM == 1</span></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;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">/* First, check the high bit, and prepare to skip if it&#39;s clear */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="stringliteral">&quot;sbrc %0, 7 \n&quot;</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">/* Negate the value */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="stringliteral">&quot;neg %0 \n&quot;</span></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; : <span class="stringliteral">&quot;+r&quot;</span> (i) : <span class="stringliteral">&quot;r&quot;</span> (i) );</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="preprocessor">#error &quot;No implementation for abs8 available.&quot;</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="preprocessor">#endif</span></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="l00317"></a><span class="lineno"><a class="line" href="group___math.html#ga66ecef97faa5f9b92c49766651c5afe9"> 317</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___math.html#ga66ecef97faa5f9b92c49766651c5afe9">sqrt16</a>(uint16_t x)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">if</span>( x &lt;= 1) {</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> x;</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;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; uint8_t low = 1; <span class="comment">// lower bound</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; uint8_t hi, mid;</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; <span class="keywordflow">if</span>( x &gt; 7904) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; hi = 255;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; hi = (x &gt;&gt; 5) + 8; <span class="comment">// initial estimate for upper bound</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; mid = (low + hi) &gt;&gt; 1;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> ((uint16_t)(mid * mid) &gt; x) {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; hi = mid - 1;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span>( mid == 255) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">return</span> 255;</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"> 340</span>&#160; low = mid + 1;</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">while</span> (hi &gt;= low);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> low - 1;</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="l00348"></a><span class="lineno"> 348</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___math_html_ga9d113e85065df7c9006704ea6b6dcda4"><div class="ttname"><a href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a></div><div class="ttdeci">LIB8STATIC uint8_t qmul8(uint8_t i, uint8_t j)</div><div class="ttdoc">saturating 8x8 bit multiplication, with 8 bit result </div><div class="ttdef"><b>Definition:</b> math8.h:258</div></div>
+<div class="ttc" id="group___math_html_ga4bf8996c4a130e96521495d4a1395a01"><div class="ttname"><a href="group___math.html#ga4bf8996c4a130e96521495d4a1395a01">abs8</a></div><div class="ttdeci">LIB8STATIC int8_t abs8(int8_t i)</div><div class="ttdoc">take abs() of a signed 8-bit uint8_t </div><div class="ttdef"><b>Definition:</b> math8.h:292</div></div>
+<div class="ttc" id="group___math_html_ga6bfedf0473d4c3705e8feeb6a25b9ea5"><div class="ttname"><a href="group___math.html#ga6bfedf0473d4c3705e8feeb6a25b9ea5">avg8</a></div><div class="ttdeci">LIB8STATIC uint8_t avg8(uint8_t i, uint8_t j)</div><div class="ttdoc">Calculate an integer average of two unsigned 8-bit integer values (uint8_t). </div><div class="ttdef"><b>Definition:</b> math8.h:139</div></div>
+<div class="ttc" id="group___math_html_gaaaa16f47aca46653d51793b1af177587"><div class="ttname"><a href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a></div><div class="ttdeci">LIB8STATIC uint8_t qsub8(uint8_t i, uint8_t j)</div><div class="ttdoc">subtract one byte from another, saturating at 0x00 </div><div class="ttdef"><b>Definition:</b> math8.h:77</div></div>
+<div class="ttc" id="group___math_html_ga2bcd51c47538dbc933999382e272a7a7"><div class="ttname"><a href="group___math.html#ga2bcd51c47538dbc933999382e272a7a7">addmod8</a></div><div class="ttdeci">LIB8STATIC uint8_t addmod8(uint8_t a, uint8_t b, uint8_t m)</div><div class="ttdoc">Add two numbers, and calculate the modulo of the sum and a third number, M. </div><div class="ttdef"><b>Definition:</b> math8.h:214</div></div>
+<div class="ttc" id="group___math_html_ga9f1f93145ca1955562b7f50f5db96ac1"><div class="ttname"><a href="group___math.html#ga9f1f93145ca1955562b7f50f5db96ac1">add8</a></div><div class="ttdeci">LIB8STATIC uint8_t add8(uint8_t i, uint8_t j)</div><div class="ttdoc">add one byte to another, with one byte result </div><div class="ttdef"><b>Definition:</b> math8.h:106</div></div>
+<div class="ttc" id="group___math_html_ga30558a835c484b418165909118e702b1"><div class="ttname"><a href="group___math.html#ga30558a835c484b418165909118e702b1">avg7</a></div><div class="ttdeci">LIB8STATIC int8_t avg7(int8_t i, int8_t j)</div><div class="ttdoc">Calculate an integer average of two signed 7-bit integers (int8_t) If the first argument is even...</div><div class="ttdef"><b>Definition:</b> math8.h:162</div></div>
+<div class="ttc" id="group___math_html_gaa5e80daec10cc13bf1eca8b125ee0e88"><div class="ttname"><a href="group___math.html#gaa5e80daec10cc13bf1eca8b125ee0e88">mod8</a></div><div class="ttdeci">LIB8STATIC uint8_t mod8(uint8_t a, uint8_t m)</div><div class="ttdoc">Calculate the remainder of one unsigned 8-bit value divided by anoter, aka A % M. ...</div><div class="ttdef"><b>Definition:</b> math8.h:187</div></div>
+<div class="ttc" id="group___math_html_ga0c40c15ab5af36ddabded161941f2091"><div class="ttname"><a href="group___math.html#ga0c40c15ab5af36ddabded161941f2091">sub8</a></div><div class="ttdeci">LIB8STATIC uint8_t sub8(uint8_t i, uint8_t j)</div><div class="ttdoc">subtract one byte from another, 8-bit result </div><div class="ttdef"><b>Definition:</b> math8.h:122</div></div>
+<div class="ttc" id="group___math_html_ga10181a03cf8b8428fc524aa78e7fbf7f"><div class="ttname"><a href="group___math.html#ga10181a03cf8b8428fc524aa78e7fbf7f">mul8</a></div><div class="ttdeci">LIB8STATIC uint8_t mul8(uint8_t i, uint8_t j)</div><div class="ttdoc">8x8 bit multiplication, with 8 bit result </div><div class="ttdef"><b>Definition:</b> math8.h:233</div></div>
+<div class="ttc" id="group___math_html_ga66ecef97faa5f9b92c49766651c5afe9"><div class="ttname"><a href="group___math.html#ga66ecef97faa5f9b92c49766651c5afe9">sqrt16</a></div><div class="ttdeci">LIB8STATIC uint8_t sqrt16(uint16_t x)</div><div class="ttdoc">square root for 16-bit integers About three times faster and five times smaller than Arduino&#39;s genera...</div><div class="ttdef"><b>Definition:</b> math8.h:317</div></div>
+<div class="ttc" id="group___math_html_gadf60ccff727f52078aecdd5873b6f0bc"><div class="ttname"><a href="group___math.html#gadf60ccff727f52078aecdd5873b6f0bc">qadd7</a></div><div class="ttdeci">LIB8STATIC int8_t qadd7(int8_t i, int8_t j)</div><div class="ttdoc">Add one byte to another, saturating at 0x7F. </div><div class="ttdef"><b>Definition:</b> math8.h:45</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/md__m0-clocklessnotes.html b/docs/3.1/md__m0-clocklessnotes.html
new file mode 100644
index 00000000..877cceea
--- /dev/null
+++ b/docs/3.1/md__m0-clocklessnotes.html
@@ -0,0 +1,94 @@
+<!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.9.1"/>
+<title>FastLED: M0-clocklessnotes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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 class="current"><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><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>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">M0-clocklessnotes </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>High level loop:</p>
+<p>```C++ if(b = leds[_0]) b = scale8(b+d[_0]),s[_0]); d[_0] = e[_0] - d[_0]; while(leds) { /while(8&ndash;) { hi(); delay1; if(b&lt;&lt;=1 &amp; CC) lo(); delay2; lo; delay3; b &lt;&lt;= 1; } </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/md__p_o_r_t_i_n_g.html b/docs/3.1/md__p_o_r_t_i_n_g.html
new file mode 100644
index 00000000..f3fdce8a
--- /dev/null
+++ b/docs/3.1/md__p_o_r_t_i_n_g.html
@@ -0,0 +1,117 @@
+<!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.9.1"/>
+<title>FastLED: PORTING</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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 class="current"><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><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>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">PORTING </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>=New platform porting guide=</p>
+<p>== Setting up the basic files/folders ==</p>
+<ul>
+<li>Create platform directory (e.g. platforms/arm/kl26)</li>
+<li>Create configuration header led_sysdefs_arm_kl26.h:<ul>
+<li>Define platform flags (like FASTLED_ARM/FASTLED_TEENSY)</li>
+<li>Define configuration parameters re: interrupts, or clock doubling</li>
+<li>Include extar system header files if needed</li>
+</ul>
+</li>
+<li>Create main platform include, fastled_arm_kl26.h<ul>
+<li>Include the various other header files as needed</li>
+</ul>
+</li>
+<li>Modify <a class="el" href="led__sysdefs_8h_source.html">led_sysdefs.h</a> to conditionally include platform sysdefs header file</li>
+<li>Modify <a class="el" href="platforms_8h_source.html">platforms.h</a> to conditionally include platform fastled header</li>
+</ul>
+<p>== Porting <a class="el" href="fastpin_8h_source.html">fastpin.h</a> ==</p>
+<p>The heart of the FastLED library is the fast pin accesss. This is a templated class that provides 1-2 cycle pin access, bypassing digital write and other such things. As such, this will usually be the first bit of the library that you will want to port when moving to a new platform. Once you have FastPIN up and running then you can do some basic work like testing toggles or running bit-bang'd SPI output.</p>
+<p>There's two low level <a class="el" href="class_fast_pin.html" title="The simplest level of Pin class. ">FastPin</a> classes. There's the base FastPIN template class, and then there is <a class="el" href="class_fast_pin_b_b.html">FastPinBB</a> which is for bit-banded access on those MCUs that support bitbanding. Note that the bitband class is optional and primarily useful in the implementation of other functionality internal to the platform. This file is also where you would do the pin to port/bit mapping defines.</p>
+<p>Explaining how the macros work and should be used is currently beyond the scope of this document.</p>
+<p>== Porting <a class="el" href="fastspi_8h_source.html">fastspi.h</a> ==</p>
+<p>This is where you define the low level interface to the hardware SPI system (including a writePixels method that does a bunch of housekeeping for writing led data). Use the <a class="el" href="fastspi__nop_8h_source.html">fastspi_nop.h</a> file as a reference for the methods that need to be implemented. There are ofteh other useful methods that can help with the internals of the SPI code, I recommend taking a look at how the various platforms implement their SPI classes.</p>
+<p>== Porting clockless.h ==</p>
+<p>This is where you define the code for the clockless controllers. Across ARM platforms this will usually be fairly similar - though different arm platforms will have different clock sources that you can/should use. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/random8_8h_source.html b/docs/3.1/random8_8h_source.html
new file mode 100644
index 00000000..422f6709
--- /dev/null
+++ b/docs/3.1/random8_8h_source.html
@@ -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.9.1"/>
+<title>FastLED: lib8tion/random8.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#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)">
+</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_fbb9e787cf27434374136273d35a9c17.html">lib8tion</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">random8.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="preprocessor">#ifndef __INC_LIB8TION_RANDOM_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_LIB8TION_RANDOM_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// X(n+1) = (2053 * X(n)) + 13849)</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FASTLED_RAND16_2053 ((uint16_t)(2053))</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define FASTLED_RAND16_13849 ((uint16_t)(13849))</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">extern</span> uint16_t <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a>;<span class="comment">// = RAND16_SEED;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe"> 17</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a>()</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> = (<a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> * FASTLED_RAND16_2053) + FASTLED_RAND16_13849;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// return the sum of the high and low bytes, for better</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="comment">// mixing and non-sequential correlation</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> (uint8_t)(((uint8_t)(<a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> &amp; 0xFF)) +</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; ((uint8_t)(<a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> &gt;&gt; 8)));</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="group___random.html#ga17034d936ef716efe820e11c1df043b0"> 27</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a>()</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; <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> = (<a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> * FASTLED_RAND16_2053) + FASTLED_RAND16_13849;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a>;</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;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="group___random.html#ga216b1cfe4f62f92f5493515c6b74220c"> 35</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a>(uint8_t lim)</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; uint8_t r = <a class="code" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a>();</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; r = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( r, lim);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> r;</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="l00045"></a><span class="lineno"><a class="line" href="group___random.html#ga2829e2c714f0a0f4617a65c4eddccec2"> 45</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a>(uint8_t min, uint8_t lim)</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; uint8_t delta = lim - min;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint8_t r = <a class="code" href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a>(delta) + min;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> r;</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="l00054"></a><span class="lineno"><a class="line" href="group___random.html#ga7236600fa1c01fc63665a9b8db508359"> 54</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a>( uint16_t lim)</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; uint16_t r = <a class="code" href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a>();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; uint32_t p = (uint32_t)lim * (uint32_t)r;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; r = p &gt;&gt; 16;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> r;</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="l00065"></a><span class="lineno"><a class="line" href="group___random.html#ga69d2cf7b8d730a0c36eec8711dbb134f"> 65</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a>( uint16_t min, uint16_t lim)</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; uint16_t delta = lim - min;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; uint16_t r = <a class="code" href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a>( delta) + min;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> r;</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="l00073"></a><span class="lineno"><a class="line" href="group___random.html#ga95e371c2438843e0ed1ed83412b28c99"> 73</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___random.html#ga95e371c2438843e0ed1ed83412b28c99">random16_set_seed</a>( uint16_t seed)</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; <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> = seed;</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"> 77</span>&#160;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="group___random.html#ga860bc64bfca4ada980e70cf1e03dedd8"> 79</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___random.html#ga860bc64bfca4ada980e70cf1e03dedd8">random16_get_seed</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">return</span> <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</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;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="group___random.html#ga1078b2029a50e86c93ccf4e3e1d85e7d"> 85</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___random.html#ga1078b2029a50e86c93ccf4e3e1d85e7d">random16_add_entropy</a>( uint16_t entropy)</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; <a class="code" href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a> += entropy;</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="l00091"></a><span class="lineno"> 91</span>&#160;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___random_html_ga6f2ab7e21aae59453832b2933632f016"><div class="ttname"><a href="group___random.html#ga6f2ab7e21aae59453832b2933632f016">rand16seed</a></div><div class="ttdeci">uint16_t rand16seed</div><div class="ttdoc">random number seed </div><div class="ttdef"><b>Definition:</b> lib8tion.cpp:8</div></div>
+<div class="ttc" id="group___random_html_ga95e371c2438843e0ed1ed83412b28c99"><div class="ttname"><a href="group___random.html#ga95e371c2438843e0ed1ed83412b28c99">random16_set_seed</a></div><div class="ttdeci">LIB8STATIC void random16_set_seed(uint16_t seed)</div><div class="ttdoc">Set the 16-bit seed used for the random number generator. </div><div class="ttdef"><b>Definition:</b> random8.h:73</div></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale8.h:14</div></div>
+<div class="ttc" id="group___random_html_ga4e63c74426f6516f28470dc1b814aefe"><div class="ttname"><a href="group___random.html#ga4e63c74426f6516f28470dc1b814aefe">random8</a></div><div class="ttdeci">LIB8STATIC uint8_t random8()</div><div class="ttdoc">Generate an 8-bit random number. </div><div class="ttdef"><b>Definition:</b> random8.h:17</div></div>
+<div class="ttc" id="group___random_html_ga1078b2029a50e86c93ccf4e3e1d85e7d"><div class="ttname"><a href="group___random.html#ga1078b2029a50e86c93ccf4e3e1d85e7d">random16_add_entropy</a></div><div class="ttdeci">LIB8STATIC void random16_add_entropy(uint16_t entropy)</div><div class="ttdoc">Add entropy into the random number generator. </div><div class="ttdef"><b>Definition:</b> random8.h:85</div></div>
+<div class="ttc" id="group___random_html_ga860bc64bfca4ada980e70cf1e03dedd8"><div class="ttname"><a href="group___random.html#ga860bc64bfca4ada980e70cf1e03dedd8">random16_get_seed</a></div><div class="ttdeci">LIB8STATIC uint16_t random16_get_seed()</div><div class="ttdoc">Get the current seed value for the random number generator. </div><div class="ttdef"><b>Definition:</b> random8.h:79</div></div>
+<div class="ttc" id="group___random_html_ga17034d936ef716efe820e11c1df043b0"><div class="ttname"><a href="group___random.html#ga17034d936ef716efe820e11c1df043b0">random16</a></div><div class="ttdeci">LIB8STATIC uint16_t random16()</div><div class="ttdoc">Generate a 16 bit random number. </div><div class="ttdef"><b>Definition:</b> random8.h:27</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/scale8_8h_source.html b/docs/3.1/scale8_8h_source.html
new file mode 100644
index 00000000..d6e7e1a5
--- /dev/null
+++ b/docs/3.1/scale8_8h_source.html
@@ -0,0 +1,548 @@
+<!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.9.1"/>
+<title>FastLED: lib8tion/scale8.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#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)">
+</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_fbb9e787cf27434374136273d35a9c17.html">lib8tion</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">scale8.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="preprocessor">#ifndef __INC_LIB8TION_SCALE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_LIB8TION_SCALE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af"> 14</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( uint8_t i, fract8 scale)</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> ((uint16_t)i * (uint16_t)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#if defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; uint8_t work=0;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; uint8_t cnt=0x80;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="stringliteral">&quot;LOOP_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">/*&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> &quot; add %[work], %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> &quot; ror %[work] \n\t&quot;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> &quot; lsr %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> &quot; clc \n\t&quot;*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="stringliteral">&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="stringliteral">&quot; add %[work], %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="stringliteral">&quot; ror %[work] \n\t&quot;</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="stringliteral">&quot; lsr %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="stringliteral">&quot; lsr %[cnt] \n\t&quot;</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="stringliteral">&quot;brcc LOOP_%=&quot;</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; : [work] <span class="stringliteral">&quot;+r&quot;</span> (work), [cnt] <span class="stringliteral">&quot;+r&quot;</span> (cnt)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; : [scale] <span class="stringliteral">&quot;r&quot;</span> (scale), [i] <span class="stringliteral">&quot;r&quot;</span> (i)</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; <span class="keywordflow">return</span> work;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">/* Restore r1 to &quot;0&quot;; it&#39;s expected to always be that */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></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="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span> <span class="comment">/* clobbers r0, r1 */</span> );</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="comment">/* Return the result */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8 available.&quot;</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#endif</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="l00061"></a><span class="lineno"> 61</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1"> 67</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a>( uint8_t i, fract8 scale)</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">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t j = (((int)i * (<span class="keywordtype">int</span>)scale) &gt;&gt; 8) + ((i&amp;&amp;scale)?1:0);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// uint8_t j = (i == 0) ? 0 : (((int)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; uint8_t j=0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__\n\t&quot;</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="stringliteral">&quot; cpse %[scale], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; : [i] <span class="stringliteral">&quot;a&quot;</span> (i), [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</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">return</span> j;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// asm volatile(</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</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">// : &quot;+a&quot; (i)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></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">// // Return the result</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// return i;</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video available.&quot;</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#endif</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"> 111</span>&#160;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c"> 115</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>( uint8_t i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> ((<span class="keywordtype">int</span>)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</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; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span> <span class="comment">/* clobbers r0, r1 */</span> );</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; <span class="comment">// Return the result</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="preprocessor">#endif</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="l00143"></a><span class="lineno"> 143</span>&#160;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80"> 144</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80">nscale8_LEAVING_R1_DIRTY</a>( uint8_t&amp; i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</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; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span> <span class="comment">/* clobbers r0, r1 */</span> );</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor">#endif</span></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"> 165</span>&#160;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75"> 169</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75">scale8_video_LEAVING_R1_DIRTY</a>( uint8_t i, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; uint8_t j = (((int)i * (<span class="keywordtype">int</span>)scale) &gt;&gt; 8) + ((i&amp;&amp;scale)?1:0);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// uint8_t j = (i == 0) ? 0 : (((int)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; uint8_t j=0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; : [i] <span class="stringliteral">&quot;a&quot;</span> (i), [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</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="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// asm volatile(</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></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; <span class="comment">// : &quot;+a&quot; (i)</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></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"> 205</span>&#160; <span class="comment">// // Return the result</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// return i;</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor">#endif</span></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="l00216"></a><span class="lineno"><a class="line" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635"> 216</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( uint8_t &amp; i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; i = (((int)i * (<span class="keywordtype">int</span>)scale) &gt;&gt; 8) + ((i&amp;&amp;scale)?1:0);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="stringliteral">&quot; mov %[i], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="stringliteral">&quot; subi %[i], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; : [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor">#endif</span></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="l00238"></a><span class="lineno"><a class="line" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9"> 238</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>()</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;<span class="preprocessor">#if CLEANUP_R1_AVRASM == 1</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Restore r1 to &quot;0&quot;; it&#39;s expected to always be that</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>( <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span> : : : <span class="stringliteral">&quot;r1&quot;</span> );</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#endif</span></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;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</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"><a class="line" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1"> 253</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a>( uint8_t&amp; r, uint8_t&amp; g, uint8_t&amp; b, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; r = ((int)r * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; g = ((int)g * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; b = ((int)b * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; r = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(r, scale);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; g = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(g, scale);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; b = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(b, scale);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#endif</span></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="l00276"></a><span class="lineno"><a class="line" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9"> 276</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a>( uint8_t&amp; r, uint8_t&amp; g, uint8_t&amp; b, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; r = (r == 0) ? 0 : (((<span class="keywordtype">int</span>)r * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; g = (g == 0) ? 0 : (((<span class="keywordtype">int</span>)g * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; b = (b == 0) ? 0 : (((<span class="keywordtype">int</span>)b * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( r, scale);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( g, scale);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( b, scale);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor">#endif</span></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="l00298"></a><span class="lineno"> 298</span>&#160;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="group___scaling.html#ga6f419761a744efed4bae8875ac07aef0"> 299</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga6f419761a744efed4bae8875ac07aef0">nscale8x2</a>( uint8_t&amp; i, uint8_t&amp; j, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; j = ((int)j * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; i = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(i, scale);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; j = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(j, scale);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="preprocessor">#endif</span></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="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"><a class="line" href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe"> 322</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe">nscale8x2_video</a>( uint8_t&amp; i, uint8_t&amp; j, fract8 scale)</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"> 324</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; i = (i == 0) ? 0 : (((<span class="keywordtype">int</span>)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; j = (j == 0) ? 0 : (((<span class="keywordtype">int</span>)j * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( i, scale);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( j, scale);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="preprocessor">#endif</span></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="l00341"></a><span class="lineno"> 341</span>&#160;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e"> 342</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a>( uint16_t i, fract8 scale )</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;{</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="preprocessor">#if SCALE16BY8_C == 1</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; result = (i * scale) / 256;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="preprocessor">#elif SCALE16BY8_AVRASM == 1</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; uint16_t result = 0;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="comment">// result.A = HighByte(i.A x j )</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="stringliteral">&quot; mul %A[i], %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="stringliteral">&quot; mov %A[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">//&quot; clr %B[result] \n\t&quot;</span></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"> 356</span>&#160; <span class="comment">// result.A-B += i.B x j</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="stringliteral">&quot; mul %B[i], %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="stringliteral">&quot; add %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="stringliteral">&quot; adc %B[result], r1 \n\t&quot;</span></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; <span class="comment">// cleanup r1</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></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; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; : [i] <span class="stringliteral">&quot;r&quot;</span> (i), [scale] <span class="stringliteral">&quot;r&quot;</span> (scale)</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; );</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="preprocessor"> #error &quot;No implementation for scale16by8 available.&quot;</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor">#endif</span></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="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145"> 378</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( uint16_t i, fract16 scale )</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;{</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="preprocessor"> #if SCALE16_C == 1</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; result = ((uint32_t)(i) * (uint32_t)(scale)) / 65536;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="preprocessor">#elif SCALE16_AVRASM == 1</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; uint32_t result = 0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> uint8_t zero = 0;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// result.A-B = i.A x scale.A</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="stringliteral">&quot; mul %A[i], %A[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// save results...</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// basic idea:</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">//&quot; mov %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">//&quot; mov %B[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// which can be written as...</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="stringliteral">&quot; movw %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// We actually need to do anything with r0,</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// as result.A is never used again here, so we</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// could just move the high byte, but movw is</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// one clock cycle, just like mov, so might as</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// well, in case we want to use this code for</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// a generic 16x16 multiply somewhere.</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// result.C-D = i.B x scale.B</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="stringliteral">&quot; mul %B[i], %B[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">//&quot; mov %C[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">//&quot; mov %D[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="stringliteral">&quot; movw %C[result], r0 \n\t&quot;</span></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="comment">// result.B-D += i.B x scale.A</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="stringliteral">&quot; mul %B[i], %A[scale] \n\t&quot;</span></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; <span class="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// result.B-D += i.A x scale.B</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="stringliteral">&quot; mul %A[i], %B[scale] \n\t&quot;</span></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="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// cleanup r1</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="stringliteral">&quot; clr r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; : [i] <span class="stringliteral">&quot;r&quot;</span> (i),</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; [scale] <span class="stringliteral">&quot;r&quot;</span> (scale),</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; [zero] <span class="stringliteral">&quot;r&quot;</span> (zero)</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></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; result = result &gt;&gt; 16;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor"> #error &quot;No implementation for scale16 available.&quot;</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;}</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="group___dimming.html#gae51352a3522bb8eae5e17dbee97aa1aa"> 454</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___dimming.html#gae51352a3522bb8eae5e17dbee97aa1aa">dim8_raw</a>( uint8_t x)</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; <span class="keywordflow">return</span> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( x, x);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;}</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="group___dimming.html#ga40a13446a2022dc489be8b2a8f2fa494"> 460</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___dimming.html#ga40a13446a2022dc489be8b2a8f2fa494">dim8_video</a>( uint8_t x)</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; <span class="keywordflow">return</span> <a class="code" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a>( x, x);</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;}</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="group___dimming.html#ga3f94d2455e0aa92133f77af8747b5914"> 466</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___dimming.html#ga3f94d2455e0aa92133f77af8747b5914">dim8_lin</a>( uint8_t x )</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;{</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">if</span>( x &amp; 0x80 ) {</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; x = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( x, x);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; x += 1;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; x /= 2;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;}</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="group___dimming.html#gae8e36472a70f3016595048532d6c3a2d"> 478</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___dimming.html#gae8e36472a70f3016595048532d6c3a2d">brighten8_raw</a>( uint8_t x)</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; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">return</span> 255 - <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( ix, ix);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;}</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"><a class="line" href="group___dimming.html#gad21876a676bcf26c47f957faed23f9bb"> 485</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___dimming.html#gad21876a676bcf26c47f957faed23f9bb">brighten8_video</a>( uint8_t x)</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; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">return</span> 255 - <a class="code" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a>( ix, ix);</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="l00492"></a><span class="lineno"><a class="line" href="group___dimming.html#ga094bda002b416c66e57521fc93878830"> 492</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___dimming.html#ga094bda002b416c66e57521fc93878830">brighten8_lin</a>( uint8_t x )</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;{</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span>( ix &amp; 0x80 ) {</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; ix = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( ix, ix);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; ix += 1;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; ix /= 2;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; }</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span> 255 - ix;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;}</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___dimming_html_gae51352a3522bb8eae5e17dbee97aa1aa"><div class="ttname"><a href="group___dimming.html#gae51352a3522bb8eae5e17dbee97aa1aa">dim8_raw</a></div><div class="ttdeci">LIB8STATIC uint8_t dim8_raw(uint8_t x)</div><div class="ttdoc">Adjust a scaling value for dimming. </div><div class="ttdef"><b>Definition:</b> scale8.h:454</div></div>
+<div class="ttc" id="group___dimming_html_ga094bda002b416c66e57521fc93878830"><div class="ttname"><a href="group___dimming.html#ga094bda002b416c66e57521fc93878830">brighten8_lin</a></div><div class="ttdeci">LIB8STATIC uint8_t brighten8_lin(uint8_t x)</div><div class="ttdoc">inverse of the dimming function, brighten a value </div><div class="ttdef"><b>Definition:</b> scale8.h:492</div></div>
+<div class="ttc" id="group___scaling_html_gab341cef8d46232269bb70092fed9eb75"><div class="ttname"><a href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75">scale8_video_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_video_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)</div><div class="ttdoc">This version of scale8_video does not clean up the R1 register on AVR If you are doing several &#39;scale...</div><div class="ttdef"><b>Definition:</b> scale8.h:169</div></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale8.h:14</div></div>
+<div class="ttc" id="group___dimming_html_ga3f94d2455e0aa92133f77af8747b5914"><div class="ttname"><a href="group___dimming.html#ga3f94d2455e0aa92133f77af8747b5914">dim8_lin</a></div><div class="ttdeci">LIB8STATIC uint8_t dim8_lin(uint8_t x)</div><div class="ttdoc">Linear version of the dimming function that halves for values < 128. </div><div class="ttdef"><b>Definition:</b> scale8.h:466</div></div>
+<div class="ttc" id="group___scaling_html_ga4204edd4a3f8aac7124a10f1f5cfccfe"><div class="ttname"><a href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe">nscale8x2_video</a></div><div class="ttdeci">LIB8STATIC void nscale8x2_video(uint8_t &amp;i, uint8_t &amp;j, fract8 scale)</div><div class="ttdoc">scale two one byte values by a third one, which is treated as the numerator of a fraction whose demom...</div><div class="ttdef"><b>Definition:</b> scale8.h:322</div></div>
+<div class="ttc" id="group___scaling_html_ga333095ffa436c94d3e77ee9dc39da1c1"><div class="ttname"><a href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_video(uint8_t i, fract8 scale)</div><div class="ttdoc">The "video" version of scale8 guarantees that the output will be only be zero if one or both of the i...</div><div class="ttdef"><b>Definition:</b> scale8.h:67</div></div>
+<div class="ttc" id="group___scaling_html_gaf34fde0746c9c2e5ed44f9c437a2267e"><div class="ttname"><a href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a></div><div class="ttdeci">LIB8STATIC uint16_t scale16by8(uint16_t i, fract8 scale)</div><div class="ttdoc">scale a 16-bit unsigned value by an 8-bit value, considered as numerator of a fraction whose denomina...</div><div class="ttdef"><b>Definition:</b> scale8.h:342</div></div>
+<div class="ttc" id="group___scaling_html_ga5f6dde3d9398f4b389c96e759a3f7b80"><div class="ttname"><a href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80">nscale8_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC void nscale8_LEAVING_R1_DIRTY(uint8_t &amp;i, fract8 scale)</div><div class="ttdoc">In place modifying version of scale8, also this version of nscale8 does not clean up the R1 register ...</div><div class="ttdef"><b>Definition:</b> scale8.h:144</div></div>
+<div class="ttc" id="group___scaling_html_ga1ff8ac00ad78e22acc7bb7445bfdb145"><div class="ttname"><a href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a></div><div class="ttdeci">LIB8STATIC uint16_t scale16(uint16_t i, fract16 scale)</div><div class="ttdoc">scale a 16-bit unsigned value by a 16-bit value, considered as numerator of a fraction whose denomina...</div><div class="ttdef"><b>Definition:</b> scale8.h:378</div></div>
+<div class="ttc" id="group___dimming_html_gae8e36472a70f3016595048532d6c3a2d"><div class="ttname"><a href="group___dimming.html#gae8e36472a70f3016595048532d6c3a2d">brighten8_raw</a></div><div class="ttdeci">LIB8STATIC uint8_t brighten8_raw(uint8_t x)</div><div class="ttdoc">inverse of the dimming function, brighten a value </div><div class="ttdef"><b>Definition:</b> scale8.h:478</div></div>
+<div class="ttc" id="group___scaling_html_ga700b7f510f32e8c91385093c436c27d9"><div class="ttname"><a href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a></div><div class="ttdeci">LIB8STATIC void nscale8x3_video(uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</div><div class="ttdoc">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose de...</div><div class="ttdef"><b>Definition:</b> scale8.h:276</div></div>
+<div class="ttc" id="group___dimming_html_gad21876a676bcf26c47f957faed23f9bb"><div class="ttname"><a href="group___dimming.html#gad21876a676bcf26c47f957faed23f9bb">brighten8_video</a></div><div class="ttdeci">LIB8STATIC uint8_t brighten8_video(uint8_t x)</div><div class="ttdoc">inverse of the dimming function, brighten a value </div><div class="ttdef"><b>Definition:</b> scale8.h:485</div></div>
+<div class="ttc" id="group___scaling_html_ga39579fcf09743f15545fe0b831ca313c"><div class="ttname"><a href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)</div><div class="ttdoc">This version of scale8 does not clean up the R1 register on AVR If you are doing several &#39;scale8&#39;s in...</div><div class="ttdef"><b>Definition:</b> scale8.h:115</div></div>
+<div class="ttc" id="group___scaling_html_ga572d0b441676c9d8ceb071fe8284b7e9"><div class="ttname"><a href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a></div><div class="ttdeci">LIB8STATIC void cleanup_R1()</div><div class="ttdoc">Clean up the r1 register after a series of *LEAVING_R1_DIRTY calls. </div><div class="ttdef"><b>Definition:</b> scale8.h:238</div></div>
+<div class="ttc" id="group___scaling_html_ga6f419761a744efed4bae8875ac07aef0"><div class="ttname"><a href="group___scaling.html#ga6f419761a744efed4bae8875ac07aef0">nscale8x2</a></div><div class="ttdeci">LIB8STATIC void nscale8x2(uint8_t &amp;i, uint8_t &amp;j, fract8 scale)</div><div class="ttdoc">scale two one byte values by a third one, which is treated as the numerator of a fraction whose demom...</div><div class="ttdef"><b>Definition:</b> scale8.h:299</div></div>
+<div class="ttc" id="group___scaling_html_ga2a580fcaa010558218faae95d1936635"><div class="ttname"><a href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC void nscale8_video_LEAVING_R1_DIRTY(uint8_t &amp;i, fract8 scale)</div><div class="ttdoc">In place modifying version of scale8_video, also this version of nscale8_video does not clean up the ...</div><div class="ttdef"><b>Definition:</b> scale8.h:216</div></div>
+<div class="ttc" id="group___scaling_html_ga39bf87e5526120889086cab19ac749b1"><div class="ttname"><a href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a></div><div class="ttdeci">LIB8STATIC void nscale8x3(uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</div><div class="ttdoc">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose de...</div><div class="ttdef"><b>Definition:</b> scale8.h:253</div></div>
+<div class="ttc" id="group___dimming_html_ga40a13446a2022dc489be8b2a8f2fa494"><div class="ttname"><a href="group___dimming.html#ga40a13446a2022dc489be8b2a8f2fa494">dim8_video</a></div><div class="ttdeci">LIB8STATIC uint8_t dim8_video(uint8_t x)</div><div class="ttdoc">Adjust a scaling value for dimming for video (value will never go below 1) </div><div class="ttdef"><b>Definition:</b> scale8.h:460</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/scale_8h_source.html b/docs/3.1/scale_8h_source.html
new file mode 100644
index 00000000..89e10e1c
--- /dev/null
+++ b/docs/3.1/scale_8h_source.html
@@ -0,0 +1,552 @@
+<!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.9.1"/>
+<title>FastLED: lib8tion/scale.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#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)">
+</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_fbb9e787cf27434374136273d35a9c17.html">lib8tion</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">scale.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="preprocessor">#ifndef __INC_LIB8TION_SCALE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_LIB8TION_SCALE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af"> 13</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( uint8_t i, fract8 scale)</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> ((uint16_t)i * (uint16_t)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#if defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; uint8_t work=0;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; uint8_t cnt=0x80;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="stringliteral">&quot;LOOP_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">/*&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> &quot; add %[work], %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> &quot; ror %[work] \n\t&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> &quot; lsr %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> &quot; clc \n\t&quot;*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="stringliteral">&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="stringliteral">&quot; add %[work], %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="stringliteral">&quot; ror %[work] \n\t&quot;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="stringliteral">&quot; lsr %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="stringliteral">&quot; lsr %[cnt] \n\t&quot;</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="stringliteral">&quot;brcc LOOP_%=&quot;</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; : [work] <span class="stringliteral">&quot;+r&quot;</span> (work), [cnt] <span class="stringliteral">&quot;+r&quot;</span> (cnt)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; : [scale] <span class="stringliteral">&quot;r&quot;</span> (scale), [i] <span class="stringliteral">&quot;r&quot;</span> (i)</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; <span class="keywordflow">return</span> work;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">/* Restore r1 to &quot;0&quot;; it&#39;s expected to always be that */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></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="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span> <span class="comment">/* clobbers r0, r1 */</span> );</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="comment">/* Return the result */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8 available.&quot;</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#endif</span></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;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1"> 66</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a>( uint8_t i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; uint8_t j = (((int)i * (<span class="keywordtype">int</span>)scale) &gt;&gt; 8) + ((i&amp;&amp;scale)?1:0);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// uint8_t j = (i == 0) ? 0 : (((int)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; uint8_t j=0;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__\n\t&quot;</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="stringliteral">&quot; cpse %[scale], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; : [i] <span class="stringliteral">&quot;a&quot;</span> (i), [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</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="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// asm volatile(</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></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">// : &quot;+a&quot; (i)</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></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; <span class="comment">// // Return the result</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// return i;</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video available.&quot;</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#endif</span></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="l00114"></a><span class="lineno"><a class="line" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c"> 114</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>( uint8_t i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> ((<span class="keywordtype">int</span>)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</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; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span> <span class="comment">/* clobbers r0, r1 */</span> );</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">// Return the result</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif</span></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="l00142"></a><span class="lineno"> 142</span>&#160;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80"> 143</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80">nscale8_LEAVING_R1_DIRTY</a>( uint8_t&amp; i, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</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; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span> <span class="comment">/* clobbers r0, r1 */</span> );</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor">#endif</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;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75"> 168</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75">scale8_video_LEAVING_R1_DIRTY</a>( uint8_t i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; uint8_t j = (((int)i * (<span class="keywordtype">int</span>)scale) &gt;&gt; 8) + ((i&amp;&amp;scale)?1:0);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// uint8_t j = (i == 0) ? 0 : (((int)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; uint8_t j=0;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; : [i] <span class="stringliteral">&quot;a&quot;</span> (i), [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</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">return</span> j;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// asm volatile(</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></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="comment">// : &quot;+a&quot; (i)</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></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">// // Return the result</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// return i;</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></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;}</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635"> 215</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( uint8_t &amp; i, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; i = (((int)i * (<span class="keywordtype">int</span>)scale) &gt;&gt; 8) + ((i&amp;&amp;scale)?1:0);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="stringliteral">&quot; mov %[i], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="stringliteral">&quot; subi %[i], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; : [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#endif</span></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="l00237"></a><span class="lineno"><a class="line" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9"> 237</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>()</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="preprocessor">#if CLEANUP_R1_AVRASM == 1</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// Restore r1 to &quot;0&quot;; it&#39;s expected to always be that</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>( <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span> : : : <span class="stringliteral">&quot;r1&quot;</span> );</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor">#endif</span></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="l00245"></a><span class="lineno"> 245</span>&#160;</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"><a class="line" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1"> 252</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a>( uint8_t&amp; r, uint8_t&amp; g, uint8_t&amp; b, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; r = ((int)r * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; g = ((int)g * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; b = ((int)b * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; r = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(r, scale);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; g = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(g, scale);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; b = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(b, scale);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9"> 275</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a>( uint8_t&amp; r, uint8_t&amp; g, uint8_t&amp; b, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; r = (r == 0) ? 0 : (((<span class="keywordtype">int</span>)r * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; g = (g == 0) ? 0 : (((<span class="keywordtype">int</span>)g * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; b = (b == 0) ? 0 : (((<span class="keywordtype">int</span>)b * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( r, scale);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( g, scale);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( b, scale);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;}</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;<span class="comment">// scale two one byte values by a third one, which is treated as</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment">// the numerator of a fraction whose demominator is 256</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">// In other words, it computes i,j * (scale / 256)</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE</span></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;LIB8STATIC <span class="keywordtype">void</span> nscale8x2( uint8_t&amp; i, uint8_t&amp; j, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; j = ((int)j * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; i = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(i, scale);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; j = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>(j, scale);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="preprocessor">#endif</span></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;<span class="comment">// scale two one byte values by a third one, which is treated as</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// the numerator of a fraction whose demominator is 256</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment">// In other words, it computes i,j * (scale / 256), ensuring</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment"></span><span class="comment">//</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE</span></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;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe"> 321</a></span>&#160;LIB8STATIC <span class="keywordtype">void</span> <a class="code" href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe">nscale8x2_video</a>( uint8_t&amp; i, uint8_t&amp; j, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; i = (i == 0) ? 0 : (((<span class="keywordtype">int</span>)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; j = (j == 0) ? 0 : (((<span class="keywordtype">int</span>)j * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( i, scale);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a>( j, scale);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="preprocessor">#endif</span></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="l00340"></a><span class="lineno"> 340</span>&#160;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e"> 341</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a>( uint16_t i, fract8 scale )</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;{</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="preprocessor">#if SCALE16BY8_C == 1</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; result = (i * scale) / 256;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="preprocessor">#elif SCALE16BY8_AVRASM == 1</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; uint16_t result = 0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// result.A = HighByte(i.A x j )</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="stringliteral">&quot; mul %A[i], %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="stringliteral">&quot; mov %A[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">//&quot; clr %B[result] \n\t&quot;</span></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">// result.A-B += i.B x j</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="stringliteral">&quot; mul %B[i], %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="stringliteral">&quot; add %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="stringliteral">&quot; adc %B[result], r1 \n\t&quot;</span></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; <span class="comment">// cleanup r1</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; : [i] <span class="stringliteral">&quot;r&quot;</span> (i), [scale] <span class="stringliteral">&quot;r&quot;</span> (scale)</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; );</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="preprocessor"> #error &quot;No implementation for scale16by8 available.&quot;</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="preprocessor">#endif</span></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;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145"> 377</a></span>&#160;LIB8STATIC uint16_t <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( uint16_t i, fract16 scale )</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;<span class="preprocessor"> #if SCALE16_C == 1</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; result = ((uint32_t)(i) * (uint32_t)(scale)) / 65536;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="preprocessor">#elif SCALE16_AVRASM == 1</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; uint32_t result = 0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> uint8_t zero = 0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// result.A-B = i.A x scale.A</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="stringliteral">&quot; mul %A[i], %A[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// save results...</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// basic idea:</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">//&quot; mov %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">//&quot; mov %B[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// which can be written as...</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="stringliteral">&quot; movw %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// We actually need to do anything with r0,</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// as result.A is never used again here, so we</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// could just move the high byte, but movw is</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// one clock cycle, just like mov, so might as</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// well, in case we want to use this code for</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// a generic 16x16 multiply somewhere.</span></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; <span class="comment">// result.C-D = i.B x scale.B</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="stringliteral">&quot; mul %B[i], %B[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">//&quot; mov %C[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">//&quot; mov %D[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="stringliteral">&quot; movw %C[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// result.B-D += i.B x scale.A</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="stringliteral">&quot; mul %B[i], %A[scale] \n\t&quot;</span></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; <span class="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></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="comment">// result.B-D += i.A x scale.B</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="stringliteral">&quot; mul %A[i], %B[scale] \n\t&quot;</span></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="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></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="comment">// cleanup r1</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="stringliteral">&quot; clr r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; : [i] <span class="stringliteral">&quot;r&quot;</span> (i),</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; [scale] <span class="stringliteral">&quot;r&quot;</span> (scale),</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; [zero] <span class="stringliteral">&quot;r&quot;</span> (zero)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></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; result = result &gt;&gt; 16;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor"> #error &quot;No implementation for scale16 available.&quot;</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;}</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</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="l00453"></a><span class="lineno"> 453</span>&#160;LIB8STATIC uint8_t dim8_raw( uint8_t x)</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( x, x);</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="l00458"></a><span class="lineno"> 458</span>&#160;LIB8STATIC uint8_t dim8_video( uint8_t x)</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">return</span> <a class="code" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a>( x, x);</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="l00463"></a><span class="lineno"> 463</span>&#160;LIB8STATIC uint8_t dim8_lin( uint8_t x )</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;{</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span>( x &amp; 0x80 ) {</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; x = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( x, x);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; x += 1;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; x /= 2;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> 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;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;LIB8STATIC uint8_t brighten8_raw( uint8_t x)</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;{</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> 255 - <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( ix, ix);</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="l00480"></a><span class="lineno"> 480</span>&#160;LIB8STATIC uint8_t brighten8_video( uint8_t x)</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> 255 - <a class="code" href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a>( ix, ix);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;}</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;LIB8STATIC uint8_t brighten8_lin( uint8_t x )</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; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span>( ix &amp; 0x80 ) {</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; ix = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( ix, ix);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; ix += 1;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; ix /= 2;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">return</span> 255 - ix;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;}</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___scaling_html_gab341cef8d46232269bb70092fed9eb75"><div class="ttname"><a href="group___scaling.html#gab341cef8d46232269bb70092fed9eb75">scale8_video_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_video_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)</div><div class="ttdoc">This version of scale8_video does not clean up the R1 register on AVR If you are doing several &#39;scale...</div><div class="ttdef"><b>Definition:</b> scale.h:168</div></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale.h:13</div></div>
+<div class="ttc" id="group___scaling_html_ga4204edd4a3f8aac7124a10f1f5cfccfe"><div class="ttname"><a href="group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe">nscale8x2_video</a></div><div class="ttdeci">LIB8STATIC void nscale8x2_video(uint8_t &amp;i, uint8_t &amp;j, fract8 scale)</div><div class="ttdoc">that non-zero values passed in remain non zero, no matter how low the scale argument. </div><div class="ttdef"><b>Definition:</b> scale.h:321</div></div>
+<div class="ttc" id="group___scaling_html_ga333095ffa436c94d3e77ee9dc39da1c1"><div class="ttname"><a href="group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1">scale8_video</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_video(uint8_t i, fract8 scale)</div><div class="ttdoc">The "video" version of scale8 guarantees that the output will be only be zero if one or both of the i...</div><div class="ttdef"><b>Definition:</b> scale.h:66</div></div>
+<div class="ttc" id="group___scaling_html_gaf34fde0746c9c2e5ed44f9c437a2267e"><div class="ttname"><a href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a></div><div class="ttdeci">LIB8STATIC uint16_t scale16by8(uint16_t i, fract8 scale)</div><div class="ttdoc">scale a 16-bit unsigned value by an 8-bit value, considered as numerator of a fraction whose denomina...</div><div class="ttdef"><b>Definition:</b> scale.h:341</div></div>
+<div class="ttc" id="group___scaling_html_ga5f6dde3d9398f4b389c96e759a3f7b80"><div class="ttname"><a href="group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80">nscale8_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC void nscale8_LEAVING_R1_DIRTY(uint8_t &amp;i, fract8 scale)</div><div class="ttdoc">In place modifying version of scale8, also this version of nscale8 does not clean up the R1 register ...</div><div class="ttdef"><b>Definition:</b> scale.h:143</div></div>
+<div class="ttc" id="group___scaling_html_ga1ff8ac00ad78e22acc7bb7445bfdb145"><div class="ttname"><a href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a></div><div class="ttdeci">LIB8STATIC uint16_t scale16(uint16_t i, fract16 scale)</div><div class="ttdoc">scale a 16-bit unsigned value by a 16-bit value, considered as numerator of a fraction whose denomina...</div><div class="ttdef"><b>Definition:</b> scale.h:377</div></div>
+<div class="ttc" id="group___scaling_html_ga700b7f510f32e8c91385093c436c27d9"><div class="ttname"><a href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a></div><div class="ttdeci">LIB8STATIC void nscale8x3_video(uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</div><div class="ttdoc">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose de...</div><div class="ttdef"><b>Definition:</b> scale.h:275</div></div>
+<div class="ttc" id="group___scaling_html_ga39579fcf09743f15545fe0b831ca313c"><div class="ttname"><a href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)</div><div class="ttdoc">This version of scale8 does not clean up the R1 register on AVR If you are doing several &#39;scale8&#39;s in...</div><div class="ttdef"><b>Definition:</b> scale.h:114</div></div>
+<div class="ttc" id="group___scaling_html_ga572d0b441676c9d8ceb071fe8284b7e9"><div class="ttname"><a href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a></div><div class="ttdeci">LIB8STATIC void cleanup_R1()</div><div class="ttdoc">Clean up the r1 register after a series of *LEAVING_R1_DIRTY calls. </div><div class="ttdef"><b>Definition:</b> scale.h:237</div></div>
+<div class="ttc" id="group___scaling_html_ga2a580fcaa010558218faae95d1936635"><div class="ttname"><a href="group___scaling.html#ga2a580fcaa010558218faae95d1936635">nscale8_video_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC void nscale8_video_LEAVING_R1_DIRTY(uint8_t &amp;i, fract8 scale)</div><div class="ttdoc">In place modifying version of scale8_video, also this version of nscale8_video does not clean up the ...</div><div class="ttdef"><b>Definition:</b> scale.h:215</div></div>
+<div class="ttc" id="group___scaling_html_ga39bf87e5526120889086cab19ac749b1"><div class="ttname"><a href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a></div><div class="ttdeci">LIB8STATIC void nscale8x3(uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</div><div class="ttdoc">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose de...</div><div class="ttdef"><b>Definition:</b> scale.h:252</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:33:32 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/search/functions_10.html b/docs/3.1/search/functions_10.html
new file mode 100644
index 00000000..504411db
--- /dev/null
+++ b/docs/3.1/search/functions_10.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/functions_10.js b/docs/3.1/search/functions_10.js
new file mode 100644
index 00000000..7c26a3b0
--- /dev/null
+++ b/docs/3.1/search/functions_10.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['random16',['random16',['../group___random.html#ga17034d936ef716efe820e11c1df043b0',1,'random16():&#160;random8.h'],['../group___random.html#ga7236600fa1c01fc63665a9b8db508359',1,'random16(uint16_t lim):&#160;random8.h'],['../group___random.html#ga69d2cf7b8d730a0c36eec8711dbb134f',1,'random16(uint16_t min, uint16_t lim):&#160;random8.h']]],
+ ['random16_5fadd_5fentropy',['random16_add_entropy',['../group___random.html#ga1078b2029a50e86c93ccf4e3e1d85e7d',1,'random8.h']]],
+ ['random16_5fget_5fseed',['random16_get_seed',['../group___random.html#ga860bc64bfca4ada980e70cf1e03dedd8',1,'random8.h']]],
+ ['random16_5fset_5fseed',['random16_set_seed',['../group___random.html#ga95e371c2438843e0ed1ed83412b28c99',1,'random8.h']]],
+ ['random8',['random8',['../group___random.html#ga4e63c74426f6516f28470dc1b814aefe',1,'random8():&#160;random8.h'],['../group___random.html#ga216b1cfe4f62f92f5493515c6b74220c',1,'random8(uint8_t lim):&#160;random8.h'],['../group___random.html#ga2829e2c714f0a0f4617a65c4eddccec2',1,'random8(uint8_t min, uint8_t lim):&#160;random8.h']]]
+];
diff --git a/docs/3.1/search/functions_11.html b/docs/3.1/search/functions_11.html
new file mode 100644
index 00000000..2626a849
--- /dev/null
+++ b/docs/3.1/search/functions_11.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/functions_11.js b/docs/3.1/search/functions_11.js
new file mode 100644
index 00000000..30332a2c
--- /dev/null
+++ b/docs/3.1/search/functions_11.js
@@ -0,0 +1,25 @@
+var searchData=
+[
+ ['scale16',['scale16',['../group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145',1,'scale8.h']]],
+ ['scale16by8',['scale16by8',['../group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e',1,'scale8.h']]],
+ ['scale8',['scale8',['../group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af',1,'scale8.h']]],
+ ['scale8_5fleaving_5fr1_5fdirty',['scale8_LEAVING_R1_DIRTY',['../group___scaling.html#ga39579fcf09743f15545fe0b831ca313c',1,'scale8.h']]],
+ ['scale8_5fvideo',['scale8_video',['../group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1',1,'scale8.h']]],
+ ['scale8_5fvideo_5fleaving_5fr1_5fdirty',['scale8_video_LEAVING_R1_DIRTY',['../group___scaling.html#gab341cef8d46232269bb70092fed9eb75',1,'scale8.h']]],
+ ['setbrightness',['setBrightness',['../class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb',1,'CFastLED']]],
+ ['setcorrection',['setCorrection',['../class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8',1,'CLEDController::setCorrection(CRGB correction)'],['../class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9',1,'CLEDController::setCorrection(LEDColorCorrection correction)'],['../class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282',1,'CFastLED::setCorrection()']]],
+ ['setdither',['setDither',['../class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517',1,'CLEDController::setDither()'],['../class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36',1,'CFastLED::setDither()']]],
+ ['setleds',['setLeds',['../class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037',1,'CLEDController']]],
+ ['setmaxrefreshrate',['setMaxRefreshRate',['../class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1',1,'CFastLED']]],
+ ['settemperature',['setTemperature',['../class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883',1,'CLEDController::setTemperature(CRGB temperature)'],['../class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4',1,'CLEDController::setTemperature(ColorTemperature temperature)'],['../class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f',1,'CFastLED::setTemperature()']]],
+ ['show',['show',['../class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5',1,'LPD8806Controller::show()'],['../class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0',1,'WS2801Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0',1,'WS2801Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332',1,'APA102Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332',1,'APA102Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81',1,'P9813Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81',1,'P9813Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d',1,'SM16716Controller::show()'],['../class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f',1,'CLEDController::show(const struct CRGB *data, int nLeds, CRGB scale)=0'],['../class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb',1,'CLEDController::show(const struct CRGB *data, int nLeds, uint8_t brightness)'],['../class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186',1,'DMXSimpleController::show()'],['../class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1',1,'DMXSerialController::show()'],['../class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b',1,'CFastLED::show(uint8_t scale)'],['../class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de',1,'CFastLED::show()']]],
+ ['showcolor',['showColor',['../class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259',1,'LPD8806Controller::showColor()'],['../class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501',1,'WS2801Controller::showColor()'],['../class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428',1,'APA102Controller::showColor()'],['../class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a',1,'P9813Controller::showColor()'],['../class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677',1,'SM16716Controller::showColor()'],['../class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92',1,'CLEDController::showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)=0'],['../class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b',1,'CLEDController::showColor(const struct CRGB &amp;data, int nLeds, uint8_t brightness)'],['../class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4',1,'CLEDController::showColor(const struct CRGB &amp;data, uint8_t brightness=255)'],['../class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1',1,'DMXSimpleController::showColor()'],['../class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b',1,'DMXSerialController::showColor()'],['../class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0',1,'CFastLED::showColor(const struct CRGB &amp;color, uint8_t scale)'],['../class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9',1,'CFastLED::showColor(const struct CRGB &amp;color)']]],
+ ['showleds',['showLeds',['../class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076',1,'CLEDController']]],
+ ['sin16_5favr',['sin16_avr',['../group___trig.html#ga660ff60bfc5116525e50187de72009fc',1,'trig8.h']]],
+ ['sin16_5fc',['sin16_C',['../group___trig.html#ga0890962cb06b267617f4b06d7e9be5eb',1,'trig8.h']]],
+ ['sin8_5favr',['sin8_avr',['../group___trig.html#ga6aa1f993cbbc427d80da1ee2ccca86e7',1,'trig8.h']]],
+ ['sin8_5fc',['sin8_C',['../group___trig.html#ga46933a9b42921c6605588268d11f7c1e',1,'trig8.h']]],
+ ['size',['size',['../class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08',1,'CLEDController::size()'],['../class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0',1,'CFastLED::size()']]],
+ ['sqrt16',['sqrt16',['../group___math.html#ga66ecef97faa5f9b92c49766651c5afe9',1,'math8.h']]],
+ ['sub8',['sub8',['../group___math.html#ga0c40c15ab5af36ddabded161941f2091',1,'math8.h']]]
+];
diff --git a/docs/3.1/search/functions_e.html b/docs/3.1/search/functions_e.html
new file mode 100644
index 00000000..67226c87
--- /dev/null
+++ b/docs/3.1/search/functions_e.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/functions_e.js b/docs/3.1/search/functions_e.js
new file mode 100644
index 00000000..042ab40b
--- /dev/null
+++ b/docs/3.1/search/functions_e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['pixelcontroller',['PixelController',['../struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71',1,'PixelController::PixelController(const PixelController &amp;other)'],['../struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00',1,'PixelController::PixelController(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)']]]
+];
diff --git a/docs/3.1/search/functions_f.html b/docs/3.1/search/functions_f.html
new file mode 100644
index 00000000..588e52c8
--- /dev/null
+++ b/docs/3.1/search/functions_f.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/functions_f.js b/docs/3.1/search/functions_f.js
new file mode 100644
index 00000000..b9dd10d5
--- /dev/null
+++ b/docs/3.1/search/functions_f.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['qadd7',['qadd7',['../group___math.html#gadf60ccff727f52078aecdd5873b6f0bc',1,'math8.h']]],
+ ['qmul8',['qmul8',['../group___math.html#ga9d113e85065df7c9006704ea6b6dcda4',1,'math8.h']]],
+ ['qsub8',['qsub8',['../group___math.html#gaaaa16f47aca46653d51793b1af177587',1,'math8.h']]]
+];
diff --git a/docs/3.1/search/groups_4.html b/docs/3.1/search/groups_4.html
new file mode 100644
index 00000000..2055a2ea
--- /dev/null
+++ b/docs/3.1/search/groups_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/groups_4.js b/docs/3.1/search/groups_4.js
new file mode 100644
index 00000000..e8a248f6
--- /dev/null
+++ b/docs/3.1/search/groups_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['noise_20functions',['Noise functions',['../group___noise.html',1,'']]]
+];
diff --git a/docs/3.1/search/groups_5.html b/docs/3.1/search/groups_5.html
new file mode 100644
index 00000000..383bf9a2
--- /dev/null
+++ b/docs/3.1/search/groups_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/groups_5.js b/docs/3.1/search/groups_5.js
new file mode 100644
index 00000000..99ca0c3d
--- /dev/null
+++ b/docs/3.1/search/groups_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['pre_2ddefined_20color_20palletes',['Pre-defined color palletes',['../group___colorpalletes.html',1,'']]]
+];
diff --git a/docs/3.1/search/groups_6.html b/docs/3.1/search/groups_6.html
new file mode 100644
index 00000000..3b4e0b6a
--- /dev/null
+++ b/docs/3.1/search/groups_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/groups_6.js b/docs/3.1/search/groups_6.js
new file mode 100644
index 00000000..f0fac104
--- /dev/null
+++ b/docs/3.1/search/groups_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['scaling_20functions',['Scaling functions',['../group___scaling.html',1,'']]]
+];
diff --git a/docs/3.1/search/pages_3.html b/docs/3.1/search/pages_3.html
new file mode 100644
index 00000000..9f6e491a
--- /dev/null
+++ b/docs/3.1/search/pages_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/pages_3.js b/docs/3.1/search/pages_3.js
new file mode 100644
index 00000000..b9205585
--- /dev/null
+++ b/docs/3.1/search/pages_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['readme',['README',['../md__r_e_a_d_m_e.html',1,'']]]
+];
diff --git a/docs/3.1/search/pages_4.html b/docs/3.1/search/pages_4.html
new file mode 100644
index 00000000..adefe54b
--- /dev/null
+++ b/docs/3.1/search/pages_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/pages_4.js b/docs/3.1/search/pages_4.js
new file mode 100644
index 00000000..15f7a8d0
--- /dev/null
+++ b/docs/3.1/search/pages_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['todo',['TODO',['../md__t_o_d_o.html',1,'']]],
+ ['todo_20list',['Todo List',['../todo.html',1,'']]]
+];
diff --git a/docs/3.1/search/variables_1.html b/docs/3.1/search/variables_1.html
new file mode 100644
index 00000000..6a866b1b
--- /dev/null
+++ b/docs/3.1/search/variables_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/variables_1.js b/docs/3.1/search/variables_1.js
new file mode 100644
index 00000000..f1787d48
--- /dev/null
+++ b/docs/3.1/search/variables_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['rand16seed',['rand16seed',['../group___random.html#ga6f2ab7e21aae59453832b2933632f016',1,'rand16seed():&#160;lib8tion.cpp'],['../group___random.html#ga6f2ab7e21aae59453832b2933632f016',1,'rand16seed():&#160;lib8tion.cpp']]]
+];
diff --git a/docs/3.1/trig8_8h_source.html b/docs/3.1/trig8_8h_source.html
new file mode 100644
index 00000000..ad734bbc
--- /dev/null
+++ b/docs/3.1/trig8_8h_source.html
@@ -0,0 +1,328 @@
+<!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.9.1"/>
+<title>FastLED: lib8tion/trig8.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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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>
+ <li><a href="globals.html"><span>File&#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)">
+</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_fbb9e787cf27434374136273d35a9c17.html">lib8tion</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">trig8.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="preprocessor">#ifndef __INC_LIB8TION_TRIG_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_LIB8TION_TRIG_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// sin16 &amp; cos16:</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Fast 16-bit approximations of sin(x) &amp; cos(x).</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// Input angle is an unsigned int from 0-65535.</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// Output is signed int from -32767 to 32767.</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">// This approximation never varies more than 0.69%</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// from the floating point value you&#39;d get by doing</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// float s = sin( x ) * 32767.0;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// Don&#39;t use this approximation for calculating the</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// trajectory of a rocket to Mars, but it&#39;s great</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// for art projects and LED displays.</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;<span class="comment">// On Arduino/AVR, this approximation is more than</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// 10X faster than floating point sin(x) and cos(x)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#define sin16 sin16_avr</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#define sin16 sin16_C</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="group___trig.html#ga660ff60bfc5116525e50187de72009fc"> 38</a></span>&#160;LIB8STATIC int16_t <a class="code" href="group___trig.html#ga660ff60bfc5116525e50187de72009fc">sin16_avr</a>( uint16_t theta )</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="keyword">const</span> uint8_t data[] =</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; { 0, 0, 49, 0, 6393%256, 6393/256, 48, 0,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; 12539%256, 12539/256, 44, 0, 18204%256, 18204/256, 38, 0,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; 23170%256, 23170/256, 31, 0, 27245%256, 27245/256, 23, 0,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; 30273%256, 30273/256, 14, 0, 32137%256, 32137/256, 4 <span class="comment">/*,0*/</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; uint16_t offset = (theta &amp; 0x3FFF);</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="comment">// AVR doesn&#39;t have a multi-bit shift instruction,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// so if we say &quot;offset &gt;&gt;= 3&quot;, gcc makes a tiny loop.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// Inserting empty volatile statements between each</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// bit shift forces gcc to unroll the loop.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..8191</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..4095</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..2047</span></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="keywordflow">if</span>( theta &amp; 0x4000 ) offset = 2047 - offset;</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; uint8_t sectionX4;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; sectionX4 = offset / 256;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; sectionX4 *= 4;</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; uint8_t m;</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">union </span>{</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; uint16_t b;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; uint8_t blo;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; uint8_t bhi;</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; } u;</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"> 74</span>&#160; <span class="comment">//in effect u.b = blo + (256 * bhi);</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; u.blo = data[ sectionX4 ];</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; u.bhi = data[ sectionX4 + 1];</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; m = data[ sectionX4 + 2];</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; uint8_t secoffset8 = (uint8_t)(offset) / 2;</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; uint16_t mx = m * secoffset8;</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; int16_t y = mx + u.b;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x8000 ) y = -y;</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="keywordflow">return</span> y;</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;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="group___trig.html#ga0890962cb06b267617f4b06d7e9be5eb"> 96</a></span>&#160;LIB8STATIC int16_t <a class="code" href="group___trig.html#ga0890962cb06b267617f4b06d7e9be5eb">sin16_C</a>( uint16_t theta )</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">static</span> <span class="keyword">const</span> uint16_t base[] =</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; { 0, 6393, 12539, 18204, 23170, 27245, 30273, 32137 };</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t slope[] =</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; { 49, 48, 44, 38, 31, 23, 14, 4 };</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; uint16_t offset = (theta &amp; 0x3FFF) &gt;&gt; 3; <span class="comment">// 0..2047</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x4000 ) offset = 2047 - offset;</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; uint8_t section = offset / 256; <span class="comment">// 0..7</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; uint16_t b = base[section];</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; uint8_t m = slope[section];</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; uint8_t secoffset8 = (uint8_t)(offset) / 2;</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; uint16_t mx = m * secoffset8;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; int16_t y = mx + b;</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="keywordflow">if</span>( theta &amp; 0x8000 ) y = -y;</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="keywordflow">return</span> y;</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"> 120</span>&#160;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="group___trig.html#ga056952ebed39f55880bb353857b47075"> 128</a></span>&#160;LIB8STATIC int16_t <a class="code" href="group___trig.html#ga056952ebed39f55880bb353857b47075">cos16</a>( uint16_t theta)</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">return</span> sin16( theta + 16384);</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;</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;<span class="comment">// sin8 &amp; cos8</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">// Fast 8-bit approximations of sin(x) &amp; cos(x).</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment">// Input angle is an unsigned int from 0-255.</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment">// Output is an unsigned int from 0 to 255.</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment">// This approximation can vary to to 2%</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment">// from the floating point value you&#39;d get by doing</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment">// float s = (sin( x ) * 128.0) + 128;</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment">// Don&#39;t use this approximation for calculating the</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">// &quot;real&quot; trigonometric calculations, but it&#39;s great</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment">// for art projects and LED displays.</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment">// On Arduino/AVR, this approximation is more than</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment">// 20X faster than floating point sin(x) and cos(x)</span></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;<span class="preprocessor">#if defined(__AVR__) &amp;&amp; !defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#define sin8 sin8_avr</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor">#define sin8 sin8_C</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="preprocessor">#endif</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="keyword">const</span> uint8_t b_m16_interleave[] = { 0, 49, 49, 41, 90, 27, 117, 10 };</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="group___trig.html#ga6aa1f993cbbc427d80da1ee2ccca86e7"> 167</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___trig.html#ga6aa1f993cbbc427d80da1ee2ccca86e7">sin8_avr</a>( uint8_t theta)</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; uint8_t offset = theta;</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; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="stringliteral">&quot;sbrc %[theta],6 \n\t&quot;</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="stringliteral">&quot;com %[offset] \n\t&quot;</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; : [theta] <span class="stringliteral">&quot;+r&quot;</span> (theta), [offset] <span class="stringliteral">&quot;+r&quot;</span> (offset)</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"> 177</span>&#160; offset &amp;= 0x3F; <span class="comment">// 0..63</span></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 secoffset = offset &amp; 0x0F; <span class="comment">// 0..15</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40) secoffset++;</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; uint8_t m16; uint8_t b;</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; uint8_t section = offset &gt;&gt; 4; <span class="comment">// 0..3</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; uint8_t s2 = section * 2;</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; <span class="keyword">const</span> uint8_t* p = b_m16_interleave;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; p += s2;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; b = *p;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; p++;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; m16 = *p;</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; uint8_t mx;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; uint8_t xr1;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="stringliteral">&quot;mul %[m16],%[secoffset] \n\t&quot;</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="stringliteral">&quot;mov %[mx],r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="stringliteral">&quot;mov %[xr1],r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="stringliteral">&quot;eor r1, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="stringliteral">&quot;swap %[mx] \n\t&quot;</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="stringliteral">&quot;andi %[mx],0x0F \n\t&quot;</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="stringliteral">&quot;swap %[xr1] \n\t&quot;</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="stringliteral">&quot;andi %[xr1], 0xF0 \n\t&quot;</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="stringliteral">&quot;or %[mx], %[xr1] \n\t&quot;</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; : [mx] <span class="stringliteral">&quot;=r&quot;</span> (mx), [xr1] <span class="stringliteral">&quot;=r&quot;</span> (xr1)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; : [m16] <span class="stringliteral">&quot;r&quot;</span> (m16), [secoffset] <span class="stringliteral">&quot;r&quot;</span> (secoffset)</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; int8_t y = mx + b;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x80 ) y = -y;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; y += 128;</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; <span class="keywordflow">return</span> y;</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="l00225"></a><span class="lineno"><a class="line" href="group___trig.html#ga46933a9b42921c6605588268d11f7c1e"> 225</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___trig.html#ga46933a9b42921c6605588268d11f7c1e">sin8_C</a>( uint8_t theta)</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; uint8_t offset = theta;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40 ) {</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; offset = (uint8_t)255 - offset;</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; offset &amp;= 0x3F; <span class="comment">// 0..63</span></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; uint8_t secoffset = offset &amp; 0x0F; <span class="comment">// 0..15</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40) secoffset++;</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; uint8_t section = offset &gt;&gt; 4; <span class="comment">// 0..3</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; uint8_t s2 = section * 2;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keyword">const</span> uint8_t* p = b_m16_interleave;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; p += s2;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; uint8_t b = *p;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; p++;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; uint8_t m16 = *p;</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; uint8_t mx = (m16 * secoffset) &gt;&gt; 4;</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; int8_t y = mx + b;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x80 ) y = -y;</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; y += 128;</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; <span class="keywordflow">return</span> y;</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="l00261"></a><span class="lineno"><a class="line" href="group___trig.html#ga4432f985c94f5bff715db402d767b0e8"> 261</a></span>&#160;LIB8STATIC uint8_t <a class="code" href="group___trig.html#ga4432f985c94f5bff715db402d767b0e8">cos8</a>( uint8_t theta)</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; <span class="keywordflow">return</span> sin8( theta + 64);</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="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___trig_html_ga056952ebed39f55880bb353857b47075"><div class="ttname"><a href="group___trig.html#ga056952ebed39f55880bb353857b47075">cos16</a></div><div class="ttdeci">LIB8STATIC int16_t cos16(uint16_t theta)</div><div class="ttdoc">Fast 16-bit approximation of cos(x). </div><div class="ttdef"><b>Definition:</b> trig8.h:128</div></div>
+<div class="ttc" id="group___trig_html_ga4432f985c94f5bff715db402d767b0e8"><div class="ttname"><a href="group___trig.html#ga4432f985c94f5bff715db402d767b0e8">cos8</a></div><div class="ttdeci">LIB8STATIC uint8_t cos8(uint8_t theta)</div><div class="ttdoc">Fast 8-bit approximation of cos(x). </div><div class="ttdef"><b>Definition:</b> trig8.h:261</div></div>
+<div class="ttc" id="group___trig_html_ga6aa1f993cbbc427d80da1ee2ccca86e7"><div class="ttname"><a href="group___trig.html#ga6aa1f993cbbc427d80da1ee2ccca86e7">sin8_avr</a></div><div class="ttdeci">LIB8STATIC uint8_t sin8_avr(uint8_t theta)</div><div class="ttdoc">Fast 8-bit approximation of sin(x). </div><div class="ttdef"><b>Definition:</b> trig8.h:167</div></div>
+<div class="ttc" id="group___trig_html_ga0890962cb06b267617f4b06d7e9be5eb"><div class="ttname"><a href="group___trig.html#ga0890962cb06b267617f4b06d7e9be5eb">sin16_C</a></div><div class="ttdeci">LIB8STATIC int16_t sin16_C(uint16_t theta)</div><div class="ttdoc">Fast 16-bit approximation of sin(x). </div><div class="ttdef"><b>Definition:</b> trig8.h:96</div></div>
+<div class="ttc" id="group___trig_html_ga660ff60bfc5116525e50187de72009fc"><div class="ttname"><a href="group___trig.html#ga660ff60bfc5116525e50187de72009fc">sin16_avr</a></div><div class="ttdeci">LIB8STATIC int16_t sin16_avr(uint16_t theta)</div><div class="ttdoc">Fast 16-bit approximation of sin(x). </div><div class="ttdef"><b>Definition:</b> trig8.h:38</div></div>
+<div class="ttc" id="group___trig_html_ga46933a9b42921c6605588268d11f7c1e"><div class="ttname"><a href="group___trig.html#ga46933a9b42921c6605588268d11f7c1e">sin8_C</a></div><div class="ttdeci">LIB8STATIC uint8_t sin8_C(uint8_t theta)</div><div class="ttdoc">Fast 8-bit approximation of sin(x). </div><div class="ttdef"><b>Definition:</b> trig8.h:225</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/union_t_r_g_b_gradient_palette_entry_union-members.html b/docs/3.1/union_t_r_g_b_gradient_palette_entry_union-members.html
new file mode 100644
index 00000000..ae10187a
--- /dev/null
+++ b/docs/3.1/union_t_r_g_b_gradient_palette_entry_union-members.html
@@ -0,0 +1,109 @@
+<!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.9.1"/>
+<title>FastLED: 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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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="inherits.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)">
+</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">TRGBGradientPaletteEntryUnion Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>b</b> (defined in <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>)</td><td class="entry"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>bytes</b> (defined in <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>)</td><td class="entry"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dword</b> (defined in <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>)</td><td class="entry"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>g</b> (defined in <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>)</td><td class="entry"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>index</b> (defined in <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>)</td><td class="entry"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>r</b> (defined in <a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>)</td><td class="entry"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/union_t_r_g_b_gradient_palette_entry_union.html b/docs/3.1/union_t_r_g_b_gradient_palette_entry_union.html
new file mode 100644
index 00000000..f000317a
--- /dev/null
+++ b/docs/3.1/union_t_r_g_b_gradient_palette_entry_union.html
@@ -0,0 +1,132 @@
+<!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.9.1"/>
+<title>FastLED: TRGBGradientPaletteEntryUnion Union 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/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { init_search(); });
+</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">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.9.1 -->
+<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="inherits.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)">
+</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-attribs">Public Attributes</a> &#124;
+<a href="union_t_r_g_b_gradient_palette_entry_union-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">TRGBGradientPaletteEntryUnion Union Reference<div class="ingroups"><a class="el" href="group___colorutils.html">Color utility functions</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a5cd674be8e852aebb4382b1608fe4ee6"><td class="memItemLeft" ><a class="anchor" id="a5cd674be8e852aebb4382b1608fe4ee6"></a>
+struct {</td></tr>
+<tr class="memitem:a8d2739d9051eb102a1a3dabe05d4b2bd"><td class="memItemLeft" >
+&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>index</b></td></tr>
+<tr class="separator:a8d2739d9051eb102a1a3dabe05d4b2bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcb05a2d02a0d0ffc405d60ea41d7ed1"><td class="memItemLeft" >
+&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>r</b></td></tr>
+<tr class="separator:abcb05a2d02a0d0ffc405d60ea41d7ed1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21eb4743db1c37ed374bcaf228218c9a"><td class="memItemLeft" >
+&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>g</b></td></tr>
+<tr class="separator:a21eb4743db1c37ed374bcaf228218c9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56700d03fdede1bdec6978048fe46843"><td class="memItemLeft" >
+&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>b</b></td></tr>
+<tr class="separator:a56700d03fdede1bdec6978048fe46843"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cd674be8e852aebb4382b1608fe4ee6"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a5cd674be8e852aebb4382b1608fe4ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d804a8e4f58e9aa7d65f456f69d904b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d804a8e4f58e9aa7d65f456f69d904b"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dword</b></td></tr>
+<tr class="separator:a2d804a8e4f58e9aa7d65f456f69d904b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f3ee1dde5a25ab7cb3455b343f0ee45"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f3ee1dde5a25ab7cb3455b343f0ee45"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>bytes</b> [4]</td></tr>
+<tr class="separator:a8f3ee1dde5a25ab7cb3455b343f0ee45"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li><a class="el" href="colorutils_8h_source.html">colorutils.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.9.1
+</small></address>
+</body>
+</html>