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>2014-11-30 09:14:38 +0300
committerDaniel Garcia <danielgarcia@gmail.com>2014-11-30 09:14:38 +0300
commit0090965416cb7c04653791f7232161a9579ea93e (patch)
treec618c48daf5363b9a2ac4c0b2dbb34dea93136d5
parent60f8a756f631620d5d6afebd50f0a24faa6cf7c5 (diff)
Initial doxygen generated output
-rw-r--r--docs/3.1/_fast_l_e_d_8h_source.html473
-rw-r--r--docs/3.1/_fast_s_p_i___l_e_d2_8h_source.html97
-rw-r--r--docs/3.1/annotated.html154
-rw-r--r--docs/3.1/bc_s.pngbin0 -> 676 bytes
-rw-r--r--docs/3.1/bdwn.pngbin0 -> 147 bytes
-rw-r--r--docs/3.1/bitswap_8h_source.html352
-rw-r--r--docs/3.1/chipsets_8h_source.html662
-rw-r--r--docs/3.1/class___d_u_e_p_i_n-members.html118
-rw-r--r--docs/3.1/class___d_u_e_p_i_n.html170
-rw-r--r--docs/3.1/class_a_p_a102_controller-members.html135
-rw-r--r--docs/3.1/class_a_p_a102_controller.html224
-rw-r--r--docs/3.1/class_a_p_a102_controller.pngbin0 -> 1072 bytes
-rw-r--r--docs/3.1/class_a_p_a104.html110
-rw-r--r--docs/3.1/class_a_p_a104.pngbin0 -> 1872 bytes
-rw-r--r--docs/3.1/class_a_v_r_software_s_p_i_output-members.html113
-rw-r--r--docs/3.1/class_a_v_r_software_s_p_i_output.html146
-rw-r--r--docs/3.1/class_c_fast_l_e_d-members.html130
-rw-r--r--docs/3.1/class_c_fast_l_e_d.html207
-rw-r--r--docs/3.1/class_c_h_s_v_palette16-members.html117
-rw-r--r--docs/3.1/class_c_h_s_v_palette16.html157
-rw-r--r--docs/3.1/class_c_h_s_v_palette256-members.html119
-rw-r--r--docs/3.1/class_c_h_s_v_palette256.html163
-rw-r--r--docs/3.1/class_c_l_e_d_controller-members.html135
-rw-r--r--docs/3.1/class_c_l_e_d_controller.html247
-rw-r--r--docs/3.1/class_c_l_e_d_controller.pngbin0 -> 4603 bytes
-rw-r--r--docs/3.1/class_c_min_wait-members.html104
-rw-r--r--docs/3.1/class_c_min_wait.html114
-rw-r--r--docs/3.1/class_c_r_g_b_palette16-members.html123
-rw-r--r--docs/3.1/class_c_r_g_b_palette16.html175
-rw-r--r--docs/3.1/class_c_r_g_b_palette256-members.html125
-rw-r--r--docs/3.1/class_c_r_g_b_palette256.html181
-rw-r--r--docs/3.1/class_d_a_t_a___n_o_p-members.html105
-rw-r--r--docs/3.1/class_d_a_t_a___n_o_p.html129
-rw-r--r--docs/3.1/class_deep_pixel_controller-members.html135
-rw-r--r--docs/3.1/class_deep_pixel_controller.html220
-rw-r--r--docs/3.1/class_deep_pixel_controller.pngbin0 -> 1104 bytes
-rw-r--r--docs/3.1/class_g_w6205.html110
-rw-r--r--docs/3.1/class_g_w6205.pngbin0 -> 1904 bytes
-rw-r--r--docs/3.1/class_g_w6205__400.html110
-rw-r--r--docs/3.1/class_g_w6205__400.pngbin0 -> 1922 bytes
-rw-r--r--docs/3.1/class_g_w6205_controller400_khz.html110
-rw-r--r--docs/3.1/class_g_w6205_controller400_khz.pngbin0 -> 1923 bytes
-rw-r--r--docs/3.1/class_g_w6205_controller800_khz.html110
-rw-r--r--docs/3.1/class_g_w6205_controller800_khz.pngbin0 -> 1906 bytes
-rw-r--r--docs/3.1/class_l_p_d1886.html110
-rw-r--r--docs/3.1/class_l_p_d1886.pngbin0 -> 1891 bytes
-rw-r--r--docs/3.1/class_l_p_d1886_controller1250_khz.html110
-rw-r--r--docs/3.1/class_l_p_d1886_controller1250_khz.pngbin0 -> 1892 bytes
-rw-r--r--docs/3.1/class_l_p_d8806_controller-members.html135
-rw-r--r--docs/3.1/class_l_p_d8806_controller.html225
-rw-r--r--docs/3.1/class_l_p_d8806_controller.pngbin0 -> 1061 bytes
-rw-r--r--docs/3.1/class_n_e_o_p_i_x_e_l.html110
-rw-r--r--docs/3.1/class_n_e_o_p_i_x_e_l.pngbin0 -> 1755 bytes
-rw-r--r--docs/3.1/class_p9813_controller-members.html135
-rw-r--r--docs/3.1/class_p9813_controller.html224
-rw-r--r--docs/3.1/class_p9813_controller.pngbin0 -> 1062 bytes
-rw-r--r--docs/3.1/class_s_m16716_controller-members.html135
-rw-r--r--docs/3.1/class_s_m16716_controller.html224
-rw-r--r--docs/3.1/class_s_m16716_controller.pngbin0 -> 1095 bytes
-rw-r--r--docs/3.1/class_s_p_i_output-members.html113
-rw-r--r--docs/3.1/class_s_p_i_output.html151
-rw-r--r--docs/3.1/class_s_p_i_output.pngbin0 -> 1339 bytes
-rw-r--r--docs/3.1/class_selectable-members.html104
-rw-r--r--docs/3.1/class_selectable.html117
-rw-r--r--docs/3.1/class_software_s_p_i_output-members.html113
-rw-r--r--docs/3.1/class_software_s_p_i_output.html151
-rw-r--r--docs/3.1/class_software_s_p_i_output.pngbin0 -> 1395 bytes
-rw-r--r--docs/3.1/class_t_m1803.html110
-rw-r--r--docs/3.1/class_t_m1803.pngbin0 -> 1874 bytes
-rw-r--r--docs/3.1/class_t_m1803_controller400_khz.html110
-rw-r--r--docs/3.1/class_t_m1803_controller400_khz.pngbin0 -> 1876 bytes
-rw-r--r--docs/3.1/class_t_m1804.html110
-rw-r--r--docs/3.1/class_t_m1804.pngbin0 -> 1863 bytes
-rw-r--r--docs/3.1/class_t_m1809.html110
-rw-r--r--docs/3.1/class_t_m1809.pngbin0 -> 1855 bytes
-rw-r--r--docs/3.1/class_t_m1809_controller800_khz.html111
-rw-r--r--docs/3.1/class_t_m1809_controller800_khz.pngbin0 -> 2543 bytes
-rw-r--r--docs/3.1/class_t_m1829.html110
-rw-r--r--docs/3.1/class_t_m1829.pngbin0 -> 2101 bytes
-rw-r--r--docs/3.1/class_t_m1829_controller1600_khz.html109
-rw-r--r--docs/3.1/class_t_m1829_controller1600_khz.pngbin0 -> 1521 bytes
-rw-r--r--docs/3.1/class_t_m1829_controller800_khz.html110
-rw-r--r--docs/3.1/class_t_m1829_controller800_khz.pngbin0 -> 2104 bytes
-rw-r--r--docs/3.1/class_u_c_s1903.html110
-rw-r--r--docs/3.1/class_u_c_s1903.pngbin0 -> 1871 bytes
-rw-r--r--docs/3.1/class_u_c_s1903_b.html110
-rw-r--r--docs/3.1/class_u_c_s1903_b.pngbin0 -> 1863 bytes
-rw-r--r--docs/3.1/class_u_c_s1903_b_controller800_khz.html110
-rw-r--r--docs/3.1/class_u_c_s1903_b_controller800_khz.pngbin0 -> 1864 bytes
-rw-r--r--docs/3.1/class_u_c_s1903_controller400_khz.html110
-rw-r--r--docs/3.1/class_u_c_s1903_controller400_khz.pngbin0 -> 1871 bytes
-rw-r--r--docs/3.1/class_w_s2801_controller-members.html135
-rw-r--r--docs/3.1/class_w_s2801_controller.html225
-rw-r--r--docs/3.1/class_w_s2801_controller.pngbin0 -> 1770 bytes
-rw-r--r--docs/3.1/class_w_s2803_controller-members.html135
-rw-r--r--docs/3.1/class_w_s2803_controller.html219
-rw-r--r--docs/3.1/class_w_s2803_controller.pngbin0 -> 1767 bytes
-rw-r--r--docs/3.1/class_w_s2811.html110
-rw-r--r--docs/3.1/class_w_s2811.pngbin0 -> 1873 bytes
-rw-r--r--docs/3.1/class_w_s2811__400.html110
-rw-r--r--docs/3.1/class_w_s2811__400.pngbin0 -> 1871 bytes
-rw-r--r--docs/3.1/class_w_s2811_controller400_khz.html110
-rw-r--r--docs/3.1/class_w_s2811_controller400_khz.pngbin0 -> 1875 bytes
-rw-r--r--docs/3.1/class_w_s2811_controller800_khz.html113
-rw-r--r--docs/3.1/class_w_s2811_controller800_khz.pngbin0 -> 3497 bytes
-rw-r--r--docs/3.1/class_w_s2812.html110
-rw-r--r--docs/3.1/class_w_s2812.pngbin0 -> 1879 bytes
-rw-r--r--docs/3.1/class_w_s2812_b.html110
-rw-r--r--docs/3.1/class_w_s2812_b.pngbin0 -> 1884 bytes
-rw-r--r--docs/3.1/classes.html137
-rw-r--r--docs/3.1/classq-members.html107
-rw-r--r--docs/3.1/classq.html126
-rw-r--r--docs/3.1/closed.pngbin0 -> 132 bytes
-rw-r--r--docs/3.1/color_8h_source.html149
-rw-r--r--docs/3.1/colorpalettes_8h_source.html137
-rw-r--r--docs/3.1/colorutils_8h_source.html939
-rw-r--r--docs/3.1/controller_8h_source.html638
-rw-r--r--docs/3.1/delay_8h_source.html210
-rw-r--r--docs/3.1/dmx_8h_source.html197
-rw-r--r--docs/3.1/doxygen.css1440
-rw-r--r--docs/3.1/doxygen.pngbin0 -> 3779 bytes
-rw-r--r--docs/3.1/dynsections.js97
-rw-r--r--docs/3.1/fastled__config_8h_source.html114
-rw-r--r--docs/3.1/fastpin_8h_source.html216
-rw-r--r--docs/3.1/fastpin__arm__stm32_8h_source.html135
-rw-r--r--docs/3.1/fastspi_8h_source.html166
-rw-r--r--docs/3.1/fastspi__bitbang_8h_source.html452
-rw-r--r--docs/3.1/fastspi__dma_8h_source.html95
-rw-r--r--docs/3.1/fastspi__nop_8h_source.html159
-rw-r--r--docs/3.1/fastspi__ref_8h_source.html195
-rw-r--r--docs/3.1/fastspi__types_8h_source.html127
-rw-r--r--docs/3.1/files.html125
-rw-r--r--docs/3.1/ftv2blank.pngbin0 -> 86 bytes
-rw-r--r--docs/3.1/ftv2doc.pngbin0 -> 746 bytes
-rw-r--r--docs/3.1/ftv2folderclosed.pngbin0 -> 616 bytes
-rw-r--r--docs/3.1/ftv2folderopen.pngbin0 -> 597 bytes
-rw-r--r--docs/3.1/ftv2lastnode.pngbin0 -> 86 bytes
-rw-r--r--docs/3.1/ftv2link.pngbin0 -> 746 bytes
-rw-r--r--docs/3.1/ftv2mlastnode.pngbin0 -> 246 bytes
-rw-r--r--docs/3.1/ftv2mnode.pngbin0 -> 246 bytes
-rw-r--r--docs/3.1/ftv2node.pngbin0 -> 86 bytes
-rw-r--r--docs/3.1/ftv2plastnode.pngbin0 -> 229 bytes
-rw-r--r--docs/3.1/ftv2pnode.pngbin0 -> 229 bytes
-rw-r--r--docs/3.1/ftv2splitbar.pngbin0 -> 314 bytes
-rw-r--r--docs/3.1/ftv2vertline.pngbin0 -> 86 bytes
-rw-r--r--docs/3.1/functions.html105
-rw-r--r--docs/3.1/functions_func.html105
-rw-r--r--docs/3.1/hierarchy.html159
-rw-r--r--docs/3.1/hsv2rgb_8h_source.html145
-rw-r--r--docs/3.1/index.html90
-rw-r--r--docs/3.1/jquery.js31
-rw-r--r--docs/3.1/led__sysdefs_8h_source.html119
-rw-r--r--docs/3.1/lib8tion_8h_source.html1951
-rw-r--r--docs/3.1/md__r_e_a_d_m_e.html143
-rw-r--r--docs/3.1/md__t_o_d_o.html106
-rw-r--r--docs/3.1/md_release_notes.html203
-rw-r--r--docs/3.1/nav_f.pngbin0 -> 153 bytes
-rw-r--r--docs/3.1/nav_g.pngbin0 -> 95 bytes
-rw-r--r--docs/3.1/nav_h.pngbin0 -> 98 bytes
-rw-r--r--docs/3.1/noise_8h_source.html211
-rw-r--r--docs/3.1/open.pngbin0 -> 123 bytes
-rw-r--r--docs/3.1/pages.html97
-rw-r--r--docs/3.1/pixeltypes_8h_source.html825
-rw-r--r--docs/3.1/platforms_8h_source.html112
-rw-r--r--docs/3.1/power__mgt_8h_source.html144
-rw-r--r--docs/3.1/search/all_0.html26
-rw-r--r--docs/3.1/search/all_0.js4
-rw-r--r--docs/3.1/search/all_1.html26
-rw-r--r--docs/3.1/search/all_1.js7
-rw-r--r--docs/3.1/search/all_10.html26
-rw-r--r--docs/3.1/search/all_10.js12
-rw-r--r--docs/3.1/search/all_2.html26
-rw-r--r--docs/3.1/search/all_2.js13
-rw-r--r--docs/3.1/search/all_3.html26
-rw-r--r--docs/3.1/search/all_3.js5
-rw-r--r--docs/3.1/search/all_4.html26
-rw-r--r--docs/3.1/search/all_4.js4
-rw-r--r--docs/3.1/search/all_5.html26
-rw-r--r--docs/3.1/search/all_5.js7
-rw-r--r--docs/3.1/search/all_6.html26
-rw-r--r--docs/3.1/search/all_6.js4
-rw-r--r--docs/3.1/search/all_7.html26
-rw-r--r--docs/3.1/search/all_7.js6
-rw-r--r--docs/3.1/search/all_8.html26
-rw-r--r--docs/3.1/search/all_8.js4
-rw-r--r--docs/3.1/search/all_9.html26
-rw-r--r--docs/3.1/search/all_9.js4
-rw-r--r--docs/3.1/search/all_a.html26
-rw-r--r--docs/3.1/search/all_a.js5
-rw-r--r--docs/3.1/search/all_b.html26
-rw-r--r--docs/3.1/search/all_b.js4
-rw-r--r--docs/3.1/search/all_c.html26
-rw-r--r--docs/3.1/search/all_c.js4
-rw-r--r--docs/3.1/search/all_d.html26
-rw-r--r--docs/3.1/search/all_d.js9
-rw-r--r--docs/3.1/search/all_e.html26
-rw-r--r--docs/3.1/search/all_e.js12
-rw-r--r--docs/3.1/search/all_f.html26
-rw-r--r--docs/3.1/search/all_f.js7
-rw-r--r--docs/3.1/search/classes_0.html26
-rw-r--r--docs/3.1/search/classes_0.js4
-rw-r--r--docs/3.1/search/classes_1.html26
-rw-r--r--docs/3.1/search/classes_1.js7
-rw-r--r--docs/3.1/search/classes_2.html26
-rw-r--r--docs/3.1/search/classes_2.js13
-rw-r--r--docs/3.1/search/classes_3.html26
-rw-r--r--docs/3.1/search/classes_3.js5
-rw-r--r--docs/3.1/search/classes_4.html26
-rw-r--r--docs/3.1/search/classes_4.js7
-rw-r--r--docs/3.1/search/classes_5.html26
-rw-r--r--docs/3.1/search/classes_5.js4
-rw-r--r--docs/3.1/search/classes_6.html26
-rw-r--r--docs/3.1/search/classes_6.js6
-rw-r--r--docs/3.1/search/classes_7.html26
-rw-r--r--docs/3.1/search/classes_7.js4
-rw-r--r--docs/3.1/search/classes_8.html26
-rw-r--r--docs/3.1/search/classes_8.js4
-rw-r--r--docs/3.1/search/classes_9.html26
-rw-r--r--docs/3.1/search/classes_9.js5
-rw-r--r--docs/3.1/search/classes_a.html26
-rw-r--r--docs/3.1/search/classes_a.js4
-rw-r--r--docs/3.1/search/classes_b.html26
-rw-r--r--docs/3.1/search/classes_b.js8
-rw-r--r--docs/3.1/search/classes_c.html26
-rw-r--r--docs/3.1/search/classes_c.js11
-rw-r--r--docs/3.1/search/classes_d.html26
-rw-r--r--docs/3.1/search/classes_d.js7
-rw-r--r--docs/3.1/search/classes_e.html26
-rw-r--r--docs/3.1/search/classes_e.js12
-rw-r--r--docs/3.1/search/close.pngbin0 -> 273 bytes
-rw-r--r--docs/3.1/search/functions_0.html26
-rw-r--r--docs/3.1/search/functions_0.js4
-rw-r--r--docs/3.1/search/mag_sel.pngbin0 -> 563 bytes
-rw-r--r--docs/3.1/search/nomatches.html12
-rw-r--r--docs/3.1/search/pages_0.html26
-rw-r--r--docs/3.1/search/pages_0.js4
-rw-r--r--docs/3.1/search/pages_1.html26
-rw-r--r--docs/3.1/search/pages_1.js4
-rw-r--r--docs/3.1/search/pages_2.html26
-rw-r--r--docs/3.1/search/pages_2.js4
-rw-r--r--docs/3.1/search/search.css271
-rw-r--r--docs/3.1/search/search.js799
-rw-r--r--docs/3.1/search/search_l.pngbin0 -> 604 bytes
-rw-r--r--docs/3.1/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--docs/3.1/search/search_r.pngbin0 -> 612 bytes
-rw-r--r--docs/3.1/struct_c_h_s_v-members.html115
-rw-r--r--docs/3.1/struct_c_h_s_v.html171
-rw-r--r--docs/3.1/struct_c_r_g_b-members.html300
-rw-r--r--docs/3.1/struct_c_r_g_b.html471
-rw-r--r--docs/3.1/struct_multi_pixel_controller-members.html147
-rw-r--r--docs/3.1/struct_multi_pixel_controller.html261
-rw-r--r--docs/3.1/struct_pixel_controller-members.html129
-rw-r--r--docs/3.1/struct_pixel_controller.html201
-rw-r--r--docs/3.1/sync_off.pngbin0 -> 853 bytes
-rw-r--r--docs/3.1/sync_on.pngbin0 -> 845 bytes
-rw-r--r--docs/3.1/tab_a.pngbin0 -> 142 bytes
-rw-r--r--docs/3.1/tab_b.pngbin0 -> 169 bytes
-rw-r--r--docs/3.1/tab_h.pngbin0 -> 177 bytes
-rw-r--r--docs/3.1/tab_s.pngbin0 -> 184 bytes
-rw-r--r--docs/3.1/tabs.css60
-rw-r--r--docs/3.1/union_i_e_e_e754binary32__t-members.html113
-rw-r--r--docs/3.1/union_i_e_e_e754binary32__t.html156
262 files changed, 25611 insertions, 0 deletions
diff --git a/docs/3.1/_fast_l_e_d_8h_source.html b/docs/3.1/_fast_l_e_d_8h_source.html
new file mode 100644
index 00000000..ee3560ae
--- /dev/null
+++ b/docs/3.1/_fast_l_e_d_8h_source.html
@@ -0,0 +1,473 @@
+<!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.8"/>
+<title>FastLED: FastLED.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">FastLED.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_FASTSPI_LED2_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTSPI_LED2_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;<span class="comment">// #define NO_CORRECTION 1</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// #define NO_DITHERING 1</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#define xstr(s) str(s)</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#define str(s) #s</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FASTLED_VERSION 3001000</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#ifndef FASTLED_INTERNAL</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#warning FastLED version 3001000 (Not really a warning, just telling you here.)</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#endif</span></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">#ifndef __PROG_TYPES_COMPAT__</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define __PROG_TYPES_COMPAT__</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#ifdef SmartMatrix_h</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include&lt;SmartMatrix.h&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef DmxSimple_h</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include&lt;DmxSimple.h&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#ifdef DmxSerial_h</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include&lt;DMXSerial.h&gt;</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="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;fastled_config.h&quot;</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;led_sysdefs.h&quot;</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;bitswap.h&quot;</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;controller.h&quot;</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;fastpin.h&quot;</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;fastspi_types.h&quot;</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;./dmx.h&quot;</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;platforms.h&quot;</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="preprocessor">#include &quot;lib8tion.h&quot;</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;hsv2rgb.h&quot;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;colorutils.h&quot;</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;colorpalettes.h&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="preprocessor">#include &quot;noise.h&quot;</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;power_mgt.h&quot;</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="preprocessor">#include &quot;fastspi.h&quot;</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &quot;chipsets.h&quot;</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">enum</span> ESPIChipsets {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; LPD8806,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; WS2801,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; WS2803,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; SM16716,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; P9813,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; APA102</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;};</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">enum</span> ESM { SMART_MATRIX };</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">enum</span> OWS2811 { OCTOWS2811 };</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="class_n_e_o_p_i_x_e_l.html"> 67</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN&gt; <span class="keyword">class </span><a class="code" href="class_n_e_o_p_i_x_e_l.html">NEOPIXEL</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a>&lt;DATA_PIN, GRB&gt; {};</div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="class_t_m1829.html"> 68</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_t_m1829.html">TM1829</a> : <span class="keyword">public</span> <a class="code" href="class_t_m1829_controller800_khz.html">TM1829Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="class_t_m1809.html"> 69</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_t_m1809.html">TM1809</a> : <span class="keyword">public</span> <a class="code" href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="class_t_m1804.html"> 70</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_t_m1804.html">TM1804</a> : <span class="keyword">public</span> <a class="code" href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="class_t_m1803.html"> 71</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_t_m1803.html">TM1803</a> : <span class="keyword">public</span> <a class="code" href="class_t_m1803_controller400_khz.html">TM1803Controller400Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="class_u_c_s1903.html"> 72</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_u_c_s1903.html">UCS1903</a> : <span class="keyword">public</span> <a class="code" href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="class_u_c_s1903_b.html"> 73</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_u_c_s1903_b.html">UCS1903B</a> : <span class="keyword">public</span> <a class="code" href="class_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="class_w_s2812.html"> 74</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_w_s2812.html">WS2812</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="class_w_s2812_b.html"> 75</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_w_s2812_b.html">WS2812B</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="class_w_s2811.html"> 76</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_w_s2811.html">WS2811</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="class_a_p_a104.html"> 77</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_a_p_a104.html">APA104</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_w_s2811__400.html"> 78</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_w_s2811__400.html">WS2811_400</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="class_g_w6205.html"> 79</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_g_w6205.html">GW6205</a> : <span class="keyword">public</span> <a class="code" href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="class_g_w6205__400.html"> 80</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_g_w6205__400.html">GW6205_400</a> : <span class="keyword">public</span> <a class="code" href="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="class_l_p_d1886.html"> 81</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_l_p_d1886.html">LPD1886</a> : <span class="keyword">public</span> <a class="code" href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#ifdef DmxSimple_h</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span>DMXSIMPLE : <span class="keyword">public</span> DMXSimpleController&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#ifdef DmxSerial_h</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt; <span class="keyword">class </span>DMXSERIAL : <span class="keyword">public</span> DMXSerialController&lt;RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#endif</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">// template &lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t SPI_SPEED = DATA_RATE_MHZ(20)&gt; class LPD8806 : public LPD8806Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED&gt; {};</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">// template &lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t SPI_SPEED = DATA_RATE_MHZ(1)&gt; class WS2801 : public WS2801Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED&gt; {};</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">// template &lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t SPI_SPEED = DATA_RATE_MHZ(15)&gt; class P9813 : public P9813Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED&gt; {};</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">// template &lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t SPI_SPEED = DATA_RATE_MHZ(16)&gt; class SM16716 : public SM16716Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED&gt; {};</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">enum</span> EBlockChipsets {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#ifdef PORTA_FIRST_PIN</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; WS2811_PORTA,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#ifdef PORTB_FIRST_PIN</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; WS2811_PORTB,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#ifdef PORTC_FIRST_PIN</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; WS2811_PORTC,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="preprocessor">#ifdef PORTD_FIRST_PIN</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; WS2811_PORTD,</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#ifdef HAS_PORTDC</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; WS2811_PORTDC,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;};</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor">#if defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#define NUM_CONTROLLERS 2</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="preprocessor">#define NUM_CONTROLLERS 8</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html"> 118</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_fast_l_e_d.html">CFastLED</a> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// int m_nControllers;</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; uint8_t m_Scale;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; uint16_t m_nFPS;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; uint32_t m_nMinMicros;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="class_c_fast_l_e_d.html">CFastLED</a>();</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *pLed, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">template</span>&lt;ESPIChipsets CHIPSET, u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN &gt; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">case</span> LPD8806: { <span class="keyword">static</span> <a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller&lt;DATA_PIN, CLOCK_PIN&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">case</span> WS2801: { <span class="keyword">static</span> <a class="code" href="class_w_s2801_controller.html">WS2801Controller&lt;DATA_PIN, CLOCK_PIN&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">case</span> WS2803: { <span class="keyword">static</span> <a class="code" href="class_w_s2803_controller.html">WS2803Controller&lt;DATA_PIN, CLOCK_PIN&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> SM16716: { <span class="keyword">static</span> <a class="code" href="class_s_m16716_controller.html">SM16716Controller&lt;DATA_PIN, CLOCK_PIN&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">case</span> P9813: { <span class="keyword">static</span> <a class="code" href="class_p9813_controller.html">P9813Controller&lt;DATA_PIN, CLOCK_PIN&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">case</span> APA102: { <span class="keyword">static</span> <a class="code" href="class_a_p_a102_controller.html">APA102Controller&lt;DATA_PIN, CLOCK_PIN&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">template</span>&lt;ESPIChipsets CHIPSET, u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER &gt; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">case</span> LPD8806: { <span class="keyword">static</span> <a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">case</span> WS2801: { <span class="keyword">static</span> <a class="code" href="class_w_s2801_controller.html">WS2801Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">case</span> WS2803: { <span class="keyword">static</span> <a class="code" href="class_w_s2803_controller.html">WS2803Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">case</span> SM16716: { <span class="keyword">static</span> <a class="code" href="class_s_m16716_controller.html">SM16716Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">case</span> P9813: { <span class="keyword">static</span> <a class="code" href="class_p9813_controller.html">P9813Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">case</span> APA102: { <span class="keyword">static</span> <a class="code" href="class_a_p_a102_controller.html">APA102Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">template</span>&lt;ESPIChipsets CHIPSET, u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER, u<span class="keywordtype">int</span>8_t SPI_DATA_RATE &gt; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">case</span> LPD8806: { <span class="keyword">static</span> <a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_DATA_RATE&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">case</span> WS2801: { <span class="keyword">static</span> <a class="code" href="class_w_s2801_controller.html">WS2801Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_DATA_RATE&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">case</span> WS2803: { <span class="keyword">static</span> <a class="code" href="class_w_s2803_controller.html">WS2803Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_DATA_RATE&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">case</span> SM16716: { <span class="keyword">static</span> <a class="code" href="class_s_m16716_controller.html">SM16716Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_DATA_RATE&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">case</span> P9813: { <span class="keyword">static</span> <a class="code" href="class_p9813_controller.html">P9813Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_DATA_RATE&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">case</span> APA102: { <span class="keyword">static</span> <a class="code" href="class_a_p_a102_controller.html">APA102Controller&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_DATA_RATE&gt;</a> c; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor">#ifdef SPI_DATA</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">template</span>&lt;ESPIChipsets CHIPSET&gt; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET, SPI_DATA, SPI_CLOCK, RGB&gt;(data, nLedsOrOffset, nLedsIfOffset);</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="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">template</span>&lt;ESPIChipsets CHIPSET, EOrder RGB_ORDER&gt; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET, SPI_DATA, SPI_CLOCK, RGB_ORDER&gt;(data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">template</span>&lt;ESPIChipsets CHIPSET, EOrder RGB_ORDER, u<span class="keywordtype">int</span>8_t SPI_DATA_RATE&gt; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET, SPI_DATA, SPI_CLOCK, RGB_ORDER, SPI_DATA_RATE&gt;(data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN&gt; <span class="keyword">class </span>CHIPSET, uint8_t DATA_PIN&gt;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN&gt; c;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span>CHIPSET, uint8_t DATA_PIN, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN, RGB_ORDER&gt; c;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER&gt; <span class="keyword">class </span>CHIPSET, uint8_t DATA_PIN&gt;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN, RGB&gt; c;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</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;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt; <span class="keyword">class </span>CHIPSET&gt;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">static</span> CHIPSET&lt;RGB&gt; c;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt; <span class="keyword">class </span>CHIPSET, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">static</span> CHIPSET&lt;RGB_ORDER&gt; c;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> addLeds(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</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;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor">#ifdef USE_OCTOWS2811</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keyword">template</span>&lt;OWS2811 CHIPSET, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0)</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">case</span> OCTOWS2811: { <span class="keyword">static</span> COctoWS2811Controller&lt;RGB_ORDER&gt; controller; <span class="keywordflow">return</span> addLeds(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;}</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="keyword">template</span>&lt;OWS2811 CHIPSET&gt;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0)</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;{</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET,GRB&gt;(data,nLedsOrOffset,nLedsIfOffset);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;}</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#ifdef SmartMatrix_h</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">template</span>&lt;ESM CHIPSET&gt;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0)</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">case</span> SMART_MATRIX: { <span class="keyword">static</span> CSmartMatrixController controller; <span class="keywordflow">return</span> addLeds(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#endif</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;<span class="preprocessor">#ifdef FASTSPI_USE_DMX_SIMPLE</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">template</span>&lt;EClocklessChipsets CHIPSET, u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER=RGB&gt;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">case</span> DMX: { <span class="keyword">static</span> DMXController&lt;DATA_PIN&gt; controller; <span class="keywordflow">return</span> addLeds(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#ifdef HAS_BLOCKLESS</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="keyword">template</span>&lt;EBlockChipsets CHIPSET, <span class="keywordtype">int</span> NUM_LANES, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="preprocessor">#ifdef PORTA_FIRST_PIN</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">case</span> WS2811_PORTA: <span class="keywordflow">return</span> addLeds(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTA_FIRST_PIN, NS(250), NS(510), NS(490), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor">#ifdef PORTB_FIRST_PIN</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">case</span> WS2811_PORTB: <span class="keywordflow">return</span> addLeds(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTB_FIRST_PIN, NS(250), NS(510), NS(490), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</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;<span class="preprocessor">#ifdef PORTC_FIRST_PIN</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">case</span> WS2811_PORTC: <span class="keywordflow">return</span> addLeds(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTC_FIRST_PIN, NS(250), NS(510), NS(490), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="preprocessor">#ifdef PORTD_FIRST_PIN</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">case</span> WS2811_PORTD: <span class="keywordflow">return</span> addLeds(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTD_FIRST_PIN, NS(250), NS(510), NS(490), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#ifdef HAS_PORTDC</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">case</span> WS2811_PORTDC: <span class="keywordflow">return</span> addLeds(<span class="keyword">new</span> SixteenWayInlineBlockClocklessController&lt;16,NS(250), NS(510), NS(490), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="keyword">template</span>&lt;EBlockChipsets CHIPSET, <span class="keywordtype">int</span> NUM_LANES&gt;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;addLeds(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLedsOrOffset, <span class="keywordtype">int</span> nLedsIfOffset = 0) {</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET,NUM_LANES,GRB&gt;(data,nLedsOrOffset,nLedsIfOffset);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordtype">void</span> setBrightness(uint8_t scale) { m_Scale = scale; }</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; uint8_t getBrightness() { <span class="keywordflow">return</span> m_Scale; }</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(uint8_t scale);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de"> 279</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>() { <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(m_Scale); }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">void</span> clear(<span class="keywordtype">boolean</span> writeData = <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordtype">void</span> clearData();</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; color, uint8_t scale);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; color) { showColor(color, m_Scale); }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">void</span> delay(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms);</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; <span class="keywordtype">void</span> setTemperature(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; temp);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordtype">void</span> setCorrection(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; correction);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">void</span> setDither(uint8_t ditherMode = BINARY_DITHER);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Set the maximum refresh rate. This is global for all leds. Attempts to</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// call show faster than this rate will simply wait. Defaults to 400Hz. Set</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// to 0 to have no maximum rate.</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordtype">void</span> setMaxRefreshRate(uint16_t refresh);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// for debugging, will keep track of time between calls to countFPS, and every</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// nFrames calls, it will update an internal counter for the current FPS.</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordtype">void</span> countFPS(<span class="keywordtype">int</span> nFrames=25);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// Get the number of frames/second being written out</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; uint16_t getFPS() { <span class="keywordflow">return</span> m_nFPS; }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// returns the number of controllers (strips) that have been added with addLeds</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordtype">int</span> count();</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// returns the Nth controller</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; operator[](<span class="keywordtype">int</span> x);</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">// Convenience functions for single-strip setups:</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// returns the number of LEDs in the first strip</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordtype">int</span> size() { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[0].size(); }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// returns pointer to the CRGB buffer for the first strip</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> *leds() { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[0].leds(); }</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"> 321</span>&#160;<span class="preprocessor">#ifdef FASTLED_AVR</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> millis(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> micros(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="keywordtype">void</span> delay(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="keywordtype">void</span> delayMicroseconds(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> us);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;};</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="preprocessor">#define FastSPI_LED FastLED</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="preprocessor">#define FastSPI_LED2 FastLED</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="preprocessor">#ifndef LEDS</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="preprocessor">#define LEDS FastLED</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;<span class="keyword">extern</span> <a class="code" href="class_c_fast_l_e_d.html">CFastLED</a> FastLED;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">// Warnings for undefined things</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="preprocessor">#ifndef HAS_HARDWARE_PIN_SUPPORT</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="preprocessor">#warning &quot;No pin/port mappings found, pin access will be slightly slower. See fastpin.h for info.&quot;</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="preprocessor">#define NO_HARDWARE_PIN_SUPPORT</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="preprocessor">#endif</span></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;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_u_c_s1903_controller400_khz_html"><div class="ttname"><a href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:501</div></div>
+<div class="ttc" id="class_w_s2812_html"><div class="ttname"><a href="class_w_s2812.html">WS2812</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:74</div></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="class_l_p_d1886_html"><div class="ttname"><a href="class_l_p_d1886.html">LPD1886</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:81</div></div>
+<div class="ttc" id="class_g_w6205_html"><div class="ttname"><a href="class_g_w6205.html">GW6205</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:79</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html"><div class="ttname"><a href="class_c_l_e_d_controller.html">CLEDController</a></div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
+<div class="ttc" id="class_w_s2811_controller800_khz_html"><div class="ttname"><a href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:522</div></div>
+<div class="ttc" id="class_l_p_d8806_controller_html"><div class="ttname"><a href="class_l_p_d8806_controller.html">LPD8806Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:94</div></div>
+<div class="ttc" id="class_u_c_s1903_b_controller800_khz_html"><div class="ttname"><a href="class_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:508</div></div>
+<div class="ttc" id="class_g_w6205_controller800_khz_html"><div class="ttname"><a href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:494</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html"><div class="ttname"><a href="class_c_fast_l_e_d.html">CFastLED</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:118</div></div>
+<div class="ttc" id="class_t_m1803_controller400_khz_html"><div class="ttname"><a href="class_t_m1803_controller400_khz.html">TM1803Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:536</div></div>
+<div class="ttc" id="class_u_c_s1903_html"><div class="ttname"><a href="class_u_c_s1903.html">UCS1903</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:72</div></div>
+<div class="ttc" id="class_t_m1809_controller800_khz_html"><div class="ttname"><a href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:515</div></div>
+<div class="ttc" id="class_t_m1809_html"><div class="ttname"><a href="class_t_m1809.html">TM1809</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:69</div></div>
+<div class="ttc" id="class_w_s2801_controller_html"><div class="ttname"><a href="class_w_s2801_controller.html">WS2801Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:162</div></div>
+<div class="ttc" id="class_l_p_d1886_controller1250_khz_html"><div class="ttname"><a href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:551</div></div>
+<div class="ttc" id="class_t_m1829_controller800_khz_html"><div class="ttname"><a href="class_t_m1829_controller800_khz.html">TM1829Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:542</div></div>
+<div class="ttc" id="class_t_m1829_html"><div class="ttname"><a href="class_t_m1829.html">TM1829</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:68</div></div>
+<div class="ttc" id="class_n_e_o_p_i_x_e_l_html"><div class="ttname"><a href="class_n_e_o_p_i_x_e_l.html">NEOPIXEL</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:67</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a3adb23ec5f919524928d576002cb45de"><div class="ttname"><a href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">CFastLED::show</a></div><div class="ttdeci">void show()</div><div class="ttdoc">Update all our controllers with the current led colors. </div><div class="ttdef"><b>Definition:</b> FastLED.h:279</div></div>
+<div class="ttc" id="class_w_s2812_b_html"><div class="ttname"><a href="class_w_s2812_b.html">WS2812B</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:75</div></div>
+<div class="ttc" id="class_p9813_controller_html"><div class="ttname"><a href="class_p9813_controller.html">P9813Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:296</div></div>
+<div class="ttc" id="class_g_w6205_controller400_khz_html"><div class="ttname"><a href="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:487</div></div>
+<div class="ttc" id="class_w_s2811_controller400_khz_html"><div class="ttname"><a href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:529</div></div>
+<div class="ttc" id="class_t_m1804_html"><div class="ttname"><a href="class_t_m1804.html">TM1804</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:70</div></div>
+<div class="ttc" id="class_u_c_s1903_b_html"><div class="ttname"><a href="class_u_c_s1903_b.html">UCS1903B</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:73</div></div>
+<div class="ttc" id="class_a_p_a102_controller_html"><div class="ttname"><a href="class_a_p_a102_controller.html">APA102Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:213</div></div>
+<div class="ttc" id="class_w_s2803_controller_html"><div class="ttname"><a href="class_w_s2803_controller.html">WS2803Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:204</div></div>
+<div class="ttc" id="class_w_s2811_html"><div class="ttname"><a href="class_w_s2811.html">WS2811</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:76</div></div>
+<div class="ttc" id="class_w_s2811__400_html"><div class="ttname"><a href="class_w_s2811__400.html">WS2811_400</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:78</div></div>
+<div class="ttc" id="class_a_p_a104_html"><div class="ttname"><a href="class_a_p_a104.html">APA104</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:77</div></div>
+<div class="ttc" id="class_s_m16716_controller_html"><div class="ttname"><a href="class_s_m16716_controller.html">SM16716Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:379</div></div>
+<div class="ttc" id="class_t_m1803_html"><div class="ttname"><a href="class_t_m1803.html">TM1803</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:71</div></div>
+<div class="ttc" id="class_g_w6205__400_html"><div class="ttname"><a href="class_g_w6205__400.html">GW6205_400</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:80</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/_fast_s_p_i___l_e_d2_8h_source.html b/docs/3.1/_fast_s_p_i___l_e_d2_8h_source.html
new file mode 100644
index 00000000..1d434579
--- /dev/null
+++ b/docs/3.1/_fast_s_p_i___l_e_d2_8h_source.html
@@ -0,0 +1,97 @@
+<!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.8"/>
+<title>FastLED: FastSPI_LED2.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">FastSPI_LED2.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">#warning &quot;This file is going away, please us FastLED.h in the future!&quot;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#include&lt;FastLED.h&gt;</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/annotated.html b/docs/3.1/annotated.html
new file mode 100644
index 00000000..85463cf5
--- /dev/null
+++ b/docs/3.1/annotated.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 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 class="current"><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class___d_u_e_p_i_n.html" target="_self">_DUEPIN</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_p_a102_controller.html" target="_self">APA102Controller</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_p_a104.html" target="_self">APA104</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_v_r_software_s_p_i_output.html" target="_self">AVRSoftwareSPIOutput</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_fast_l_e_d.html" target="_self">CFastLED</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_c_h_s_v.html" target="_self">CHSV</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_h_s_v_palette16.html" target="_self">CHSVPalette16</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_h_s_v_palette256.html" target="_self">CHSVPalette256</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_l_e_d_controller.html" target="_self">CLEDController</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_min_wait.html" target="_self">CMinWait</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_c_r_g_b.html" target="_self">CRGB</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_r_g_b_palette16.html" target="_self">CRGBPalette16</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_r_g_b_palette256.html" target="_self">CRGBPalette256</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d_a_t_a___n_o_p.html" target="_self">DATA_NOP</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_deep_pixel_controller.html" target="_self">DeepPixelController</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205.html" target="_self">GW6205</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205__400.html" target="_self">GW6205_400</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205_controller400_khz.html" target="_self">GW6205Controller400Khz</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205_controller800_khz.html" target="_self">GW6205Controller800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="union_i_e_e_e754binary32__t.html" target="_self">IEEE754binary32_t</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_l_p_d1886.html" target="_self">LPD1886</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_l_p_d1886_controller1250_khz.html" target="_self">LPD1886Controller1250Khz</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_l_p_d8806_controller.html" target="_self">LPD8806Controller</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_multi_pixel_controller.html" target="_self">MultiPixelController</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_n_e_o_p_i_x_e_l.html" target="_self">NEOPIXEL</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_p9813_controller.html" target="_self">P9813Controller</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_pixel_controller.html" target="_self">PixelController</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classq.html" target="_self">q</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_selectable.html" target="_self">Selectable</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_m16716_controller.html" target="_self">SM16716Controller</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_software_s_p_i_output.html" target="_self">SoftwareSPIOutput</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_p_i_output.html" target="_self">SPIOutput</a></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1803.html" target="_self">TM1803</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1803_controller400_khz.html" target="_self">TM1803Controller400Khz</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1804.html" target="_self">TM1804</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1809.html" target="_self">TM1809</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1809_controller800_khz.html" target="_self">TM1809Controller800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1829.html" target="_self">TM1829</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1829_controller1600_khz.html" target="_self">TM1829Controller1600Khz</a></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1829_controller800_khz.html" target="_self">TM1829Controller800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903.html" target="_self">UCS1903</a></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903_b.html" target="_self">UCS1903B</a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903_b_controller800_khz.html" target="_self">UCS1903BController800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903_controller400_khz.html" target="_self">UCS1903Controller400Khz</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2801_controller.html" target="_self">WS2801Controller</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2803_controller.html" target="_self">WS2803Controller</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811.html" target="_self">WS2811</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811__400.html" target="_self">WS2811_400</a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811_controller400_khz.html" target="_self">WS2811Controller400Khz</a></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811_controller800_khz.html" target="_self">WS2811Controller800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812.html" target="_self">WS2812</a></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812_b.html" target="_self">WS2812B</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/bc_s.png b/docs/3.1/bc_s.png
new file mode 100644
index 00000000..224b29aa
--- /dev/null
+++ b/docs/3.1/bc_s.png
Binary files differ
diff --git a/docs/3.1/bdwn.png b/docs/3.1/bdwn.png
new file mode 100644
index 00000000..940a0b95
--- /dev/null
+++ b/docs/3.1/bdwn.png
Binary files differ
diff --git a/docs/3.1/bitswap_8h_source.html b/docs/3.1/bitswap_8h_source.html
new file mode 100644
index 00000000..6c5f2011
--- /dev/null
+++ b/docs/3.1/bitswap_8h_source.html
@@ -0,0 +1,352 @@
+<!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.8"/>
+<title>FastLED: bitswap.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">bitswap.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_BITSWAP_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_BITSWAP_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;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// structure representing 8 bits of access</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; uint8_t raw;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; uint32_t a0:1;</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; uint32_t a1:1;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; uint32_t a2:1;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; uint32_t a3:1;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; uint32_t a4:1;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; uint32_t a5:1;</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; uint32_t a6:1;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; uint32_t a7:1;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; };</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;} just8bits;</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="comment">// structure representing 32 bits of access</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; uint32_t a0:1;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; uint32_t a1:1;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; uint32_t a2:1;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; uint32_t a3:1;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; uint32_t a4:1;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; uint32_t a5:1;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; uint32_t a6:1;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; uint32_t a7:1;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; uint32_t b0:1;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; uint32_t b1:1;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; uint32_t b2:1;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; uint32_t b3:1;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; uint32_t b4:1;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; uint32_t b5:1;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; uint32_t b6:1;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; uint32_t b7:1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; uint32_t c0:1;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; uint32_t c1:1;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; uint32_t c2:1;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; uint32_t c3:1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; uint32_t c4:1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; uint32_t c5:1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; uint32_t c6:1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint32_t c7:1;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint32_t d0:1;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint32_t d1:1;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint32_t d2:1;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint32_t d3:1;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; uint32_t d4:1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint32_t d5:1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint32_t d6:1;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint32_t d7:1;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;} sub4;</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">// union containing a full 8 bytes to swap the bit orientation on</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; uint32_t word[2];</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; uint8_t bytes[8];</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; sub4 a;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; sub4 b;</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;} bitswap_type;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#define SWAPSA(X,N) out. X ## 0 = in.a.a ## N; \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor"> out. X ## 1 = in.a.b ## N; \</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor"> out. X ## 2 = in.a.c ## N; \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor"> out. X ## 3 = in.a.d ## N;</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#define SWAPSB(X,N) out. X ## 0 = in.b.a ## N; \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor"> out. X ## 1 = in.b.b ## N; \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor"> out. X ## 2 = in.b.c ## N; \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor"> out. X ## 3 = in.b.d ## N;</span></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;<span class="preprocessor">#define SWAPS(X,N) out. X ## 0 = in.a.a ## N; \</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor"> out. X ## 1 = in.a.b ## N; \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor"> out. X ## 2 = in.a.c ## N; \</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor"> out. X ## 3 = in.a.d ## N; \</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor"> out. X ## 4 = in.b.a ## N; \</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor"> out. X ## 5 = in.b.b ## N; \</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor"> out. X ## 6 = in.b.c ## N; \</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor"> out. X ## 7 = in.b.d ## N;</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;__attribute__((always_inline)) inline <span class="keywordtype">void</span> swapbits8(bitswap_type in, bitswap_type &amp; out) {</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">// SWAPS(a.a,7);</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// SWAPS(a.b,6);</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// SWAPS(a.c,5);</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// SWAPS(a.d,4);</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// SWAPS(b.a,3);</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// SWAPS(b.b,2);</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// SWAPS(b.c,1);</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// SWAPS(b.d,0);</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// SWAPSA(a.a,7);</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// SWAPSA(a.b,6);</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// SWAPSA(a.c,5);</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// SWAPSA(a.d,4);</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// SWAPSB(a.a,7);</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// SWAPSB(a.b,6);</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// SWAPSB(a.c,5);</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// SWAPSB(a.d,4);</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// SWAPSA(b.a,3);</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// SWAPSA(b.b,2);</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// SWAPSA(b.c,1);</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// SWAPSA(b.d,0);</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// //</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// SWAPSB(b.a,3);</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// SWAPSB(b.b,2);</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// SWAPSB(b.c,1);</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// SWAPSB(b.d,0);</span></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="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 8; i++) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; just8bits work;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; work.a3 = in.word[0] &gt;&gt; 31;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; work.a2 = in.word[0] &gt;&gt; 23;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; work.a1 = in.word[0] &gt;&gt; 15;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; work.a0 = in.word[0] &gt;&gt; 7;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; in.word[0] &lt;&lt;= 1;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; work.a7 = in.word[1] &gt;&gt; 31;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; work.a6 = in.word[1] &gt;&gt; 23;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; work.a5 = in.word[1] &gt;&gt; 15;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; work.a4 = in.word[1] &gt;&gt; 7;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; in.word[1] &lt;&lt;= 1;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; out.bytes[i] = work.raw;</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="l00133"></a><span class="lineno"> 133</span>&#160;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;__attribute__((always_inline)) inline <span class="keywordtype">void</span> slowswap(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *A, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *B) {</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> row = 0; row &lt; 7; row++) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; uint8_t x = A[row];</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; uint8_t bit = (1&lt;&lt;row);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p = B;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span>(uint32_t mask = 1&lt;&lt;7 ; mask ; mask &gt;&gt;= 1) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span>(x &amp; mask) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; *p++ |= bit;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; *p++ &amp;= ~bit;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// B[7] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// B[6] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// B[5] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// B[4] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// B[3] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// B[2] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// B[1] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// B[0] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</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;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment">// Simplified form of bits rotating function found here - http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt - rotating</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// data into LSB for a faster write (the code using this data can happily walk the array backwards)</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;__attribute__((always_inline)) inline <span class="keywordtype">void</span> transpose8x1(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *A, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *B) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; uint32_t x, y, t;</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="comment">// Load the array and pack it into x and y.</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// pre-transform x</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// pre-transform y</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// final transform</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; x = t;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; *((uint32_t*)B) = y;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; *((uint32_t*)(B+4)) = x;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">// Simplified form of bits rotating function found here - http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;__attribute__((always_inline)) inline <span class="keywordtype">void</span> transpose8x1_MSB(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *A, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *B) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; uint32_t x, y, t;</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="comment">// Load the array and pack it into x and y.</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// pre-transform x</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</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="comment">// pre-transform y</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</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">// final transform</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; x = t;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; B[7] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; B[6] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; B[5] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; B[4] = y;</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; B[3] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; B[2] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; B[1] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; B[0] = x; <span class="comment">/* */</span></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;<span class="comment">// templated bit-rotating function based on code found here - http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> m, <span class="keywordtype">int</span> n&gt;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;__attribute__((always_inline)) inline <span class="keywordtype">void</span> transpose8(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *A, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *B) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; uint32_t x, y, t;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// Load the array and pack it into x and y.</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span>(m == 1) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; x = (A[0]&lt;&lt;24) | (A[m]&lt;&lt;16) | (A[2*m]&lt;&lt;8) | A[3*m];</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; y = (A[4*m]&lt;&lt;24) | (A[5*m]&lt;&lt;16) | (A[6*m]&lt;&lt;8) | A[7*m];</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// pre-transform x</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</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="comment">// pre-transform y</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// final transform</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; x = t;</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; B[7*n] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; B[6*n] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; B[5*n] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; B[4*n] = 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; B[3*n] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; B[2*n] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; B[n] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; B[0] = x;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// B[0]=x&gt;&gt;24; B[n]=x&gt;&gt;16; B[2*n]=x&gt;&gt;8; B[3*n]=x&gt;&gt;0;</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// B[4*n]=y&gt;&gt;24; B[5*n]=y&gt;&gt;16; B[6*n]=y&gt;&gt;8; B[7*n]=y&gt;&gt;0;</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/chipsets_8h_source.html b/docs/3.1/chipsets_8h_source.html
new file mode 100644
index 00000000..71a674c7
--- /dev/null
+++ b/docs/3.1/chipsets_8h_source.html
@@ -0,0 +1,662 @@
+<!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.8"/>
+<title>FastLED: chipsets.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">chipsets.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_CHIPSETS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_CHIPSETS_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;<span class="preprocessor">#include &quot;pixeltypes.h&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// DeepPixel controller class - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(10)&gt;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="class_deep_pixel_controller.html"> 13</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_deep_pixel_controller.html">DeepPixelController</a> : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_s_p_i_output.html">SPIOutput&lt;DATA_PIN, CLOCK_PIN, SPI_SPEED&gt;</a> <a class="code" href="class_s_p_i_output.html">SPI</a>;</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; SPI mSPI;</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="keywordtype">void</span> writeStart() { mSPI.writeWord(0xFFFF); mSPI.writeWord(0xFFFF); }</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">void</span> writeStop() { mSPI.writeWord(0x0000); mSPI.writeWord(0x0000); }</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="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t r, uint8_t g, uint8_t b) __attribute__((always_inline)) {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; mSPI.writeByte(0xFF); mSPI.writeByte(r); mSPI.writeByte(g); mSPI.writeByte(b);</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="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="class_deep_pixel_controller.html">DeepPixelController</a>() {}</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; mSPI.init();</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;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; showColor(<a class="code" href="struct_c_r_g_b.html">CRGB</a>(0,0,0), nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a>(0,0,0));</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, getDither());</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; mSPI.select();</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; writeStart();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; writeStop();</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; mSPI.waitFully();</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, getDither());</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; mSPI.select();</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; writeStart();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; writeStop();</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; mSPI.release();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, getDither());</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; mSPI.select();</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; writeBoundary();</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; pixels.stepDithering();</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; writeBoundary();</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; mSPI.release();</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;};</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">// LPD8806 controller class - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">//</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="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(12) &gt;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html"> 94</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller</a> : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_s_p_i_output.html">SPIOutput&lt;DATA_PIN, CLOCK_PIN, SPI_SPEED&gt;</a> <a class="code" href="class_s_p_i_output.html">SPI</a>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">class </span>LPD8806_ADJUST {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// LPD8806 spec wants the high bit of every rgb data byte sent out to be set.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t adjust(<span class="keyword">register</span> uint8_t data) { <span class="keywordflow">return</span> ((data&gt;&gt;1) | 0x80) + ((data &amp;&amp; (data&lt;254)) &amp; 0x01); }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> postBlock(<span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; SPI::writeBytesValueRaw(0, ((len*3+63)&gt;&gt;6));</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; };</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; SPI mSPI;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordtype">int</span> mClearedLeds;</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; <span class="keywordtype">void</span> checkClear(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span>(nLeds &gt; mClearedLeds) {</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; clearLine(nLeds);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; mClearedLeds = nLeds;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">void</span> clearLine(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">int</span> n = ((nLeds*3 + 63) &gt;&gt; 6);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; mSPI.writeBytesValue(0, n);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller</a>() {}</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; mClearedLeds = 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; mSPI.writeBytesValueRaw(0x80, nLeds * 3);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; mSPI.writeBytesValueRaw(0, ((nLeds*3+63)&gt;&gt;6));</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">protected</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; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; mSPI.template writePixels&lt;0, LPD8806_ADJUST, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// TODO rgb-ize scale</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; mSPI.template writePixels&lt;0, LPD8806_ADJUST, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</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;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> CARGB *data, <span class="keywordtype">int</span> nLeds, uint8_t scale) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; checkClear(nLeds);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; mSPI.template writePixels&lt;0, LPD8806_ADJUST, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</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">#endif</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;};</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment">// WS2801 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(1)&gt;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html"> 162</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2801_controller.html">WS2801Controller</a> : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_s_p_i_output.html">SPIOutput&lt;DATA_PIN, CLOCK_PIN, SPI_SPEED&gt;</a> <a class="code" href="class_s_p_i_output.html">SPI</a>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; SPI mSPI;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="class_c_min_wait.html">CMinWait&lt;1000&gt;</a> mWaitDelay;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="class_w_s2801_controller.html">WS2801Controller</a>() {}</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; mWaitDelay.mark();</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; mSPI.writeBytesValue(0, nLeds*3);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; mWaitDelay.mark();</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; mSPI.template writePixels&lt;0, DATA_NOP, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; mWaitDelay.mark();</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; mSPI.template writePixels&lt;0, DATA_NOP, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; mWaitDelay.mark();</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;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; mSPI.template writePixels&lt;0, DATA_NOP, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; mWaitDelay.mark();</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="preprocessor">#endif</span></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="l00203"></a><span class="lineno"> 203</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(25)&gt;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="class_w_s2803_controller.html"> 204</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2803_controller.html">WS2803Controller</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2801_controller.html">WS2801Controller</a>&lt;DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED&gt; {};</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment">// APA102 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = BGR, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(12)&gt;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html"> 213</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_a_p_a102_controller.html">APA102Controller</a> : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_s_p_i_output.html">SPIOutput&lt;DATA_PIN, CLOCK_PIN, SPI_SPEED&gt;</a> <a class="code" href="class_s_p_i_output.html">SPI</a>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; SPI mSPI;</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="keywordtype">void</span> startBoundary() { mSPI.writeWord(0); mSPI.writeWord(0); }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordtype">void</span> endBoundary() { <span class="comment">/*mSPI.writeWord(0xFFFF); mSPI.writeWord(0xFFFF); */</span>}</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t b0, uint8_t b1, uint8_t b2) __attribute__((always_inline)) {</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; mSPI.writeByte(0xFF); mSPI.writeByte(b0); mSPI.writeByte(b1); mSPI.writeByte(b2);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="class_a_p_a102_controller.html">APA102Controller</a>() {}</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; showColor(<a class="code" href="struct_c_r_g_b.html">CRGB</a>(0,0,0), nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a>(0,0,0));</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, getDither());</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; mSPI.select();</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; startBoundary();</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; endBoundary();</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; mSPI.waitFully();</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, getDither());</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; startBoundary();</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; endBoundary();</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, getDither());</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; startBoundary();</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; endBoundary();</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;};</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment">// P9813 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(10)&gt;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="class_p9813_controller.html"> 296</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_p9813_controller.html">P9813Controller</a> : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_s_p_i_output.html">SPIOutput&lt;DATA_PIN, CLOCK_PIN, SPI_SPEED&gt;</a> <a class="code" href="class_s_p_i_output.html">SPI</a>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; SPI mSPI;</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="keywordtype">void</span> writeBoundary() { mSPI.writeWord(0); mSPI.writeWord(0); }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t r, uint8_t g, uint8_t b) __attribute__((always_inline)) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">register</span> uint8_t top = 0xC0 | ((~b &amp; 0xC0) &gt;&gt; 2) | ((~g &amp; 0xC0) &gt;&gt; 4) | ((~r &amp; 0xC0) &gt;&gt; 6);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; mSPI.writeByte(top); mSPI.writeByte(b); mSPI.writeByte(g); mSPI.writeByte(r);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="class_p9813_controller.html">P9813Controller</a>() {}</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; mSPI.init();</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="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; showColor(<a class="code" href="struct_c_r_g_b.html">CRGB</a>(0,0,0), nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a>(0,0,0));</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="keyword">protected</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; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, getDither());</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; mSPI.select();</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; writeBoundary();</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; writeBoundary();</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; mSPI.waitFully();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, getDither());</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; writeBoundary();</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; writeBoundary();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, getDither());</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; mSPI.select();</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; writeBoundary();</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; pixels.stepDithering();</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; writeBoundary();</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; mSPI.release();</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;};</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment">// SM16716 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, u<span class="keywordtype">int</span>8_t SPI_SPEED = DATA_RATE_MHZ(16)&gt;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html"> 379</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_m16716_controller.html">SM16716Controller</a> : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_s_p_i_output.html">SPIOutput&lt;DATA_PIN, CLOCK_PIN, SPI_SPEED&gt;</a> <a class="code" href="class_s_p_i_output.html">SPI</a>;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; SPI mSPI;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">void</span> writeHeader() {</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// Write out 50 zeros to the spi line (6 blocks of 8 followed by two single bit writes)</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; mSPI.writeBytesValueRaw(0, 6);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; mSPI.waitFully();</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="class_s_m16716_controller.html">SM16716Controller</a>() {}</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; mSPI.template writeBit&lt;0&gt;(1);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; mSPI.writeByte(0);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; mSPI.writeByte(0);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; mSPI.writeByte(0);</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; mSPI.waitFully();</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; writeHeader();</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="keyword">protected</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="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; mSPI.template writePixels&lt;FLAG_START_BIT, DATA_NOP, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; writeHeader();</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;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// Make sure the FLAG_START_BIT flag is set to ensure that an extra 1 bit is sent at the start</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// of each triplet of bytes for rgb data</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// writeHeader();</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; mSPI.template writePixels&lt;FLAG_START_BIT, DATA_NOP, RGB_ORDER&gt;( <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; writeHeader();</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> CARGB *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; mSPI.writeBytesValue(0, 6);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// Make sure the FLAG_START_BIT flag is set to ensure that an extra 1 bit is sent at the start</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// of each triplet of bytes for rgb data</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; mSPI.template writePixels&lt;FLAG_START_BIT, DATA_NOP, RGB_ORDER&gt;(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a>(data, nLeds, scale, getDither()));</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;};</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment">// Clockless template instantiations - see clockless.h for how the timing values are used</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="comment">// We want to force all avr&#39;s to use the Trinket controller when running at 8Mhz, because even the 328&#39;s at 8Mhz</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="comment">// need the more tightly defined timeframes.</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#if (F_CPU == 8000000 || F_CPU == 16000000 || F_CPU == 24000000) // || F_CPU == 48000000 || F_CPU == 96000000) // 125ns/clock</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#define FMUL (F_CPU/8000000)</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment">// LPD1886</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="keyword">class </span><a class="code" href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 2 * FMUL, 3 * FMUL, 2 * FMUL, RGB_ORDER, 4&gt; {};</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="comment">// WS2811@800khz 2 clocks, 5 clocks, 3 clocks</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">//class WS2811Controller800Khz : public ClocklessController&lt;DATA_PIN, 3 * FMUL, 4 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</span></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="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 4 * FMUL, 10 * FMUL, 6 * FMUL, RGB_ORDER&gt; {};</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;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 4 * FMUL, 12 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 2 * FMUL, 4 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1803_controller400_khz.html">TM1803Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 6 * FMUL, 9 * FMUL, 6 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1829_controller800_khz.html">TM1829Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="keyword">class </span><a class="code" href="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 6 * FMUL, 7 * FMUL, 6 * FMUL, RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="keyword">class </span><a class="code" href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 2 * FMUL, 4 * FMUL, 4 * FMUL, RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment">// GW6205@400khz - 800ns, 800ns, 800ns</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"><a class="line" href="class_g_w6205_controller400_khz.html"> 487</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(800), NS(800), NS(800), RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="preprocessor">#if NO_TIME(800, 800, 800)</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the GW6205@400khz&quot;</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment">// GW6205@400khz - 400ns, 400ns, 400ns</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="class_g_w6205_controller800_khz.html"> 494</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(400), NS(400), NS(400), RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="preprocessor">#if NO_TIME(400, 400, 400)</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the GW6205@400khz&quot;</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="comment">// UCS1903 - 500ns, 1500ns, 500ns</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="class_u_c_s1903_controller400_khz.html"> 501</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(500), NS(1500), NS(500), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="preprocessor">#if NO_TIME(500, 1500, 500)</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS103@400khz&quot;</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment">// UCS1903B - 400ns, 450ns, 450ns</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="class_u_c_s1903_b_controller800_khz.html"> 508</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(400), NS(450), NS(450), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="preprocessor">#if NO_TIME(400, 450, 450)</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS103B@800khz&quot;</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="comment">// TM1809 - 350ns, 350ns, 550ns</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"><a class="line" href="class_t_m1809_controller800_khz.html"> 515</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(350), NS(350), NS(450), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="preprocessor">#if NO_TIME(350, 350, 550)</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the TM1809&quot;</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="comment">// WS2811 - 320ns, 320ns, 640ns</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="class_w_s2811_controller800_khz.html"> 522</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="preprocessor">#if NO_TIME(320, 320, 640)</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2811 (800khz)&quot;</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="comment">// WS2811@400khz - 800ns, 800ns, 900ns</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="class_w_s2811_controller400_khz.html"> 529</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(800), NS(800), NS(900), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="preprocessor">#if NO_TIME(800, 800, 900)</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2811 (400Khz)&quot;</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">// 750NS, 750NS, 750NS</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="class_t_m1803_controller400_khz.html"> 536</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1803_controller400_khz.html">TM1803Controller400Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(700), NS(1100), NS(700), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="preprocessor">#if NO_TIME(750, 750, 750)</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the TM1803&quot;</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="class_t_m1829_controller800_khz.html"> 542</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1829_controller800_khz.html">TM1829Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(340), NS(340), NS(550), RGB_ORDER, 0, true, 500&gt; {};</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="class_t_m1829_controller1600_khz.html"> 545</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_t_m1829_controller1600_khz.html">TM1829Controller1600Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(100), NS(300), NS(200), RGB_ORDER, 0, true, 500&gt; {};</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="preprocessor">#if NO_TIME(100, 300, 200)</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for TM1829@1.6Mhz&quot;</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="class_l_p_d1886_controller1250_khz.html"> 551</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(200), NS(400), NS(200), RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="preprocessor">#if NO_TIME(200,400,200)</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles for LPD1886&quot;</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_s_p_i_output_html"><div class="ttname"><a href="class_s_p_i_output.html">SPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></div></div>
+<div class="ttc" id="class_u_c_s1903_controller400_khz_html"><div class="ttname"><a href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:501</div></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html"><div class="ttname"><a href="class_c_l_e_d_controller.html">CLEDController</a></div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
+<div class="ttc" id="class_w_s2811_controller800_khz_html"><div class="ttname"><a href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:522</div></div>
+<div class="ttc" id="class_t_m1829_controller1600_khz_html"><div class="ttname"><a href="class_t_m1829_controller1600_khz.html">TM1829Controller1600Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:545</div></div>
+<div class="ttc" id="class_l_p_d8806_controller_html"><div class="ttname"><a href="class_l_p_d8806_controller.html">LPD8806Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:94</div></div>
+<div class="ttc" id="class_u_c_s1903_b_controller800_khz_html"><div class="ttname"><a href="class_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:508</div></div>
+<div class="ttc" id="class_g_w6205_controller800_khz_html"><div class="ttname"><a href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:494</div></div>
+<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdef"><b>Definition:</b> controller.h:158</div></div>
+<div class="ttc" id="class_t_m1803_controller400_khz_html"><div class="ttname"><a href="class_t_m1803_controller400_khz.html">TM1803Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:536</div></div>
+<div class="ttc" id="class_t_m1809_controller800_khz_html"><div class="ttname"><a href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:515</div></div>
+<div class="ttc" id="class_w_s2801_controller_html"><div class="ttname"><a href="class_w_s2801_controller.html">WS2801Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:162</div></div>
+<div class="ttc" id="class_l_p_d1886_controller1250_khz_html"><div class="ttname"><a href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:551</div></div>
+<div class="ttc" id="class_t_m1829_controller800_khz_html"><div class="ttname"><a href="class_t_m1829_controller800_khz.html">TM1829Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:542</div></div>
+<div class="ttc" id="class_c_min_wait_html"><div class="ttname"><a href="class_c_min_wait.html">CMinWait&lt; 1000 &gt;</a></div></div>
+<div class="ttc" id="class_p9813_controller_html"><div class="ttname"><a href="class_p9813_controller.html">P9813Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:296</div></div>
+<div class="ttc" id="class_g_w6205_controller400_khz_html"><div class="ttname"><a href="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:487</div></div>
+<div class="ttc" id="class_w_s2811_controller400_khz_html"><div class="ttname"><a href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:529</div></div>
+<div class="ttc" id="class_a_p_a102_controller_html"><div class="ttname"><a href="class_a_p_a102_controller.html">APA102Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:213</div></div>
+<div class="ttc" id="class_deep_pixel_controller_html"><div class="ttname"><a href="class_deep_pixel_controller.html">DeepPixelController</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:13</div></div>
+<div class="ttc" id="class_w_s2803_controller_html"><div class="ttname"><a href="class_w_s2803_controller.html">WS2803Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:204</div></div>
+<div class="ttc" id="class_s_m16716_controller_html"><div class="ttname"><a href="class_s_m16716_controller.html">SM16716Controller</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:379</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class___d_u_e_p_i_n-members.html b/docs/3.1/class___d_u_e_p_i_n-members.html
new file mode 100644
index 00000000..a73cd1f7
--- /dev/null
+++ b/docs/3.1/class___d_u_e_p_i_n-members.html
@@ -0,0 +1,118 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fastset</b>(register port_ptr_t port, register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isset</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>port_t</b> typedef (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a>)</td><td class="entry"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class___d_u_e_p_i_n.html b/docs/3.1/class___d_u_e_p_i_n.html
new file mode 100644
index 00000000..10c71bbf
--- /dev/null
+++ b/docs/3.1/class___d_u_e_p_i_n.html
@@ -0,0 +1,170 @@
+<!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.8"/>
+<title>FastLED: _DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="class___d_u_e_p_i_n-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="fastpin__arm__stm32_8h_source.html">fastpin_arm_stm32.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a6e8765482fb043c183571b8a30fa7eee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e8765482fb043c183571b8a30fa7eee"></a>
+typedef volatile uint32_t *&#160;</td><td class="memItemRight" valign="bottom"><b>port_ptr_t</b></td></tr>
+<tr class="separator:a6e8765482fb043c183571b8a30fa7eee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdf6155a1790c7395433ae767af4ab29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdf6155a1790c7395433ae767af4ab29"></a>
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
+<tr class="separator:abdf6155a1790c7395433ae767af4ab29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:ace727b1f5aeb5e72983c47a2e9d02d34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace727b1f5aeb5e72983c47a2e9d02d34"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>setOutput</b> ()</td></tr>
+<tr class="separator:ace727b1f5aeb5e72983c47a2e9d02d34"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abaeeb144a24438e7598a2b681f43aae0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abaeeb144a24438e7598a2b681f43aae0"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>setInput</b> ()</td></tr>
+<tr class="separator:abaeeb144a24438e7598a2b681f43aae0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aceecac4b9adcb0f2f5214c344bc62b36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aceecac4b9adcb0f2f5214c344bc62b36"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:aceecac4b9adcb0f2f5214c344bc62b36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ae548d07cb21bb82a09e3717bfb7d47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ae548d07cb21bb82a09e3717bfb7d47"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a8ae548d07cb21bb82a09e3717bfb7d47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6fb01da3081b7fda2e38b6ced1f79c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6fb01da3081b7fda2e38b6ced1f79c9"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>set</b> (register port_t val) __attribute__((always_inline))</td></tr>
+<tr class="separator:ab6fb01da3081b7fda2e38b6ced1f79c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d63c20fe7a3d45875bf9b01d01ab381"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d63c20fe7a3d45875bf9b01d01ab381"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>strobe</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a6d63c20fe7a3d45875bf9b01d01ab381"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad96694981e5e1decc3cd1094219fc757"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad96694981e5e1decc3cd1094219fc757"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>toggle</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:ad96694981e5e1decc3cd1094219fc757"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5a6b423d992061aa1d60b58c93e4e9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5a6b423d992061aa1d60b58c93e4e9d"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> (register port_ptr_t port) __attribute__((always_inline))</td></tr>
+<tr class="separator:ad5a6b423d992061aa1d60b58c93e4e9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa109d0b2d93d0c875301a03c39516270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa109d0b2d93d0c875301a03c39516270"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> (register port_ptr_t port) __attribute__((always_inline))</td></tr>
+<tr class="separator:aa109d0b2d93d0c875301a03c39516270"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5268831a70b53eb2522d630987d5134"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5268831a70b53eb2522d630987d5134"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>fastset</b> (register port_ptr_t port, register port_t val) __attribute__((always_inline))</td></tr>
+<tr class="separator:ae5268831a70b53eb2522d630987d5134"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab20067564443bdf8ac0d1776c970c00b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab20067564443bdf8ac0d1776c970c00b"></a>
+static port_t&#160;</td><td class="memItemRight" valign="bottom"><b>hival</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:ab20067564443bdf8ac0d1776c970c00b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d3e266cc81eb5aa8f9be5fb2b304303"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d3e266cc81eb5aa8f9be5fb2b304303"></a>
+static port_t&#160;</td><td class="memItemRight" valign="bottom"><b>loval</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a5d3e266cc81eb5aa8f9be5fb2b304303"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7b177b3ee4ba97d973de8e897ff9216"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7b177b3ee4ba97d973de8e897ff9216"></a>
+static port_ptr_t&#160;</td><td class="memItemRight" valign="bottom"><b>port</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:ae7b177b3ee4ba97d973de8e897ff9216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac30814c1d401c4622ae299b766e72c31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac30814c1d401c4622ae299b766e72c31"></a>
+static port_t&#160;</td><td class="memItemRight" valign="bottom"><b>mask</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:ac30814c1d401c4622ae299b766e72c31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48f988e538ccfb1ec87866ba84a90ae9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48f988e538ccfb1ec87866ba84a90ae9"></a>
+static bool&#160;</td><td class="memItemRight" valign="bottom"><b>isset</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a48f988e538ccfb1ec87866ba84a90ae9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template&lt;uint8_t PIN, uint32_t _MASK, typename _ODR, typename _BSRR, typename _BRR&gt;<br />
+class _DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</h3>
+
+<p>Template definition for STM32 style ARM pins, providing direct access to the various GPIO registers. Note that this uses the full port GPIO registers. The registers are data register(GPIOx_ODR), set output register (GPIOx_BSRR), clear output register (GPIOx_BRR), cheating and using "pinMode" to set output for now, need to write raw register versions of those </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="fastpin__arm__stm32_8h_source.html">fastpin_arm_stm32.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_a_p_a102_controller-members.html b/docs/3.1/class_a_p_a102_controller-members.html
new file mode 100644
index 00000000..8def1387
--- /dev/null
+++ b/docs/3.1/class_a_p_a102_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>APA102Controller</b>() (defined in <a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_p_a102_controller.html">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_a_p_a102_controller.html b/docs/3.1/class_a_p_a102_controller.html
new file mode 100644
index 00000000..5682873f
--- /dev/null
+++ b/docs/3.1/class_a_p_a102_controller.html
@@ -0,0 +1,224 @@
+<!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.8"/>
+<title>FastLED: APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="class_a_p_a102_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_a_p_a102_controller.png" usemap="#APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,439,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a0e875981e076baf9cd1c5e7599b83cd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e875981e076baf9cd1c5e7599b83cd0"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:a0e875981e076baf9cd1c5e7599b83cd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aadcdde1b8fc6c680504fe9455ceff0fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadcdde1b8fc6c680504fe9455ceff0fb"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:aadcdde1b8fc6c680504fe9455ceff0fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a0aa9f2896fe8b23554623fd3de0d5428"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0aa9f2896fe8b23554623fd3de0d5428"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a0aa9f2896fe8b23554623fd3de0d5428"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a245148d2621eb73999ab673852c49332"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a245148d2621eb73999ab673852c49332"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a245148d2621eb73999ab673852c49332"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_a_p_a102_controller.png b/docs/3.1/class_a_p_a102_controller.png
new file mode 100644
index 00000000..30600623
--- /dev/null
+++ b/docs/3.1/class_a_p_a102_controller.png
Binary files differ
diff --git a/docs/3.1/class_a_p_a104.html b/docs/3.1/class_a_p_a104.html
new file mode 100644
index 00000000..fbcb5d84
--- /dev/null
+++ b/docs/3.1/class_a_p_a104.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: APA104&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">APA104&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for APA104&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_a_p_a104.png" usemap="#APA104&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="APA104&lt; DATA_PIN, RGB_ORDER &gt;_map" name="APA104&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_w_s2811_controller800_khz.html" alt="WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_a_p_a104.png b/docs/3.1/class_a_p_a104.png
new file mode 100644
index 00000000..61c2943f
--- /dev/null
+++ b/docs/3.1/class_a_p_a104.png
Binary files differ
diff --git a/docs/3.1/class_a_v_r_software_s_p_i_output-members.html b/docs/3.1/class_a_v_r_software_s_p_i_output-members.html
new file mode 100644
index 00000000..340e8163
--- /dev/null
+++ b/docs/3.1/class_a_v_r_software_s_p_i_output-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline, hot)) inline static void writeBit(uint8_t b) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>AVRSoftwareSPIOutput</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AVRSoftwareSPIOutput</b>(Selectable *pSelect) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setSelect</b>(Selectable *pSelect) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>stop</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>wait</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>waitFully</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeByte</b>(uint8_t b) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeByteNoWait</b>(uint8_t b) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeBytePostWait</b>(uint8_t b) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeWord</b>(uint16_t w) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_a_v_r_software_s_p_i_output.html b/docs/3.1/class_a_v_r_software_s_p_i_output.html
new file mode 100644
index 00000000..737c7fce
--- /dev/null
+++ b/docs/3.1/class_a_v_r_software_s_p_i_output.html
@@ -0,0 +1,146 @@
+<!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.8"/>
+<title>FastLED: AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="class_a_v_r_software_s_p_i_output-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4861c18158eb19fd6dd0bba6d8b8f801"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4861c18158eb19fd6dd0bba6d8b8f801"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>AVRSoftwareSPIOutput</b> (<a class="el" href="class_selectable.html">Selectable</a> *pSelect)</td></tr>
+<tr class="separator:a4861c18158eb19fd6dd0bba6d8b8f801"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a27039fa3167dd2dded755d4c9dcb19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a27039fa3167dd2dded755d4c9dcb19"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setSelect</b> (<a class="el" href="class_selectable.html">Selectable</a> *pSelect)</td></tr>
+<tr class="separator:a2a27039fa3167dd2dded755d4c9dcb19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae321dbae3fceaa2d73a98f6aa08ea3c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae321dbae3fceaa2d73a98f6aa08ea3c5"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:ae321dbae3fceaa2d73a98f6aa08ea3c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a896113d6f2ee898b962076f1343f31"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0a896113d6f2ee898b962076f1343f31"></a>
+template&lt;uint8_t BIT&gt; </td></tr>
+<tr class="memitem:a0a896113d6f2ee898b962076f1343f31"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline, hot)) inline static void writeBit(uint8_t b)</td></tr>
+<tr class="separator:a0a896113d6f2ee898b962076f1343f31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a8f9e5393c85f3f44cb3c44718bdd952c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f9e5393c85f3f44cb3c44718bdd952c"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>stop</b> ()</td></tr>
+<tr class="separator:a8f9e5393c85f3f44cb3c44718bdd952c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3b93ed0bcca8655eb91c8f3d8a63c28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3b93ed0bcca8655eb91c8f3d8a63c28"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>wait</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:aa3b93ed0bcca8655eb91c8f3d8a63c28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13be31fed768f180d1a4e2c30062afb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13be31fed768f180d1a4e2c30062afb5"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>waitFully</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a13be31fed768f180d1a4e2c30062afb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a832b5561fb4f2d6f119260878ff1bac1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a832b5561fb4f2d6f119260878ff1bac1"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByteNoWait</b> (uint8_t b) __attribute__((always_inline))</td></tr>
+<tr class="separator:a832b5561fb4f2d6f119260878ff1bac1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae953d7990acf835c01c34c7531e7a144"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae953d7990acf835c01c34c7531e7a144"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeBytePostWait</b> (uint8_t b) __attribute__((always_inline))</td></tr>
+<tr class="separator:ae953d7990acf835c01c34c7531e7a144"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3dc658230927145b6b3c8816275ad18d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3dc658230927145b6b3c8816275ad18d"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeWord</b> (uint16_t w) __attribute__((always_inline))</td></tr>
+<tr class="separator:a3dc658230927145b6b3c8816275ad18d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58393081ec8c54bd6968642b89e8bd43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58393081ec8c54bd6968642b89e8bd43"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByte</b> (uint8_t b)</td></tr>
+<tr class="separator:a58393081ec8c54bd6968642b89e8bd43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="fastspi__bitbang_8h_source.html">fastspi_bitbang.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_fast_l_e_d-members.html b/docs/3.1/class_c_fast_l_e_d-members.html
new file mode 100644
index 00000000..700a59c3
--- /dev/null
+++ b/docs/3.1/class_c_fast_l_e_d-members.html
@@ -0,0 +1,130 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CFastLED Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addLeds</b>(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addLeds</b>(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CFastLED</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>(boolean writeData=false) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearData</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>count</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>countFPS</b>(int nFrames=25) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>delay</b>(unsigned long ms) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getBrightness</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getFPS</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setBrightness</b>(uint8_t scale) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(const struct CRGB &amp;correction) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setMaxRefreshRate</b>(uint16_t refresh) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(const struct CRGB &amp;temp) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b">show</a>(uint8_t scale)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>()</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;color, uint8_t scale) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;color) (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>)</td><td class="entry"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_fast_l_e_d.html b/docs/3.1/class_c_fast_l_e_d.html
new file mode 100644
index 00000000..0dda9693
--- /dev/null
+++ b/docs/3.1/class_c_fast_l_e_d.html
@@ -0,0 +1,207 @@
+<!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.8"/>
+<title>FastLED: CFastLED Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="class_c_fast_l_e_d-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CFastLED Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a79df28eb68fc2062b995f9000aed274c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a79df28eb68fc2062b995f9000aed274c"></a>
+template&lt;ESPIChipsets CHIPSET, uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER, uint8_t SPI_DATA_RATE&gt; </td></tr>
+<tr class="memitem:a79df28eb68fc2062b995f9000aed274c"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:a79df28eb68fc2062b995f9000aed274c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a730ba7d967e882b4b893689cf333b2eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a730ba7d967e882b4b893689cf333b2eb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setBrightness</b> (uint8_t scale)</td></tr>
+<tr class="separator:a730ba7d967e882b4b893689cf333b2eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2615781ec12e025fb17cc0e66281716"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2615781ec12e025fb17cc0e66281716"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getBrightness</b> ()</td></tr>
+<tr class="separator:ac2615781ec12e025fb17cc0e66281716"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a83afdd1e2a21f33ac4f8d2610d6e331b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83afdd1e2a21f33ac4f8d2610d6e331b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b">show</a> (uint8_t scale)</td></tr>
+<tr class="memdesc:a83afdd1e2a21f33ac4f8d2610d6e331b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update all our controllers with the current led colors, using the passed in brightness. <br /></td></tr>
+<tr class="separator:a83afdd1e2a21f33ac4f8d2610d6e331b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3adb23ec5f919524928d576002cb45de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3adb23ec5f919524928d576002cb45de"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a> ()</td></tr>
+<tr class="memdesc:a3adb23ec5f919524928d576002cb45de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update all our controllers with the current led colors. <br /></td></tr>
+<tr class="separator:a3adb23ec5f919524928d576002cb45de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a042989511cbc42390620bedc196ea956"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a042989511cbc42390620bedc196ea956"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clear</b> (boolean writeData=false)</td></tr>
+<tr class="separator:a042989511cbc42390620bedc196ea956"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4f613f1b3e618528dca3189df88ce80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4f613f1b3e618528dca3189df88ce80"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearData</b> ()</td></tr>
+<tr class="separator:ac4f613f1b3e618528dca3189df88ce80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7315b060d295bad5fbd32e50eaaf02b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7315b060d295bad5fbd32e50eaaf02b0"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;color, uint8_t scale)</td></tr>
+<tr class="separator:a7315b060d295bad5fbd32e50eaaf02b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a570df74cf09e6215c3647333d2b479a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a570df74cf09e6215c3647333d2b479a9"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;color)</td></tr>
+<tr class="separator:a570df74cf09e6215c3647333d2b479a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6819ff831058a710d4582dfc09817202"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6819ff831058a710d4582dfc09817202"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>delay</b> (unsigned long ms)</td></tr>
+<tr class="separator:a6819ff831058a710d4582dfc09817202"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28c2dfb0ec592db03f3063ade135f19f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28c2dfb0ec592db03f3063ade135f19f"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;temp)</td></tr>
+<tr class="separator:a28c2dfb0ec592db03f3063ade135f19f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad266c3e649cc12a6dc49a1e229acc282"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad266c3e649cc12a6dc49a1e229acc282"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;correction)</td></tr>
+<tr class="separator:ad266c3e649cc12a6dc49a1e229acc282"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ae5d3864df01101d82d242c123ffb36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ae5d3864df01101d82d242c123ffb36"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a7ae5d3864df01101d82d242c123ffb36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09f4d61853d88482fa5824144c8127ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09f4d61853d88482fa5824144c8127ed"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setMaxRefreshRate</b> (uint16_t refresh)</td></tr>
+<tr class="separator:a09f4d61853d88482fa5824144c8127ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61d27e179c9b68bde89d220aebc0de32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61d27e179c9b68bde89d220aebc0de32"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>countFPS</b> (int nFrames=25)</td></tr>
+<tr class="separator:a61d27e179c9b68bde89d220aebc0de32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8c3ae3381e524ce30b181ffa23b83cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8c3ae3381e524ce30b181ffa23b83cd"></a>
+uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getFPS</b> ()</td></tr>
+<tr class="separator:aa8c3ae3381e524ce30b181ffa23b83cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5730545ea18b1f5228172f9d246beb6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5730545ea18b1f5228172f9d246beb6"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>count</b> ()</td></tr>
+<tr class="separator:ae5730545ea18b1f5228172f9d246beb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a646128b7d8c14b5020b285dbc8bc713b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a646128b7d8c14b5020b285dbc8bc713b"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a646128b7d8c14b5020b285dbc8bc713b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18fba22754d2a1a206fc5db8d24a92d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18fba22754d2a1a206fc5db8d24a92d0"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a18fba22754d2a1a206fc5db8d24a92d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3c0a81b88fb64a65725cb2fed67f766"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3c0a81b88fb64a65725cb2fed67f766"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:ae3c0a81b88fb64a65725cb2fed67f766"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:afd7928d822589740af6e23b2d510cf3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd7928d822589740af6e23b2d510cf3f"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>addLeds</b> (<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *pLed, struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:afd7928d822589740af6e23b2d510cf3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"></a>
+template&lt;ESPIChipsets CHIPSET, uint8_t DATA_PIN, uint8_t CLOCK_PIN&gt; </td></tr>
+<tr class="memitem:aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a7a603a5f0f503fe453dde049f315a8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5a7a603a5f0f503fe453dde049f315a8"></a>
+template&lt;ESPIChipsets CHIPSET, uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER&gt; </td></tr>
+<tr class="memitem:a5a7a603a5f0f503fe453dde049f315a8"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:a5a7a603a5f0f503fe453dde049f315a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4dff92f45048399edb0812a02ab9d96"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac4dff92f45048399edb0812a02ab9d96"></a>
+template&lt;template&lt; uint8_t DATA_PIN &gt; class CHIPSET, uint8_t DATA_PIN&gt; </td></tr>
+<tr class="memitem:ac4dff92f45048399edb0812a02ab9d96"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:ac4dff92f45048399edb0812a02ab9d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"></a>
+template&lt;template&lt; uint8_t DATA_PIN, EOrder RGB_ORDER &gt; class CHIPSET, uint8_t DATA_PIN, EOrder RGB_ORDER&gt; </td></tr>
+<tr class="memitem:aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4dff92f45048399edb0812a02ab9d96"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac4dff92f45048399edb0812a02ab9d96"></a>
+template&lt;template&lt; uint8_t DATA_PIN, EOrder RGB_ORDER &gt; class CHIPSET, uint8_t DATA_PIN&gt; </td></tr>
+<tr class="memitem:ac4dff92f45048399edb0812a02ab9d96"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:ac4dff92f45048399edb0812a02ab9d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4912fec504ea01e8f867c4819240cba9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4912fec504ea01e8f867c4819240cba9"></a>
+template&lt;template&lt; EOrder RGB_ORDER &gt; class CHIPSET&gt; </td></tr>
+<tr class="memitem:a4912fec504ea01e8f867c4819240cba9"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:a4912fec504ea01e8f867c4819240cba9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4dff92f45048399edb0812a02ab9d96"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac4dff92f45048399edb0812a02ab9d96"></a>
+template&lt;template&lt; EOrder RGB_ORDER &gt; class CHIPSET, EOrder RGB_ORDER&gt; </td></tr>
+<tr class="memitem:ac4dff92f45048399edb0812a02ab9d96"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>addLeds</b> (struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLedsOrOffset, int nLedsIfOffset=0)</td></tr>
+<tr class="separator:ac4dff92f45048399edb0812a02ab9d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+<li>FastLED.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_h_s_v_palette16-members.html b/docs/3.1/class_c_h_s_v_palette16-members.html
new file mode 100644
index 00000000..4a3507cd
--- /dev/null
+++ b/docs/3.1/class_c_h_s_v_palette16-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CHSVPalette16 Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette16</b>() (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette16</b>(const CHSV &amp;c00, const CHSV &amp;c01, const CHSV &amp;c02, const CHSV &amp;c03, const CHSV &amp;c04, const CHSV &amp;c05, const CHSV &amp;c06, const CHSV &amp;c07, const CHSV &amp;c08, const CHSV &amp;c09, const CHSV &amp;c10, const CHSV &amp;c11, const CHSV &amp;c12, const CHSV &amp;c13, const CHSV &amp;c14, const CHSV &amp;c15) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette16</b>(const CHSVPalette16 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette16</b>(const TProgmemHSVPalette16 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette16</b>(const CHSV &amp;c1) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette16</b>(const CHSV &amp;c1, const CHSV &amp;c2) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette16</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette16</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3, const CHSV &amp;c4) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>entries</b> (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator CHSV *</b>() (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CHSVPalette16 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const TProgmemHSVPalette16 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uint8_t x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uint8_t x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_h_s_v_palette16.html b/docs/3.1/class_c_h_s_v_palette16.html
new file mode 100644
index 00000000..629a4498
--- /dev/null
+++ b/docs/3.1/class_c_h_s_v_palette16.html
@@ -0,0 +1,157 @@
+<!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.8"/>
+<title>FastLED: CHSVPalette16 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="class_c_h_s_v_palette16-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CHSVPalette16 Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1064c968185cde7a9327c4b2906163d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1064c968185cde7a9327c4b2906163d7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c00, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c01, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c02, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c03, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c04, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c05, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c06, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c07, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c08, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c09, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c10, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c11, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c12, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c13, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c14, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c15)</td></tr>
+<tr class="separator:a1064c968185cde7a9327c4b2906163d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e1f91d881fb9fa7a9d1deac88d7c81f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e1f91d881fb9fa7a9d1deac88d7c81f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;rhs)</td></tr>
+<tr class="separator:a0e1f91d881fb9fa7a9d1deac88d7c81f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a208b03ec388794b499a4e7b29e2ff16b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a208b03ec388794b499a4e7b29e2ff16b"></a>
+<a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;rhs)</td></tr>
+<tr class="separator:a208b03ec388794b499a4e7b29e2ff16b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9be67d10e628b78f687c4f415d037408"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9be67d10e628b78f687c4f415d037408"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const TProgmemHSVPalette16 &amp;rhs)</td></tr>
+<tr class="separator:a9be67d10e628b78f687c4f415d037408"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fc8bf192a46e1ab12f37bfe46a4e900"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fc8bf192a46e1ab12f37bfe46a4e900"></a>
+<a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const TProgmemHSVPalette16 &amp;rhs)</td></tr>
+<tr class="separator:a6fc8bf192a46e1ab12f37bfe46a4e900"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc45313f03375b3ac440e5cf07024bcd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc45313f03375b3ac440e5cf07024bcd"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) __attribute__((always_inline))</td></tr>
+<tr class="separator:abc45313f03375b3ac440e5cf07024bcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c3ebb778f44e3674b5d367112e4f7c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c3ebb778f44e3674b5d367112e4f7c5"></a>
+const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:a4c3ebb778f44e3674b5d367112e4f7c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5021e6638a568b7a743ceeafdc7374ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5021e6638a568b7a743ceeafdc7374ef"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a5021e6638a568b7a743ceeafdc7374ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6858c6d53deb94205b8835e903799cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6858c6d53deb94205b8835e903799cd"></a>
+const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:ab6858c6d53deb94205b8835e903799cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c43a80ad28000fffc27f6e1c136d60c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c43a80ad28000fffc27f6e1c136d60c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator CHSV *</b> ()</td></tr>
+<tr class="separator:a3c43a80ad28000fffc27f6e1c136d60c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a027e4e8f0ea7f2e8622e2376e3699e40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a027e4e8f0ea7f2e8622e2376e3699e40"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1)</td></tr>
+<tr class="separator:a027e4e8f0ea7f2e8622e2376e3699e40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fada768a11557b0d7208559a29a6574"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4fada768a11557b0d7208559a29a6574"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2)</td></tr>
+<tr class="separator:a4fada768a11557b0d7208559a29a6574"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b703bdc978a2744a8c53a1eda144527"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b703bdc978a2744a8c53a1eda144527"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3)</td></tr>
+<tr class="separator:a9b703bdc978a2744a8c53a1eda144527"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3bb9f808013ee2a38391ff7bcb5e5768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bb9f808013ee2a38391ff7bcb5e5768"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c4)</td></tr>
+<tr class="separator:a3bb9f808013ee2a38391ff7bcb5e5768"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a6cc1334bd85a67500f9e21829754f073"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cc1334bd85a67500f9e21829754f073"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a>&#160;</td><td class="memItemRight" valign="bottom"><b>entries</b> [16]</td></tr>
+<tr class="separator:a6cc1334bd85a67500f9e21829754f073"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class 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 Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_h_s_v_palette256-members.html b/docs/3.1/class_c_h_s_v_palette256-members.html
new file mode 100644
index 00000000..411143a9
--- /dev/null
+++ b/docs/3.1/class_c_h_s_v_palette256-members.html
@@ -0,0 +1,119 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CHSVPalette256 Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette256</b>() (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette256</b>(const CHSV &amp;c00, const CHSV &amp;c01, const CHSV &amp;c02, const CHSV &amp;c03, const CHSV &amp;c04, const CHSV &amp;c05, const CHSV &amp;c06, const CHSV &amp;c07, const CHSV &amp;c08, const CHSV &amp;c09, const CHSV &amp;c10, const CHSV &amp;c11, const CHSV &amp;c12, const CHSV &amp;c13, const CHSV &amp;c14, const CHSV &amp;c15) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette256</b>(const CHSVPalette256 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette256</b>(const CHSVPalette16 &amp;rhs16) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette256</b>(const TProgmemRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette256</b>(const CHSV &amp;c1) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette256</b>(const CHSV &amp;c1, const CHSV &amp;c2) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSVPalette256</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSVPalette256</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3, const CHSV &amp;c4) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>entries</b> (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator CHSV *</b>() (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const CHSVPalette256 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CHSVPalette16 &amp;rhs16) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const TProgmemRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uint8_t x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uint8_t x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>)</td><td class="entry"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_h_s_v_palette256.html b/docs/3.1/class_c_h_s_v_palette256.html
new file mode 100644
index 00000000..33facb30
--- /dev/null
+++ b/docs/3.1/class_c_h_s_v_palette256.html
@@ -0,0 +1,163 @@
+<!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.8"/>
+<title>FastLED: CHSVPalette256 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="class_c_h_s_v_palette256-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CHSVPalette256 Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a715d32d258a863a87027ea7685bad905"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a715d32d258a863a87027ea7685bad905"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c00, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c01, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c02, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c03, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c04, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c05, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c06, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c07, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c08, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c09, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c10, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c11, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c12, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c13, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c14, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c15)</td></tr>
+<tr class="separator:a715d32d258a863a87027ea7685bad905"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7d9feb50a20cbf7ecb5bdfe21f20aed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7d9feb50a20cbf7ecb5bdfe21f20aed"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;rhs)</td></tr>
+<tr class="separator:ab7d9feb50a20cbf7ecb5bdfe21f20aed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a34374c267c2068de620bf2b78c6b8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a34374c267c2068de620bf2b78c6b8d"></a>
+<a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;rhs)</td></tr>
+<tr class="separator:a1a34374c267c2068de620bf2b78c6b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93a00dbae141e2cf7355e31cd9922424"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93a00dbae141e2cf7355e31cd9922424"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;rhs16)</td></tr>
+<tr class="separator:a93a00dbae141e2cf7355e31cd9922424"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ad2d6935666e2646c875c20b0293c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ad2d6935666e2646c875c20b0293c94"></a>
+<a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;rhs16)</td></tr>
+<tr class="separator:a7ad2d6935666e2646c875c20b0293c94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae264ff69df414008b68087f2604767f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae264ff69df414008b68087f2604767f0"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const TProgmemRGBPalette16 &amp;rhs)</td></tr>
+<tr class="separator:ae264ff69df414008b68087f2604767f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9fec4dcc878ff77a0891fd15422e2f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9fec4dcc878ff77a0891fd15422e2f7"></a>
+<a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const TProgmemRGBPalette16 &amp;rhs)</td></tr>
+<tr class="separator:ad9fec4dcc878ff77a0891fd15422e2f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af0b600ebace4995abe6ed6a7d1dd372c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0b600ebace4995abe6ed6a7d1dd372c"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) __attribute__((always_inline))</td></tr>
+<tr class="separator:af0b600ebace4995abe6ed6a7d1dd372c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ef173864aeea1c6a86dc48c42e0a469"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ef173864aeea1c6a86dc48c42e0a469"></a>
+const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:a7ef173864aeea1c6a86dc48c42e0a469"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f02611688545b798c9335197d78084b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f02611688545b798c9335197d78084b"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a2f02611688545b798c9335197d78084b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a694e8b280618a63d808eb2b68218d6ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a694e8b280618a63d808eb2b68218d6ac"></a>
+const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:a694e8b280618a63d808eb2b68218d6ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e94a07280c6720c649fbc29d88764c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e94a07280c6720c649fbc29d88764c0"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator CHSV *</b> ()</td></tr>
+<tr class="separator:a2e94a07280c6720c649fbc29d88764c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b0595b0dcf855b06ddce441c6293ab5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b0595b0dcf855b06ddce441c6293ab5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1)</td></tr>
+<tr class="separator:a6b0595b0dcf855b06ddce441c6293ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad808860cad6f933512656816ab2f413a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad808860cad6f933512656816ab2f413a"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2)</td></tr>
+<tr class="separator:ad808860cad6f933512656816ab2f413a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae49aa99bec2e9fb4c9f40793b78c058"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae49aa99bec2e9fb4c9f40793b78c058"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3)</td></tr>
+<tr class="separator:aae49aa99bec2e9fb4c9f40793b78c058"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a334a05c5a377c734ee9f5566ca8e067e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a334a05c5a377c734ee9f5566ca8e067e"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSVPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c4)</td></tr>
+<tr class="separator:a334a05c5a377c734ee9f5566ca8e067e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a8c55e80085389ffd61a39cffd3dcba00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c55e80085389ffd61a39cffd3dcba00"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a>&#160;</td><td class="memItemRight" valign="bottom"><b>entries</b> [256]</td></tr>
+<tr class="separator:a8c55e80085389ffd61a39cffd3dcba00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class 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 Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_l_e_d_controller-members.html b/docs/3.1/class_c_l_e_d_controller-members.html
new file mode 100644
index 00000000..a9474093
--- /dev/null
+++ b/docs/3.1/class_c_l_e_d_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CLEDController Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CFastLED</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLeds</b>(int nLeds)=0 (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>()=0 (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale)=0 (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale)=0 (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_l_e_d_controller.html b/docs/3.1/class_c_l_e_d_controller.html
new file mode 100644
index 00000000..86112294
--- /dev/null
+++ b/docs/3.1/class_c_l_e_d_controller.html
@@ -0,0 +1,247 @@
+<!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.8"/>
+<title>FastLED: CLEDController Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-attribs">Protected Attributes</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> &#124;
+<a href="#friends">Friends</a> &#124;
+<a href="class_c_l_e_d_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CLEDController Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="controller_8h_source.html">controller.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for CLEDController:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_c_l_e_d_controller.png" usemap="#CLEDController_map" alt=""/>
+ <map id="CLEDController_map" name="CLEDController_map">
+<area href="class_a_p_a102_controller.html" alt="APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="0,56,449,80"/>
+<area href="class_deep_pixel_controller.html" alt="DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="459,56,908,80"/>
+<area href="class_l_p_d8806_controller.html" alt="LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="918,56,1367,80"/>
+<area href="class_p9813_controller.html" alt="P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="1377,56,1826,80"/>
+<area href="class_s_m16716_controller.html" alt="SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="1836,56,2285,80"/>
+<area href="class_w_s2801_controller.html" alt="WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="2295,56,2744,80"/>
+<area href="class_w_s2803_controller.html" alt="WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="2295,112,2744,136"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af877a15a5ec452780fbd1d359b8a9913"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af877a15a5ec452780fbd1d359b8a9913"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()=0</td></tr>
+<tr class="separator:af877a15a5ec452780fbd1d359b8a9913"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adfa6601c84fefd733904b32ac98b6dae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfa6601c84fefd733904b32ac98b6dae"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)=0</td></tr>
+<tr class="separator:adfa6601c84fefd733904b32ac98b6dae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a068fa50d8c7d31bd8537b731eea84c92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a068fa50d8c7d31bd8537b731eea84c92"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)=0</td></tr>
+<tr class="separator:a068fa50d8c7d31bd8537b731eea84c92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add284627121ffab140e083e84fadc37f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add284627121ffab140e083e84fadc37f"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)=0</td></tr>
+<tr class="separator:add284627121ffab140e083e84fadc37f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:accc1d3beec363be81b003f84f4838d62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accc1d3beec363be81b003f84f4838d62"></a>
+class&#160;</td><td class="memItemRight" valign="bottom"><b>CFastLED</b></td></tr>
+<tr class="separator:accc1d3beec363be81b003f84f4838d62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Base definition for an LED controller. Pretty much the methods that every LED controller object will make available. Note that the showARGB method is not impelemented for all controllers yet. Note also the methods for eventual checking of background writing of data (I'm looking at you, teensy 3.0 DMA controller!). If you want to pass LED controllers around to methods, make them references to this type, keeps your code saner. However, most people won't be seeing/using these objects directly at all </p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="controller_8h_source.html">controller.h</a></li>
+<li>FastLED.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_l_e_d_controller.png b/docs/3.1/class_c_l_e_d_controller.png
new file mode 100644
index 00000000..0580c1d6
--- /dev/null
+++ b/docs/3.1/class_c_l_e_d_controller.png
Binary files differ
diff --git a/docs/3.1/class_c_min_wait-members.html b/docs/3.1/class_c_min_wait-members.html
new file mode 100644
index 00000000..787440c3
--- /dev/null
+++ b/docs/3.1/class_c_min_wait-members.html
@@ -0,0 +1,104 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CMinWait&lt; WAIT &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CMinWait</b>() (defined in <a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a>)</td><td class="entry"><a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mark</b>() (defined in <a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a>)</td><td class="entry"><a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>wait</b>() (defined in <a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a>)</td><td class="entry"><a class="el" href="class_c_min_wait.html">CMinWait&lt; WAIT &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_min_wait.html b/docs/3.1/class_c_min_wait.html
new file mode 100644
index 00000000..f4e82d5f
--- /dev/null
+++ b/docs/3.1/class_c_min_wait.html
@@ -0,0 +1,114 @@
+<!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.8"/>
+<title>FastLED: CMinWait&lt; WAIT &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_c_min_wait-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CMinWait&lt; WAIT &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ace3c87d9015aa537d3ee2972657afad3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace3c87d9015aa537d3ee2972657afad3"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
+<tr class="separator:ace3c87d9015aa537d3ee2972657afad3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e1941c949810958262ff98f7b591b96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e1941c949810958262ff98f7b591b96"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>mark</b> ()</td></tr>
+<tr class="separator:a9e1941c949810958262ff98f7b591b96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="delay_8h_source.html">delay.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_r_g_b_palette16-members.html b/docs/3.1/class_c_r_g_b_palette16-members.html
new file mode 100644
index 00000000..f2155fb6
--- /dev/null
+++ b/docs/3.1/class_c_r_g_b_palette16-members.html
@@ -0,0 +1,123 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CRGBPalette16 Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>() (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette16</b>(const CRGB &amp;c00, const CRGB &amp;c01, const CRGB &amp;c02, const CRGB &amp;c03, const CRGB &amp;c04, const CRGB &amp;c05, const CRGB &amp;c06, const CRGB &amp;c07, const CRGB &amp;c08, const CRGB &amp;c09, const CRGB &amp;c10, const CRGB &amp;c11, const CRGB &amp;c12, const CRGB &amp;c13, const CRGB &amp;c14, const CRGB &amp;c15) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>(const CRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette16</b>(const CHSVPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>(const TProgmemRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette16</b>(const CHSV &amp;c1) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>(const CHSV &amp;c1, const CHSV &amp;c2) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette16</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3, const CHSV &amp;c4) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette16</b>(const CRGB &amp;c1) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>(const CRGB &amp;c1, const CRGB &amp;c2) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette16</b>(const CRGB &amp;c1, const CRGB &amp;c2, const CRGB &amp;c3) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette16</b>(const CRGB &amp;c1, const CRGB &amp;c2, const CRGB &amp;c3, const CRGB &amp;c4) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>entries</b> (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator CRGB *</b>() (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const CRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CHSVPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const TProgmemRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uint8_t x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uint8_t x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_r_g_b_palette16.html b/docs/3.1/class_c_r_g_b_palette16.html
new file mode 100644
index 00000000..154506e2
--- /dev/null
+++ b/docs/3.1/class_c_r_g_b_palette16.html
@@ -0,0 +1,175 @@
+<!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.8"/>
+<title>FastLED: CRGBPalette16 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="class_c_r_g_b_palette16-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CRGBPalette16 Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a46542c191b01f0799a1326316fcaac49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46542c191b01f0799a1326316fcaac49"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c00, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c01, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c02, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c03, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c04, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c05, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c06, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c07, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c08, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c09, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c10, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c11, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c12, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c13, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c14, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c15)</td></tr>
+<tr class="separator:a46542c191b01f0799a1326316fcaac49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab23fec1712e4c6bf707be19652df35f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab23fec1712e4c6bf707be19652df35f4"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;rhs)</td></tr>
+<tr class="separator:ab23fec1712e4c6bf707be19652df35f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aca75909eef135775ddc15e44e94e9e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca75909eef135775ddc15e44e94e9e8d"></a>
+<a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;rhs)</td></tr>
+<tr class="separator:aca75909eef135775ddc15e44e94e9e8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5fad1061f21e02b451e74173481d8bd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fad1061f21e02b451e74173481d8bd7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;rhs)</td></tr>
+<tr class="separator:a5fad1061f21e02b451e74173481d8bd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98225ec739aa1d48774e479e885258f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98225ec739aa1d48774e479e885258f7"></a>
+<a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;rhs)</td></tr>
+<tr class="separator:a98225ec739aa1d48774e479e885258f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ffc31b89df3b738f4cdb04012a0c7c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ffc31b89df3b738f4cdb04012a0c7c5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const TProgmemRGBPalette16 &amp;rhs)</td></tr>
+<tr class="separator:a0ffc31b89df3b738f4cdb04012a0c7c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e2866fd76857f99b6174a0bfa794328"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e2866fd76857f99b6174a0bfa794328"></a>
+<a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const TProgmemRGBPalette16 &amp;rhs)</td></tr>
+<tr class="separator:a1e2866fd76857f99b6174a0bfa794328"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71d9faa920f5ce3acd7fb96b24e30f86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71d9faa920f5ce3acd7fb96b24e30f86"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a71d9faa920f5ce3acd7fb96b24e30f86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6189bc29bd39b2eef24953f16b1e86be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6189bc29bd39b2eef24953f16b1e86be"></a>
+const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:a6189bc29bd39b2eef24953f16b1e86be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5dfbe59ccffa74d95f23caca4a7a50e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5dfbe59ccffa74d95f23caca4a7a50e6"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a5dfbe59ccffa74d95f23caca4a7a50e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a280eb7af64c9a6ae4ef14029240f81b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a280eb7af64c9a6ae4ef14029240f81b2"></a>
+const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:a280eb7af64c9a6ae4ef14029240f81b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7214b8bb0070f864dbc0d64d93250904"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7214b8bb0070f864dbc0d64d93250904"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator CRGB *</b> ()</td></tr>
+<tr class="separator:a7214b8bb0070f864dbc0d64d93250904"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a033c8a5975d58a1dd4d90ce443a345df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a033c8a5975d58a1dd4d90ce443a345df"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1)</td></tr>
+<tr class="separator:a033c8a5975d58a1dd4d90ce443a345df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafce34411cc96d598a7ed754cfca15b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafce34411cc96d598a7ed754cfca15b7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2)</td></tr>
+<tr class="separator:aafce34411cc96d598a7ed754cfca15b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a686509f57ddd29457c4ad60c838e7b44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a686509f57ddd29457c4ad60c838e7b44"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3)</td></tr>
+<tr class="separator:a686509f57ddd29457c4ad60c838e7b44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a341bf249fdb557428918e6c95a5b7d0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a341bf249fdb557428918e6c95a5b7d0a"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c4)</td></tr>
+<tr class="separator:a341bf249fdb557428918e6c95a5b7d0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade5399d22623dd135a908e467ac7d143"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade5399d22623dd135a908e467ac7d143"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1)</td></tr>
+<tr class="separator:ade5399d22623dd135a908e467ac7d143"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07ac22c5cd5b97ef006f38000dcd5052"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ac22c5cd5b97ef006f38000dcd5052"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c2)</td></tr>
+<tr class="separator:a07ac22c5cd5b97ef006f38000dcd5052"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ee47d64732750b038bec307f56b491d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ee47d64732750b038bec307f56b491d"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c2, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c3)</td></tr>
+<tr class="separator:a4ee47d64732750b038bec307f56b491d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3591fa5568e02f635bbeeff703d2e0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3591fa5568e02f635bbeeff703d2e0b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c2, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c3, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c4)</td></tr>
+<tr class="separator:ae3591fa5568e02f635bbeeff703d2e0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a0e7240b7d3dc5c79deceae9ff1d44f42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e7240b7d3dc5c79deceae9ff1d44f42"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>entries</b> [16]</td></tr>
+<tr class="separator:a0e7240b7d3dc5c79deceae9ff1d44f42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class 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 Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_r_g_b_palette256-members.html b/docs/3.1/class_c_r_g_b_palette256-members.html
new file mode 100644
index 00000000..35005d38
--- /dev/null
+++ b/docs/3.1/class_c_r_g_b_palette256-members.html
@@ -0,0 +1,125 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CRGBPalette256 Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>() (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const CRGB &amp;c00, const CRGB &amp;c01, const CRGB &amp;c02, const CRGB &amp;c03, const CRGB &amp;c04, const CRGB &amp;c05, const CRGB &amp;c06, const CRGB &amp;c07, const CRGB &amp;c08, const CRGB &amp;c09, const CRGB &amp;c10, const CRGB &amp;c11, const CRGB &amp;c12, const CRGB &amp;c13, const CRGB &amp;c14, const CRGB &amp;c15) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>(const CRGBPalette256 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const CHSVPalette256 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>(const CRGBPalette16 &amp;rhs16) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const TProgmemRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>(const CHSV &amp;c1) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const CHSV &amp;c1, const CHSV &amp;c2) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const CHSV &amp;c1, const CHSV &amp;c2, const CHSV &amp;c3, const CHSV &amp;c4) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>(const CRGB &amp;c1) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const CRGB &amp;c1, const CRGB &amp;c2) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGBPalette256</b>(const CRGB &amp;c1, const CRGB &amp;c2, const CRGB &amp;c3) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGBPalette256</b>(const CRGB &amp;c1, const CRGB &amp;c2, const CRGB &amp;c3, const CRGB &amp;c4) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>entries</b> (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator CRGB *</b>() (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CRGBPalette256 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const CHSVPalette256 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CRGBPalette16 &amp;rhs16) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const TProgmemRGBPalette16 &amp;rhs) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uint8_t x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uint8_t x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) const __attribute__((always_inline)) (defined in <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>)</td><td class="entry"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_c_r_g_b_palette256.html b/docs/3.1/class_c_r_g_b_palette256.html
new file mode 100644
index 00000000..6fab0fcb
--- /dev/null
+++ b/docs/3.1/class_c_r_g_b_palette256.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: CRGBPalette256 Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="class_c_r_g_b_palette256-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CRGBPalette256 Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a3bf77a8b27f5b647fe2ec7daba13084a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bf77a8b27f5b647fe2ec7daba13084a"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c00, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c01, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c02, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c03, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c04, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c05, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c06, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c07, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c08, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c09, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c10, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c11, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c12, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c13, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c14, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c15)</td></tr>
+<tr class="separator:a3bf77a8b27f5b647fe2ec7daba13084a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98f69fbb4046243df90aa0e77aa0a9b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98f69fbb4046243df90aa0e77aa0a9b9"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;rhs)</td></tr>
+<tr class="separator:a98f69fbb4046243df90aa0e77aa0a9b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a173cddd5e8ff97792505e457a68ccd92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a173cddd5e8ff97792505e457a68ccd92"></a>
+<a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;rhs)</td></tr>
+<tr class="separator:a173cddd5e8ff97792505e457a68ccd92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55c0146fef81bc6f8765db0ad4c57b3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55c0146fef81bc6f8765db0ad4c57b3a"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;rhs)</td></tr>
+<tr class="separator:a55c0146fef81bc6f8765db0ad4c57b3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61bc885ac072458b8f5144f63a29fb37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61bc885ac072458b8f5144f63a29fb37"></a>
+<a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;rhs)</td></tr>
+<tr class="separator:a61bc885ac072458b8f5144f63a29fb37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01b7d7154a1c785e367d127940f9d180"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01b7d7154a1c785e367d127940f9d180"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;rhs16)</td></tr>
+<tr class="separator:a01b7d7154a1c785e367d127940f9d180"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8bc5adc97198a3b7ef55dbd99ce0d99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8bc5adc97198a3b7ef55dbd99ce0d99"></a>
+<a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;rhs16)</td></tr>
+<tr class="separator:ae8bc5adc97198a3b7ef55dbd99ce0d99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a281ee2a2cf4a59dfc8deb8d0cd2fcef9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a281ee2a2cf4a59dfc8deb8d0cd2fcef9"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const TProgmemRGBPalette16 &amp;rhs)</td></tr>
+<tr class="separator:a281ee2a2cf4a59dfc8deb8d0cd2fcef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cb19dd01548c2c902e5217188552730"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cb19dd01548c2c902e5217188552730"></a>
+<a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const TProgmemRGBPalette16 &amp;rhs)</td></tr>
+<tr class="separator:a9cb19dd01548c2c902e5217188552730"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99bfa25583d04e68e6ef4d1626fff96b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99bfa25583d04e68e6ef4d1626fff96b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a99bfa25583d04e68e6ef4d1626fff96b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09bdede77e2a926e433548d2e8703d7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09bdede77e2a926e433548d2e8703d7d"></a>
+const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:a09bdede77e2a926e433548d2e8703d7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69b16089d8497f5fa0864623e7224e9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69b16089d8497f5fa0864623e7224e9b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a69b16089d8497f5fa0864623e7224e9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed56d2958abee33002ef25cb00e3044c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed56d2958abee33002ef25cb00e3044c"></a>
+const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:aed56d2958abee33002ef25cb00e3044c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a860d9e7e0e2f309fc644ae76ed964744"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a860d9e7e0e2f309fc644ae76ed964744"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator CRGB *</b> ()</td></tr>
+<tr class="separator:a860d9e7e0e2f309fc644ae76ed964744"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9155e7d5e6dd529c4e54277ac8dfd9ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9155e7d5e6dd529c4e54277ac8dfd9ea"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1)</td></tr>
+<tr class="separator:a9155e7d5e6dd529c4e54277ac8dfd9ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a83c4f1a69456d3e661e8ec7306b55d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83c4f1a69456d3e661e8ec7306b55d9c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2)</td></tr>
+<tr class="separator:a83c4f1a69456d3e661e8ec7306b55d9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae60868ac8de4582f0fb19fb839088dc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae60868ac8de4582f0fb19fb839088dc2"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3)</td></tr>
+<tr class="separator:ae60868ac8de4582f0fb19fb839088dc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f4c57932827fca3431bd7d0e12626e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f4c57932827fca3431bd7d0e12626e0"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c1, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c2, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c3, const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;c4)</td></tr>
+<tr class="separator:a0f4c57932827fca3431bd7d0e12626e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae74434581d40b24a0d405640109a8784"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae74434581d40b24a0d405640109a8784"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1)</td></tr>
+<tr class="separator:ae74434581d40b24a0d405640109a8784"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2beb847ccefda06f602b89c6ba28de0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2beb847ccefda06f602b89c6ba28de0a"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c2)</td></tr>
+<tr class="separator:a2beb847ccefda06f602b89c6ba28de0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa433af3863304d7541285ebdf4e506c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa433af3863304d7541285ebdf4e506c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c2, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c3)</td></tr>
+<tr class="separator:aaa433af3863304d7541285ebdf4e506c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a406a1031a306595b6d9b10f8b6cff761"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a406a1031a306595b6d9b10f8b6cff761"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c1, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c2, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c3, const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;c4)</td></tr>
+<tr class="separator:a406a1031a306595b6d9b10f8b6cff761"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a3279636490301d45a05adfcbc8a7b4da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3279636490301d45a05adfcbc8a7b4da"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>entries</b> [256]</td></tr>
+<tr class="separator:a3279636490301d45a05adfcbc8a7b4da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class 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 Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_d_a_t_a___n_o_p-members.html b/docs/3.1/class_d_a_t_a___n_o_p-members.html
new file mode 100644
index 00000000..a9c2f774
--- /dev/null
+++ b/docs/3.1/class_d_a_t_a___n_o_p-members.html
@@ -0,0 +1,105 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">DATA_NOP Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t adjust(register uint8_t data) (defined in <a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a>)</td><td class="entry"><a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t adjust(register uint8_t data (defined in <a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a>)</td><td class="entry"><a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline void postBlock(int len) (defined in <a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a>)</td><td class="entry"><a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale</b> (defined in <a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a>)</td><td class="entry"><a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_d_a_t_a___n_o_p.html b/docs/3.1/class_d_a_t_a___n_o_p.html
new file mode 100644
index 00000000..efd72c5e
--- /dev/null
+++ b/docs/3.1/class_d_a_t_a___n_o_p.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.8"/>
+<title>FastLED: DATA_NOP Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="class_d_a_t_a___n_o_p-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">DATA_NOP Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="fastspi__types_8h_source.html">fastspi_types.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a01c519cba2eaf243e795c305a8a9b344"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01c519cba2eaf243e795c305a8a9b344"></a>
+static&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t adjust(register uint8_t data)</td></tr>
+<tr class="separator:a01c519cba2eaf243e795c305a8a9b344"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab350d7d0dee39810272258e1928b11ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab350d7d0dee39810272258e1928b11ce"></a>
+static&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t adjust(register uint8_t data</td></tr>
+<tr class="separator:ab350d7d0dee39810272258e1928b11ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7f7a9e77ee0c8a2acedf90e28a583c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7f7a9e77ee0c8a2acedf90e28a583c2"></a>
+static&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void postBlock(int len)</td></tr>
+<tr class="separator:ab7f7a9e77ee0c8a2acedf90e28a583c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:aafcb87c306c2be9f4c332e77691effb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafcb87c306c2be9f4c332e77691effb5"></a>
+static register uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return scale8(data, scale)</td></tr>
+<tr class="separator:aafcb87c306c2be9f4c332e77691effb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Some of the SPI controllers will need to perform a transform on each byte before doing anyting with it. Creating a class of this form and passing it in as a template parameter to writeBytes/writeBytes3 below will ensure that the body of this method will get called on every byte worked on. Recommendation, make the adjust method aggressively inlined.</p>
+<p>TODO: Convinience macro for building these </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="fastspi__types_8h_source.html">fastspi_types.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_deep_pixel_controller-members.html b/docs/3.1/class_deep_pixel_controller-members.html
new file mode 100644
index 00000000..ad683a9e
--- /dev/null
+++ b/docs/3.1/class_deep_pixel_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DeepPixelController</b>() (defined in <a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_deep_pixel_controller.html">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_deep_pixel_controller.html b/docs/3.1/class_deep_pixel_controller.html
new file mode 100644
index 00000000..7310b25d
--- /dev/null
+++ b/docs/3.1/class_deep_pixel_controller.html
@@ -0,0 +1,220 @@
+<!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.8"/>
+<title>FastLED: DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_deep_pixel_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_deep_pixel_controller.png" usemap="#DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,449,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a0de5d6c8eca91f43cc2fa65c33b636b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0de5d6c8eca91f43cc2fa65c33b636b3"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:a0de5d6c8eca91f43cc2fa65c33b636b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10aee8d03bab9820a0247f1c8f419ac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10aee8d03bab9820a0247f1c8f419ac5"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:a10aee8d03bab9820a0247f1c8f419ac5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc627d531a182d5a848735c5111db99c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc627d531a182d5a848735c5111db99c"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:afc627d531a182d5a848735c5111db99c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b45fe5cc0feb07a378acf3de544a441"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b45fe5cc0feb07a378acf3de544a441"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a1b45fe5cc0feb07a378acf3de544a441"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_deep_pixel_controller.png b/docs/3.1/class_deep_pixel_controller.png
new file mode 100644
index 00000000..8adb26d0
--- /dev/null
+++ b/docs/3.1/class_deep_pixel_controller.png
Binary files differ
diff --git a/docs/3.1/class_g_w6205.html b/docs/3.1/class_g_w6205.html
new file mode 100644
index 00000000..7716c71f
--- /dev/null
+++ b/docs/3.1/class_g_w6205.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: GW6205&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GW6205&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for GW6205&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_g_w6205.png" usemap="#GW6205&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="GW6205&lt; DATA_PIN, RGB_ORDER &gt;_map" name="GW6205&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_g_w6205_controller800_khz.html" alt="GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,472,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_g_w6205.png b/docs/3.1/class_g_w6205.png
new file mode 100644
index 00000000..3274623f
--- /dev/null
+++ b/docs/3.1/class_g_w6205.png
Binary files differ
diff --git a/docs/3.1/class_g_w6205__400.html b/docs/3.1/class_g_w6205__400.html
new file mode 100644
index 00000000..2e6c434a
--- /dev/null
+++ b/docs/3.1/class_g_w6205__400.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: GW6205_400&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GW6205_400&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_g_w6205__400.png" usemap="#GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;_map" name="GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_g_w6205_controller400_khz.html" alt="GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,472,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_g_w6205__400.png b/docs/3.1/class_g_w6205__400.png
new file mode 100644
index 00000000..21147300
--- /dev/null
+++ b/docs/3.1/class_g_w6205__400.png
Binary files differ
diff --git a/docs/3.1/class_g_w6205_controller400_khz.html b/docs/3.1/class_g_w6205_controller400_khz.html
new file mode 100644
index 00000000..0c5bf64c
--- /dev/null
+++ b/docs/3.1/class_g_w6205_controller400_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_g_w6205_controller400_khz.png" usemap="#GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_g_w6205__400.html" alt="GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,472,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_g_w6205_controller400_khz.png b/docs/3.1/class_g_w6205_controller400_khz.png
new file mode 100644
index 00000000..1657f4ac
--- /dev/null
+++ b/docs/3.1/class_g_w6205_controller400_khz.png
Binary files differ
diff --git a/docs/3.1/class_g_w6205_controller800_khz.html b/docs/3.1/class_g_w6205_controller800_khz.html
new file mode 100644
index 00000000..dcb87fae
--- /dev/null
+++ b/docs/3.1/class_g_w6205_controller800_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_g_w6205_controller800_khz.png" usemap="#GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_g_w6205.html" alt="GW6205&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,472,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_g_w6205_controller800_khz.png b/docs/3.1/class_g_w6205_controller800_khz.png
new file mode 100644
index 00000000..e5bcd4c4
--- /dev/null
+++ b/docs/3.1/class_g_w6205_controller800_khz.png
Binary files differ
diff --git a/docs/3.1/class_l_p_d1886.html b/docs/3.1/class_l_p_d1886.html
new file mode 100644
index 00000000..e77e07a5
--- /dev/null
+++ b/docs/3.1/class_l_p_d1886.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: LPD1886&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">LPD1886&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for LPD1886&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_l_p_d1886.png" usemap="#LPD1886&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="LPD1886&lt; DATA_PIN, RGB_ORDER &gt;_map" name="LPD1886&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_l_p_d1886_controller1250_khz.html" alt="LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,472,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_l_p_d1886.png b/docs/3.1/class_l_p_d1886.png
new file mode 100644
index 00000000..16243daf
--- /dev/null
+++ b/docs/3.1/class_l_p_d1886.png
Binary files differ
diff --git a/docs/3.1/class_l_p_d1886_controller1250_khz.html b/docs/3.1/class_l_p_d1886_controller1250_khz.html
new file mode 100644
index 00000000..957417e4
--- /dev/null
+++ b/docs/3.1/class_l_p_d1886_controller1250_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_l_p_d1886_controller1250_khz.png" usemap="#LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_l_p_d1886.html" alt="LPD1886&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,472,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_l_p_d1886_controller1250_khz.png b/docs/3.1/class_l_p_d1886_controller1250_khz.png
new file mode 100644
index 00000000..92191901
--- /dev/null
+++ b/docs/3.1/class_l_p_d1886_controller1250_khz.png
Binary files differ
diff --git a/docs/3.1/class_l_p_d8806_controller-members.html b/docs/3.1/class_l_p_d8806_controller-members.html
new file mode 100644
index 00000000..125d73cb
--- /dev/null
+++ b/docs/3.1/class_l_p_d8806_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LPD8806Controller</b>() (defined in <a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_l_p_d8806_controller.html b/docs/3.1/class_l_p_d8806_controller.html
new file mode 100644
index 00000000..a8d278b3
--- /dev/null
+++ b/docs/3.1/class_l_p_d8806_controller.html
@@ -0,0 +1,225 @@
+<!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.8"/>
+<title>FastLED: LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="class_l_p_d8806_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_l_p_d8806_controller.png" usemap="#LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,444,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:abe5be69b938d0709cfc77fcf57c75608"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe5be69b938d0709cfc77fcf57c75608"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:abe5be69b938d0709cfc77fcf57c75608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7da0ecf67004256c83131406b2f4889e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7da0ecf67004256c83131406b2f4889e"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:a7da0ecf67004256c83131406b2f4889e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a4f6471eddcfe5445502b02f1f3179259"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f6471eddcfe5445502b02f1f3179259"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a4f6471eddcfe5445502b02f1f3179259"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31d4e01a823682556e26748193f722e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31d4e01a823682556e26748193f722e5"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a31d4e01a823682556e26748193f722e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_l_p_d8806_controller.png b/docs/3.1/class_l_p_d8806_controller.png
new file mode 100644
index 00000000..bfaa3a1c
--- /dev/null
+++ b/docs/3.1/class_l_p_d8806_controller.png
Binary files differ
diff --git a/docs/3.1/class_n_e_o_p_i_x_e_l.html b/docs/3.1/class_n_e_o_p_i_x_e_l.html
new file mode 100644
index 00000000..63a57a59
--- /dev/null
+++ b/docs/3.1/class_n_e_o_p_i_x_e_l.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: NEOPIXEL&lt; DATA_PIN &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">NEOPIXEL&lt; DATA_PIN &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for NEOPIXEL&lt; DATA_PIN &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_n_e_o_p_i_x_e_l.png" usemap="#NEOPIXEL&lt; DATA_PIN &gt;_map" alt=""/>
+ <map id="NEOPIXEL&lt; DATA_PIN &gt;_map" name="NEOPIXEL&lt; DATA_PIN &gt;_map">
+<area href="class_w_s2811_controller800_khz.html" alt="WS2811Controller800Khz&lt; DATA_PIN, GRB &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_n_e_o_p_i_x_e_l.png b/docs/3.1/class_n_e_o_p_i_x_e_l.png
new file mode 100644
index 00000000..db138da8
--- /dev/null
+++ b/docs/3.1/class_n_e_o_p_i_x_e_l.png
Binary files differ
diff --git a/docs/3.1/class_p9813_controller-members.html b/docs/3.1/class_p9813_controller-members.html
new file mode 100644
index 00000000..52df5e26
--- /dev/null
+++ b/docs/3.1/class_p9813_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>P9813Controller</b>() (defined in <a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_p9813_controller.html">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_p9813_controller.html b/docs/3.1/class_p9813_controller.html
new file mode 100644
index 00000000..56ff2ce5
--- /dev/null
+++ b/docs/3.1/class_p9813_controller.html
@@ -0,0 +1,224 @@
+<!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.8"/>
+<title>FastLED: P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="class_p9813_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_p9813_controller.png" usemap="#P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,428,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad6fcb36b9378df660721ae24ed857b8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6fcb36b9378df660721ae24ed857b8a"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:ad6fcb36b9378df660721ae24ed857b8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2fddaa8ac8860649da9865b58dca13c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2fddaa8ac8860649da9865b58dca13c"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:ac2fddaa8ac8860649da9865b58dca13c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ae60dbfc4d27c62448032c61e7730ec8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae60dbfc4d27c62448032c61e7730ec8a"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:ae60dbfc4d27c62448032c61e7730ec8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac4f48b0da93055c0da7285839c4ce81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac4f48b0da93055c0da7285839c4ce81"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:aac4f48b0da93055c0da7285839c4ce81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_p9813_controller.png b/docs/3.1/class_p9813_controller.png
new file mode 100644
index 00000000..5b1fbe25
--- /dev/null
+++ b/docs/3.1/class_p9813_controller.png
Binary files differ
diff --git a/docs/3.1/class_s_m16716_controller-members.html b/docs/3.1/class_s_m16716_controller-members.html
new file mode 100644
index 00000000..3da49f14
--- /dev/null
+++ b/docs/3.1/class_s_m16716_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SM16716Controller</b>() (defined in <a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_s_m16716_controller.html">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_s_m16716_controller.html b/docs/3.1/class_s_m16716_controller.html
new file mode 100644
index 00000000..50d42cdc
--- /dev/null
+++ b/docs/3.1/class_s_m16716_controller.html
@@ -0,0 +1,224 @@
+<!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.8"/>
+<title>FastLED: SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="class_s_m16716_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_s_m16716_controller.png" usemap="#SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,446,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1ba5a4e3f00b2235f278b9fb9aeb1591"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ba5a4e3f00b2235f278b9fb9aeb1591"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:a1ba5a4e3f00b2235f278b9fb9aeb1591"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a89d3d5ef2239a9d452bc2478b0549ad8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89d3d5ef2239a9d452bc2478b0549ad8"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:a89d3d5ef2239a9d452bc2478b0549ad8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a7df8b8a34e0dc067c69aa056deca9677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7df8b8a34e0dc067c69aa056deca9677"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a7df8b8a34e0dc067c69aa056deca9677"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d720053186fd61d6ad90d48cac3d57d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d720053186fd61d6ad90d48cac3d57d"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a3d720053186fd61d6ad90d48cac3d57d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_s_m16716_controller.png b/docs/3.1/class_s_m16716_controller.png
new file mode 100644
index 00000000..a7bd89ac
--- /dev/null
+++ b/docs/3.1/class_s_m16716_controller.png
Binary files differ
diff --git a/docs/3.1/class_s_p_i_output-members.html b/docs/3.1/class_s_p_i_output-members.html
new file mode 100644
index 00000000..dccbbf11
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_s_p_i_output.html">SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline, hot)) inline static void writeBit(uint8_t b) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>AVRSoftwareSPIOutput</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AVRSoftwareSPIOutput</b>(Selectable *pSelect) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setSelect</b>(Selectable *pSelect) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>stop</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>wait</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>waitFully</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeByte</b>(uint8_t b) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeByteNoWait</b>(uint8_t b) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeBytePostWait</b>(uint8_t b) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeWord</b>(uint16_t w) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_s_p_i_output.html b/docs/3.1/class_s_p_i_output.html
new file mode 100644
index 00000000..2bd2066e
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output.html
@@ -0,0 +1,151 @@
+<!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.8"/>
+<title>FastLED: SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="class_s_p_i_output-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_s_p_i_output.png" usemap="#SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;_map" alt=""/>
+ <map id="SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;_map" name="SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;_map">
+<area href="class_a_v_r_software_s_p_i_output.html" alt="AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;" shape="rect" coords="0,0,463,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_methods_class_a_v_r_software_s_p_i_output"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_a_v_r_software_s_p_i_output')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td></tr>
+<tr class="memitem:a4861c18158eb19fd6dd0bba6d8b8f801 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4861c18158eb19fd6dd0bba6d8b8f801"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>AVRSoftwareSPIOutput</b> (<a class="el" href="class_selectable.html">Selectable</a> *pSelect)</td></tr>
+<tr class="separator:a4861c18158eb19fd6dd0bba6d8b8f801 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a27039fa3167dd2dded755d4c9dcb19 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a27039fa3167dd2dded755d4c9dcb19"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setSelect</b> (<a class="el" href="class_selectable.html">Selectable</a> *pSelect)</td></tr>
+<tr class="separator:a2a27039fa3167dd2dded755d4c9dcb19 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae321dbae3fceaa2d73a98f6aa08ea3c5 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae321dbae3fceaa2d73a98f6aa08ea3c5"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:ae321dbae3fceaa2d73a98f6aa08ea3c5 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a896113d6f2ee898b962076f1343f31 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a896113d6f2ee898b962076f1343f31"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline, hot)) inline static void writeBit(uint8_t b)</td></tr>
+<tr class="separator:a0a896113d6f2ee898b962076f1343f31 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_methods_class_a_v_r_software_s_p_i_output"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_a_v_r_software_s_p_i_output')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td></tr>
+<tr class="memitem:a8f9e5393c85f3f44cb3c44718bdd952c inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f9e5393c85f3f44cb3c44718bdd952c"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>stop</b> ()</td></tr>
+<tr class="separator:a8f9e5393c85f3f44cb3c44718bdd952c inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3b93ed0bcca8655eb91c8f3d8a63c28 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3b93ed0bcca8655eb91c8f3d8a63c28"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>wait</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:aa3b93ed0bcca8655eb91c8f3d8a63c28 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13be31fed768f180d1a4e2c30062afb5 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13be31fed768f180d1a4e2c30062afb5"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>waitFully</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a13be31fed768f180d1a4e2c30062afb5 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a832b5561fb4f2d6f119260878ff1bac1 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a832b5561fb4f2d6f119260878ff1bac1"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByteNoWait</b> (uint8_t b) __attribute__((always_inline))</td></tr>
+<tr class="separator:a832b5561fb4f2d6f119260878ff1bac1 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae953d7990acf835c01c34c7531e7a144 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae953d7990acf835c01c34c7531e7a144"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeBytePostWait</b> (uint8_t b) __attribute__((always_inline))</td></tr>
+<tr class="separator:ae953d7990acf835c01c34c7531e7a144 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3dc658230927145b6b3c8816275ad18d inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3dc658230927145b6b3c8816275ad18d"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeWord</b> (uint16_t w) __attribute__((always_inline))</td></tr>
+<tr class="separator:a3dc658230927145b6b3c8816275ad18d inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58393081ec8c54bd6968642b89e8bd43 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58393081ec8c54bd6968642b89e8bd43"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByte</b> (uint8_t b)</td></tr>
+<tr class="separator:a58393081ec8c54bd6968642b89e8bd43 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<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 Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_s_p_i_output.png b/docs/3.1/class_s_p_i_output.png
new file mode 100644
index 00000000..bac36a0c
--- /dev/null
+++ b/docs/3.1/class_s_p_i_output.png
Binary files differ
diff --git a/docs/3.1/class_selectable-members.html b/docs/3.1/class_selectable-members.html
new file mode 100644
index 00000000..685db4a7
--- /dev/null
+++ b/docs/3.1/class_selectable-members.html
@@ -0,0 +1,104 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Selectable Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_selectable.html">Selectable</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isSelected</b>()=0 (defined in <a class="el" href="class_selectable.html">Selectable</a>)</td><td class="entry"><a class="el" href="class_selectable.html">Selectable</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>release</b>()=0 (defined in <a class="el" href="class_selectable.html">Selectable</a>)</td><td class="entry"><a class="el" href="class_selectable.html">Selectable</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>select</b>()=0 (defined in <a class="el" href="class_selectable.html">Selectable</a>)</td><td class="entry"><a class="el" href="class_selectable.html">Selectable</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_selectable.html b/docs/3.1/class_selectable.html
new file mode 100644
index 00000000..f1f0ce31
--- /dev/null
+++ b/docs/3.1/class_selectable.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.8"/>
+<title>FastLED: Selectable Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_selectable-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">Selectable Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5536adac637a1c55c3778158c7f38840"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5536adac637a1c55c3778158c7f38840"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>select</b> ()=0</td></tr>
+<tr class="separator:a5536adac637a1c55c3778158c7f38840"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a190c264a07995c20d72ea5d52eb60e47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a190c264a07995c20d72ea5d52eb60e47"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> ()=0</td></tr>
+<tr class="separator:a190c264a07995c20d72ea5d52eb60e47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac2dbdb984ed2615b0ec340a868b7a12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac2dbdb984ed2615b0ec340a868b7a12"></a>
+virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()=0</td></tr>
+<tr class="separator:aac2dbdb984ed2615b0ec340a868b7a12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="fastpin_8h_source.html">fastpin.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_software_s_p_i_output-members.html b/docs/3.1/class_software_s_p_i_output-members.html
new file mode 100644
index 00000000..d51e7468
--- /dev/null
+++ b/docs/3.1/class_software_s_p_i_output-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_software_s_p_i_output.html">SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline, hot)) inline static void writeBit(uint8_t b) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>AVRSoftwareSPIOutput</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AVRSoftwareSPIOutput</b>(Selectable *pSelect) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setSelect</b>(Selectable *pSelect) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>stop</b>() (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>wait</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>waitFully</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeByte</b>(uint8_t b) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeByteNoWait</b>(uint8_t b) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>writeBytePostWait</b>(uint8_t b) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>writeWord</b>(uint16_t w) __attribute__((always_inline)) (defined in <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a>)</td><td class="entry"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_software_s_p_i_output.html b/docs/3.1/class_software_s_p_i_output.html
new file mode 100644
index 00000000..7d258bb8
--- /dev/null
+++ b/docs/3.1/class_software_s_p_i_output.html
@@ -0,0 +1,151 @@
+<!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.8"/>
+<title>FastLED: SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="class_software_s_p_i_output-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_software_s_p_i_output.png" usemap="#SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;_map" alt=""/>
+ <map id="SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;_map" name="SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;_map">
+<area href="class_a_v_r_software_s_p_i_output.html" alt="AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;" shape="rect" coords="0,0,463,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_methods_class_a_v_r_software_s_p_i_output"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_a_v_r_software_s_p_i_output')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td></tr>
+<tr class="memitem:a4861c18158eb19fd6dd0bba6d8b8f801 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4861c18158eb19fd6dd0bba6d8b8f801"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>AVRSoftwareSPIOutput</b> (<a class="el" href="class_selectable.html">Selectable</a> *pSelect)</td></tr>
+<tr class="separator:a4861c18158eb19fd6dd0bba6d8b8f801 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a27039fa3167dd2dded755d4c9dcb19 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a27039fa3167dd2dded755d4c9dcb19"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setSelect</b> (<a class="el" href="class_selectable.html">Selectable</a> *pSelect)</td></tr>
+<tr class="separator:a2a27039fa3167dd2dded755d4c9dcb19 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae321dbae3fceaa2d73a98f6aa08ea3c5 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae321dbae3fceaa2d73a98f6aa08ea3c5"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:ae321dbae3fceaa2d73a98f6aa08ea3c5 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a896113d6f2ee898b962076f1343f31 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a896113d6f2ee898b962076f1343f31"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline, hot)) inline static void writeBit(uint8_t b)</td></tr>
+<tr class="separator:a0a896113d6f2ee898b962076f1343f31 inherit pub_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_methods_class_a_v_r_software_s_p_i_output"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_a_v_r_software_s_p_i_output')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td></tr>
+<tr class="memitem:a8f9e5393c85f3f44cb3c44718bdd952c inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f9e5393c85f3f44cb3c44718bdd952c"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>stop</b> ()</td></tr>
+<tr class="separator:a8f9e5393c85f3f44cb3c44718bdd952c inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3b93ed0bcca8655eb91c8f3d8a63c28 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3b93ed0bcca8655eb91c8f3d8a63c28"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>wait</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:aa3b93ed0bcca8655eb91c8f3d8a63c28 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13be31fed768f180d1a4e2c30062afb5 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13be31fed768f180d1a4e2c30062afb5"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>waitFully</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a13be31fed768f180d1a4e2c30062afb5 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a832b5561fb4f2d6f119260878ff1bac1 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a832b5561fb4f2d6f119260878ff1bac1"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByteNoWait</b> (uint8_t b) __attribute__((always_inline))</td></tr>
+<tr class="separator:a832b5561fb4f2d6f119260878ff1bac1 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae953d7990acf835c01c34c7531e7a144 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae953d7990acf835c01c34c7531e7a144"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeBytePostWait</b> (uint8_t b) __attribute__((always_inline))</td></tr>
+<tr class="separator:ae953d7990acf835c01c34c7531e7a144 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3dc658230927145b6b3c8816275ad18d inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3dc658230927145b6b3c8816275ad18d"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeWord</b> (uint16_t w) __attribute__((always_inline))</td></tr>
+<tr class="separator:a3dc658230927145b6b3c8816275ad18d inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58393081ec8c54bd6968642b89e8bd43 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58393081ec8c54bd6968642b89e8bd43"></a>
+static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByte</b> (uint8_t b)</td></tr>
+<tr class="separator:a58393081ec8c54bd6968642b89e8bd43 inherit pub_static_methods_class_a_v_r_software_s_p_i_output"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<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 Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_software_s_p_i_output.png b/docs/3.1/class_software_s_p_i_output.png
new file mode 100644
index 00000000..11bf2716
--- /dev/null
+++ b/docs/3.1/class_software_s_p_i_output.png
Binary files differ
diff --git a/docs/3.1/class_t_m1803.html b/docs/3.1/class_t_m1803.html
new file mode 100644
index 00000000..1154c503
--- /dev/null
+++ b/docs/3.1/class_t_m1803.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: TM1803&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1803&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1803&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1803.png" usemap="#TM1803&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1803&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1803&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1803_controller400_khz.html" alt="TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,463,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1803.png b/docs/3.1/class_t_m1803.png
new file mode 100644
index 00000000..4cc61142
--- /dev/null
+++ b/docs/3.1/class_t_m1803.png
Binary files differ
diff --git a/docs/3.1/class_t_m1803_controller400_khz.html b/docs/3.1/class_t_m1803_controller400_khz.html
new file mode 100644
index 00000000..9e490a58
--- /dev/null
+++ b/docs/3.1/class_t_m1803_controller400_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1803_controller400_khz.png" usemap="#TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1803.html" alt="TM1803&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,463,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1803_controller400_khz.png b/docs/3.1/class_t_m1803_controller400_khz.png
new file mode 100644
index 00000000..69a5266c
--- /dev/null
+++ b/docs/3.1/class_t_m1803_controller400_khz.png
Binary files differ
diff --git a/docs/3.1/class_t_m1804.html b/docs/3.1/class_t_m1804.html
new file mode 100644
index 00000000..9b3e3b0e
--- /dev/null
+++ b/docs/3.1/class_t_m1804.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: TM1804&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1804&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1804&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1804.png" usemap="#TM1804&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1804&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1804&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1809_controller800_khz.html" alt="TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1804.png b/docs/3.1/class_t_m1804.png
new file mode 100644
index 00000000..ba24d0e2
--- /dev/null
+++ b/docs/3.1/class_t_m1804.png
Binary files differ
diff --git a/docs/3.1/class_t_m1809.html b/docs/3.1/class_t_m1809.html
new file mode 100644
index 00000000..10c58e5c
--- /dev/null
+++ b/docs/3.1/class_t_m1809.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: TM1809&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1809&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1809&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1809.png" usemap="#TM1809&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1809&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1809&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1809_controller800_khz.html" alt="TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1809.png b/docs/3.1/class_t_m1809.png
new file mode 100644
index 00000000..7cd85045
--- /dev/null
+++ b/docs/3.1/class_t_m1809.png
Binary files differ
diff --git a/docs/3.1/class_t_m1809_controller800_khz.html b/docs/3.1/class_t_m1809_controller800_khz.html
new file mode 100644
index 00000000..899b059d
--- /dev/null
+++ b/docs/3.1/class_t_m1809_controller800_khz.html
@@ -0,0 +1,111 @@
+<!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.8"/>
+<title>FastLED: TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1809_controller800_khz.png" usemap="#TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1804.html" alt="TM1804&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,456,136"/>
+<area href="class_t_m1809.html" alt="TM1809&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="466,112,922,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1809_controller800_khz.png b/docs/3.1/class_t_m1809_controller800_khz.png
new file mode 100644
index 00000000..0e6ab407
--- /dev/null
+++ b/docs/3.1/class_t_m1809_controller800_khz.png
Binary files differ
diff --git a/docs/3.1/class_t_m1829.html b/docs/3.1/class_t_m1829.html
new file mode 100644
index 00000000..c4f71c40
--- /dev/null
+++ b/docs/3.1/class_t_m1829.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: TM1829&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1829&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1829&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1829.png" usemap="#TM1829&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1829&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1829&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1829_controller800_khz.html" alt="TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,533,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1829.png b/docs/3.1/class_t_m1829.png
new file mode 100644
index 00000000..80dd7235
--- /dev/null
+++ b/docs/3.1/class_t_m1829.png
Binary files differ
diff --git a/docs/3.1/class_t_m1829_controller1600_khz.html b/docs/3.1/class_t_m1829_controller1600_khz.html
new file mode 100644
index 00000000..69545181
--- /dev/null
+++ b/docs/3.1/class_t_m1829_controller1600_khz.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.8"/>
+<title>FastLED: TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1829_controller1600_khz.png" usemap="#TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1829_controller1600_khz.png b/docs/3.1/class_t_m1829_controller1600_khz.png
new file mode 100644
index 00000000..dda7670c
--- /dev/null
+++ b/docs/3.1/class_t_m1829_controller1600_khz.png
Binary files differ
diff --git a/docs/3.1/class_t_m1829_controller800_khz.html b/docs/3.1/class_t_m1829_controller800_khz.html
new file mode 100644
index 00000000..1745a301
--- /dev/null
+++ b/docs/3.1/class_t_m1829_controller800_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_t_m1829_controller800_khz.png" usemap="#TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_t_m1829.html" alt="TM1829&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,533,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_t_m1829_controller800_khz.png b/docs/3.1/class_t_m1829_controller800_khz.png
new file mode 100644
index 00000000..8706dc1a
--- /dev/null
+++ b/docs/3.1/class_t_m1829_controller800_khz.png
Binary files differ
diff --git a/docs/3.1/class_u_c_s1903.html b/docs/3.1/class_u_c_s1903.html
new file mode 100644
index 00000000..702a9684
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: UCS1903&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">UCS1903&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for UCS1903&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_u_c_s1903.png" usemap="#UCS1903&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="UCS1903&lt; DATA_PIN, RGB_ORDER &gt;_map" name="UCS1903&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_u_c_s1903_controller400_khz.html" alt="UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,463,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_u_c_s1903.png b/docs/3.1/class_u_c_s1903.png
new file mode 100644
index 00000000..732b4e33
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903.png
Binary files differ
diff --git a/docs/3.1/class_u_c_s1903_b.html b/docs/3.1/class_u_c_s1903_b.html
new file mode 100644
index 00000000..4e2bd2ec
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903_b.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: UCS1903B&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">UCS1903B&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_u_c_s1903_b.png" usemap="#UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;_map" name="UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_u_c_s1903_b_controller800_khz.html" alt="UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_u_c_s1903_b.png b/docs/3.1/class_u_c_s1903_b.png
new file mode 100644
index 00000000..064e9eaf
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903_b.png
Binary files differ
diff --git a/docs/3.1/class_u_c_s1903_b_controller800_khz.html b/docs/3.1/class_u_c_s1903_b_controller800_khz.html
new file mode 100644
index 00000000..4dd7fade
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903_b_controller800_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_u_c_s1903_b_controller800_khz.png" usemap="#UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_u_c_s1903_b.html" alt="UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,456,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_u_c_s1903_b_controller800_khz.png b/docs/3.1/class_u_c_s1903_b_controller800_khz.png
new file mode 100644
index 00000000..ed1a1db9
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903_b_controller800_khz.png
Binary files differ
diff --git a/docs/3.1/class_u_c_s1903_controller400_khz.html b/docs/3.1/class_u_c_s1903_controller400_khz.html
new file mode 100644
index 00000000..9f83b68f
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903_controller400_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_u_c_s1903_controller400_khz.png" usemap="#UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_u_c_s1903.html" alt="UCS1903&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,463,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_u_c_s1903_controller400_khz.png b/docs/3.1/class_u_c_s1903_controller400_khz.png
new file mode 100644
index 00000000..5554d105
--- /dev/null
+++ b/docs/3.1/class_u_c_s1903_controller400_khz.png
Binary files differ
diff --git a/docs/3.1/class_w_s2801_controller-members.html b/docs/3.1/class_w_s2801_controller-members.html
new file mode 100644
index 00000000..4b869400
--- /dev/null
+++ b/docs/3.1/class_w_s2801_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>WS2801Controller</b>() (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2801_controller.html b/docs/3.1/class_w_s2801_controller.html
new file mode 100644
index 00000000..79b8552a
--- /dev/null
+++ b/docs/3.1/class_w_s2801_controller.html
@@ -0,0 +1,225 @@
+<!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.8"/>
+<title>FastLED: WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="class_w_s2801_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2801_controller.png" usemap="#WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,439,24"/>
+<area href="class_w_s2803_controller.html" alt="WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="0,112,439,136"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad6187b68bccb831cd5cab3cffbd6bdb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6187b68bccb831cd5cab3cffbd6bdb4"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:ad6187b68bccb831cd5cab3cffbd6bdb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a867d4249b5921e0d717c6c21038bb11c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a867d4249b5921e0d717c6c21038bb11c"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:a867d4249b5921e0d717c6c21038bb11c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a615609bf16dd4c8fcc9ccf286ca52501"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a615609bf16dd4c8fcc9ccf286ca52501"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a615609bf16dd4c8fcc9ccf286ca52501"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69fca4db95f5f60f27d7d1a8c7fa16a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69fca4db95f5f60f27d7d1a8c7fa16a0"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a69fca4db95f5f60f27d7d1a8c7fa16a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2801_controller.png b/docs/3.1/class_w_s2801_controller.png
new file mode 100644
index 00000000..f184149a
--- /dev/null
+++ b/docs/3.1/class_w_s2801_controller.png
Binary files differ
diff --git a/docs/3.1/class_w_s2803_controller-members.html b/docs/3.1/class_w_s2803_controller-members.html
new file mode 100644
index 00000000..91f5d218
--- /dev/null
+++ b/docs/3.1/class_w_s2803_controller-members.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_w_s2803_controller.html">WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clearLedData</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>clearLeds</b>(int nLeds) (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CLEDController</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getAdjustment</b>(uint8_t scale) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getCorrection</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getDither</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getTemperature</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>head</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init</b>() (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>leds</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ColorCorrection</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_ColorTemperature</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_Data</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_DitherMode</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_nLeds</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pHead</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_pNext</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>m_pTail</b> (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(int x) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setCorrection</b>(CRGB correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setCorrection</b>(LEDColorCorrection correction) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setDither</b>(uint8_t ditherMode=BINARY_DITHER) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setLeds</b>(CRGB *data, int nLeds) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setTemperature</b>(CRGB temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setTemperature</b>(ColorTemperature temperature) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, CRGB scale) (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CRGB *data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, CRGB scale) (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, int nLeds, uint8_t brightness) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>showColor</b>(const struct CRGB &amp;data, uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>showLeds</b>(uint8_t brightness=255) (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() (defined in <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>)</td><td class="entry"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>WS2801Controller</b>() (defined in <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a>)</td><td class="entry"><a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2803_controller.html b/docs/3.1/class_w_s2803_controller.html
new file mode 100644
index 00000000..4b872a21
--- /dev/null
+++ b/docs/3.1/class_w_s2803_controller.html
@@ -0,0 +1,219 @@
+<!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.8"/>
+<title>FastLED: WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="class_w_s2803_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2803_controller.png" usemap="#WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" alt=""/>
+ <map id="WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map" name="WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;_map">
+<area href="class_w_s2801_controller.html" alt="WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;" shape="rect" coords="0,56,439,80"/>
+<area href="class_c_l_e_d_controller.html" alt="CLEDController" shape="rect" coords="0,0,439,24"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_methods_class_w_s2801_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_w_s2801_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td></tr>
+<tr class="memitem:ad6187b68bccb831cd5cab3cffbd6bdb4 inherit pub_methods_class_w_s2801_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6187b68bccb831cd5cab3cffbd6bdb4"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>init</b> ()</td></tr>
+<tr class="separator:ad6187b68bccb831cd5cab3cffbd6bdb4 inherit pub_methods_class_w_s2801_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a867d4249b5921e0d717c6c21038bb11c inherit pub_methods_class_w_s2801_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a867d4249b5921e0d717c6c21038bb11c"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLeds</b> (int nLeds)</td></tr>
+<tr class="separator:a867d4249b5921e0d717c6c21038bb11c inherit pub_methods_class_w_s2801_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe990b9a65f5bff1f391cc5c28752abb"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:abe990b9a65f5bff1f391cc5c28752abb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253069a734075b298da65d59d6efbb3b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, uint8_t brightness)</td></tr>
+<tr class="separator:a253069a734075b298da65d59d6efbb3b inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4124b1cf5546ad028166e7884276076"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showLeds</b> (uint8_t brightness=255)</td></tr>
+<tr class="separator:aa4124b1cf5546ad028166e7884276076 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ccd149ab7282817041a1ae4e586a9d4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, uint8_t brightness=255)</td></tr>
+<tr class="separator:a4ccd149ab7282817041a1ae4e586a9d4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cfb05ad6e0f7982328928051f3f565"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:a06cfb05ad6e0f7982328928051f3f565 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b08378b29f92c5def65175ec5334037"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setLeds</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds)</td></tr>
+<tr class="separator:a5b08378b29f92c5def65175ec5334037 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b61c81e004c96ff670a2742057a5a52"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clearLedData</b> ()</td></tr>
+<tr class="separator:a7b61c81e004c96ff670a2742057a5a52 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8840496d231f1fe0fa640970dc14db08"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
+<tr class="separator:a8840496d231f1fe0fa640970dc14db08 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e86c45c89ebfb7b21f9045790302399"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>leds</b> ()</td></tr>
+<tr class="separator:a5e86c45c89ebfb7b21f9045790302399 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278a429964bec69b3c91486665e61c0a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (int x)</td></tr>
+<tr class="separator:a278a429964bec69b3c91486665e61c0a inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0703d15ea35deaf94eed59ae27bc3517"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setDither</b> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
+<tr class="separator:a0703d15ea35deaf94eed59ae27bc3517 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676f705adf93898739a405b85150a3e7"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getDither</b> ()</td></tr>
+<tr class="separator:a676f705adf93898739a405b85150a3e7 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9620d0a629a6a3294c71f5f8dbfe91b8"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> correction)</td></tr>
+<tr class="separator:a9620d0a629a6a3294c71f5f8dbfe91b8 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74c43977660742e8185fd666e5d66bf9"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setCorrection</b> (LEDColorCorrection correction)</td></tr>
+<tr class="separator:a74c43977660742e8185fd666e5d66bf9 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a168c661bb9b4a5dfc797b69d3900b26c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getCorrection</b> ()</td></tr>
+<tr class="separator:a168c661bb9b4a5dfc797b69d3900b26c inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac4a882bdc4a813ae957ddedb5a883"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> temperature)</td></tr>
+<tr class="separator:a69ac4a882bdc4a813ae957ddedb5a883 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e6d35be39f9f67aacdb4709ea914ab4"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setTemperature</b> (ColorTemperature temperature)</td></tr>
+<tr class="separator:a1e6d35be39f9f67aacdb4709ea914ab4 inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc94e9d029d7e59f56a4ab845f3de32d"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getTemperature</b> ()</td></tr>
+<tr class="separator:afc94e9d029d7e59f56a4ab845f3de32d inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6173cca91ee446766cc15102990d7bb"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>getAdjustment</b> (uint8_t scale)</td></tr>
+<tr class="separator:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_methods_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a5a6ea50899409d875d72393323ca0"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>head</b> ()</td></tr>
+<tr class="separator:a75a5a6ea50899409d875d72393323ca0 inherit pub_static_methods_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_methods_class_w_s2801_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_class_w_s2801_controller')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="class_w_s2801_controller.html">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td></tr>
+<tr class="memitem:a615609bf16dd4c8fcc9ccf286ca52501 inherit pro_methods_class_w_s2801_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a615609bf16dd4c8fcc9ccf286ca52501"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>showColor</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a615609bf16dd4c8fcc9ccf286ca52501 inherit pro_methods_class_w_s2801_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69fca4db95f5f60f27d7d1a8c7fa16a0 inherit pro_methods_class_w_s2801_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69fca4db95f5f60f27d7d1a8c7fa16a0"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>show</b> (const struct <a class="el" href="struct_c_r_g_b.html">CRGB</a> *data, int nLeds, <a class="el" href="struct_c_r_g_b.html">CRGB</a> scale)</td></tr>
+<tr class="separator:a69fca4db95f5f60f27d7d1a8c7fa16a0 inherit pro_methods_class_w_s2801_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4672f8f1e93d5df90685cb62c4ebbe0e"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_Data</b></td></tr>
+<tr class="separator:a4672f8f1e93d5df90685cb62c4ebbe0e inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaad2e8eeedcb36298e0c45d11bcf14b5"></a>
+<a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pNext</b></td></tr>
+<tr class="separator:aaad2e8eeedcb36298e0c45d11bcf14b5 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cd7290071572a9844b79b66239cc40b"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorCorrection</b></td></tr>
+<tr class="separator:a4cd7290071572a9844b79b66239cc40b inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb7c56ce6c3f11f392613c3b9bf8c727"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_ColorTemperature</b></td></tr>
+<tr class="separator:adb7c56ce6c3f11f392613c3b9bf8c727 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9af9dd5c08991667e4062396eec5bd8a"></a>
+EDitherMode&#160;</td><td class="memItemRight" valign="bottom"><b>m_DitherMode</b></td></tr>
+<tr class="separator:a9af9dd5c08991667e4062396eec5bd8a inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4d0f0ed5a214b675c9a03aecd7b0df8"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>m_nLeds</b></td></tr>
+<tr class="separator:ab4d0f0ed5a214b675c9a03aecd7b0df8 inherit pro_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_static_attribs_class_c_l_e_d_controller"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_class_c_l_e_d_controller')"><img src="closed.png" alt="-"/>&#160;Static Protected Attributes inherited from <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a></td></tr>
+<tr class="memitem:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc138dfd8c32629cf4ecf0d430397e77"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pHead</b> = NULL</td></tr>
+<tr class="separator:afc138dfd8c32629cf4ecf0d430397e77 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba5aa24458cb37f0f5e6b18a74408a47"></a>
+static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_pTail</b> = NULL</td></tr>
+<tr class="separator:aba5aa24458cb37f0f5e6b18a74408a47 inherit pro_static_attribs_class_c_l_e_d_controller"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2803_controller.png b/docs/3.1/class_w_s2803_controller.png
new file mode 100644
index 00000000..624379ab
--- /dev/null
+++ b/docs/3.1/class_w_s2803_controller.png
Binary files differ
diff --git a/docs/3.1/class_w_s2811.html b/docs/3.1/class_w_s2811.html
new file mode 100644
index 00000000..b48fb682
--- /dev/null
+++ b/docs/3.1/class_w_s2811.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: WS2811&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2811&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2811&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2811.png" usemap="#WS2811&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="WS2811&lt; DATA_PIN, RGB_ORDER &gt;_map" name="WS2811&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_w_s2811_controller800_khz.html" alt="WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2811.png b/docs/3.1/class_w_s2811.png
new file mode 100644
index 00000000..f7b53e06
--- /dev/null
+++ b/docs/3.1/class_w_s2811.png
Binary files differ
diff --git a/docs/3.1/class_w_s2811__400.html b/docs/3.1/class_w_s2811__400.html
new file mode 100644
index 00000000..609a2be6
--- /dev/null
+++ b/docs/3.1/class_w_s2811__400.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: WS2811_400&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2811_400&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2811__400.png" usemap="#WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;_map" name="WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_w_s2811_controller400_khz.html" alt="WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2811__400.png b/docs/3.1/class_w_s2811__400.png
new file mode 100644
index 00000000..6b72d978
--- /dev/null
+++ b/docs/3.1/class_w_s2811__400.png
Binary files differ
diff --git a/docs/3.1/class_w_s2811_controller400_khz.html b/docs/3.1/class_w_s2811_controller400_khz.html
new file mode 100644
index 00000000..7896b39e
--- /dev/null
+++ b/docs/3.1/class_w_s2811_controller400_khz.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2811_controller400_khz.png" usemap="#WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_w_s2811__400.html" alt="WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,456,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2811_controller400_khz.png b/docs/3.1/class_w_s2811_controller400_khz.png
new file mode 100644
index 00000000..cd8bb7f8
--- /dev/null
+++ b/docs/3.1/class_w_s2811_controller400_khz.png
Binary files differ
diff --git a/docs/3.1/class_w_s2811_controller800_khz.html b/docs/3.1/class_w_s2811_controller800_khz.html
new file mode 100644
index 00000000..ef4d3354
--- /dev/null
+++ b/docs/3.1/class_w_s2811_controller800_khz.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.8"/>
+<title>FastLED: WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2811_controller800_khz.png" usemap="#WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map" name="WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_a_p_a104.html" alt="APA104&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,112,456,136"/>
+<area href="class_w_s2811.html" alt="WS2811&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="466,112,922,136"/>
+<area href="class_w_s2812.html" alt="WS2812&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="932,112,1388,136"/>
+<area href="class_w_s2812_b.html" alt="WS2812B&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="1398,112,1854,136"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="chipsets_8h_source.html">chipsets.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2811_controller800_khz.png b/docs/3.1/class_w_s2811_controller800_khz.png
new file mode 100644
index 00000000..57472331
--- /dev/null
+++ b/docs/3.1/class_w_s2811_controller800_khz.png
Binary files differ
diff --git a/docs/3.1/class_w_s2812.html b/docs/3.1/class_w_s2812.html
new file mode 100644
index 00000000..ae515812
--- /dev/null
+++ b/docs/3.1/class_w_s2812.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: WS2812&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2812&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2812&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2812.png" usemap="#WS2812&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="WS2812&lt; DATA_PIN, RGB_ORDER &gt;_map" name="WS2812&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_w_s2811_controller800_khz.html" alt="WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2812.png b/docs/3.1/class_w_s2812.png
new file mode 100644
index 00000000..4887432a
--- /dev/null
+++ b/docs/3.1/class_w_s2812.png
Binary files differ
diff --git a/docs/3.1/class_w_s2812_b.html b/docs/3.1/class_w_s2812_b.html
new file mode 100644
index 00000000..9b1c41e1
--- /dev/null
+++ b/docs/3.1/class_w_s2812_b.html
@@ -0,0 +1,110 @@
+<!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.8"/>
+<title>FastLED: WS2812B&lt; DATA_PIN, RGB_ORDER &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">WS2812B&lt; DATA_PIN, RGB_ORDER &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for WS2812B&lt; DATA_PIN, RGB_ORDER &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="class_w_s2812_b.png" usemap="#WS2812B&lt; DATA_PIN, RGB_ORDER &gt;_map" alt=""/>
+ <map id="WS2812B&lt; DATA_PIN, RGB_ORDER &gt;_map" name="WS2812B&lt; DATA_PIN, RGB_ORDER &gt;_map">
+<area href="class_w_s2811_controller800_khz.html" alt="WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;" shape="rect" coords="0,56,456,80"/>
+</map>
+ </div></div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_fast_l_e_d_8h_source.html">FastLED.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/class_w_s2812_b.png b/docs/3.1/class_w_s2812_b.png
new file mode 100644
index 00000000..f47a81ca
--- /dev/null
+++ b/docs/3.1/class_w_s2812_b.png
Binary files differ
diff --git a/docs/3.1/classes.html b/docs/3.1/classes.html
new file mode 100644
index 00000000..941ac7f8
--- /dev/null
+++ b/docs/3.1/classes.html
@@ -0,0 +1,137 @@
+<!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.8"/>
+<title>FastLED: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 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 class="current"><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_Q">Q</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_U">U</a>&#160;|&#160;<a class="qindex" href="#letter_W">W</a>&#160;|&#160;<a class="qindex" href="#letter__">_</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;A&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_deep_pixel_controller.html">DeepPixelController</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;N&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_t_m1804.html">TM1804</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2811__400.html">WS2811_400</a>&#160;&#160;&#160;</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;G&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_t_m1809.html">TM1809</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_a_p_a102_controller.html">APA102Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_n_e_o_p_i_x_e_l.html">NEOPIXEL</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1809_controller800_khz.html">TM1809Controller800Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2811_controller800_khz.html">WS2811Controller800Khz</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_a_p_a104.html">APA104</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_g_w6205.html">GW6205</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;P&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_t_m1829.html">TM1829</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2812.html">WS2812</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_g_w6205__400.html">GW6205_400</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1829_controller1600_khz.html">TM1829Controller1600Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2812_b.html">WS2812B</a>&#160;&#160;&#160;</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;C&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_p9813_controller.html">P9813Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1829_controller800_khz.html">TM1829Controller800Khz</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter__"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;_&#160;&#160;</div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_pixel_controller.html">PixelController</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;U&#160;&#160;</div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;I&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;S&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class___d_u_e_p_i_n.html">_DUEPIN</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_c_h_s_v.html">CHSV</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1903.html">UCS1903</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_q"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;q&#160;&#160;</div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_selectable.html">Selectable</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1903_b.html">UCS1903B</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;L&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_s_m16716_controller.html">SM16716Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classq.html">q</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_software_s_p_i_output.html">SoftwareSPIOutput</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="class_c_min_wait.html">CMinWait</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_l_p_d1886.html">LPD1886</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_s_p_i_output.html">SPIOutput</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;W&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;T&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_l_p_d8806_controller.html">LPD8806Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2801_controller.html">WS2801Controller</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;M&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_t_m1803.html">TM1803</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2803_controller.html">WS2803Controller</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;D&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="class_t_m1803_controller400_khz.html">TM1803Controller400Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2811.html">WS2811</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a>&#160;&#160;&#160;</td><td></td><td></td><td></td></tr>
+<tr><td valign="top"><a class="el" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a>&#160;&#160;&#160;</td><td></td><td></td><td></td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_Q">Q</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_U">U</a>&#160;|&#160;<a class="qindex" href="#letter_W">W</a>&#160;|&#160;<a class="qindex" href="#letter__">_</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/classq-members.html b/docs/3.1/classq-members.html
new file mode 100644
index 00000000..b1111eae
--- /dev/null
+++ b/docs/3.1/classq-members.html
@@ -0,0 +1,107 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">q&lt; T, F, I &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator*</b>(uint32_t v) (defined in <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>)</td><td class="entry"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator*</b>(uint16_t v) (defined in <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>)</td><td class="entry"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator*</b>(int32_t v) (defined in <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>)</td><td class="entry"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator*</b>(int16_t v) (defined in <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>)</td><td class="entry"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>q</b>(float fx) (defined in <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>)</td><td class="entry"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>q</b>(uint8_t _i, uint8_t _f) (defined in <a class="el" href="classq.html">q&lt; T, F, I &gt;</a>)</td><td class="entry"><a class="el" href="classq.html">q&lt; T, F, I &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/classq.html b/docs/3.1/classq.html
new file mode 100644
index 00000000..789a5cc3
--- /dev/null
+++ b/docs/3.1/classq.html
@@ -0,0 +1,126 @@
+<!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.8"/>
+<title>FastLED: q&lt; T, F, I &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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classq-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">q&lt; T, F, I &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a61b599bea169ddcf8c96972fa0f4406e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61b599bea169ddcf8c96972fa0f4406e"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>q</b> (float fx)</td></tr>
+<tr class="separator:a61b599bea169ddcf8c96972fa0f4406e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adccffc77e7b64de25530cfa53af6eb73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adccffc77e7b64de25530cfa53af6eb73"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>q</b> (uint8_t _i, uint8_t _f)</td></tr>
+<tr class="separator:adccffc77e7b64de25530cfa53af6eb73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d5bbe982d89891ec48869141261e53f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d5bbe982d89891ec48869141261e53f"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>operator*</b> (uint32_t v)</td></tr>
+<tr class="separator:a5d5bbe982d89891ec48869141261e53f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a813bdbda614b53c27678ee1f82e5e40e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a813bdbda614b53c27678ee1f82e5e40e"></a>
+uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>operator*</b> (uint16_t v)</td></tr>
+<tr class="separator:a813bdbda614b53c27678ee1f82e5e40e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9fe110e9076a0de5e646cb3a74be07f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe110e9076a0de5e646cb3a74be07f0"></a>
+int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>operator*</b> (int32_t v)</td></tr>
+<tr class="separator:a9fe110e9076a0de5e646cb3a74be07f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3fe5b150d81524fa1f5e77a9d359fd2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fe5b150d81524fa1f5e77a9d359fd2b"></a>
+int16_t&#160;</td><td class="memItemRight" valign="bottom"><b>operator*</b> (int16_t v)</td></tr>
+<tr class="separator:a3fe5b150d81524fa1f5e77a9d359fd2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="lib8tion_8h_source.html">lib8tion.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/closed.png b/docs/3.1/closed.png
new file mode 100644
index 00000000..98cc2c90
--- /dev/null
+++ b/docs/3.1/closed.png
Binary files differ
diff --git a/docs/3.1/color_8h_source.html b/docs/3.1/color_8h_source.html
new file mode 100644
index 00000000..eee6354b
--- /dev/null
+++ b/docs/3.1/color_8h_source.html
@@ -0,0 +1,149 @@
+<!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.8"/>
+<title>FastLED: color.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">color.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_COLOR_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_COLOR_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;<span class="comment">// definitions for color correction and light temperatures</span></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="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; <span class="comment">// Color correction starting points</span></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">// typical values for SMD5050 LEDs</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; TypicalSMD5050=0xFFB0F0 <span class="comment">/* 255, 176, 240 */</span>,</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; TypicalLEDStrip=0xFFB0F0 <span class="comment">/* 255, 176, 240 */</span>,</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="comment">// typical values for 8mm &quot;pixels on a string&quot;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="comment">// also for many through-hole &#39;T&#39; package LEDs</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; Typical8mmPixel=0xFFE08C <span class="comment">/* 255, 224, 140 */</span>,</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; TypicalPixelString=0xFFE08C <span class="comment">/* 255, 224, 140 */</span>,</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="comment">// uncorrected color</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; UncorrectedColor=0xFFFFFF</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;} LEDColorCorrection;</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="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// Black-body radiation light sources emit a (relatively) continuous</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// spectrum, and can be described as having a Kelvin &#39;temperature&#39;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; Candle=0xFF9329 <span class="comment">/* 1900 K, 255, 147, 41 */</span>,</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; Tungsten40W=0xFFC58F <span class="comment">/* 2600 K, 255, 197, 143 */</span>,</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; Tungsten100W=0xFFD6AA <span class="comment">/* 2850 K, 255, 214, 170 */</span>,</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; Halogen=0xFFF1E0 <span class="comment">/* 3200 K, 255, 241, 224 */</span>,</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; CarbonArc=0xFFFAF4 <span class="comment">/* 5200 K, 255, 250, 244 */</span>,</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; HighNoonSun=0xFFFFFB <span class="comment">/* 5400 K, 255, 255, 251 */</span>,</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; DirectSunlight=0xFFFFFF <span class="comment">/* 6000 K, 255, 255, 255 */</span>,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; OvercastSky=0xC9E2FF <span class="comment">/* 7000 K, 201, 226, 255 */</span>,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; ClearBlueSky=0x409CFF <span class="comment">/* 20000 K, 64, 156, 255 */</span>,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// Gaseous light sources emit discrete spectral bands, and while we can</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// approximate their aggregate hue with RGB values, they don&#39;t actually</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// have a proper Kelvin temperature.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; WarmFluorescent=0xFFF4E5 <span class="comment">/* 0 K, 255, 244, 229 */</span>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; StandardFluorescent=0xF4FFFA <span class="comment">/* 0 K, 244, 255, 250 */</span>,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; CoolWhiteFluorescent=0xD4EBFF <span class="comment">/* 0 K, 212, 235, 255 */</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; FullSpectrumFluorescent=0xFFF4F2 <span class="comment">/* 0 K, 255, 244, 242 */</span>,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; GrowLightFluorescent=0xFFEFF7 <span class="comment">/* 0 K, 255, 239, 247 */</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; BlackLightFluorescent=0xA700FF <span class="comment">/* 0 K, 167, 0, 255 */</span>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; MercuryVapor=0xD8F7FF <span class="comment">/* 0 K, 216, 247, 255 */</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; SodiumVapor=0xFFD1B2 <span class="comment">/* 0 K, 255, 209, 178 */</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; MetalHalide=0xF2FCFF <span class="comment">/* 0 K, 242, 252, 255 */</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; HighPressureSodium=0xFFB74C <span class="comment">/* 0 K, 255, 183, 76 */</span>,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// Uncorrected temperature 0xFFFFFF</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; UncorrectedTemperature=0xFFFFFF</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;} ColorTemperature;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/colorpalettes_8h_source.html b/docs/3.1/colorpalettes_8h_source.html
new file mode 100644
index 00000000..c867b43a
--- /dev/null
+++ b/docs/3.1/colorpalettes_8h_source.html
@@ -0,0 +1,137 @@
+<!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.8"/>
+<title>FastLED: colorpalettes.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">colorpalettes.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_COLORPALETTES_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_COLORPALETTES_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;<span class="preprocessor">#include &quot;colorutils.h&quot;</span></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;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// Preset color schemes, such as they are.</span></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">// These schemes are all declared as &quot;PROGMEM&quot;, meaning</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// that they won&#39;t take up SRAM on AVR chips until used.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// Furthermore, the compiler won&#39;t even include these</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// in your PROGMEM (flash) storage unless you specifically</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// use each one, so you only &#39;pay for&#39; those you actually use.</span></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;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 CloudColors_p PROGMEM;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 LavaColors_p PROGMEM;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 OceanColors_p PROGMEM;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 ForestColors_p PROGMEM;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">// HSV Rainbow</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 RainbowColors_p PROGMEM;</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="comment">// HSV Rainbow colors with alternatating stripes of black</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define RainbowStripesColors_p RainbowStripeColors_p</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 RainbowStripeColors_p PROGMEM;</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="comment">// HSV color ramp: blue purple ping red orange yellow (and back)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">// Basically, everything but the greens, which tend to make</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// people&#39;s skin look unhealthy. This palette is good for</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// lighting at a club or party, where it&#39;ll be shining on people.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 PartyColors_p PROGMEM;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// Approximate &quot;black body radiation&quot; palette, akin to</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// the FastLED &#39;HeatColor&#39; function.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// Recommend that you use values 0-240 rather than</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// the usual 0-255, as the last 15 colors will be</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// &#39;wrapping around&#39; from the hot end to the cold end,</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// which looks wrong.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 HeatColors_p PROGMEM;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/colorutils_8h_source.html b/docs/3.1/colorutils_8h_source.html
new file mode 100644
index 00000000..ad8a260a
--- /dev/null
+++ b/docs/3.1/colorutils_8h_source.html
@@ -0,0 +1,939 @@
+<!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.8"/>
+<title>FastLED: colorutils.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">colorutils.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_COLORUTILS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_COLORUTILS_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;<span class="preprocessor">#include &lt;avr/pgmspace.h&gt;</span></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="preprocessor">#include &quot;pixeltypes.h&quot;</span></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="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// fill_solid - fill a range of LEDs with a solid color</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Example: fill_solid( leds, NUM_LEDS, CRGB(50,0,200));</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keywordtype">void</span> fill_solid( <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> * leds, <span class="keywordtype">int</span> numToFill,</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; color);</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="keywordtype">void</span> fill_solid( <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>* targetArray, <span class="keywordtype">int</span> numToFill,</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; hsvColor);</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </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;<span class="comment">// fill_rainbow - fill a range of LEDs with a rainbow of colors, at</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// full saturation and full value (brightness)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keywordtype">void</span> fill_rainbow( <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> * pFirstLED, <span class="keywordtype">int</span> numToFill,</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; uint8_t initialhue,</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; uint8_t deltahue = 5);</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="keywordtype">void</span> fill_rainbow( <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a> * targetArray, <span class="keywordtype">int</span> numToFill,</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; uint8_t initialhue,</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; uint8_t deltahue = 5);</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;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// fill_gradient - fill an array of colors with a smooth HSV gradient</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// between two specified HSV colors.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">// Since &#39;hue&#39; is a value around a color wheel,</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// there are always two ways to sweep from one hue</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// to another.</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// This function lets you specify which way you want</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// the hue gradient to sweep around the color wheel:</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// FORWARD_HUES: hue always goes clockwise</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// BACKWARD_HUES: hue always goes counter-clockwise</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// SHORTEST_HUES: hue goes whichever way is shortest</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// LONGEST_HUES: hue goes whichever way is longest</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// The default is SHORTEST_HUES, as this is nearly</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// always what is wanted.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">// fill_gradient can write the gradient colors EITHER</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">// (1) into an array of CRGBs (e.g., into leds[] array, or an RGB Palette)</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// OR </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// (2) into an array of CHSVs (e.g. an HSV Palette).</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">// In the case of writing into a CRGB array, the gradient is </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// computed in HSV space, and then HSV values are converted to RGB </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// as they&#39;re written into the RGB array.</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="keyword">typedef</span> <span class="keyword">enum</span> { FORWARD_HUES, BACKWARD_HUES, SHORTEST_HUES, LONGEST_HUES } TGradientDirectionCode;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#define saccum87 int16_t</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;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keywordtype">void</span> fill_gradient( T* targetArray,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; uint16_t startpos, <a class="code" href="struct_c_h_s_v.html">CHSV</a> startcolor,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; uint16_t endpos, <a class="code" href="struct_c_h_s_v.html">CHSV</a> endcolor,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// if the points are in the wrong order, straighten them</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span>( endpos &lt; startpos ) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; uint16_t t = endpos;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> tc = endcolor;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; startpos = t;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; startcolor = tc;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; endcolor = startcolor;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; endpos = startpos;</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="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// If we&#39;re fading toward black (val=0) or white (sat=0),</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// then set the endhue to the starthue.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// This lets us ramp smoothly to black or white, regardless</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// of what &#39;hue&#39; was set in the endcolor (since it doesn&#39;t matter)</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span>( endcolor.value == 0 || endcolor.saturation == 0) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; endcolor.hue = startcolor.hue;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// Similarly, if we&#39;re fading in from black (val=0) or white (sat=0)</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// then set the starthue to the endhue.</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// This lets us ramp smoothly up from black or white, regardless</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// of what &#39;hue&#39; was set in the startcolor (since it doesn&#39;t matter)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span>( startcolor.value == 0 || startcolor.saturation == 0) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; startcolor.hue = endcolor.hue;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; saccum87 huedistance87;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; saccum87 satdistance87;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; saccum87 valdistance87;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; satdistance87 = (endcolor.sat - startcolor.sat) &lt;&lt; 7;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; valdistance87 = (endcolor.val - startcolor.val) &lt;&lt; 7;</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; uint8_t huedelta8 = endcolor.hue - startcolor.hue;</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="keywordflow">if</span>( directionCode == SHORTEST_HUES ) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; directionCode = FORWARD_HUES;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span>( huedelta8 &gt; 127) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; directionCode = BACKWARD_HUES;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span>( directionCode == LONGEST_HUES ) {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; directionCode = FORWARD_HUES;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span>( huedelta8 &lt; 128) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; directionCode = BACKWARD_HUES;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span>( directionCode == FORWARD_HUES) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; huedistance87 = huedelta8 &lt;&lt; 7;</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">else</span> <span class="comment">/* directionCode == BACKWARD_HUES */</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; huedistance87 = (uint8_t)(256 - huedelta8) &lt;&lt; 7;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; huedistance87 = -huedistance87;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; uint16_t pixeldistance = endpos - startpos;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; int16_t divisor = pixeldistance ? pixeldistance : 1;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; saccum87 huedelta87 = huedistance87 / divisor;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; saccum87 satdelta87 = satdistance87 / divisor;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; saccum87 valdelta87 = valdistance87 / divisor;</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; huedelta87 *= 2;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; satdelta87 *= 2;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; valdelta87 *= 2;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; accum88 hue88 = startcolor.hue &lt;&lt; 8;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; accum88 sat88 = startcolor.sat &lt;&lt; 8;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; accum88 val88 = startcolor.val &lt;&lt; 8;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">for</span>( uint16_t i = startpos; i &lt;= endpos; i++) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; targetArray[i] = <a class="code" href="struct_c_h_s_v.html">CHSV</a>( hue88 &gt;&gt; 8, sat88 &gt;&gt; 8, val88 &gt;&gt; 8);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; hue88 += huedelta87;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; sat88 += satdelta87;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; val88 += valdelta87;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment">// Convenience functions to fill an array of colors with a</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// two-color, three-color, or four-color gradient</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keywordtype">void</span> fill_gradient( T* targetArray, uint16_t numLeds, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;{</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; uint16_t last = numLeds - 1;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; fill_gradient( targetArray, 0, c1, last, c2, directionCode);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="keywordtype">void</span> fill_gradient( T* targetArray, uint16_t numLeds, </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3, </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;{</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; uint16_t half = (numLeds / 2);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; uint16_t last = numLeds - 1;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; fill_gradient( targetArray, 0, c1, half, c2, directionCode);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; fill_gradient( targetArray, half, c2, last, c3, directionCode);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="keywordtype">void</span> fill_gradient( T* targetArray, uint16_t numLeds, </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c4, </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; uint16_t onethird = (numLeds / 3);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; uint16_t twothirds = ((numLeds * 2) / 3);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; uint16_t last = numLeds - 1;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; fill_gradient( targetArray, 0, c1, onethird, c2, directionCode);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; fill_gradient( targetArray, onethird, c2, twothirds, c3, directionCode);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; fill_gradient( targetArray, twothirds, c3, last, c4, directionCode);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;}</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">// convenience synonym</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="preprocessor">#define fill_gradient_HSV fill_gradient</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment">// fill_gradient_RGB - fill a range of LEDs with a smooth RGB gradient</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">// between two specified RGB colors.</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment">// Unlike HSV, there is no &#39;color wheel&#39; in RGB space,</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment">// and therefore there&#39;s only one &#39;direction&#39; for the</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment">// gradient to go, and no &#39;direction code&#39; is needed.</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="keywordtype">void</span> fill_gradient_RGB( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds,</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; uint16_t startpos, <a class="code" href="struct_c_r_g_b.html">CRGB</a> startcolor,</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; uint16_t endpos, <a class="code" href="struct_c_r_g_b.html">CRGB</a> endcolor );</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="keywordtype">void</span> fill_gradient_RGB( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t numLeds, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="keywordtype">void</span> fill_gradient_RGB( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t numLeds, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c3);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="keywordtype">void</span> fill_gradient_RGB( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t numLeds, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c4);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment">// fadeLightBy and fade_video - reduce the brightness of an array</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment">// of pixels all at once. Guaranteed</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment">// to never fade all the way to black.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment">// (The two names are synonyms.)</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="keywordtype">void</span> fadeLightBy( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t num_leds, uint8_t fadeBy);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="keywordtype">void</span> fade_video( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t num_leds, uint8_t fadeBy);</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">// nscale8_video - scale down the brightness of an array of pixels</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment">// all at once. Guaranteed to never scale a pixel</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment">// all the way down to black, unless &#39;scale&#39; is zero.</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keywordtype">void</span> nscale8_video( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t num_leds, uint8_t scale);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment">// fadeToBlackBy and fade_raw - reduce the brightness of an array</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment">// of pixels all at once. These</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment">// functions will eventually fade all</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment">// the way to black.</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">// (The two names are synonyms.)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="keywordtype">void</span> fadeToBlackBy( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t num_leds, uint8_t fadeBy);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="keywordtype">void</span> fade_raw( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t num_leds, uint8_t fadeBy);</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="comment">// nscale8 - scale down the brightness of an array of pixels</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">// all at once. This function can scale pixels all the</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">// way down to black even if &#39;scale&#39; is not zero.</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="keywordtype">void</span> nscale8( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t num_leds, uint8_t scale);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">// fadeUsingColor - scale down the brightness of an array of pixels,</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment">// as though it were seen through a transparent</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">// filter with the specified color.</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">// For example, if the colormask is</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment">// CRGB( 200, 100, 50)</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">// then the pixels&#39; red will be faded to 200/256ths,</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment">// their green to 100/256ths, and their blue to 50/256ths.</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">// This particular example give a &#39;hot fade&#39; look,</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">// with white fading to yellow, then red, then black.</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">// You can also use colormasks like CRGB::Blue to</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment">// zero out the red and green elements, leaving blue</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">// (largely) the same.</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="keywordtype">void</span> fadeUsingColor( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t numLeds, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; colormask);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment">// Pixel blending</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// blend - computes a new color blended some fraction of the way</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment">// between two other colors.</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> blend( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p2, fract8 amountOfP2 );</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<a class="code" href="struct_c_h_s_v.html">CHSV</a> blend( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; p2, fract8 amountOfP2,</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="comment">// blend - computes a new color blended array of colors, each</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment">// a given fraction of the way between corresponding</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="comment">// elements of two source arrays of colors.</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="comment">// Useful for blending palettes.</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a>* blend( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>* src1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>* src2, <a class="code" href="struct_c_r_g_b.html">CRGB</a>* dest,</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; uint16_t count, fract8 amountOfsrc2 );</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;<a class="code" href="struct_c_h_s_v.html">CHSV</a>* blend( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>* src1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>* src2, <a class="code" href="struct_c_h_s_v.html">CHSV</a>* dest,</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; uint16_t count, fract8 amountOfsrc2,</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment">// nblend - destructively modifies one color, blending</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment">// in a given fraction of an overlay color</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; nblend( <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; existing, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; overlay, fract8 amountOfOverlay );</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; nblend( <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; existing, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; overlay, fract8 amountOfOverlay,</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment">// nblend - destructively blends a given fraction of</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment">// a new color array into an existing color array</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="keywordtype">void</span> nblend( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* existing, <a class="code" href="struct_c_r_g_b.html">CRGB</a>* overlay, uint16_t count, fract8 amountOfOverlay);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="keywordtype">void</span> nblend( <a class="code" href="struct_c_h_s_v.html">CHSV</a>* existing, <a class="code" href="struct_c_h_s_v.html">CHSV</a>* overlay, uint16_t count, fract8 amountOfOverlay,</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment">// blur1d: one-dimensional blur filter. Spreads light to 2 line neighbors.</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment">// blur2d: two-dimensional blur filter. Spreads light to 8 XY neighbors.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="comment">// 0 = no spread at all</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment">// 64 = moderate spreading</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment">// 172 = maximum smooth, even spreading</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment">// 173..255 = wider spreading, but increasing flicker</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="comment">// Total light is NOT entirely conserved, so many repeated</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment">// calls to &#39;blur&#39; will also result in the light fading,</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment">// eventually all the way to black; this is by design so that</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment">// it can be used to (slowly) clear the LEDs to black.</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="keywordtype">void</span> blur1d( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint16_t numLeds, fract8 blur_amount);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="keywordtype">void</span> blur2d( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint8_t width, uint8_t height, fract8 blur_amount);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment">// blurRows: perform a blur1d on every row of a rectangular matrix</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keywordtype">void</span> blurRows( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint8_t width, uint8_t height, fract8 blur_amount);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment">// blurColumns: perform a blur1d on each column of a rectangular matrix</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="keywordtype">void</span> blurColumns(<a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds, uint8_t width, uint8_t height, fract8 blur_amount);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">// CRGB HeatColor( uint8_t temperature)</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">// Approximates a &#39;black body radiation&#39; spectrum for</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment">// a given &#39;heat&#39; level. This is useful for animations of &#39;fire&#39;.</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment">// Heat is specified as an arbitrary scale from 0 (cool) to 255 (hot).</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment">// This is NOT a chromatically correct &#39;black body radiation&#39;</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment">// spectrum, but it&#39;s surprisingly close, and it&#39;s fast and small.</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> HeatColor( uint8_t temperature);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</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">// Palettes</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment">// RGB Palettes map an 8-bit value (0..255) to an RGB color.</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment">// You can create any color palette you wish; a couple of starters</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">// are provided: Forest, Clouds, Lava, Ocean, Rainbow, and Rainbow Stripes.</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment">// Palettes come in the traditional 256-entry variety, which take</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">// up 768 bytes of RAM, and lightweight 16-entry varieties. The 16-entry</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// variety automatically interpolates between its entries to produce</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment">// a full 256-element color map, but at a cost of only 48 bytes or RAM.</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment">// Basic operation is like this: (example shows the 16-entry variety)</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment">// 1. Declare your palette storage:</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment">// CRGBPalette16 myPalette;</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment">// 2. Fill myPalette with your own 16 colors, or with a preset color scheme.</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment">// You can specify your 16 colors a variety of ways:</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">// CRGBPalette16 myPalette(</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">// CRGB::Black,</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment">// CRGB::Black,</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment">// CRGB::Red,</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment">// CRGB::Yellow,</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment">// CRGB::Green,</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment">// CRGB::Blue,</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">// CRGB::Purple,</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">// CRGB::Black,</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment">// 0x100000,</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment">// 0x200000,</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment">// 0x400000,</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment">// 0x800000,</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment">// CHSV( 30,255,255),</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">// CHSV( 50,255,255),</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment">// CHSV( 70,255,255),</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">// CHSV( 90,255,255)</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment">// );</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="comment">// Or you can initiaize your palette with a preset color scheme:</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment">// myPalette = RainbowStripesColors_p;</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment">// 3. Any time you want to set a pixel to a color from your palette, use</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment">// &quot;ColorFromPalette(...)&quot; as shown:</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment">// uint8_t index = /* any value 0..255 */;</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment">// leds[i] = ColorFromPalette( myPalette, index);</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment">// Even though your palette has only 16 explicily defined entries, you</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment">// can use an &#39;index&#39; from 0..255. The 16 explicit palette entries will</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">// be spread evenly across the 0..255 range, and the intermedate values</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment">// will be RGB-interpolated between adjacent explicit entries.</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment">// It&#39;s easier to use than it sounds.</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment">//</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="keyword">class </span><a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="keyword">class </span><a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="keyword">class </span><a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="keyword">class </span><a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="keyword">typedef</span> uint32_t TProgmemRGBPalette16[16];</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="keyword">typedef</span> uint32_t TProgmemHSVPalette16[16];</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="preprocessor">#define TProgmemPalette16 TProgmemRGBPalette16 </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="comment">// Convert a 16-entry palette to a 256-entry palette</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="keywordtype">void</span> UpscalePalette(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; srcpal16, <span class="keyword">struct</span> <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; destpal256);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="keywordtype">void</span> UpscalePalette(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; srcpal16, <span class="keyword">struct</span> <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; destpal256);</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"><a class="line" href="class_c_h_s_v_palette16.html"> 372</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> {</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> entries[16];</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>() {};</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c00,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c01,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c02,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c03,</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c04,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c05,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c06,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c07,</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c08,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c09,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c10,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c11,</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c12,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c13,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c14,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c15 )</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; entries[0]=c00; entries[1]=c01; entries[2]=c02; entries[3]=c03;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; entries[4]=c04; entries[5]=c05; entries[6]=c06; entries[7]=c07;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; entries[8]=c08; entries[9]=c09; entries[10]=c10; entries[11]=c11;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; entries[12]=c12; entries[13]=c13; entries[14]=c14; entries[15]=c15;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; };</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> TProgmemHSVPalette16&amp; rhs)</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> xyz = pgm_read_dword_near( rhs + i);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; entries[i].hue = xyz.red;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; entries[i].sat = xyz.green;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; entries[i].val = xyz.blue;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; operator=( <span class="keyword">const</span> TProgmemHSVPalette16&amp; rhs)</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="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> xyz = pgm_read_dword_near( rhs + i);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; entries[i].hue = xyz.red;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; entries[i].sat = xyz.green;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; entries[i].val = xyz.blue;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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; </div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) __attribute__((always_inline))</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="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) <span class="keyword">const</span> __attribute__((always_inline))</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="keywordflow">return</span> entries[x];</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; </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (<span class="keywordtype">int</span> x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (<span class="keywordtype">int</span> x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">operator</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>*()</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; {</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1)</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; fill_solid( &amp;(entries[0]), 16, c1);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2)</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; fill_gradient( &amp;(entries[0]), 16, c1, c2);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3)</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; fill_gradient( &amp;(entries[0]), 16, c1, c2, c3);</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; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c4)</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; fill_gradient( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; </div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;};</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="class_c_h_s_v_palette256.html"> 459</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> {</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> entries[256];</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>() {};</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c00,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c01,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c02,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c03,</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c04,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c05,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c06,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c07,</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c08,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c09,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c10,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c11,</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c12,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c13,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c14,<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c15 )</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; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> p16(c00,c01,c02,c03,c04,c05,c06,c07,</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; c08,c09,c10,c11,c12,c13,c14,c15);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; };</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; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; rhs)</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; rhs)</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; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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; </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs16)</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; UpscalePalette( rhs16, *<span class="keyword">this</span>);</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; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs16)</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> TProgmemRGBPalette16&amp; rhs)</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; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; operator=( <span class="keyword">const</span> TProgmemRGBPalette16&amp; rhs)</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; {</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; {</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (<span class="keywordtype">int</span> x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; {</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (<span class="keywordtype">int</span> x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; {</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keyword">operator</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>*()</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1)</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; fill_solid( &amp;(entries[0]), 256, c1);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; fill_gradient( &amp;(entries[0]), 256, c1, c2);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3)</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; fill_gradient( &amp;(entries[0]), 256, c1, c2, c3);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c4)</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; fill_gradient( &amp;(entries[0]), 256, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;};</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="class_c_r_g_b_palette16.html"> 546</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> {</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> entries[16];</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>() {};</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c00,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c01,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c02,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c03,</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c04,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c05,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c06,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c07,</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c08,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c09,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c10,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c11,</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c12,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c13,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c14,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c15 )</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; entries[0]=c00; entries[1]=c01; entries[2]=c02; entries[3]=c03;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; entries[4]=c04; entries[5]=c05; entries[6]=c06; entries[7]=c07;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; entries[8]=c08; entries[9]=c09; entries[10]=c10; entries[11]=c11;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; entries[12]=c12; entries[13]=c13; entries[14]=c14; entries[15]=c15;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; };</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; rhs)</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; rhs)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs)</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; } </div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; }</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> TProgmemRGBPalette16&amp; rhs)</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; entries[i] = pgm_read_dword_near( rhs + i);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; }</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; operator=( <span class="keyword">const</span> TProgmemRGBPalette16&amp; rhs)</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; entries[i] = pgm_read_dword_near( rhs + i);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; {</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (<span class="keywordtype">int</span> x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (<span class="keywordtype">int</span> x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; {</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">operator</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>*()</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; {</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; }</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1)</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; {</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; fill_solid( &amp;(entries[0]), 16, c1);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2)</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; fill_gradient( &amp;(entries[0]), 16, c1, c2);</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3)</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; fill_gradient( &amp;(entries[0]), 16, c1, c2, c3);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c4)</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; {</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; fill_gradient( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; </div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1)</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; fill_solid( &amp;(entries[0]), 16, c1);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2)</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; {</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c3)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; {</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2, c3);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; }</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c4)</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; {</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;};</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="class_c_r_g_b_palette256.html"> 659</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> {</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> entries[256];</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>() {};</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c00,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c01,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c02,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c03,</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c04,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c05,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c06,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c07,</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c08,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c09,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c10,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c11,</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c12,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c13,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c14,<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c15 )</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; {</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> p16(c00,c01,c02,c03,c04,c05,c06,c07,</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; c08,c09,c10,c11,c12,c13,c14,c15);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; };</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; rhs)</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; rhs)</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; }</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; rhs)</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; 256; i++) {</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; rhs)</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; {</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; 256; i++) {</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; }</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; rhs16)</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; {</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; rhs16)</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> TProgmemRGBPalette16&amp; rhs)</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; operator=( <span class="keyword">const</span> TProgmemRGBPalette16&amp; rhs)</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; </div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; {</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; }</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (<span class="keywordtype">int</span> x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; {</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; }</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (<span class="keywordtype">int</span> x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; {</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; }</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">operator</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>*()</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1)</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; fill_solid( &amp;(entries[0]), 256, c1);</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2)</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; {</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; fill_gradient( &amp;(entries[0]), 256, c1, c2);</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; }</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3)</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; fill_gradient( &amp;(entries[0]), 256, c1, c2, c3);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; c4)</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; {</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; fill_gradient( &amp;(entries[0]), 256, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; </div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1)</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; fill_solid( &amp;(entries[0]), 256, c1);</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; }</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2)</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; {</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2);</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c3)</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; {</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2, c3);</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c1, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c2, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c3, <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; c4)</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; {</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; </div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;};</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> { NOBLEND=0, BLEND=1 } TBlendType;</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> ColorFromPalette( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; pal,</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; TBlendType blendType=BLEND);</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> ColorFromPalette( <span class="keyword">const</span> <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; pal,</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; TBlendType blendType=NOBLEND );</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<a class="code" href="struct_c_h_s_v.html">CHSV</a> ColorFromPalette( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; pal,</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; TBlendType blendType=BLEND);</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;<a class="code" href="struct_c_h_s_v.html">CHSV</a> ColorFromPalette( <span class="keyword">const</span> <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>&amp; pal,</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; TBlendType blendType=NOBLEND );</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="comment">// Fill a range of LEDs with a sequece of entryies from a palette</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PALETTE&gt; </div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;<span class="keywordtype">void</span> fill_palette(<a class="code" href="struct_c_r_g_b.html">CRGB</a>* L, uint16_t N, uint8_t startIndex, uint8_t incIndex,</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keyword">const</span> PALETTE&amp; pal, uint8_t brightness, TBlendType blendType)</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; uint8_t colorIndex = startIndex;</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">for</span>( uint16_t i = 0; i &lt; N; i++) {</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; L[i] = ColorFromPalette( pal, colorIndex, brightness, blendType);</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; colorIndex += incIndex;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; }</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;}</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PALETTE&gt;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;<span class="keywordtype">void</span> map_data_into_colors_through_palette( </div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; uint8_t *dataArray, uint16_t dataCount, </div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a>* targetColorArray, </div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keyword">const</span> PALETTE&amp; pal, </div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; uint8_t brightness=255, </div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; uint8_t opacity=255, </div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; TBlendType blendType=BLEND)</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;{</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">for</span>( uint16_t i = 0; i &lt; dataCount; i++) {</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; uint8_t d = dataArray[i];</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgb = ColorFromPalette( pal, d, brightness, blendType);</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span>( opacity == 255 ) {</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; targetColorArray[i] = rgb;</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; targetColorArray[i].nscale8( 256 - opacity);</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; rgb.nscale8_video( opacity);</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; targetColorArray[i] += rgb;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;}</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="class_c_h_s_v_palette256_html"><div class="ttname"><a href="class_c_h_s_v_palette256.html">CHSVPalette256</a></div><div class="ttdef"><b>Definition:</b> colorutils.h:459</div></div>
+<div class="ttc" id="class_c_r_g_b_palette16_html"><div class="ttname"><a href="class_c_r_g_b_palette16.html">CRGBPalette16</a></div><div class="ttdef"><b>Definition:</b> colorutils.h:546</div></div>
+<div class="ttc" id="class_c_h_s_v_palette16_html"><div class="ttname"><a href="class_c_h_s_v_palette16.html">CHSVPalette16</a></div><div class="ttdef"><b>Definition:</b> colorutils.h:372</div></div>
+<div class="ttc" id="class_c_r_g_b_palette256_html"><div class="ttname"><a href="class_c_r_g_b_palette256.html">CRGBPalette256</a></div><div class="ttdef"><b>Definition:</b> colorutils.h:659</div></div>
+<div class="ttc" id="struct_c_h_s_v_html"><div class="ttname"><a href="struct_c_h_s_v.html">CHSV</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:16</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/controller_8h_source.html b/docs/3.1/controller_8h_source.html
new file mode 100644
index 00000000..eae8f816
--- /dev/null
+++ b/docs/3.1/controller_8h_source.html
@@ -0,0 +1,638 @@
+<!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.8"/>
+<title>FastLED: controller.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">controller.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_CONTROLLER_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_CONTROLLER_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;<span class="preprocessor">#include &quot;led_sysdefs.h&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &quot;pixeltypes.h&quot;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &quot;color.h&quot;</span></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;<span class="preprocessor">#define RO(X) RGB_BYTE(RGB_ORDER, X)</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define RGB_BYTE(RO,X) (((RO)&gt;&gt;(3*(2-(X)))) &amp; 0x3)</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define RGB_BYTE0(RO) ((RO&gt;&gt;6) &amp; 0x3)</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#define RGB_BYTE1(RO) ((RO&gt;&gt;3) &amp; 0x3)</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#define RGB_BYTE2(RO) ((RO) &amp; 0x3)</span></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="comment">// operator byte *(struct CRGB[] arr) { return (byte*)arr; }</span></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="preprocessor">#define DISABLE_DITHER 0x00</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#define BINARY_DITHER 0x01</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">typedef</span> uint8_t EDitherMode;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// LED Controller interface definition</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">//</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="l00032"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_c_fast_l_e_d.html">CFastLED</a>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> *m_Data;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *m_pNext;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> m_ColorCorrection;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> m_ColorTemperature;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; EDitherMode m_DitherMode;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">int</span> m_nLeds;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *m_pHead;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *m_pTail;</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">// set all the leds on the controller to a given color</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) = 0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// note that the uint8_ts will be in the order that you want them sent out to the device.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// nLeds is the number of RGB leds being written to</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) = 0;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// as above, but every 4th uint8_t is assumed to be alpha channel data, and will be skipped</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(<span class="keyword">const</span> <span class="keyword">struct</span> CARGB *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) = 0;</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="keyword">public</span>:</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a>() : m_Data(NULL), m_ColorCorrection(UncorrectedColor), m_ColorTemperature(UncorrectedTemperature), m_DitherMode(BINARY_DITHER), m_nLeds(0) {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; m_pNext = NULL;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span>(m_pHead==NULL) { m_pHead = <span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span>(m_pTail != NULL) { m_pTail-&gt;m_pNext = <span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; m_pTail = <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// initialize the LED controller</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() = 0;</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="comment">// clear out/zero out the given number of leds.</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) = 0;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// show function w/integer brightness, will scale for color correction and temperature</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, uint8_t brightness) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(data, nLeds, getAdjustment(brightness));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// show function w/integer brightness, will scale for color correction and temperature</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp;data, <span class="keywordtype">int</span> nLeds, uint8_t brightness) {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; showColor(data, nLeds, getAdjustment(brightness));</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// show function using the &quot;attached to this controller&quot; led data</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">void</span> showLeds(uint8_t brightness=255) {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(m_Data, m_nLeds, getAdjustment(brightness));</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, uint8_t brightness=255) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; showColor(data, m_nLeds, getAdjustment(brightness));</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;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// navigating the list of controllers</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *head() { <span class="keywordflow">return</span> m_pHead; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *next() { <span class="keywordflow">return</span> m_pNext; }</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"> #ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// as above, but every 4th uint8_t is assumed to be alpha channel data, and will be skipped</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(<span class="keyword">const</span> <span class="keyword">struct</span> CARGB *data, <span class="keywordtype">int</span> nLeds, uint8_t brightness) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">show</a>(data, nLeds, getAdjustment(brightness))</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#endif</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; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; setLeds(<a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; m_Data = data;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; m_nLeds = nLeds;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">void</span> clearLedData() {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span>(m_Data) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; memset8((<span class="keywordtype">void</span>*)m_Data, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>) * m_nLeds);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// How many leds does this controller manage?</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">int</span> size() { <span class="keywordflow">return</span> m_nLeds; }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// Pointer to the CRGB array for this controller</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a>* leds() { <span class="keywordflow">return</span> m_Data; }</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="comment">// Reference to the n&#39;th item in the controller</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp;operator[](<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> m_Data[x]; }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">inline</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; setDither(uint8_t ditherMode = BINARY_DITHER) { m_DitherMode = ditherMode; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">inline</span> uint8_t getDither() { <span class="keywordflow">return</span> m_DitherMode; }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; setCorrection(<a class="code" href="struct_c_r_g_b.html">CRGB</a> correction) { m_ColorCorrection = correction; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; setCorrection(LEDColorCorrection correction) { m_ColorCorrection = correction; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> getCorrection() { <span class="keywordflow">return</span> m_ColorCorrection; }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; setTemperature(<a class="code" href="struct_c_r_g_b.html">CRGB</a> temperature) { m_ColorTemperature = temperature; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; setTemperature(ColorTemperature temperature) { m_ColorTemperature = temperature; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> getTemperature() { <span class="keywordflow">return</span> m_ColorTemperature; }</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; <a class="code" href="struct_c_r_g_b.html">CRGB</a> getAdjustment(uint8_t scale) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#if defined(NO_CORRECTION) &amp;&amp; (NO_CORRECTION==1)</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>(scale,scale,scale);</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; <a class="code" href="struct_c_r_g_b.html">CRGB</a> adj(0,0,0);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span>(scale &gt; 0) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; uint8_t cc = m_ColorCorrection.raw[i];</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; uint8_t ct = m_ColorTemperature.raw[i];</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span>(cc &gt; 0 &amp;&amp; ct &gt; 0) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; uint32_t work = (((uint32_t)cc)+1) * (((uint32_t)ct)+1) * scale;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; work /= 0x10000L;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; adj.raw[i] = work &amp; 0xFF;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> adj;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;};</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment">// Pixel controller class. This is the class that we use to centralize pixel access in a block of data, including</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">// support for things like RGB reordering, scaling, dithering, skipping (for ARGB data), and eventually, we will</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment">// centralize 8/12/16 conversions here as well.</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html"> 158</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_pixel_controller.html">PixelController</a> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> uint8_t *mData;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordtype">int</span> mLen;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; uint8_t d[3];</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; uint8_t e[3];</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> mScale;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; uint8_t mAdvance;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController</a>(<span class="keyword">const</span> <a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; other) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; d[0] = other.d[0];</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; d[1] = other.d[1];</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; d[2] = other.d[2];</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; e[0] = other.e[0];</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; e[1] = other.e[1];</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; e[2] = other.e[2];</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; mData = other.mData;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; mScale = other.mScale;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; mAdvance = other.mAdvance;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; mLen = other.mLen;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController</a>(<span class="keyword">const</span> uint8_t *d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) : mData(d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; mData += skip;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; mAdvance = (advance) ? 3+skip : 0;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController</a>(<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; mAdvance = 3;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController</a>(<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp;d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; mAdvance = 0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController</a>(<span class="keyword">const</span> CARGB &amp;d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; mAdvance = 0;</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="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController</a>(<span class="keyword">const</span> CARGB *d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; mAdvance = 4;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="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; <span class="keywordtype">void</span> init_binary_dithering() {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="preprocessor">#if !defined(NO_DITHERING) || (NO_DITHERING != 1)</span></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="comment">// Set &#39;virtual bits&#39; of dithering to the highest level</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// that is not likely to cause excessive flickering at</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// low brightness levels + low update rates.</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// These pre-set values are a little ambitious, since</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">// a 400Hz update rate for WS2811-family LEDs is only</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="comment">// possible with 85 pixels or fewer.</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Once we have a &#39;number of milliseconds since last update&#39;</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// value available here, we can quickly calculate the correct</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// number of &#39;virtual bits&#39; on the fly with a couple of &#39;if&#39;</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// statements -- no division required. At this point,</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// the division is done at compile time, so there&#39;s no runtime</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// cost, but the values are still hard-coded.</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor">#define MAX_LIKELY_UPDATE_RATE_HZ 400</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor">#define MIN_ACCEPTABLE_DITHER_RATE_HZ 50</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#define UPDATES_PER_FULL_DITHER_CYCLE (MAX_LIKELY_UPDATE_RATE_HZ / MIN_ACCEPTABLE_DITHER_RATE_HZ)</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor">#define RECOMMENDED_VIRTUAL_BITS ((UPDATES_PER_FULL_DITHER_CYCLE&gt;1) + \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;2) + \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;4) + \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;8) + \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;16) + \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;32) + \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;64) + \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;128) )</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="preprocessor">#define VIRTUAL_BITS RECOMMENDED_VIRTUAL_BITS</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// R is the digther signal &#39;counter&#39;.</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keyword">static</span> byte R = 0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; R++;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// R is wrapped around at 2^ditherBits,</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// so if ditherBits is 2, R will cycle through (0,1,2,3)</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; byte ditherBits = VIRTUAL_BITS;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; R &amp;= (0x01 &lt;&lt; ditherBits) - 1;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// Q is the &quot;unscaled dither signal&quot; itself.</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// It&#39;s initialized to the reversed bits of R.</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// If &#39;ditherBits&#39; is 2, Q here will cycle through (0,128,64,192)</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; byte Q = 0;</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; <span class="comment">// Reverse bits in a byte</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x01) { Q |= 0x80; }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x02) { Q |= 0x40; }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x04) { Q |= 0x20; }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x08) { Q |= 0x10; }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x10) { Q |= 0x08; }</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x20) { Q |= 0x04; }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x40) { Q |= 0x02; }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x80) { Q |= 0x01; }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// Now we adjust Q to fall in the center of each range,</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// instead of at the start of the range.</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="comment">// If ditherBits is 2, Q will be (0, 128, 64, 192) at first,</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// and this adjustment makes it (31, 159, 95, 223).</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span>( ditherBits &lt; 8) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; Q += 0x01 &lt;&lt; (7 - ditherBits);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// D and E form the &quot;scaled dither signal&quot;</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// which is added to pixel values to affect the</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// actual dithering.</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// Setup the initial D and E values</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; byte s = mScale.raw[i];</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; e[i] = s ? (256/s) + 1 : 0;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; d[i] = scale8(Q, e[i]);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span>(e[i]) e[i]--;</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Do we have n pixels left to process?</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">bool</span> has(<span class="keywordtype">int</span> n) {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> mLen &gt;= n;</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">// toggle dithering enable</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">void</span> enable_dithering(EDitherMode dither) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">switch</span>(dither) {</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">case</span> BINARY_DITHER: init_binary_dithering(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">default</span>: d[0]=d[1]=d[2]=e[0]=e[1]=e[2]=0; <span class="keywordflow">break</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; }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// get the amount to advance the pointer by</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">int</span> advanceBy() { <span class="keywordflow">return</span> mAdvance; }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// advance the data pointer forward, adjust position counter</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> advanceData() { mData += mAdvance; mLen--;}</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// step the dithering forward</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> stepDithering() {</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// IF UPDATING HERE, BE SURE TO UPDATE THE ASM VERSION IN</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// clockless_trinket.h!</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; d[0] = e[0] - d[0];</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; d[1] = e[1] - d[1];</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; d[2] = e[2] - d[2];</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// Some chipsets pre-cycle the first byte, which means we want to cycle byte 0&#39;s dithering separately</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> preStepFirstByteDithering() {</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; d[RO(0)] = e[RO(0)] - d[RO(0)];</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;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t loadByte(<a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; pc) { <span class="keywordflow">return</span> pc.mData[RO(SLOT)]; }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t dither(<a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; pc, uint8_t b) { <span class="keywordflow">return</span> b ? qadd8(b, pc.d[RO(SLOT)]) : 0; }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t scale(<a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; pc, uint8_t b) { <span class="keywordflow">return</span> scale8(b, pc.mScale.raw[RO(SLOT)]); }</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="comment">// composite shortcut functions for loading, dithering, and scaling</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t loadAndScale(<a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; pc) { <span class="keywordflow">return</span> scale&lt;SLOT&gt;(pc, pc.dither&lt;SLOT&gt;(pc, pc.loadByte&lt;SLOT&gt;(pc))); }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t advanceAndLoadAndScale(<a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; pc) { pc.advanceData(); <span class="keywordflow">return</span> pc.loadAndScale&lt;SLOT&gt;(pc); }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// Helper functions to get around gcc stupidities</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale0() { <span class="keywordflow">return</span> loadAndScale&lt;0&gt;(*this); }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale1() { <span class="keywordflow">return</span> loadAndScale&lt;1&gt;(*this); }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale2() { <span class="keywordflow">return</span> loadAndScale&lt;2&gt;(*this); }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t advanceAndLoadAndScale0() { <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*this); }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t stepAdvanceAndLoadAndScale0() { stepDithering(); <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*this); }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;};</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment">// Pixel controller class. This is the class that we use to centralize pixel access in a block of data, including</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment">// support for things like RGB reordering, scaling, dithering, skipping (for ARGB data), and eventually, we will</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">// centralize 8/12/16 conversions here as well.</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> LANES,<span class="keywordtype">int</span> MASK, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="struct_multi_pixel_controller.html"> 340</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">const</span> uint8_t *mData;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordtype">int</span> mLen;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; uint8_t d[3];</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; uint8_t e[3];</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> mScale;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; int8_t mAdvance;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordtype">int</span> mOffsets[LANES];</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a>(<span class="keyword">const</span> <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; other) {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; d[0] = other.d[0];</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; d[1] = other.d[1];</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; d[2] = other.d[2];</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; e[0] = other.e[0];</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; e[1] = other.e[1];</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; e[2] = other.e[2];</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; mData = other.mData;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; mScale = other.mScale;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; mAdvance = other.mAdvance;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; mLen = other.mLen;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; LANES; i++) { mOffsets[i] = other.mOffsets[i]; }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordtype">void</span> initOffsets(<span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordtype">int</span> nOffset = 0;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; LANES; i++) {</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; mOffsets[i] = nOffset;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span>((1&lt;&lt;i) &amp; MASK) { nOffset += (len * mAdvance); }</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</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; <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a>(<span class="keyword">const</span> uint8_t *d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) : mData(d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; mData += skip;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; mAdvance = (advance) ? 3+skip : 0;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; initOffsets(len);</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"> 378</span>&#160;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a>(<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; mAdvance = 3;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; initOffsets(len);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a>(<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp;d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; mAdvance = 0;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; initOffsets(len);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a>(<span class="keyword">const</span> CARGB &amp;d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; mAdvance = 0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; initOffsets(len);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a>(<span class="keyword">const</span> CARGB *d, <span class="keywordtype">int</span> len, <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; s, EDitherMode dither = BINARY_DITHER) : mData((<span class="keyword">const</span> uint8_t*)d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; mAdvance = 4;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; initOffsets(len);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="preprocessor">#endif</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="keywordtype">void</span> init_binary_dithering() {</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="preprocessor">#if !defined(NO_DITHERING) || (NO_DITHERING != 1)</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="comment">// Set &#39;virtual bits&#39; of dithering to the highest level</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// that is not likely to cause excessive flickering at</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// low brightness levels + low update rates.</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// These pre-set values are a little ambitious, since</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// a 400Hz update rate for WS2811-family LEDs is only</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// possible with 85 pixels or fewer.</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// Once we have a &#39;number of milliseconds since last update&#39;</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// value available here, we can quickly calculate the correct</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// number of &#39;virtual bits&#39; on the fly with a couple of &#39;if&#39;</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// statements -- no division required. At this point,</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// the division is done at compile time, so there&#39;s no runtime</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// cost, but the values are still hard-coded.</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="preprocessor">#define MAX_LIKELY_UPDATE_RATE_HZ 400</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="preprocessor">#define MIN_ACCEPTABLE_DITHER_RATE_HZ 50</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="preprocessor">#define UPDATES_PER_FULL_DITHER_CYCLE (MAX_LIKELY_UPDATE_RATE_HZ / MIN_ACCEPTABLE_DITHER_RATE_HZ)</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<span class="preprocessor">#define RECOMMENDED_VIRTUAL_BITS ((UPDATES_PER_FULL_DITHER_CYCLE&gt;1) + \</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;2) + \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;4) + \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;8) + \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;16) + \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;32) + \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;64) + \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;128) )</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor">#define VIRTUAL_BITS RECOMMENDED_VIRTUAL_BITS</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// R is the digther signal &#39;counter&#39;.</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">static</span> byte R = 0;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; R++;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// R is wrapped around at 2^ditherBits,</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// so if ditherBits is 2, R will cycle through (0,1,2,3)</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; byte ditherBits = VIRTUAL_BITS;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; R &amp;= (0x01 &lt;&lt; ditherBits) - 1;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// Q is the &quot;unscaled dither signal&quot; itself.</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// It&#39;s initialized to the reversed bits of R.</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// If &#39;ditherBits&#39; is 2, Q here will cycle through (0,128,64,192)</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; byte Q = 0;</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">// Reverse bits in a byte</span></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; <span class="keywordflow">if</span>(R &amp; 0x01) { Q |= 0x80; }</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x02) { Q |= 0x40; }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x04) { Q |= 0x20; }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x08) { Q |= 0x10; }</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x10) { Q |= 0x08; }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x20) { Q |= 0x04; }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x40) { Q |= 0x02; }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x80) { Q |= 0x01; }</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; <span class="comment">// Now we adjust Q to fall in the center of each range,</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// instead of at the start of the range.</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// If ditherBits is 2, Q will be (0, 128, 64, 192) at first,</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// and this adjustment makes it (31, 159, 95, 223).</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span>( ditherBits &lt; 8) {</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; Q += 0x01 &lt;&lt; (7 - ditherBits);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// D and E form the &quot;scaled dither signal&quot;</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// which is added to pixel values to affect the</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// actual dithering.</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// Setup the initial D and E values</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; byte s = mScale.raw[i];</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; e[i] = s ? (256/s) + 1 : 0;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; d[i] = scale8(Q, e[i]);</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span>(e[i]) e[i]--;</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</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; <span class="comment">// Do we have n pixels left to process?</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">bool</span> has(<span class="keywordtype">int</span> n) {</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">return</span> mLen &gt;= n;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// toggle dithering enable</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordtype">void</span> enable_dithering(EDitherMode dither) {</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">switch</span>(dither) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">case</span> BINARY_DITHER: init_binary_dithering(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">default</span>: d[0]=d[1]=d[2]=e[0]=e[1]=e[2]=0; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</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="l00498"></a><span class="lineno"> 498</span>&#160; <span class="comment">// get the amount to advance the pointer by</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">int</span> advanceBy() { <span class="keywordflow">return</span> mAdvance; }</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="comment">// advance the data pointer forward, adjust position counter</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> advanceData() { mData += mAdvance; mLen--;}</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="comment">// step the dithering forward</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> stepDithering() {</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// IF UPDATING HERE, BE SURE TO UPDATE THE ASM VERSION IN</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="comment">// clockless_trinket.h!</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; d[0] = e[0] - d[0];</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; d[1] = e[1] - d[1];</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; d[2] = e[2] - d[2];</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// Some chipsets pre-cycle the first byte, which means we want to cycle byte 0&#39;s dithering separately</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> preStepFirstByteDithering() {</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; d[RO(0)] = e[RO(0)] - d[RO(0)];</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t loadByte(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, <span class="keywordtype">int</span> lane) { <span class="keywordflow">return</span> pc.mData[pc.mOffsets[lane] + RO(SLOT)]; }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t dither(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, uint8_t b) { <span class="keywordflow">return</span> b ? qadd8(b, pc.d[RO(SLOT)]) : 0; }</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t dither(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, uint8_t b, uint8_t d) { <span class="keywordflow">return</span> b ? qadd8(b,d) : 0; }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t scale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, uint8_t b) { <span class="keywordflow">return</span> scale8(b, pc.mScale.raw[RO(SLOT)]); }</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t scale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, uint8_t b, uint8_t scale) { <span class="keywordflow">return</span> scale8(b, scale); }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// composite shortcut functions for loading, dithering, and scaling</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t loadAndScale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, <span class="keywordtype">int</span> lane) { <span class="keywordflow">return</span> scale&lt;SLOT&gt;(pc, pc.dither&lt;SLOT&gt;(pc, pc.loadByte&lt;SLOT&gt;(pc, lane))); }</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t loadAndScale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, <span class="keywordtype">int</span> lane, uint8_t d, uint8_t scale) { <span class="keywordflow">return</span> scale8(pc.dither&lt;SLOT&gt;(pc, pc.loadByte&lt;SLOT&gt;(pc, lane), d), scale); }</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t loadAndScale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, <span class="keywordtype">int</span> lane, uint8_t scale) { <span class="keywordflow">return</span> scale8(pc.loadByte&lt;SLOT&gt;(pc, lane), scale); }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t advanceAndLoadAndScale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc, <span class="keywordtype">int</span> lane) { pc.advanceData(); <span class="keywordflow">return</span> pc.loadAndScale&lt;SLOT&gt;(pc, lane); }</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t getd(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc) { <span class="keywordflow">return</span> pc.d[RO(SLOT)]; }</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> uint8_t getscale(<a class="code" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp; pc) { <span class="keywordflow">return</span> pc.mScale.raw[RO(SLOT)]; }</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// Helper functions to get around gcc stupidities</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale0(<span class="keywordtype">int</span> lane) { <span class="keywordflow">return</span> loadAndScale&lt;0&gt;(*<span class="keyword">this</span>, lane); }</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale1(<span class="keywordtype">int</span> lane) { <span class="keywordflow">return</span> loadAndScale&lt;1&gt;(*<span class="keyword">this</span>, lane); }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale2(<span class="keywordtype">int</span> lane) { <span class="keywordflow">return</span> loadAndScale&lt;2&gt;(*<span class="keyword">this</span>, lane); }</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale0(<span class="keywordtype">int</span> lane, uint8_t d, uint8_t scale) { <span class="keywordflow">return</span> loadAndScale&lt;0&gt;(*<span class="keyword">this</span>, lane, d, scale); }</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale1(<span class="keywordtype">int</span> lane, uint8_t d, uint8_t scale) { <span class="keywordflow">return</span> loadAndScale&lt;1&gt;(*<span class="keyword">this</span>, lane, d, scale); }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t loadAndScale2(<span class="keywordtype">int</span> lane, uint8_t d, uint8_t scale) { <span class="keywordflow">return</span> loadAndScale&lt;2&gt;(*<span class="keyword">this</span>, lane, d, scale); }</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t advanceAndLoadAndScale0(<span class="keywordtype">int</span> lane) { <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*<span class="keyword">this</span>, lane); }</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t stepAdvanceAndLoadAndScale0(<span class="keywordtype">int</span> lane) { stepDithering(); <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*<span class="keyword">this</span>, lane); }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;};</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html"><div class="ttname"><a href="class_c_l_e_d_controller.html">CLEDController</a></div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
+<div class="ttc" id="struct_multi_pixel_controller_html"><div class="ttname"><a href="struct_multi_pixel_controller.html">MultiPixelController</a></div><div class="ttdef"><b>Definition:</b> controller.h:340</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html"><div class="ttname"><a href="class_c_fast_l_e_d.html">CFastLED</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:118</div></div>
+<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdef"><b>Definition:</b> controller.h:158</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a3adb23ec5f919524928d576002cb45de"><div class="ttname"><a href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de">CFastLED::show</a></div><div class="ttdeci">void show()</div><div class="ttdoc">Update all our controllers with the current led colors. </div><div class="ttdef"><b>Definition:</b> FastLED.h:279</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/delay_8h_source.html b/docs/3.1/delay_8h_source.html
new file mode 100644
index 00000000..004c0603
--- /dev/null
+++ b/docs/3.1/delay_8h_source.html
@@ -0,0 +1,210 @@
+<!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.8"/>
+<title>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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">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_DELAY_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_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;<span class="comment">// Class to ensure that a minimum amount of time has kicked since the last time run - and delay if not enough time has passed yet</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// this should make sure that chipsets that have </span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"><a class="line" href="class_c_min_wait.html"> 6</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="l00007"></a><span class="lineno"> 7</span>&#160; uint16_t mLastMicros;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; <a class="code" href="class_c_min_wait.html">CMinWait</a>() { mLastMicros = 0; }</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; <span class="keywordtype">void</span> wait() { </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; uint16_t diff;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; diff = (micros() &amp; 0xFFFF) - mLastMicros; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; } <span class="keywordflow">while</span>(diff &lt; WAIT);</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;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">void</span> mark() { mLastMicros = micros() &amp; 0xFFFF; }</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;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// Clock cycle counted delay loop</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">//</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="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#if defined(__arm__) </span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor"># define NOP __asm__ __volatile__ (&quot;nop\n&quot;);</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor"># define NOP2 __asm__ __volatile__ (&quot;nop\n\tnop&quot;);</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#else</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">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// predeclaration to not upset the compiler</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</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="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">// TODO: ARM version of _delaycycles_</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// usable definition</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#if defined(FASTLED_AVR)</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// worker template - this will nop for LOOP * 3 + PAD cycles total</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</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="l00045"></a><span class="lineno"> 45</span>&#160; delaycycles&lt;PAD&gt;();</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// the loop below is 3 cycles * LOOP. the LDI is one cycle,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</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="l00049"></a><span class="lineno"> 49</span>&#160; __asm__ __volatile__ ( </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="stringliteral">&quot; LDI R16, %0\n&quot;</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="stringliteral">&quot;L_%=: DEC R16\n&quot;</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="stringliteral">&quot; BRNE L_%=\n&quot;</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; : <span class="comment">/* no outputs */</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; : <span class="stringliteral">&quot;M&quot;</span> (LOOP) </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; : <span class="stringliteral">&quot;r16&quot;</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; );</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> CYCLES&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles() { </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; _delaycycles_AVR&lt;CYCLES / 3, CYCLES % 3&gt;(); </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// template&lt;int LOOP, int PAD&gt; inline void _delaycycles_ARM() { </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">// delaycycles&lt;PAD&gt;();</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">// // the loop below is 3 cycles * LOOP. the LDI is one cycle,</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">// __asm__ __volatile__ ( </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">// &quot; mov.w r9, %0\n&quot;</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// &quot;L_%=: subs.w r9, r9, #1\n&quot;</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// &quot; bne.n L_%=\n&quot;</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// : /* no outputs */ </span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// : &quot;M&quot; (LOOP) </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// : &quot;r9&quot;</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// );</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// }</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">int</span> CYCLES&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles() { </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// _delaycycles_ARM&lt;CYCLES / 3, CYCLES % 3&gt;();</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; NOP; delaycycles&lt;CYCLES-1&gt;();</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#endif</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="comment">// pre-instantiations for values small enough to not need the loop, as well as sanity holders</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">// for some negative values.</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-6&gt;() {}</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-5&gt;() {}</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-4&gt;() {}</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-3&gt;() {}</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-2&gt;() {}</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;-1&gt;() {}</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;0&gt;() {}</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;1&gt;() {NOP;}</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;2&gt;() {NOP2;}</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;3&gt;() {NOP;NOP2;}</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;4&gt;() {NOP2;NOP2;}</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">template</span>&lt;&gt; __attribute__((always_inline)) inline <span class="keywordtype">void</span> delaycycles&lt;5&gt;() {NOP2;NOP2;NOP;}</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">// Some timing related macros/definitions </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">// Macro to convert from nano-seconds to clocks and clocks to nano-seconds</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">// #define NS(_NS) (_NS / (1000 / (F_CPU / 1000000L)))</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="preprocessor">#if 1 || (F_CPU &lt; 96000000)</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#define NS(_NS) ( (_NS * (F_CPU / 1000000L))) / 1000</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#define CLKS_TO_MICROS(_CLKS) ((long)(_CLKS)) / (F_CPU / 1000000L)</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#define NS(_NS) ( (_NS * (F_CPU / 2000000L))) / 1000</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor">#define CLKS_TO_MICROS(_CLKS) ((long)(_CLKS)) / (F_CPU / 2000000L)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor">#endif</span></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;<span class="comment">// Macro for making sure there&#39;s enough time available</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</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="l00114"></a><span class="lineno"> 114</span>&#160;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</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="ttdef"><b>Definition:</b> delay.h:6</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/dmx_8h_source.html b/docs/3.1/dmx_8h_source.html
new file mode 100644
index 00000000..2c09362e
--- /dev/null
+++ b/docs/3.1/dmx_8h_source.html
@@ -0,0 +1,197 @@
+<!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.8"/>
+<title>FastLED: dmx.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">dmx.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_DMX_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_DMX_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;</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#ifdef DmxSimple_h</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include&lt;DmxSimple.h&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#define HAS_DMX_SIMPLE</span></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">// note - dmx simple must be included before FastSPI for this code to be enabled</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt; <span class="keyword">class </span>DMXSimpleController : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; <span class="comment">// initialize the LED controller</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() { DmxSimple.usePin(DATA_PIN); }</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="comment">// clear out/zero out the given number of leds.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordtype">int</span> count = min(nLeds * 3, DMX_SIZE);</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iChannel = 1; iChannel &lt;= count; iChannel++) { DmxSimple.write(iChannel, 0); }</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;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// set all the leds on the controller to a given color</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMX_SIZE / 3);</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">int</span> iChannel = 1;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; DmxSimple.write(iChannel++, scale8(data[RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; DmxSimple.write(iChannel++, scale8(data[RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; DmxSimple.write(iChannel++, scale8(data[RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// note that the uint8_ts will be in the order that you want them sent out to the device.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// nLeds is the number of RGB leds being written to</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMX_SIZE / 3);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">int</span> iChannel = 1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; DmxSimple.write(iChannel++, scale8(data[i][RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; DmxSimple.write(iChannel++, scale8(data[i][RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; DmxSimple.write(iChannel++, scale8(data[i][RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
+<div class="line"><a name="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">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// as above, but every 4th uint8_t is assumed to be alpha channel data, and will be skipped</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> CARGB *data, <span class="keywordtype">int</span> nLeds, uint8_t scale = 255) = 0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#ifdef DmxSerial_h</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include&lt;DMXSerial.h&gt;</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">template</span> &lt;EOrder RGB_ORDER = RGB&gt; <span class="keyword">class </span>DMXSerialController : <span class="keyword">public</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// initialize the LED controller</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> init() { DMXSerial.init(DMXController); }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">// clear out/zero out the given number of leds.</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> clearLeds(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">int</span> count = min(nLeds * 3, DMXSERIAL_MAX);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> iChannel = 0; iChannel &lt; count; iChannel++) { DMXSerial.write(iChannel, 0); }</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;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// set all the leds on the controller to a given color</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> showColor(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMXSERIAL_MAX / 3);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">int</span> iChannel = 0;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; DMXSerial.write(iChannel++, scale8(data[RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; DMXSerial.write(iChannel++, scale8(data[RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; DMXSerial.write(iChannel++, scale8(data[RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</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="l00078"></a><span class="lineno"> 78</span>&#160;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// note that the uint8_ts will be in the order that you want them sent out to the device.</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// nLeds is the number of RGB leds being written to</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> *data, <span class="keywordtype">int</span> nLeds, <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMXSERIAL_MAX / 3);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">int</span> iChannel = 0;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; DMXSerial.write(iChannel++, scale8(data[i][RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; DMXSerial.write(iChannel++, scale8(data[i][RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; DMXSerial.write(iChannel++, scale8(data[i][RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</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="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// as above, but every 4th uint8_t is assumed to be alpha channel data, and will be skipped</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> show(<span class="keyword">const</span> <span class="keyword">struct</span> CARGB *data, <span class="keywordtype">int</span> nLeds, uint8_t scale = 255) = 0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;};</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#define HAS_DMX_SERIAL</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html"><div class="ttname"><a href="class_c_l_e_d_controller.html">CLEDController</a></div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/doxygen.css b/docs/3.1/doxygen.css
new file mode 100644
index 00000000..02e8b015
--- /dev/null
+++ b/docs/3.1/doxygen.css
@@ -0,0 +1,1440 @@
+/* The standard CSS for doxygen 1.8.8 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('ftv2folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('ftv2folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('ftv2doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
diff --git a/docs/3.1/doxygen.png b/docs/3.1/doxygen.png
new file mode 100644
index 00000000..3ff17d80
--- /dev/null
+++ b/docs/3.1/doxygen.png
Binary files differ
diff --git a/docs/3.1/dynsections.js b/docs/3.1/dynsections.js
new file mode 100644
index 00000000..85e18369
--- /dev/null
+++ b/docs/3.1/dynsections.js
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
diff --git a/docs/3.1/fastled__config_8h_source.html b/docs/3.1/fastled__config_8h_source.html
new file mode 100644
index 00000000..ac38daec
--- /dev/null
+++ b/docs/3.1/fastled__config_8h_source.html
@@ -0,0 +1,114 @@
+<!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.8"/>
+<title>FastLED: fastled_config.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastled_config.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_FASTLED_CONFIG_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTLED_CONFIG_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;<span class="comment">// Use this option only for debugging pin access and forcing software pin access. Note that</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// software pin access only works in Arduino based environments. Forces use of digitalWrite</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// methods for pin access vs. direct hardware port access</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// #define FASTLED_FORCE_SOFTWARE_PINS</span></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">// Use this option only for debugging bitbang&#39;d spi access or to work around bugs in hardware</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// spi access. Forces use of bit-banged spi, even on pins that has hardware SPI available.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// #define FASTLED_FORCE_SOFTWARE_SPI</span></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="comment">// Use this to force FastLED to allow interrupts in the clockless chipsets (or to force it to</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// disallow), overriding the default on platforms that support this. Set the value to 1 to</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// allow interrupts or 0 to disallow them.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// #define FASTLED_ALLOW_INTERRUPTS 1</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// #define FASTLED_ALLOW_INTERRUPTS 0</span></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;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastpin_8h_source.html b/docs/3.1/fastpin_8h_source.html
new file mode 100644
index 00000000..295becef
--- /dev/null
+++ b/docs/3.1/fastpin_8h_source.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: fastpin.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastpin.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_FASTPIN_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTPIN_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;<span class="preprocessor">#include &quot;led_sysdefs.h&quot;</span></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="preprocessor">#define NO_PIN 255</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Pin access class - needs to tune for various platforms (naive fallback solution?)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">//</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"><a class="line" href="class_selectable.html"> 14</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_selectable.html">Selectable</a> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> select() = 0;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> release() = 0;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSelected() = 0;</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;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#if defined(ARDUINO)</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="keyword">class </span>Pin : <span class="keyword">public</span> <a class="code" href="class_selectable.html">Selectable</a> {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">volatile</span> RwReg *mPort;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">volatile</span> RoReg *mInPort;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; RwReg mPinMask;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; uint8_t mPin;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">void</span> _init() {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; mPinMask = digitalPinToBitMask(mPin);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; mPort = portOutputRegister(digitalPinToPort(mPin));</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; mInPort = portInputRegister(digitalPinToPort(mPin));</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; Pin(<span class="keywordtype">int</span> pin) : mPin(pin) { _init(); }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">typedef</span> <span class="keyword">volatile</span> RwReg * port_ptr_t;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">typedef</span> RwReg port_t;</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">inline</span> <span class="keywordtype">void</span> setOutput() { pinMode(mPin, OUTPUT); }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> setInput() { pinMode(mPin, INPUT); }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> hi() __attribute__ ((always_inline)) { *mPort |= mPinMask; }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> lo() __attribute__ ((always_inline)) { *mPort &amp;= ~mPinMask; }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> strobe() __attribute__ ((always_inline)) { toggle(); toggle(); }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> toggle() __attribute__ ((always_inline)) { *mInPort = mPinMask; }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> hi(<span class="keyword">register</span> port_ptr_t port) __attribute__ ((always_inline)) { *port |= mPinMask; }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> lo(<span class="keyword">register</span> port_ptr_t port) __attribute__ ((always_inline)) { *port &amp;= ~mPinMask; }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> set(<span class="keyword">register</span> port_t val) __attribute__ ((always_inline)) { *mPort = val; }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> fastset(<span class="keyword">register</span> port_ptr_t port, <span class="keyword">register</span> port_t val) __attribute__ ((always_inline)) { *port = val; }</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; port_t hival() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> *mPort | mPinMask; }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; port_t loval() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> *mPort &amp; ~mPinMask; }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; port_ptr_t port() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> mPort; }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; port_t mask() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> mPinMask; }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> select() { hi(); }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> release() { lo(); }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSelected() { <span class="keywordflow">return</span> (*mPort &amp; mPinMask) == mPinMask; }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;};</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">class </span>OutputPin : <span class="keyword">public</span> Pin {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; OutputPin(<span class="keywordtype">int</span> pin) : Pin(pin) { setOutput(); }</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;};</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword">class </span>InputPin : <span class="keyword">public</span> Pin {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; InputPin(<span class="keywordtype">int</span> pin) : Pin(pin) { setInput(); }</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="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">class </span>FastPin {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">static</span> RwReg sPinMask;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">static</span> <span class="keyword">volatile</span> RwReg *sPort;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">static</span> <span class="keyword">volatile</span> RoReg *sInPort;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> _init() {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; sPinMask = digitalPinToBitMask(PIN);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; sPort = portOutputRegister(digitalPinToPort(PIN));</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; sInPort = portInputRegister(digitalPinToPort(PIN));</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">public</span>:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">typedef</span> <span class="keyword">volatile</span> RwReg * port_ptr_t;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">typedef</span> RwReg port_t;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> setOutput() { _init(); pinMode(PIN, OUTPUT); }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> setInput() { _init(); pinMode(PIN, INPUT); }</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hi() __attribute__ ((always_inline)) { *sPort |= sPinMask; }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> lo() __attribute__ ((always_inline)) { *sPort &amp;= ~sPinMask; }</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> strobe() __attribute__ ((always_inline)) { toggle(); toggle(); }</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; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> toggle() __attribute__ ((always_inline)) { *sInPort = sPinMask; }</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; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hi(<span class="keyword">register</span> port_ptr_t port) __attribute__ ((always_inline)) { *port |= sPinMask; }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> lo(<span class="keyword">register</span> port_ptr_t port) __attribute__ ((always_inline)) { *port &amp;= ~sPinMask; }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> set(<span class="keyword">register</span> port_t val) __attribute__ ((always_inline)) { *sPort = val; }</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> fastset(<span class="keyword">register</span> port_ptr_t port, <span class="keyword">register</span> port_t val) __attribute__ ((always_inline)) { *port = val; }</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="keyword">static</span> port_t hival() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> *sPort | sPinMask; }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">static</span> port_t loval() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> *sPort &amp; ~sPinMask; }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">static</span> port_ptr_t port() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> sPort; }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">static</span> port_t mask() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> sPinMask; }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;};</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; RwReg FastPin&lt;PIN&gt;::sPinMask;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">volatile</span> RwReg *FastPin&lt;PIN&gt;::sPort;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">volatile</span> RoReg *FastPin&lt;PIN&gt;::sInPort;</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="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">class </span>FastPinBB : <span class="keyword">public</span> FastPin&lt;PIN&gt; {};</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">#endif // defined(ARDUINO)</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="keyword">typedef</span> <span class="keyword">volatile</span> uint32_t &amp; reg32_t;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword">typedef</span> <span class="keyword">volatile</span> uint32_t * ptr_reg32_t;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="preprocessor">#endif // __INC_FASTPIN_H</span></div>
+<div class="ttc" id="class_selectable_html"><div class="ttname"><a href="class_selectable.html">Selectable</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:14</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastpin__arm__stm32_8h_source.html b/docs/3.1/fastpin__arm__stm32_8h_source.html
new file mode 100644
index 00000000..c70b9d06
--- /dev/null
+++ b/docs/3.1/fastpin__arm__stm32_8h_source.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: fastpin_arm_stm32.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastpin_arm_stm32.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_FASTPIN_ARM_STM32</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTPIN_ARM_STM32</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"><a class="line" href="class___d_u_e_p_i_n.html"> 8</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN, u<span class="keywordtype">int</span>32_t _MASK, <span class="keyword">typename</span> _ODR, <span class="keyword">typename</span> _BSRR, <span class="keyword">typename</span> _BRR&gt; <span class="keyword">class </span><a class="code" href="class___d_u_e_p_i_n.html">_DUEPIN</a> {</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; <span class="keyword">typedef</span> <span class="keyword">volatile</span> uint32_t * port_ptr_t;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; <span class="keyword">typedef</span> uint32_t port_t;</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> setOutput() { pinMode(PIN, OUTPUT); } <span class="comment">// TODO: perform MUX config { _PDDR::r() |= _MASK; }</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> setInput() { pinMode(PIN, INPUT); } <span class="comment">// TODO: preform MUX config { _PDDR::r() &amp;= ~_MASK; }</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; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hi() __attribute__ ((always_inline)) { _BSSR::r() = _MASK; }</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> lo() __attribute__ ((always_inline)) { _BRR::r() = _MASK; }</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> set(<span class="keyword">register</span> port_t val) __attribute__ ((always_inline)) { _ODR::r() = val; }</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> strobe() __attribute__ ((always_inline)) { toggle(); toggle(); }</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; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> toggle() __attribute__ ((always_inline)) { _ODR::r() ^= _MASK; }</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hi(<span class="keyword">register</span> port_ptr_t port) __attribute__ ((always_inline)) { hi(); }</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> lo(<span class="keyword">register</span> port_ptr_t port) __attribute__ ((always_inline)) { lo(); }</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> fastset(<span class="keyword">register</span> port_ptr_t port, <span class="keyword">register</span> port_t val) __attribute__ ((always_inline)) { *port = val; }</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> port_t hival() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> _ODR::r() | _MASK; }</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> port_t loval() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> _ODR::r() &amp; ~_MASK; }</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> port_ptr_t port() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> &amp;_ODR::r(); }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> port_t mask() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> _MASK; }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> isset() __attribute__ ((always_inline)) { <span class="keywordflow">return</span> _ODR::r() &amp; _MASK; }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;};</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#define STM_IO32(L) _RD32(REG_PIO ## L ## _ODSR); _RD32(REG_PIO ## L ## _SODR); _RD32(REG_PIO ## L ## _CODR); _RD32(REG_PIO ## L ## _OER);</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;<span class="preprocessor">#define _DEFPIN_DUE(PIN, BIT, L) template&lt;&gt; class FastPin&lt;PIN&gt; : public _DUEPIN&lt;PIN, 1 &lt;&lt; BIT, _R(REG_PIO ## L ## _ODSR), _R(REG_PIO ## L ## _SODR), _R(REG_PIO ## L ## _CODR), \</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor"> _R(GPIO ## L ## _OER)&gt; {}; \</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor"> template&lt;&gt; class FastPinBB&lt;PIN&gt; : public _DUEPIN_BITBAND&lt;PIN, BIT, _R(REG_PIO ## L ## _ODSR), _R(REG_PIO ## L ## _SODR), _R(REG_PIO ## L ## _CODR), \</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor"> _R(GPIO ## L ## _OER)&gt; {};</span></div>
+<div class="ttc" id="class___d_u_e_p_i_n_html"><div class="ttname"><a href="class___d_u_e_p_i_n.html">_DUEPIN</a></div><div class="ttdef"><b>Definition:</b> fastpin_arm_stm32.h:8</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastspi_8h_source.html b/docs/3.1/fastspi_8h_source.html
new file mode 100644
index 00000000..76e04f63
--- /dev/null
+++ b/docs/3.1/fastspi_8h_source.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: fastspi.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastspi.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_FASTSPI_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTSPI_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;<span class="preprocessor">#include &quot;controller.h&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &quot;lib8tion.h&quot;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;fastspi_bitbang.h&quot;</span></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="preprocessor">#if (CLK_DBL == 1)</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define DATA_RATE_MHZ(X) (((F_CPU / 1000000L) / X)/2)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define DATA_RATE_KHZ(X) (((F_CPU / 1000L) / X)/2)</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#define DATA_RATE_MHZ(X) ((F_CPU / 1000000L) / X)</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define DATA_RATE_KHZ(X) ((F_CPU / 1000L) / X)</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// External SPI template definition with partial instantiation(s) to map to hardware SPI ports on platforms/builds where the pin</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// mappings are known at compile time.</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="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t _DATA_PIN, u<span class="keywordtype">int</span>8_t _CLOCK_PIN, u<span class="keywordtype">int</span>8_t _SPI_CLOCK_DIVIDER&gt;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="class_s_p_i_output.html"> 25</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a> : <span class="keyword">public</span> <a class="code" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a>&lt;_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER&gt; {};</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t _DATA_PIN, u<span class="keywordtype">int</span>8_t _CLOCK_PIN, u<span class="keywordtype">int</span>8_t _SPI_CLOCK_DIVIDER&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="class_software_s_p_i_output.html"> 28</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_software_s_p_i_output.html">SoftwareSPIOutput</a> : <span class="keyword">public</span> <a class="code" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a>&lt;_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER&gt; {};</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef FASTLED_FORCE_SOFTWARE_SPI</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#if defined(SPI_DATA) &amp;&amp; defined(SPI_CLOCK)</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#if defined(FASTLED_TEENSY3) &amp;&amp; defined(CORE_TEENSY)</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_DATA, SPI_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> ARMHardwareSPIOutput&lt;SPI_DATA, SPI_CLOCK, SPI_SPEED, 0x4002C000&gt; {};</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="preprocessor">#if defined(SPI2_DATA)</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;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI2_DATA, SPI2_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> ARMHardwareSPIOutput&lt;SPI2_DATA, SPI2_CLOCK, SPI_SPEED, 0x4002C000&gt; {};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#elif defined(__SAM3X8E__)</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_DATA, SPI_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> SAMHardwareSPIOutput&lt;SPI_DATA, SPI_CLOCK, SPI_SPEED&gt; {};</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="preprocessor">#else</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_DATA, SPI_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> AVRHardwareSPIOutput&lt;SPI_DATA, SPI_CLOCK, SPI_SPEED&gt; {};</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="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">#else</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#warning &quot;No hardware SPI pins defined. All SPI access will default to bitbanged output&quot;</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;<span class="preprocessor">#endif</span></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="comment">// #if defined(USART_DATA) &amp;&amp; defined(USART_CLOCK)</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">// template&lt;uint8_t SPI_SPEED&gt;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// class AVRSPIOutput&lt;USART_DATA, USART_CLOCK, SPI_SPEED&gt; : public AVRUSARTSPIOutput&lt;USART_DATA, USART_CLOCK, SPI_SPEED&gt; {};</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">// #endif</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#warning &quot;Forcing software SPI - no hardware SPI for you!&quot;</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_s_p_i_output_html"><div class="ttname"><a href="class_s_p_i_output.html">SPIOutput</a></div><div class="ttdef"><b>Definition:</b> fastspi.h:25</div></div>
+<div class="ttc" id="class_software_s_p_i_output_html"><div class="ttname"><a href="class_software_s_p_i_output.html">SoftwareSPIOutput</a></div><div class="ttdef"><b>Definition:</b> fastspi.h:28</div></div>
+<div class="ttc" id="class_a_v_r_software_s_p_i_output_html"><div class="ttname"><a href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a></div><div class="ttdef"><b>Definition:</b> fastspi_bitbang.h:13</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastspi__bitbang_8h_source.html b/docs/3.1/fastspi__bitbang_8h_source.html
new file mode 100644
index 00000000..13210404
--- /dev/null
+++ b/docs/3.1/fastspi__bitbang_8h_source.html
@@ -0,0 +1,452 @@
+<!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.8"/>
+<title>FastLED: fastspi_bitbang.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastspi_bitbang.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_FASTSPI_BITBANG_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTSPI_BITBANG_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;<span class="comment">//</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// Software SPI (aka bit-banging) support - with aggressive optimizations for when the clock and data pin are on the same port</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// TODO: Replace the select pin definition with a set of pins, to allow using mux hardware for routing in the future</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, u<span class="keywordtype">int</span>8_t CLOCK_PIN, u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="class_a_v_r_software_s_p_i_output.html"> 13</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="comment">// The data types for pointers to the pin port - typedef&#39;d here from the Pin definition because on avr these</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="comment">// are pointers to 8 bit values, while on arm they are 32 bit</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> FastPin&lt;DATA_PIN&gt;::port_ptr_t data_ptr_t;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> FastPin&lt;CLOCK_PIN&gt;::port_ptr_t clock_ptr_t;</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; <span class="comment">// The data type for what&#39;s at a pin&#39;s port - typedef&#39;d here from the Pin definition because on avr the ports</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// are 8 bits wide while on arm they are 32.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> FastPin&lt;DATA_PIN&gt;::port_t data_t;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> FastPin&lt;CLOCK_PIN&gt;::port_t clock_t;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="class_selectable.html">Selectable</a> *m_pSelect;</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="keyword">public</span>:</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a>() { m_pSelect = NULL; }</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a>(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { m_pSelect = pSelect; }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">void</span> setSelect(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { m_pSelect = pSelect; }</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="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// set the pins to output and make sure the select is released (which apparently means hi? This is a bit</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// confusing to me)</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; FastPin&lt;DATA_PIN&gt;::setOutput();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; FastPin&lt;CLOCK_PIN&gt;::setOutput();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; release();</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="comment">// stop the SPI output. Pretty much a NOP with software, as there&#39;s no registers to kick</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> stop() { }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// wait until the SPI subsystem is ready for more data to write. A NOP when bitbanging</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> wait() __attribute__((always_inline)) { }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> waitFully() __attribute__((always_inline)) { wait(); }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByteNoWait(uint8_t b) __attribute__((always_inline)) { writeByte(b); }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeBytePostWait(uint8_t b) __attribute__((always_inline)) { writeByte(b); wait(); }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeWord(uint16_t w) __attribute__((always_inline)) { writeByte(w&gt;&gt;8); writeByte(w&amp;0xFF); }</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">// naive writeByte implelentation, simply calls writeBit on the 8 bits in the byte.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByte(uint8_t b) {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; writeBit&lt;7&gt;(b);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; writeBit&lt;6&gt;(b);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; writeBit&lt;5&gt;(b);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; writeBit&lt;4&gt;(b);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; writeBit&lt;3&gt;(b);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; writeBit&lt;2&gt;(b);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; writeBit&lt;1&gt;(b);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; writeBit&lt;0&gt;(b);</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"> 62</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// writeByte implementation with data/clock registers passed in.</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByte(uint8_t b, clock_ptr_t clockpin, data_ptr_t datapin) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; writeBit&lt;7&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; writeBit&lt;6&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; writeBit&lt;5&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; writeBit&lt;4&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; writeBit&lt;3&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; writeBit&lt;2&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; writeBit&lt;1&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; writeBit&lt;0&gt;(b, clockpin, datapin);</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="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// writeByte implementation with the data register passed in and prebaked values for data hi w/clock hi and</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// low and data lo w/clock hi and lo. This is to be used when clock and data are on the same GPIO register,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// can get close to getting a bit out the door in 2 clock cycles!</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByte(uint8_t b, data_ptr_t datapin,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; data_t hival, data_t loval,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; clock_t hiclock, clock_t loclock) {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; writeBit&lt;7&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; writeBit&lt;6&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; writeBit&lt;5&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; writeBit&lt;4&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; writeBit&lt;3&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; writeBit&lt;2&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; writeBit&lt;1&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; writeBit&lt;0&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// writeByte implementation with not just registers passed in, but pre-baked values for said registers for</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// data hi/lo and clock hi/lo values. Note: weird things will happen if this method is called in cases where</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// the data and clock pins are on the same port! Don&#39;t do that!</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByte(uint8_t b, clock_ptr_t clockpin, data_ptr_t datapin,</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; data_t hival, data_t loval,</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; clock_t hiclock, clock_t loclock) {</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; writeBit&lt;7&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; writeBit&lt;6&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; writeBit&lt;5&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; writeBit&lt;4&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; writeBit&lt;3&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; writeBit&lt;2&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; writeBit&lt;1&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; writeBit&lt;0&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor"> #define SPI_DELAY delaycycles&lt;1+((SPI_SPEED-2) / 2)&gt;();</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor"> #define SPI_DELAY_HALF delaycycles&lt;1+ ((SPI_SPEED-4) / 4)&gt;();</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// write the BIT&#39;th bit out via spi, setting the data pin then strobing the clcok</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t BIT&gt; __attribute__((always_inline, hot)) <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> writeBit(uint8_t b) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; FastPin&lt;DATA_PIN&gt;::hi();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span>(SPI_SPEED &lt; 3) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; FastPin&lt;CLOCK_PIN&gt;::strobe();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; FastPin&lt;CLOCK_PIN&gt;::hi(); SPI_DELAY;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; FastPin&lt;CLOCK_PIN&gt;::lo(); SPI_DELAY;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; FastPin&lt;DATA_PIN&gt;::lo();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span>(SPI_SPEED &lt; 3) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; FastPin&lt;CLOCK_PIN&gt;::strobe();</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; FastPin&lt;CLOCK_PIN&gt;::hi(); SPI_DELAY;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; FastPin&lt;CLOCK_PIN&gt;::lo(); SPI_DELAY;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// write the BIT&#39;th bit out via spi, setting the data pin then strobing the clock, using the passed in pin registers to accelerate access if needed</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t BIT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> writeBit(uint8_t b, clock_ptr_t clockpin, data_ptr_t datapin) {</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; FastPin&lt;DATA_PIN&gt;::hi(datapin);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; FastPin&lt;CLOCK_PIN&gt;::hi(clockpin); SPI_DELAY;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; FastPin&lt;CLOCK_PIN&gt;::lo(clockpin); SPI_DELAY;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; FastPin&lt;DATA_PIN&gt;::lo(datapin);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; FastPin&lt;CLOCK_PIN&gt;::hi(clockpin); SPI_DELAY;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; FastPin&lt;CLOCK_PIN&gt;::lo(clockpin); SPI_DELAY;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// the version of write to use when clock and data are on separate pins with precomputed values for setting</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// the clock and data pins</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t BIT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> writeBit(uint8_t b, clock_ptr_t clockpin, data_ptr_t datapin,</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; data_t hival, data_t loval, clock_t hiclock, clock_t loclock) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// // only need to explicitly set clock hi if clock and data are on different ports</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(datapin, hival);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; FastPin&lt;CLOCK_PIN&gt;::fastset(clockpin, hiclock); SPI_DELAY;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; FastPin&lt;CLOCK_PIN&gt;::fastset(clockpin, loclock); SPI_DELAY;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// NOP;</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(datapin, loval);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; FastPin&lt;CLOCK_PIN&gt;::fastset(clockpin, hiclock); SPI_DELAY;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; FastPin&lt;CLOCK_PIN&gt;::fastset(clockpin, loclock); SPI_DELAY;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</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="comment">// the version of write to use when clock and data are on the same port with precomputed values for the various</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// combinations</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t BIT&gt; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> writeBit(uint8_t b, data_ptr_t clockdatapin,</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; data_t datahiclockhi, data_t dataloclockhi,</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; data_t datahiclocklo, data_t dataloclocklo) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; writeBit&lt;BIT&gt;(b);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(clockdatapin, datahiclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(clockdatapin, datahiclockhi); SPI_DELAY;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(clockdatapin, datahiclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// NOP;</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(clockdatapin, dataloclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(clockdatapin, dataloclockhi); SPI_DELAY;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; FastPin&lt;DATA_PIN&gt;::fastset(clockdatapin, dataloclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// select the SPI output (TODO: research whether this really means hi or lo. Alt TODO: move select responsibility out of the SPI classes</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">// entirely, make it up to the caller to remember to lock/select the line?)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordtype">void</span> select() { <span class="keywordflow">if</span>(m_pSelect != NULL) { m_pSelect-&gt;select(); } } <span class="comment">// FastPin&lt;SELECT_PIN&gt;::hi(); }</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="comment">// release the SPI line</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordtype">void</span> release() { <span class="keywordflow">if</span>(m_pSelect != NULL) { m_pSelect-&gt;release(); } } <span class="comment">// FastPin&lt;SELECT_PIN&gt;::lo(); }</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// Write out len bytes of the given value out over SPI. Useful for quickly flushing, say, a line of 0&#39;s down the line.</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">void</span> writeBytesValue(uint8_t value, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; select();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; writeBytesValueRaw(value, len);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; release();</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeBytesValueRaw(uint8_t value, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// TODO: Weird things may happen if software bitbanging SPI output and other pins on the output reigsters are being twiddled. Need</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// to allow specifying whether or not exclusive i/o access is allowed during this process, and if i/o access is not allowed fall</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// back to the degenerative code below</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; writeByte(value);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = FastPin&lt;DATA_PIN&gt;::port();</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; <span class="keywordflow">if</span>(FastPin&lt;DATA_PIN&gt;::port() != FastPin&lt;CLOCK_PIN&gt;::port()) {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// If data and clock are on different ports, then writing a bit will consist of writing the value foor</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// the bit (hi or low) to the data pin port, and then two writes to the clock port to strobe the clock line</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = FastPin&lt;CLOCK_PIN&gt;::port();</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">register</span> data_t datahi = FastPin&lt;DATA_PIN&gt;::hival();</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">register</span> data_t datalo = FastPin&lt;DATA_PIN&gt;::loval();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">register</span> clock_t clockhi = FastPin&lt;CLOCK_PIN&gt;::hival();</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">register</span> clock_t clocklo = FastPin&lt;CLOCK_PIN&gt;::loval();</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; writeByte(value, clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// If data and clock are on the same port then we can combine setting the data and clock pins</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = FastPin&lt;DATA_PIN&gt;::hival() | FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = FastPin&lt;DATA_PIN&gt;::loval() | FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = FastPin&lt;DATA_PIN&gt;::hival() &amp; ~FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = FastPin&lt;DATA_PIN&gt;::loval() &amp; ~FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; writeByte(value, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</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; }</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="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// write a block of len uint8_ts out. Need to type this better so that explicit casts into the call aren&#39;t required.</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// note that this template version takes a class parameter for a per-byte modifier to the data.</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> D&gt; <span class="keywordtype">void</span> writeBytes(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; select();</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; uint8_t *end = data + len;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; writeByte(D::adjust(*data++));</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = FastPin&lt;CLOCK_PIN&gt;::port();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = FastPin&lt;DATA_PIN&gt;::port();</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span>(FastPin&lt;DATA_PIN&gt;::port() != FastPin&lt;CLOCK_PIN&gt;::port()) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// If data and clock are on different ports, then writing a bit will consist of writing the value foor</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// the bit (hi or low) to the data pin port, and then two writes to the clock port to strobe the clock line</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">register</span> data_t datahi = FastPin&lt;DATA_PIN&gt;::hival();</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">register</span> data_t datalo = FastPin&lt;DATA_PIN&gt;::loval();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">register</span> clock_t clockhi = FastPin&lt;CLOCK_PIN&gt;::hival();</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">register</span> clock_t clocklo = FastPin&lt;CLOCK_PIN&gt;::loval();</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; uint8_t *end = data + len;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; writeByte(D::adjust(*data++), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// FastPin&lt;CLOCK_PIN&gt;::hi();</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// If data and clock are on the same port then we can combine setting the data and clock pins</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = FastPin&lt;DATA_PIN&gt;::hival() | FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = FastPin&lt;DATA_PIN&gt;::loval() | FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = FastPin&lt;DATA_PIN&gt;::hival() &amp; ~FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = FastPin&lt;DATA_PIN&gt;::loval() &amp; ~FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; uint8_t *end = data + len;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; writeByte(D::adjust(*data++), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// FastPin&lt;CLOCK_PIN&gt;::lo();</span></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">#endif</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; D::postBlock(len);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; release();</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// default version of writing a block of data out to the SPI port, with no data modifications being made</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">void</span> writeBytes(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len) { writeBytes&lt;DATA_NOP&gt;(data, len); }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// write a block of uint8_ts out in groups of three. len is the total number of uint8_ts to write out. The template</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// parameters indicate how many uint8_ts to skip at the beginning of each grouping, as well as a class specifying a per</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// byte of data modification to be made. (See DATA_NOP above)</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t FLAGS, <span class="keyword">class</span> D, EOrder RGB_ORDER&gt; __attribute__((noinline)) <span class="keywordtype">void</span> writePixels(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels) {</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; select();</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordtype">int</span> len = pixels.mLen;</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">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// If interrupts or other things may be generating output while we&#39;re working on things, then we need</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// to use this block</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; writeBit&lt;0&gt;(1);</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; writeByte(D::adjust(pixels.loadAndScale0()));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()));</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()));</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; pixels.stepDithering();</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="preprocessor">#else</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// If we can guaruntee that no one else will be writing data while we are running (namely, changing the values of the PORT/PDOR pins)</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// then we can use a bunch of optimizations in here</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = FastPin&lt;DATA_PIN&gt;::port();</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="keywordflow">if</span>(FastPin&lt;DATA_PIN&gt;::port() != FastPin&lt;CLOCK_PIN&gt;::port()) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = FastPin&lt;CLOCK_PIN&gt;::port();</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// If data and clock are on different ports, then writing a bit will consist of writing the value foor</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// the bit (hi or low) to the data pin port, and then two writes to the clock port to strobe the clock line</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">register</span> data_t datahi = FastPin&lt;DATA_PIN&gt;::hival();</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">register</span> data_t datalo = FastPin&lt;DATA_PIN&gt;::loval();</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">register</span> clock_t clockhi = FastPin&lt;CLOCK_PIN&gt;::hival();</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">register</span> clock_t clocklo = FastPin&lt;CLOCK_PIN&gt;::loval();</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; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; writeBit&lt;0&gt;(1, clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; writeByte(D::adjust(pixels.loadAndScale0()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; pixels.stepDithering();</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">else</span> {</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// If data and clock are on the same port then we can combine setting the data and clock pins</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = FastPin&lt;DATA_PIN&gt;::hival() | FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = FastPin&lt;DATA_PIN&gt;::loval() | FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = FastPin&lt;DATA_PIN&gt;::hival() &amp; ~FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = FastPin&lt;DATA_PIN&gt;::loval() &amp; ~FastPin&lt;CLOCK_PIN&gt;::mask();</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; writeBit&lt;0&gt;(1, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</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; writeByte(D::adjust(pixels.loadAndScale0()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; D::postBlock(len);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; release();</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;};</div>
+<div class="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="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdef"><b>Definition:</b> controller.h:158</div></div>
+<div class="ttc" id="class_selectable_html"><div class="ttname"><a href="class_selectable.html">Selectable</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:14</div></div>
+<div class="ttc" id="class_a_v_r_software_s_p_i_output_html"><div class="ttname"><a href="class_a_v_r_software_s_p_i_output.html">AVRSoftwareSPIOutput</a></div><div class="ttdef"><b>Definition:</b> fastspi_bitbang.h:13</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastspi__dma_8h_source.html b/docs/3.1/fastspi__dma_8h_source.html
new file mode 100644
index 00000000..0b8d9be2
--- /dev/null
+++ b/docs/3.1/fastspi__dma_8h_source.html
@@ -0,0 +1,95 @@
+<!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.8"/>
+<title>FastLED: fastspi_dma.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastspi_dma.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"></div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastspi__nop_8h_source.html b/docs/3.1/fastspi__nop_8h_source.html
new file mode 100644
index 00000000..6f3f52f7
--- /dev/null
+++ b/docs/3.1/fastspi__nop_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.8"/>
+<title>FastLED: fastspi_nop.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastspi_nop.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_FASTSPI_NOP_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTSPI_NOP_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;<span class="comment">// A nop/stub class, mostly to show the SPI methods that are needed/used by the various SPI chipset implementations. Should</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// be used as a definition for the set of methods that the spi implementation classes should use (since C++ doesn&#39;t support the</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// idea of interfaces - it&#39;s possible this could be done with virtual classes, need to decide if i want that overhead)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t _DATA_PIN, u<span class="keywordtype">int</span>8_t _CLOCK_PIN, u<span class="keywordtype">int</span>8_t _SPI_CLOCK_DIVIDER&gt;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">class </span>NOPSPIOutput {</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</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; NOPSPIOutput() { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; NOPSPIOutput(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { <span class="comment">/* TODO */</span> }</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="comment">// set the object representing the selectable</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordtype">void</span> setSelect(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { <span class="comment">/* TODO */</span> }</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">// initialize the SPI subssytem</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">void</span> init() { <span class="comment">/* TODO */</span> }</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="comment">// latch the CS select</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordtype">void</span> select() { <span class="comment">/* TODO */</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">// release the CS select </span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">void</span> release() { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// wait until all queued up data has been written</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">void</span> waitFully();</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// write a byte out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">void</span> writeByte(uint8_t b) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// write a word out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">void</span> writeWord(uint16_t w) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// A raw set of writing byte values, assumes setup/init/waiting done elsewhere (static for use by adjustment classes)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeBytesValueRaw(uint8_t value, <span class="keywordtype">int</span> len) { <span class="comment">/* TODO */</span> } </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// A full cycle of writing a value for len bytes, including select, release, and waiting</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> writeBytesValue(uint8_t value, <span class="keywordtype">int</span> len) { <span class="comment">/* TODO */</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; <span class="comment">// A full cycle of writing a raw block of data out, including select, release, and waiting</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> writeBytes(uint8_t *data, <span class="keywordtype">int</span> len) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// write a single bit out, which bit from the passed in byte is determined by template parameter</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t BIT&gt; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> writeBit(uint8_t b) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t SKIP, <span class="keyword">class</span> D, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> uint8_t scale) { <span class="comment">/* TODO*/</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="comment">// template instantiations for writeBytes 3</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t SKIP, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> uint8_t scale) { </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; writeBytes3&lt;SKIP, DATA_NOP, RGB_ORDER&gt;(data, len, scale); </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="keyword">template</span> &lt;<span class="keyword">class</span> D, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> uint8_t scale) { </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; writeBytes3&lt;0, D, RGB_ORDER&gt;(data, len, scale); </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">template</span> &lt;EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> uint8_t scale) { </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; writeBytes3&lt;0, DATA_NOP, RGB_ORDER&gt;(data, len, scale); </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="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> uint8_t scale) { </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; writeBytes3&lt;0, DATA_NOP, RGB&gt;(data, len, scale); </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"> 62</span>&#160;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_selectable_html"><div class="ttname"><a href="class_selectable.html">Selectable</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:14</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastspi__ref_8h_source.html b/docs/3.1/fastspi__ref_8h_source.html
new file mode 100644
index 00000000..409c9b37
--- /dev/null
+++ b/docs/3.1/fastspi__ref_8h_source.html
@@ -0,0 +1,195 @@
+<!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.8"/>
+<title>FastLED: fastspi_ref.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastspi_ref.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_FASTSPI_ARM_SAM_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTSPI_ARM_SAM_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;<span class="comment">// A skeletal implementation of hardware SPI support. Fill in the necessary code for init, waiting, and writing. The rest of</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// the method implementations should provide a starting point, even if not hte most efficient to start with</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t _DATA_PIN, u<span class="keywordtype">int</span>8_t _CLOCK_PIN, u<span class="keywordtype">int</span>8_t _SPI_CLOCK_DIVIDER&gt;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="keyword">class </span>REFHardwareSPIOutput {</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; <a class="code" href="class_selectable.html">Selectable</a> *m_pSelect;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; SAMHardwareSPIOutput() { m_pSelect = NULL; }</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; SAMHArdwareSPIOutput(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { m_pSelect = pSelect; }</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="comment">// set the object representing the selectable</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="keywordtype">void</span> setSelect(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { <span class="comment">/* TODO */</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; <span class="comment">// initialize the SPI subssytem</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordtype">void</span> init() { <span class="comment">/* TODO */</span> }</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; <span class="comment">// latch the CS select</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordtype">void</span> <span class="keyword">inline</span> select() __attribute__((always_inline)) { <span class="keywordflow">if</span>(m_pSelect != NULL) { m_pSelect-&gt;select(); } } </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; <span class="comment">// release the CS select </span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordtype">void</span> <span class="keyword">inline</span> release() __attribute__((always_inline)) { <span class="keywordflow">if</span>(m_pSelect != NULL) { m_pSelect-&gt;release(); } } </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="comment">// wait until all queued up data has been written</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> waitFully() { <span class="comment">/* TODO */</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="comment">// write a byte out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByte(uint8_t b) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="comment">// write a word out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeWord(uint16_t w) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// A raw set of writing byte values, assumes setup/init/waiting done elsewhere</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeBytesValueRaw(uint8_t value, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">while</span>(len--) { writeByte(value); }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; } </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// A full cycle of writing a value for len bytes, including select, release, and waiting</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> writeBytesValue(uint8_t value, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; select(); writeBytesValueRaw(value, len); release();</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// A full cycle of writing a value for len bytes, including select, release, and waiting</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> D&gt; <span class="keywordtype">void</span> writeBytes(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len) { </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint8_t *end = data + len;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; select();</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// could be optimized to write 16bit words out instead of 8bit bytes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">while</span>(data != end) { </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; writeByte(D::adjust(*data++));</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; D::postBlock(len);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; waitFully();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; release(); </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// A full cycle of writing a value for len bytes, including select, release, and waiting</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">void</span> writeBytes(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len) { writeBytes&lt;DATA_NOP&gt;(data, len); }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// write a single bit out, which bit from the passed in byte is determined by template parameter</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t BIT&gt; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> writeBit(uint8_t b) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// write a block of uint8_ts out in groups of three. len is the total number of uint8_ts to write out. The template</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// parameters indicate how many uint8_ts to skip at the beginning and/or end of each grouping</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t FLAGS, <span class="keyword">class</span> D, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; select();</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">while</span>(data != end) { </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) { </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; writeBit&lt;0&gt;(1);</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; writeByte(D::adjust(pixels.loadAndScale0()));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()));</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()));</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; pixels.advanceData();</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; data += (3+skip);</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; D::postBlock(len);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; release();</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// template instantiations for writeBytes 3</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">template</span> &lt;u<span class="keywordtype">int</span>8_t FLAGS, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) { </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; writeBytes3&lt;FLAGS, DATA_NOP, RGB_ORDER&gt;(data, len, scale, advance, skip); </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> D, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) { </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; writeBytes3&lt;0, D, RGB_ORDER&gt;(data, len, scale, advance, skip); </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">template</span> &lt;EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) { </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; writeBytes3&lt;0, DATA_NOP, RGB_ORDER&gt;(data, len, scale, advance, skip); </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">void</span> writeBytes3(<span class="keyword">register</span> uint8_t *data, <span class="keywordtype">int</span> len, <span class="keyword">register</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> scale, <span class="keywordtype">bool</span> advance=<span class="keyword">true</span>, uint8_t skip=0) { </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; writeBytes3&lt;0, DATA_NOP, RGB&gt;(data, len, scale, advance, skip); </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;};</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="class_selectable_html"><div class="ttname"><a href="class_selectable.html">Selectable</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:14</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/fastspi__types_8h_source.html b/docs/3.1/fastspi__types_8h_source.html
new file mode 100644
index 00000000..7f6cd0a8
--- /dev/null
+++ b/docs/3.1/fastspi__types_8h_source.html
@@ -0,0 +1,127 @@
+<!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.8"/>
+<title>FastLED: fastspi_types.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastspi_types.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_FASTSPI_TYPES_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_FASTSPI_TYPES_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;<span class="comment">// Some helper macros for getting at mis-ordered byte values</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#define SPI_B0 (RGB_BYTE0(RGB_ORDER) + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#define SPI_B1 (RGB_BYTE1(RGB_ORDER) + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#define SPI_B2 (RGB_BYTE2(RGB_ORDER) + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#define SPI_ADVANCE (3 + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="class_d_a_t_a___n_o_p.html"> 16</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_d_a_t_a___n_o_p.html">DATA_NOP</a> {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">static</span> __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t adjust(<span class="keyword">register</span> uint8_t data) { <span class="keywordflow">return</span> data; }</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">static</span> __attribute__((always_inline)) <span class="keyword">inline</span> uint8_t adjust(<span class="keyword">register</span> uint8_t data, <span class="keyword">register</span> uint8_t scale) { <span class="keywordflow">return</span> scale8(data, scale); }</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">static</span> __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> postBlock(<span class="keywordtype">int</span> len) {}</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;<span class="preprocessor">#define FLAG_START_BIT 0x80</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#define MASK_SKIP_BITS 0x3F</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// Clock speed dividers</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#define SPEED_DIV_2 2</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#define SPEED_DIV_4 4</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#define SPEED_DIV_8 8</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define SPEED_DIV_16 16</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define SPEED_DIV_32 32</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#define SPEED_DIV_64 64</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#define SPEED_DIV_128 128</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#define MAX_DATA_RATE 0</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_d_a_t_a___n_o_p_html"><div class="ttname"><a href="class_d_a_t_a___n_o_p.html">DATA_NOP</a></div><div class="ttdef"><b>Definition:</b> fastspi_types.h:16</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/files.html b/docs/3.1/files.html
new file mode 100644
index 00000000..23203003
--- /dev/null
+++ b/docs/3.1/files.html
@@ -0,0 +1,125 @@
+<!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.8"/>
+<title>FastLED: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="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 class="current"><a href="files.html"><span>File&#160;List</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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="bitswap_8h_source.html"><span class="icondoc"></span></a><b>bitswap.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="chipsets_8h_source.html"><span class="icondoc"></span></a><b>chipsets.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="color_8h_source.html"><span class="icondoc"></span></a><b>color.h</b></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="colorpalettes_8h_source.html"><span class="icondoc"></span></a><b>colorpalettes.h</b></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="colorutils_8h_source.html"><span class="icondoc"></span></a><b>colorutils.h</b></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="controller_8h_source.html"><span class="icondoc"></span></a><b>controller.h</b></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="delay_8h_source.html"><span class="icondoc"></span></a><b>delay.h</b></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="dmx_8h_source.html"><span class="icondoc"></span></a><b>dmx.h</b></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_fast_l_e_d_8h_source.html"><span class="icondoc"></span></a><b>FastLED.h</b></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastled__config_8h_source.html"><span class="icondoc"></span></a><b>fastled_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastpin_8h_source.html"><span class="icondoc"></span></a><b>fastpin.h</b></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastpin__arm__stm32_8h_source.html"><span class="icondoc"></span></a><b>fastpin_arm_stm32.h</b></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastspi_8h_source.html"><span class="icondoc"></span></a><b>fastspi.h</b></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastspi__bitbang_8h_source.html"><span class="icondoc"></span></a><b>fastspi_bitbang.h</b></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastspi__dma_8h_source.html"><span class="icondoc"></span></a><b>fastspi_dma.h</b></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_fast_s_p_i___l_e_d2_8h_source.html"><span class="icondoc"></span></a><b>FastSPI_LED2.h</b></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastspi__nop_8h_source.html"><span class="icondoc"></span></a><b>fastspi_nop.h</b></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastspi__ref_8h_source.html"><span class="icondoc"></span></a><b>fastspi_ref.h</b></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastspi__types_8h_source.html"><span class="icondoc"></span></a><b>fastspi_types.h</b></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="hsv2rgb_8h_source.html"><span class="icondoc"></span></a><b>hsv2rgb.h</b></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="led__sysdefs_8h_source.html"><span class="icondoc"></span></a><b>led_sysdefs.h</b></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="lib8tion_8h_source.html"><span class="icondoc"></span></a><b>lib8tion.h</b></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="noise_8h_source.html"><span class="icondoc"></span></a><b>noise.h</b></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="pixeltypes_8h_source.html"><span class="icondoc"></span></a><b>pixeltypes.h</b></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="platforms_8h_source.html"><span class="icondoc"></span></a><b>platforms.h</b></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="power__mgt_8h_source.html"><span class="icondoc"></span></a><b>power_mgt.h</b></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/ftv2blank.png b/docs/3.1/ftv2blank.png
new file mode 100644
index 00000000..63c605bb
--- /dev/null
+++ b/docs/3.1/ftv2blank.png
Binary files differ
diff --git a/docs/3.1/ftv2doc.png b/docs/3.1/ftv2doc.png
new file mode 100644
index 00000000..17edabff
--- /dev/null
+++ b/docs/3.1/ftv2doc.png
Binary files differ
diff --git a/docs/3.1/ftv2folderclosed.png b/docs/3.1/ftv2folderclosed.png
new file mode 100644
index 00000000..bb8ab35e
--- /dev/null
+++ b/docs/3.1/ftv2folderclosed.png
Binary files differ
diff --git a/docs/3.1/ftv2folderopen.png b/docs/3.1/ftv2folderopen.png
new file mode 100644
index 00000000..d6c7f676
--- /dev/null
+++ b/docs/3.1/ftv2folderopen.png
Binary files differ
diff --git a/docs/3.1/ftv2lastnode.png b/docs/3.1/ftv2lastnode.png
new file mode 100644
index 00000000..63c605bb
--- /dev/null
+++ b/docs/3.1/ftv2lastnode.png
Binary files differ
diff --git a/docs/3.1/ftv2link.png b/docs/3.1/ftv2link.png
new file mode 100644
index 00000000..17edabff
--- /dev/null
+++ b/docs/3.1/ftv2link.png
Binary files differ
diff --git a/docs/3.1/ftv2mlastnode.png b/docs/3.1/ftv2mlastnode.png
new file mode 100644
index 00000000..0b63f6d3
--- /dev/null
+++ b/docs/3.1/ftv2mlastnode.png
Binary files differ
diff --git a/docs/3.1/ftv2mnode.png b/docs/3.1/ftv2mnode.png
new file mode 100644
index 00000000..0b63f6d3
--- /dev/null
+++ b/docs/3.1/ftv2mnode.png
Binary files differ
diff --git a/docs/3.1/ftv2node.png b/docs/3.1/ftv2node.png
new file mode 100644
index 00000000..63c605bb
--- /dev/null
+++ b/docs/3.1/ftv2node.png
Binary files differ
diff --git a/docs/3.1/ftv2plastnode.png b/docs/3.1/ftv2plastnode.png
new file mode 100644
index 00000000..c6ee22f9
--- /dev/null
+++ b/docs/3.1/ftv2plastnode.png
Binary files differ
diff --git a/docs/3.1/ftv2pnode.png b/docs/3.1/ftv2pnode.png
new file mode 100644
index 00000000..c6ee22f9
--- /dev/null
+++ b/docs/3.1/ftv2pnode.png
Binary files differ
diff --git a/docs/3.1/ftv2splitbar.png b/docs/3.1/ftv2splitbar.png
new file mode 100644
index 00000000..fe895f2c
--- /dev/null
+++ b/docs/3.1/ftv2splitbar.png
Binary files differ
diff --git a/docs/3.1/ftv2vertline.png b/docs/3.1/ftv2vertline.png
new file mode 100644
index 00000000..63c605bb
--- /dev/null
+++ b/docs/3.1/ftv2vertline.png
Binary files differ
diff --git a/docs/3.1/functions.html b/docs/3.1/functions.html
new file mode 100644
index 00000000..6445186c
--- /dev/null
+++ b/docs/3.1/functions.html
@@ -0,0 +1,105 @@
+<!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.8"/>
+<title>FastLED: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div><ul>
+<li>show()
+: <a class="el" href="class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b">CFastLED</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/functions_func.html b/docs/3.1/functions_func.html
new file mode 100644
index 00000000..f1989699
--- /dev/null
+++ b/docs/3.1/functions_func.html
@@ -0,0 +1,105 @@
+<!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.8"/>
+<title>FastLED: Class Members - 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_func.html"><span>Functions</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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>show()
+: <a class="el" href="class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b">CFastLED</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/hierarchy.html b/docs/3.1/hierarchy.html
new file mode 100644
index 00000000..904c6b2a
--- /dev/null
+++ b/docs/3.1/hierarchy.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.8"/>
+<title>FastLED: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 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 class="current"><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Hierarchy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class___d_u_e_p_i_n.html" target="_self">_DUEPIN&lt; PIN, _MASK, _ODR, _BSRR, _BRR &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_v_r_software_s_p_i_output.html" target="_self">AVRSoftwareSPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_v_r_software_s_p_i_output.html" target="_self">AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_software_s_p_i_output.html" target="_self">SoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_p_i_output.html" target="_self">SPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_p_i_output.html" target="_self">SPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_fast_l_e_d.html" target="_self">CFastLED</a></td><td class="desc"></td></tr>
+<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_c_h_s_v.html" target="_self">CHSV</a></td><td class="desc"></td></tr>
+<tr id="row_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_h_s_v_palette16.html" target="_self">CHSVPalette16</a></td><td class="desc"></td></tr>
+<tr id="row_6_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_h_s_v_palette256.html" target="_self">CHSVPalette256</a></td><td class="desc"></td></tr>
+<tr id="row_7_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_7_" class="arrow" onclick="toggleFolder('7_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_l_e_d_controller.html" target="_self">CLEDController</a></td><td class="desc"></td></tr>
+<tr id="row_7_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_p_a102_controller.html" target="_self">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_7_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_deep_pixel_controller.html" target="_self">DeepPixelController&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_7_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_l_p_d8806_controller.html" target="_self">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_7_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_p9813_controller.html" target="_self">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_7_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_m16716_controller.html" target="_self">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_7_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_7_5_" class="arrow" onclick="toggleFolder('7_5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2801_controller.html" target="_self">WS2801Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_7_5_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2803_controller.html" target="_self">WS2803Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_8_" class="arrow" onclick="toggleFolder('8_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>ClocklessController</b></td><td class="desc"></td></tr>
+<tr id="row_8_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_0_" class="arrow" onclick="toggleFolder('8_0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205_controller400_khz.html" target="_self">GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205__400.html" target="_self">GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_1_" class="arrow" onclick="toggleFolder('8_1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205_controller800_khz.html" target="_self">GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_g_w6205.html" target="_self">GW6205&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_2_" class="arrow" onclick="toggleFolder('8_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_l_p_d1886_controller1250_khz.html" target="_self">LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_l_p_d1886.html" target="_self">LPD1886&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_3_" class="arrow" onclick="toggleFolder('8_3_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1803_controller400_khz.html" target="_self">TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_3_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1803.html" target="_self">TM1803&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_4_" class="arrow" onclick="toggleFolder('8_4_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1809_controller800_khz.html" target="_self">TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_4_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1804.html" target="_self">TM1804&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_4_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1809.html" target="_self">TM1809&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1829_controller1600_khz.html" target="_self">TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_6_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_6_" class="arrow" onclick="toggleFolder('8_6_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1829_controller800_khz.html" target="_self">TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_6_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_t_m1829.html" target="_self">TM1829&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_7_" class="arrow" onclick="toggleFolder('8_7_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903_b_controller800_khz.html" target="_self">UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_7_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903_b.html" target="_self">UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_8_" class="arrow" onclick="toggleFolder('8_8_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903_controller400_khz.html" target="_self">UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_8_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1903.html" target="_self">UCS1903&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_9_" class="arrow" onclick="toggleFolder('8_9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811_controller400_khz.html" target="_self">WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_9_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811__400.html" target="_self">WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_10_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_10_" class="arrow" onclick="toggleFolder('8_10_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811_controller800_khz.html" target="_self">WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_10_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_a_p_a104.html" target="_self">APA104&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_10_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811.html" target="_self">WS2811&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_10_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812.html" target="_self">WS2812&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_10_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812_b.html" target="_self">WS2812B&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_11_" class="arrow" onclick="toggleFolder('8_11_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2811_controller800_khz.html" target="_self">WS2811Controller800Khz&lt; DATA_PIN, GRB &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_11_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_n_e_o_p_i_x_e_l.html" target="_self">NEOPIXEL&lt; DATA_PIN &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_9_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_min_wait.html" target="_self">CMinWait&lt; WAIT &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_10_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_min_wait.html" target="_self">CMinWait&lt; 1000 &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_c_r_g_b.html" target="_self">CRGB</a></td><td class="desc"></td></tr>
+<tr id="row_12_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_r_g_b_palette16.html" target="_self">CRGBPalette16</a></td><td class="desc"></td></tr>
+<tr id="row_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_c_r_g_b_palette256.html" target="_self">CRGBPalette256</a></td><td class="desc"></td></tr>
+<tr id="row_14_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d_a_t_a___n_o_p.html" target="_self">DATA_NOP</a></td><td class="desc"></td></tr>
+<tr id="row_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="union_i_e_e_e754binary32__t.html" target="_self">IEEE754binary32_t</a></td><td class="desc"></td></tr>
+<tr id="row_16_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_multi_pixel_controller.html" target="_self">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_pixel_controller.html" target="_self">PixelController&lt; RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_18_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classq.html" target="_self">q&lt; T, F, I &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_selectable.html" target="_self">Selectable</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/hsv2rgb_8h_source.html b/docs/3.1/hsv2rgb_8h_source.html
new file mode 100644
index 00000000..37b951ed
--- /dev/null
+++ b/docs/3.1/hsv2rgb_8h_source.html
@@ -0,0 +1,145 @@
+<!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.8"/>
+<title>FastLED: hsv2rgb.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">hsv2rgb.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_HSV2RGB_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_HSV2RGB_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;<span class="preprocessor">#include &quot;pixeltypes.h&quot;</span></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;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// hsv2rgb_rainbow - convert a hue, saturation, and value to RGB</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// using a visually balanced rainbow (vs a straight</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// mathematical spectrum).</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// This &#39;rainbow&#39; yields better yellow and orange</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// than a straight &#39;spectrum&#39;.</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">// NOTE: here hue is 0-255, not just 0-191</span></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="keywordtype">void</span> hsv2rgb_rainbow( <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; hsv, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb);</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keywordtype">void</span> hsv2rgb_rainbow( <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>* phsv, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> * prgb, <span class="keywordtype">int</span> numLeds);</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#define HUE_MAX_RAINBOW 255</span></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="comment">// hsv2rgb_spectrum - convert a hue, saturation, and value to RGB</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">// using a mathematically straight spectrum (vs</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// a visually balanced rainbow).</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// This &#39;spectrum&#39; will have more green &amp; blue</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// than a &#39;rainbow&#39;, and less yellow and orange.</span></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">// NOTE: here hue is 0-255, not just 0-191</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="keywordtype">void</span> hsv2rgb_spectrum( <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; hsv, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keywordtype">void</span> hsv2rgb_spectrum( <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>* phsv, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> * prgb, <span class="keywordtype">int</span> numLeds);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define HUE_MAX_SPECTRUM 255</span></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="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// hsv2rgb_raw - convert hue, saturation, and value to RGB.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// This &#39;spectrum&#39; conversion will be more green &amp; blue</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// than a real &#39;rainbow&#39;, and the hue is specified just</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// in the range 0-191. Together, these result in a</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// slightly faster conversion speed, at the expense of</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// color balance.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// NOTE: Hue is 0-191 only!</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// Saturation &amp; value are 0-255 each.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keywordtype">void</span> hsv2rgb_raw(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; hsv, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; rgb);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keywordtype">void</span> hsv2rgb_raw(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>* phsv, <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> * prgb, <span class="keywordtype">int</span> numLeds);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#define HUE_MAX 191</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="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="struct_c_h_s_v_html"><div class="ttname"><a href="struct_c_h_s_v.html">CHSV</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:16</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/index.html b/docs/3.1/index.html
new file mode 100644
index 00000000..1c465af1
--- /dev/null
+++ b/docs/3.1/index.html
@@ -0,0 +1,90 @@
+<!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.8"/>
+<title>FastLED: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><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="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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">FastLED Documentation</div> </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/jquery.js b/docs/3.1/jquery.js
new file mode 100644
index 00000000..c197801c
--- /dev/null
+++ b/docs/3.1/jquery.js
@@ -0,0 +1,31 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))
+}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;
+if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false
+}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1
+},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);
+ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;
+if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)
+}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b
+})}})(window);
diff --git a/docs/3.1/led__sysdefs_8h_source.html b/docs/3.1/led__sysdefs_8h_source.html
new file mode 100644
index 00000000..94963ae0
--- /dev/null
+++ b/docs/3.1/led__sysdefs_8h_source.html
@@ -0,0 +1,119 @@
+<!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.8"/>
+<title>FastLED: led_sysdefs.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">led_sysdefs.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_LED_SYSDEFS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_LED_SYSDEFS_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;<span class="preprocessor">#include &quot;fastled_config.h&quot;</span></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="preprocessor">#if defined(__MK20DX128__) || defined(__MK20DX256__)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// Include k20/T3 headers</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/k20/led_sysdefs_arm_k20.h&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#elif defined(__SAM3X8E__)</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Include sam/due headers</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/sam/led_sysdefs_arm_sam.h&quot;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// AVR platforms</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;platforms/avr/led_sysdefs_avr.h&quot;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></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;</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;<span class="comment">// Arduino.h needed for convinience functions digitalPinToPort/BitMask/portOutputRegister and the pinMode methods.</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include&lt;Arduino.h&gt;</span></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;<span class="preprocessor">#define CLKS_PER_US (F_CPU/1000000)</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">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/lib8tion_8h_source.html b/docs/3.1/lib8tion_8h_source.html
new file mode 100644
index 00000000..60bbab69
--- /dev/null
+++ b/docs/3.1/lib8tion_8h_source.html
@@ -0,0 +1,1951 @@
+<!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.8"/>
+<title>FastLED: lib8tion.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">lib8tion.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_LED_SYSDEFS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#error WTH? led_sysdefs needs to be included first</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#ifndef __INC_LIB8TION_H</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#define __INC_LIB8TION_H</span></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;<span class="comment">/*</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> Fast, efficient 8-bit math functions specifically</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> designed for high-performance LED programming.</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"> Because of the AVR(Arduino) and ARM assembly language</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> implementations provided, using these functions often</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> results in smaller and faster code than the equivalent</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> program using plain &quot;C&quot; arithmetic and logic.</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"></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> Included are:</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"></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"> - Saturating unsigned 8-bit add and subtract.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> Instead of wrapping around if an overflow occurs,</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> these routines just &#39;clamp&#39; the output at a maxumum</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> of 255, or a minimum of 0. Useful for adding pixel</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> values. E.g., qadd8( 200, 100) = 255.</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="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> qadd8( i, j) == MIN( (i + j), 0xFF )</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> qsub8( i, j) == MAX( (i - j), 0 )</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> - Saturating signed 8-bit (&quot;7-bit&quot;) add.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> qadd7( i, j) == MIN( (i + j), 0x7F)</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"> - Scaling (down) of unsigned 8- and 16- bit values.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment"> Scaledown value is specified in 1/256ths.</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"> scale8( i, sc) == (i * sc) / 256</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"> scale16by8( i, sc) == (i * sc) / 256</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"> Example: scaling a 0-255 value down into a</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"> range from 0-99:</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> downscaled = scale8( originalnumber, 100);</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> A special version of scale8 is provided for scaling</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> LED brightness values, to make sure that they don&#39;t</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"> accidentally scale down to total black at low</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"> dimming levels, since that would look wrong:</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment"> scale8_video( i, sc) = ((i * sc) / 256) +? 1</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"> Example: reducing an LED brightness by a</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"> dimming factor:</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"> new_bright = scale8_video( orig_bright, dimming);</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> - Fast 8- and 16- bit unsigned random numbers.</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"> Significantly faster than Arduino random(), but</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"> also somewhat less random. You can add entropy.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> random8() == random from 0..255</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"> random8( n) == random from 0..(N-1)</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> random8( n, m) == random from N..(M-1)</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment"> random16() == random from 0..65535</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"> random16( n) == random from 0..(N-1)</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> random16( n, m) == random from N..(M-1)</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"> random16_set_seed( k) == seed = k</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"> random16_add_entropy( k) == seed += k</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> - Absolute value of a signed 8-bit value.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"> abs8( i) == abs( i)</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> - 8-bit math operations which return 8-bit values.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> These are provided mostly for completeness,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"> not particularly for performance.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> mul8( i, j) == (i * j) &amp; 0xFF</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> add8( i, j) == (i + j) &amp; 0xFF</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> sub8( i, j) == (i - j) &amp; 0xFF</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> - Fast 16-bit approximations of sin and cos.</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> Input angle is a uint16_t from 0-65535.</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> Output is a signed int16_t from -32767 to 32767.</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> sin16( x) == sin( (x/32768.0) * pi) * 32767</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> cos16( x) == cos( (x/32768.0) * pi) * 32767</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> Accurate to more than 99% in all cases.</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> - Fast 8-bit approximations of sin and cos.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> Input angle is a uint8_t from 0-255.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> Output is an UNsigned uint8_t from 0 to 255.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> sin8( x) == (sin( (x/128.0) * pi) * 128) + 128</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> cos8( x) == (cos( (x/128.0) * pi) * 128) + 128</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> Accurate to within about 2%.</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> - Fast 8-bit &quot;easing in/out&quot; function.</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> ease8InOutCubic(x) == 3(x^i) - 2(x^3)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> ease8InOutApprox(x) ==</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> faster, rougher, approximation of cubic easing</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> ease8InOutQuad(x) == quadratic (vs cubic) easing</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> - Cubic, Quadratic, and Triangle wave functions.</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"> Input is a uint8_t representing phase withing the wave,</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> similar to how sin8 takes an angle &#39;theta&#39;.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> Output is a uint8_t representing the amplitude of</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> the wave at that point.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> cubicwave8( x)</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> quadwave8( x)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> triwave8( x)</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"> - Square root for 16-bit integers. About three times</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> faster and five times smaller than Arduino&#39;s built-in</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> generic 32-bit sqrt routine.</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> sqrt16( uint16_t x ) == sqrt( x)</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> - Dimming and brightening functions for 8-bit</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"> light values.</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment"> dim8_video( x) == scale8_video( x, x)</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment"> dim8_raw( x) == scale8( x, x)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"> dim8_lin( x) == (x&lt;128) ? ((x+1)/2) : scale8(x,x)</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"> brighten8_video( x) == 255 - dim8_video( 255 - x)</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"> brighten8_raw( x) == 255 - dim8_raw( 255 - x)</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> brighten8_lin( x) == 255 - dim8_lin( 255 - x)</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> The dimming functions in particular are suitable</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> for making LED light output appear more &#39;linear&#39;.</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"> - Linear interpolation between two values, with the</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"> fraction between them expressed as an 8- or 16-bit</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> fixed point fraction (fract8 or fract16).</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"> lerp8by8( fromU8, toU8, fract8 )</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"> lerp16by8( fromU16, toU16, fract8 )</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment"> lerp15by8( fromS16, toS16, fract8 )</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment"> == from + (( to - from ) * fract8) / 256)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment"> lerp16by16( fromU16, toU16, fract16 )</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> == from + (( to - from ) * fract16) / 65536)</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> map8( in, rangeStart, rangeEnd)</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> == map( in, 0, 255, rangeStart, rangeEnd);</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> - Optimized memmove, memcpy, and memset, that are</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> faster than standard avr-libc 1.8.</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"> memmove8( dest, src, bytecount)</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> memcpy8( dest, src, bytecount)</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment"> memset8( buf, value, bytecount)</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment"> - Beat generators which return sine or sawtooth</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment"> waves in a specified number of Beats Per Minute.</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment"> Sine wave beat generators can specify a low and</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment"> high range for the output. Sawtooth wave beat</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"> generators always range 0-255 or 0-65535.</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"> beatsin8( BPM, low8, high8)</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"> = (sine(beatphase) * (high8-low8)) + low8</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"> beatsin16( BPM, low16, high16)</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"> = (sine(beatphase) * (high16-low16)) + low16</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"> beat8( BPM) = 8-bit repeating sawtooth wave</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"> beat16( BPM) = 16-bit repeating sawtooth wave</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">Lib8tion is pronounced like &#39;libation&#39;: lie-BAY-shun</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">*/</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="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="preprocessor">#define LIB8STATIC __attribute__ ((unused)) static inline</span></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 !defined(__AVR__)</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment">// for memmove, memcpy, and memset if not defined here</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="preprocessor">#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="preprocessor">#define LIB8_ATTINY 1</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="preprocessor">#endif</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;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="preprocessor">#if defined(__arm__)</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor">#if defined(FASTLED_TEENSY3)</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment">// Can use Cortex M4 DSP instructions</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="preprocessor">#define QADD8_C 0</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="preprocessor">#define QADD7_C 0</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#define QADD8_ARM_DSP_ASM 1</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="preprocessor">#define QADD7_ARM_DSP_ASM 1</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment">// Generic ARM</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="preprocessor">#define QADD8_C 1</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="preprocessor">#define QADD7_C 1</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="preprocessor">#define QSUB8_C 1</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="preprocessor">#define ABS8_C 1</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="preprocessor">#define ADD8_C 1</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="preprocessor">#define SUB8_C 1</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor">#define AVG8_C 1</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="preprocessor">#define AVG7_C 1</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#elif defined(__AVR__)</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;<span class="comment">// AVR ATmega and friends Arduino</span></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;<span class="preprocessor">#define QADD8_C 0</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="preprocessor">#define QADD7_C 0</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="preprocessor">#define QSUB8_C 0</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="preprocessor">#define ABS8_C 0</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="preprocessor">#define ADD8_C 0</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="preprocessor">#define SUB8_C 0</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="preprocessor">#define AVG8_C 0</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="preprocessor">#define AVG7_C 0</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="preprocessor">#define QADD8_AVRASM 1</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="preprocessor">#define QADD7_AVRASM 1</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#define QSUB8_AVRASM 1</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="preprocessor">#define ABS8_AVRASM 1</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="preprocessor">#define ADD8_AVRASM 1</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor">#define SUB8_AVRASM 1</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor">#define AVG8_AVRASM 1</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#define AVG7_AVRASM 1</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">// Note: these require hardware MUL instruction</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">// -- sorry, ATtiny!</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#if !defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#define SCALE8_C 0</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 0</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="preprocessor">#define SCALE16_C 0</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="preprocessor">#define MUL8_C 0</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="preprocessor">#define QMUL8_C 0</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="preprocessor">#define EASE8_C 0</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="preprocessor">#define SCALE8_AVRASM 1</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="preprocessor">#define SCALE16BY8_AVRASM 1</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor">#define SCALE16_AVRASM 1</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor">#define MUL8_AVRASM 1</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#define QMUL8_AVRASM 1</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor">#define EASE8_AVRASM 1</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="preprocessor">#define CLEANUP_R1_AVRASM 1</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment">// On ATtiny, we just use C implementations</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="preprocessor">#define SCALE8_AVRASM 0</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="preprocessor">#define SCALE16BY8_AVRASM 0</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="preprocessor">#define SCALE16_AVRASM 0</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="preprocessor">#define MUL8_AVRASM 0</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#define QMUL8_AVRASM 0</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#define EASE8_AVRASM 0</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment">// unspecified architecture, so</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment">// no ASM, everything in C</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#define QADD8_C 1</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor">#define QADD7_C 1</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor">#define QSUB8_C 1</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="preprocessor">#define ABS8_C 1</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#define ADD8_C 1</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="preprocessor">#define SUB8_C 1</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor">#define AVG8_C 1</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="preprocessor">#define AVG7_C 1</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment">// typdefs for fixed-point fractional types.</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment">// sfract7 should be interpreted as signed 128ths.</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment">// fract8 should be interpreted as unsigned 256ths.</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment">// sfract15 should be interpreted as signed 32768ths.</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment">// fract16 should be interpreted as unsigned 65536ths.</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment">// Example: if a fract8 has the value &quot;64&quot;, that should be interpreted</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">// as 64/256ths, or one-quarter.</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">//</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment">// fract8 range is 0 to 0.99609375</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment">// in steps of 0.00390625</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment">// sfract7 range is -0.9921875 to 0.9921875</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment">// in steps of 0.0078125</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment">// fract16 range is 0 to 0.99998474121</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment">// in steps of 0.00001525878</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment">// sfract15 range is -0.99996948242 to 0.99996948242</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment">// in steps of 0.00003051757</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="keyword">typedef</span> uint8_t fract8; <span class="comment">// ANSI: unsigned short _Fract</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="keyword">typedef</span> int8_t sfract7; <span class="comment">// ANSI: signed short _Fract</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="keyword">typedef</span> uint16_t fract16; <span class="comment">// ANSI: unsigned _Fract</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="keyword">typedef</span> int16_t sfract15; <span class="comment">// ANSI: signed _Fract</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment">// accumXY types should be interpreted as X bits of integer,</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment">// and Y bits of fraction.</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment">// E.g., accum88 has 8 bits of int, 8 bits of fraction</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;<span class="keyword">typedef</span> uint16_t accum88; <span class="comment">// ANSI: unsigned short _Accum</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="keyword">typedef</span> int16_t saccum78; <span class="comment">// ANSI: signed short _Accum</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="keyword">typedef</span> uint32_t accum1616;<span class="comment">// ANSI: signed _Accum</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="keyword">typedef</span> int32_t saccum1516;<span class="comment">//ANSI: signed _Accum</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="keyword">typedef</span> uint16_t accum124; <span class="comment">// no direct ANSI counterpart</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="keyword">typedef</span> int32_t saccum114;<span class="comment">// no direct ANSI counterpart</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment">// typedef for IEEE754 &quot;binary32&quot; float type internals</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="union_i_e_e_e754binary32__t.html"> 330</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; uint32_t i;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">float</span> f;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; uint32_t mantissa: 23;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; uint32_t exponent: 8;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; uint32_t signbit: 1;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; };</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; uint32_t mant7 : 7;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; uint32_t mant16: 16;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; uint32_t exp_ : 8;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; uint32_t sb_ : 1;</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="keyword">struct </span>{</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; uint32_t mant_lo8 : 8;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; uint32_t mant_hi16_exp_lo1 : 16;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; uint32_t sb_exphi7 : 8;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; };</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;} <a class="code" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</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">// qadd8: add one byte to another, saturating at 0xFF</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;LIB8STATIC uint8_t qadd8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;{</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="preprocessor">#if QADD8_C == 1</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t = i + j;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span>( t &gt; 255) t = 255;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="preprocessor">#elif QADD8_AVRASM == 1</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">/* First, add j to i, conditioning the C flag */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&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="comment">/* Now test the C flag.</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</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="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment"> If C is set, we go ahead and load 0xFF into i.</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="stringliteral">&quot;brcc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="stringliteral">&quot;ldi %0, 0xFF \n\t&quot;</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="preprocessor">#elif QADD8_ARM_DSP_ASM == 1</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</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="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="preprocessor">#error &quot;No implementation for qadd8 available.&quot;</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;}</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">// qadd7: add one signed byte to another,</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment">// saturating at 0x7F.</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;LIB8STATIC int8_t qadd7( int8_t i, int8_t j)</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;{</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="preprocessor">#if QADD7_C == 1</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; int16_t t = i + j;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span>( t &gt; 127) t = 127;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="preprocessor">#elif QADD7_AVRASM == 1</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">/* First, add j to i, conditioning the V flag */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">/* Now test the V flag.</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</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="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment"> If V is set, we go ahead and load 0x7F into i.</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="stringliteral">&quot;brvc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="stringliteral">&quot;ldi %0, 0x7F \n\t&quot;</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="preprocessor">#elif QADD7_ARM_DSP_ASM == 1</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</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="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="preprocessor">#error &quot;No implementation for qadd7 available.&quot;</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;}</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="comment">// qsub8: subtract one byte from another, saturating at 0x00</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;LIB8STATIC uint8_t qsub8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="preprocessor">#if QSUB8_C == 1</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordtype">int</span> t = i - j;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>( t &lt; 0) t = 0;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="preprocessor">#elif QSUB8_AVRASM == 1</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">/* First, subtract j from i, conditioning the C flag */</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="stringliteral">&quot;sub %0, %1 \n\t&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; <span class="comment">/* Now test the C flag.</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</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="l00433"></a><span class="lineno"> 433</span>&#160;<span class="comment"> If C is set, we go ahead and load 0x00 into i.</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="stringliteral">&quot;brcc L_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="stringliteral">&quot;ldi %0, 0x00 \n\t&quot;</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="preprocessor">#error &quot;No implementation for qsub8 available.&quot;</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;}</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="comment">// add8: add one byte to another, with one byte result</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;LIB8STATIC uint8_t add8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#if ADD8_C == 1</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordtype">int</span> t = i + j;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="preprocessor">#elif ADD8_AVRASM == 1</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// Add j to i, period.</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</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="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="preprocessor">#error &quot;No implementation for add8 available.&quot;</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;}</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;<span class="comment">// sub8: subtract one byte from another, 8-bit result</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;LIB8STATIC uint8_t sub8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;{</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="preprocessor">#if SUB8_C == 1</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordtype">int</span> t = i - j;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="preprocessor">#elif SUB8_AVRASM == 1</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// Subtract j from i, period.</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</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="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#error &quot;No implementation for sub8 available.&quot;</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;}</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment">// avg8: Calculate an integer average of two unsigned</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment">// 8-bit integer values (uint8_t).</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">// Fractional results are rounded down, e.g. avg8(20,41) = 30</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;LIB8STATIC uint8_t avg8( uint8_t i, uint8_t j)</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;<span class="preprocessor">#if AVG8_C == 1</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> (i + j) &gt;&gt; 1;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="preprocessor">#elif AVG8_AVRASM == 1</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">/* First, add j to i, 9th bit overflows into C flag */</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">/* Divide by two, moving C flag into high 8th bit */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="stringliteral">&quot;ror %0 \n\t&quot;</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="preprocessor">#error &quot;No implementation for avg8 available.&quot;</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;}</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="comment">// avg7: Calculate an integer average of two signed 7-bit</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="comment">// integers (int8_t)</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="comment">// If the first argument is even, result is rounded down.</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment">// If the first argument is odd, result is result up.</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;LIB8STATIC int8_t avg7( int8_t i, int8_t j)</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;{</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="preprocessor">#if AVG7_C == 1</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> ((i + j) &gt;&gt; 1) + (i &amp; 0x1);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="preprocessor">#elif AVG7_AVRASM == 1</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="stringliteral">&quot;asr %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="stringliteral">&quot;asr %0 \n\t&quot;</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="stringliteral">&quot;adc %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="preprocessor">#error &quot;No implementation for avg7 available.&quot;</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;}</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="comment">// scale8: scale one byte by a second one, which is treated as</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="comment">// the numerator of a fraction whose denominator is 256</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="comment">// In other words, it computes i * (scale / 256)</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;<span class="comment">// 4 clocks AVR with MUL, 2 clocks ARM</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;LIB8STATIC uint8_t scale8( uint8_t i, fract8 scale)</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;{</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">return</span> ((uint16_t)i * (uint16_t)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="preprocessor">#if defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; uint8_t work=0;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; uint8_t cnt=0x80;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="stringliteral">&quot;LOOP_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">/*&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="comment"> &quot; add %[work], %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="comment"> &quot; ror %[work] \n\t&quot;</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="comment"> &quot; lsr %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="comment"> &quot; clc \n\t&quot;*/</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="stringliteral">&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="stringliteral">&quot; add %[work], %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="stringliteral">&quot; ror %[work] \n\t&quot;</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="stringliteral">&quot; lsr %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="stringliteral">&quot; lsr %[cnt] \n\t&quot;</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="stringliteral">&quot;brcc LOOP_%=&quot;</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</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="l00549"></a><span class="lineno"> 549</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="l00550"></a><span class="lineno"> 550</span>&#160; :</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; );</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordflow">return</span> work;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</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="l00560"></a><span class="lineno"> 560</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</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="l00565"></a><span class="lineno"> 565</span>&#160;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="comment">/* Return the result */</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8 available.&quot;</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;}</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="comment">// The &quot;video&quot; version of scale8 guarantees that the output will</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="comment">// be only be zero if one or both of the inputs are zero. If both</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="comment">// inputs are non-zero, the output is guaranteed to be non-zero.</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="comment">// This makes for better &#39;video&#39;/LED dimming, at the cost of</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="comment">// several additional cycles.</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;LIB8STATIC uint8_t scale8_video( uint8_t i, fract8 scale)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;{</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</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="l00584"></a><span class="lineno"> 584</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</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="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; uint8_t j=0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__\n\t&quot;</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="stringliteral">&quot; cpse %[scale], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</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="l00600"></a><span class="lineno"> 600</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// asm volatile(</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// : &quot;+a&quot; (i)</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// // Return the result</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="comment">// return i;</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video available.&quot;</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;}</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;<span class="comment">// This version of scale8 does not clean up the R1 register on AVR</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment">// If you are doing several &#39;scale8&#39;s in a row, use this, and</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="comment">// then explicitly call cleanup_R1.</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY( uint8_t i, fract8 scale)</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;{</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</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="l00632"></a><span class="lineno"> 632</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</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="l00644"></a><span class="lineno"> 644</span>&#160;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="comment">// Return the result</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;}</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENT DIRECTLY IN PLACE</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;LIB8STATIC <span class="keywordtype">void</span> nscale8_LEAVING_R1_DIRTY( uint8_t&amp; i, fract8 scale)</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;{</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</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="l00670"></a><span class="lineno"> 670</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;}</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;LIB8STATIC uint8_t scale8_video_LEAVING_R1_DIRTY( uint8_t i, fract8 scale)</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</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="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</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="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; uint8_t j=0;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</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="l00696"></a><span class="lineno"> 696</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">return</span> j;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// asm volatile(</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// : &quot;+a&quot; (i)</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">// // Return the result</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="comment">// return i;</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;}</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;LIB8STATIC <span class="keywordtype">void</span> nscale8_video_LEAVING_R1_DIRTY( uint8_t &amp; i, fract8 scale)</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;{</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</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="l00724"></a><span class="lineno"> 724</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="stringliteral">&quot; mov %[i], r1\n\t&quot;</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="stringliteral">&quot; subi %[i], 0xFF\n\t&quot;</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; : [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;}</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;LIB8STATIC <span class="keywordtype">void</span> cleanup_R1()</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;{</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;<span class="preprocessor">#if CLEANUP_R1_AVRASM == 1</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</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="l00746"></a><span class="lineno"> 746</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="l00747"></a><span class="lineno"> 747</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;}</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="comment">// nscale8x3: scale three one byte values by a fourth one, which is treated as</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;<span class="comment">// the numerator of a fraction whose demominator is 256</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="comment">// In other words, it computes r,g,b * (scale / 256)</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;LIB8STATIC <span class="keywordtype">void</span> nscale8x3( uint8_t&amp; r, uint8_t&amp; g, uint8_t&amp; b, fract8 scale)</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;{</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; r = ((int)r * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; g = ((int)g * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; b = ((int)b * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; r = scale8_LEAVING_R1_DIRTY(r, scale);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; g = scale8_LEAVING_R1_DIRTY(g, scale);</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; b = scale8_LEAVING_R1_DIRTY(b, scale);</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; cleanup_R1();</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;}</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;LIB8STATIC <span class="keywordtype">void</span> nscale8x3_video( uint8_t&amp; r, uint8_t&amp; g, uint8_t&amp; b, fract8 scale)</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;{</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; r = (r == 0) ? 0 : (((<span class="keywordtype">int</span>)r * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; g = (g == 0) ? 0 : (((<span class="keywordtype">int</span>)g * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; b = (b == 0) ? 0 : (((<span class="keywordtype">int</span>)b * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; nscale8_video_LEAVING_R1_DIRTY( r, scale);</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; nscale8_video_LEAVING_R1_DIRTY( g, scale);</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; nscale8_video_LEAVING_R1_DIRTY( b, scale);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; cleanup_R1();</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;}</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;<span class="comment">// nscale8x2: scale two one byte values by a third one, which is treated as</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;<span class="comment">// the numerator of a fraction whose demominator is 256</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<span class="comment">// In other words, it computes i,j * (scale / 256)</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</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="l00798"></a><span class="lineno"> 798</span>&#160;{</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; j = ((int)j * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; i = scale8_LEAVING_R1_DIRTY(i, scale);</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; j = scale8_LEAVING_R1_DIRTY(j, scale);</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; cleanup_R1();</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;}</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;LIB8STATIC <span class="keywordtype">void</span> nscale8x2_video( uint8_t&amp; i, uint8_t&amp; j, fract8 scale)</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;{</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; i = (i == 0) ? 0 : (((<span class="keywordtype">int</span>)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; j = (j == 0) ? 0 : (((<span class="keywordtype">int</span>)j * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; nscale8_video_LEAVING_R1_DIRTY( i, scale);</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; nscale8_video_LEAVING_R1_DIRTY( j, scale);</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; cleanup_R1();</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;}</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="comment">// scale16by8: scale a 16-bit unsigned value by an 8-bit value,</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;<span class="comment">// considered as numerator of a fraction whose denominator</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;<span class="comment">// is 256. In other words, it computes i * (scale / 256)</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;<span class="preprocessor">#if SCALE16BY8_C == 1</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160;LIB8STATIC uint16_t scale16by8( uint16_t i, fract8 scale )</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;{</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; result = (i * scale) / 256;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;}</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;<span class="preprocessor">#elif SCALE16BY8_AVRASM == 1</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;LIB8STATIC uint16_t scale16by8( uint16_t i, fract8 scale )</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;{</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">// result.A = HighByte(i.A x j )</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="stringliteral">&quot; mul %A[i], %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="stringliteral">&quot; mov %A[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="stringliteral">&quot; clr %B[result] \n\t&quot;</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="comment">// result.A-B += i.B x j</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="stringliteral">&quot; mul %B[i], %[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="stringliteral">&quot; add %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="stringliteral">&quot; adc %B[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="comment">// cleanup r1</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; : [result] <span class="stringliteral">&quot;=r&quot;</span> (result)</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</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="l00859"></a><span class="lineno"> 859</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; );</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;}</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale16by8 available.&quot;</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;<span class="comment">// scale16: scale a 16-bit unsigned value by a 16-bit value,</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;<span class="comment">// considered as numerator of a fraction whose denominator</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="comment">// is 65536. In other words, it computes i * (scale / 65536)</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="preprocessor">#if SCALE16_C == 1</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;LIB8STATIC uint16_t scale16( uint16_t i, fract16 scale )</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;{</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; result = ((uint32_t)(i) * (uint32_t)(scale)) / 65536;</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;}</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="preprocessor">#elif SCALE16_AVRASM == 1</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;LIB8STATIC</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;uint16_t scale16( uint16_t i, fract16 scale )</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;{</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; uint32_t result = 0;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keyword">const</span> uint8_t zero = 0;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="comment">// result.A-B = i.A x scale.A</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="stringliteral">&quot; mul %A[i], %A[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// save results...</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="comment">// basic idea:</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="comment">//&quot; mov %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="comment">//&quot; mov %B[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="comment">// which can be written as...</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="stringliteral">&quot; movw %A[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">// We actually need to do anything with r0,</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="comment">// as result.A is never used again here, so we</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="comment">// could just move the high byte, but movw is</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="comment">// one clock cycle, just like mov, so might as</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="comment">// well, in case we want to use this code for</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="comment">// a generic 16x16 multiply somewhere.</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160;</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="comment">// result.C-D = i.B x scale.B</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="stringliteral">&quot; mul %B[i], %B[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="comment">//&quot; mov %C[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="comment">//&quot; mov %D[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="stringliteral">&quot; movw %C[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="comment">// result.B-D += i.B x scale.A</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="stringliteral">&quot; mul %B[i], %A[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="comment">// result.B-D += i.A x scale.B</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="stringliteral">&quot; mul %A[i], %B[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="comment">// cleanup r1</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="stringliteral">&quot; clr r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; : [i] <span class="stringliteral">&quot;r&quot;</span> (i),</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; [scale] <span class="stringliteral">&quot;r&quot;</span> (scale),</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; [zero] <span class="stringliteral">&quot;r&quot;</span> (zero)</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; );</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; result = result &gt;&gt; 16;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;}</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale16 available.&quot;</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;<span class="comment">// mul8: 8x8 bit multiplication, with 8 bit result</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;LIB8STATIC uint8_t mul8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;{</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;<span class="preprocessor">#if MUL8_C == 1</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</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="l00943"></a><span class="lineno"> 943</span>&#160;<span class="preprocessor">#elif MUL8_AVRASM == 1</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit j, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="comment">/* Extract the LOW 8-bits (r0) */</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="stringliteral">&quot;mov %0, r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</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="l00950"></a><span class="lineno"> 950</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j)</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160;<span class="preprocessor">#error &quot;No implementation for mul8 available.&quot;</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;}</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160;</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;<span class="comment">// mul8: saturating 8x8 bit multiplication, with 8 bit result</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;LIB8STATIC uint8_t qmul8( uint8_t i, uint8_t j)</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;{</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;<span class="preprocessor">#if QMUL8_C == 1</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordtype">int</span> p = ((int)i * (<span class="keywordtype">int</span>)(j) );</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span>( p &gt; 255) p = 255;</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">return</span> p;</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;<span class="preprocessor">#elif QMUL8_AVRASM == 1</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit j, giving 16-bit r1,r0 */</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="stringliteral">&quot; mul %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="comment">/* If high byte of result is zero, all is well. */</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="stringliteral">&quot; tst r1 \n\t&quot;</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="stringliteral">&quot; breq Lnospill_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="comment">/* If high byte of result &gt; 0, saturate low byte to 0xFF */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="stringliteral">&quot; ldi %0,0xFF \n\t&quot;</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="stringliteral">&quot; rjmp Ldone_%= \n\t&quot;</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="stringliteral">&quot;Lnospill_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="comment">/* Extract the LOW 8-bits (r0) */</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="stringliteral">&quot; mov %0, r0 \n\t&quot;</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="stringliteral">&quot;Ldone_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</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="l00984"></a><span class="lineno"> 984</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j)</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;<span class="preprocessor">#error &quot;No implementation for qmul8 available.&quot;</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;}</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="comment">// abs8: take abs() of a signed 8-bit uint8_t</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;LIB8STATIC int8_t abs8( int8_t i)</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;{</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="preprocessor">#if ABS8_C == 1</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keywordflow">if</span>( i &lt; 0) i = -i;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="preprocessor">#elif ABS8_AVRASM == 1</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</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="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="stringliteral">&quot;sbrc %0, 7 \n&quot;</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="comment">/* Negate the value */</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="stringliteral">&quot;neg %0 \n&quot;</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; : <span class="stringliteral">&quot;+r&quot;</span> (i) : <span class="stringliteral">&quot;r&quot;</span> (i) );</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="preprocessor">#error &quot;No implementation for abs8 available.&quot;</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;}</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="comment">// float-to-fixed and fixed-to-float conversions</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="comment">// Note that anything involving a &#39;float&#39; on AVR will be slower.</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="comment">// floatToSfract15: conversion from IEEE754 float in the range (-1,1)</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="comment">// to 16-bit fixed point. Note that the extremes of</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="comment">// one and negative one are NOT representable. The</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;<span class="comment">// representable range is basically</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;<span class="comment">// sfract15ToFloat: conversion from sfract15 fixed point to</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="comment">// IEEE754 32-bit float.</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;LIB8STATIC</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="keywordtype">float</span> sfract15ToFloat( sfract15 y)</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;{</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">return</span> y / 32768.0;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;}</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;LIB8STATIC</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;sfract15 floatToSfract15( <span class="keywordtype">float</span> f)</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;{</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">return</span> f * 32768.0;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;}</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="comment">// Dimming and brightening functions</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;<span class="comment">// The eye does not respond in a linear way to light.</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="comment">// High speed PWM&#39;d LEDs at 50% duty cycle appear far</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="comment">// brighter then the &#39;half as bright&#39; you might expect.</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;<span class="comment">// If you want your midpoint brightness leve (128) to</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="comment">// appear half as bright as &#39;full&#39; brightness (255), you</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="comment">// have to apply a &#39;dimming function&#39;.</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;LIB8STATIC uint8_t dim8_raw( uint8_t x)</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;{</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">return</span> scale8( x, x);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;}</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;LIB8STATIC uint8_t dim8_video( uint8_t x)</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;{</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">return</span> scale8_video( x, x);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;}</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;LIB8STATIC uint8_t dim8_lin( uint8_t x )</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;{</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span>( x &amp; 0x80 ) {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; x = scale8( x, x);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; x += 1;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; x /= 2;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;}</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;LIB8STATIC uint8_t brighten8_raw( uint8_t x)</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;{</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">return</span> 255 - scale8( ix, ix);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;}</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;LIB8STATIC uint8_t brighten8_video( uint8_t x)</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;{</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="keywordflow">return</span> 255 - scale8_video( ix, ix);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;}</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;LIB8STATIC uint8_t brighten8_lin( uint8_t x )</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;{</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; uint8_t ix = 255 - x;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="keywordflow">if</span>( ix &amp; 0x80 ) {</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; ix = scale8( ix, ix);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; ix += 1;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; ix /= 2;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">return</span> 255 - ix;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;}</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="comment">// A 16-bit PNRG good enough for LED animations</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<span class="comment">// X(n+1) = (2053 * X(n)) + 13849)</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;<span class="preprocessor">#define RAND16_2053 ((uint16_t)(2053))</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;<span class="preprocessor">#define RAND16_13849 ((uint16_t)(13849))</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;<span class="keyword">extern</span> uint16_t rand16seed;<span class="comment">// = RAND16_SEED;</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;LIB8STATIC uint8_t random8()</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;{</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; rand16seed = (rand16seed * RAND16_2053) + RAND16_13849;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="comment">// return the sum of the high and low bytes, for better</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="comment">// mixing and non-sequential correlation</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> (uint8_t)(((uint8_t)(rand16seed &amp; 0xFF)) +</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; ((uint8_t)(rand16seed &gt;&gt; 8)));</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;}</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;LIB8STATIC uint16_t random16()</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;{</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; rand16seed = (rand16seed * RAND16_2053) + RAND16_13849;</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keywordflow">return</span> rand16seed;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;}</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;LIB8STATIC uint8_t random8(uint8_t lim)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;{</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; uint8_t r = random8();</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; r = scale8( r, lim);</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;}</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;LIB8STATIC uint8_t random8(uint8_t min, uint8_t lim)</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;{</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; uint8_t delta = lim - min;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; uint8_t r = random8(delta) + min;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;}</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;LIB8STATIC uint16_t random16( uint16_t lim)</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;{</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; uint16_t r = random16();</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; uint32_t p = (uint32_t)lim * (uint32_t)r;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; r = p &gt;&gt; 16;</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;}</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;LIB8STATIC uint16_t random16( uint16_t min, uint16_t lim)</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;{</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; uint16_t delta = lim - min;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; uint16_t r = random16( delta) + min;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;}</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;LIB8STATIC <span class="keywordtype">void</span> random16_set_seed( uint16_t seed)</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;{</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; rand16seed = seed;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;}</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;LIB8STATIC uint16_t random16_get_seed()</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;{</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">return</span> rand16seed;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;}</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;LIB8STATIC <span class="keywordtype">void</span> random16_add_entropy( uint16_t entropy)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;{</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; rand16seed += entropy;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;}</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="comment">// sin16 &amp; cos16:</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;<span class="comment">// Fast 16-bit approximations of sin(x) &amp; cos(x).</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="comment">// Input angle is an unsigned int from 0-65535.</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;<span class="comment">// Output is signed int from -32767 to 32767.</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="comment">// This approximation never varies more than 0.69%</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="comment">// from the floating point value you&#39;d get by doing</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="comment">// float s = sin( x ) * 32767.0;</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;<span class="comment">// Don&#39;t use this approximation for calculating the</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="comment">// trajectory of a rocket to Mars, but it&#39;s great</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;<span class="comment">// for art projects and LED displays.</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="comment">// On Arduino/AVR, this approximation is more than</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;<span class="comment">// 10X faster than floating point sin(x) and cos(x)</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="preprocessor">#define sin16 sin16_avr</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="preprocessor">#define sin16 sin16_C</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;LIB8STATIC int16_t sin16_avr( uint16_t theta )</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;{</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t data[] =</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; { 0, 0, 49, 0, 6393%256, 6393/256, 48, 0,</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; 12539%256, 12539/256, 44, 0, 18204%256, 18204/256, 38, 0,</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; 23170%256, 23170/256, 31, 0, 27245%256, 27245/256, 23, 0,</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; 30273%256, 30273/256, 14, 0, 32137%256, 32137/256, 4 <span class="comment">/*,0*/</span> };</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; uint16_t offset = (theta &amp; 0x3FFF);</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="comment">// AVR doesn&#39;t have a multi-bit shift instruction,</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</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="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="comment">// Inserting empty volatile statements between each</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="comment">// bit shift forces gcc to unroll the loop.</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..8191</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..4095</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..2047</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x4000 ) offset = 2047 - offset;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; uint8_t sectionX4;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; sectionX4 = offset / 256;</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; sectionX4 *= 4;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; uint8_t m;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; uint16_t b;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; uint8_t blo;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; uint8_t bhi;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; };</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; } u;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="comment">//in effect u.b = blo + (256 * bhi);</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; u.blo = data[ sectionX4 ];</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; u.bhi = data[ sectionX4 + 1];</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; m = data[ sectionX4 + 2];</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; uint8_t secoffset8 = (uint8_t)(offset) / 2;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; uint16_t mx = m * secoffset8;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; int16_t y = mx + u.b;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x8000 ) y = -y;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;}</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;LIB8STATIC int16_t sin16_C( uint16_t theta )</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;{</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint16_t base[] =</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; { 0, 6393, 12539, 18204, 23170, 27245, 30273, 32137 };</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t slope[] =</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; { 49, 48, 44, 38, 31, 23, 14, 4 };</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; uint16_t offset = (theta &amp; 0x3FFF) &gt;&gt; 3; <span class="comment">// 0..2047</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x4000 ) offset = 2047 - offset;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; uint8_t section = offset / 256; <span class="comment">// 0..7</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; uint16_t b = base[section];</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; uint8_t m = slope[section];</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; uint8_t secoffset8 = (uint8_t)(offset) / 2;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; uint16_t mx = m * secoffset8;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; int16_t y = mx + b;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x8000 ) y = -y;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;}</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;LIB8STATIC int16_t cos16( uint16_t theta)</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;{</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">return</span> sin16( theta + 16384);</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;}</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;<span class="comment">// sin8 &amp; cos8</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;<span class="comment">// Fast 8-bit approximations of sin(x) &amp; cos(x).</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;<span class="comment">// Input angle is an unsigned int from 0-255.</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;<span class="comment">// Output is an unsigned int from 0 to 255.</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;<span class="comment">// This approximation can vary to to 2%</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;<span class="comment">// from the floating point value you&#39;d get by doing</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;<span class="comment">// float s = (sin( x ) * 128.0) + 128;</span></div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;<span class="comment">// Don&#39;t use this approximation for calculating the</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;<span class="comment">// &quot;real&quot; trigonometric calculations, but it&#39;s great</span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;<span class="comment">// for art projects and LED displays.</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;<span class="comment">// On Arduino/AVR, this approximation is more than</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;<span class="comment">// 20X faster than floating point sin(x) and cos(x)</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;<span class="preprocessor">#if defined(__AVR__) &amp;&amp; !defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="preprocessor">#define sin8 sin8_avr</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;<span class="preprocessor">#define sin8 sin8_C</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</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="l01309"></a><span class="lineno"> 1309</span>&#160;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;LIB8STATIC uint8_t sin8_avr( uint8_t theta)</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;{</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; uint8_t offset = theta;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="stringliteral">&quot;sbrc %[theta],6 \n\t&quot;</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="stringliteral">&quot;com %[offset] \n\t&quot;</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</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="l01318"></a><span class="lineno"> 1318</span>&#160; );</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; offset &amp;= 0x3F; <span class="comment">// 0..63</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; uint8_t secoffset = offset &amp; 0x0F; <span class="comment">// 0..15</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40) secoffset++;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; uint8_t m16; uint8_t b;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; uint8_t section = offset &gt;&gt; 4; <span class="comment">// 0..3</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; uint8_t s2 = section * 2;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <span class="keyword">const</span> uint8_t* p = b_m16_interleave;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; p += s2;</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; b = *p;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; p++;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; m16 = *p;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; uint8_t mx;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; uint8_t xr1;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="stringliteral">&quot;mul %[m16],%[secoffset] \n\t&quot;</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="stringliteral">&quot;mov %[mx],r0 \n\t&quot;</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="stringliteral">&quot;mov %[xr1],r1 \n\t&quot;</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="stringliteral">&quot;eor r1, r1 \n\t&quot;</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <span class="stringliteral">&quot;swap %[mx] \n\t&quot;</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="stringliteral">&quot;andi %[mx],0x0F \n\t&quot;</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="stringliteral">&quot;swap %[xr1] \n\t&quot;</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="stringliteral">&quot;andi %[xr1], 0xF0 \n\t&quot;</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="stringliteral">&quot;or %[mx], %[xr1] \n\t&quot;</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</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="l01349"></a><span class="lineno"> 1349</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="l01350"></a><span class="lineno"> 1350</span>&#160; );</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; int8_t y = mx + b;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x80 ) y = -y;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; y += 128;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;}</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;LIB8STATIC uint8_t sin8_C( uint8_t theta)</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;{</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; uint8_t offset = theta;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40 ) {</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; offset = (uint8_t)255 - offset;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; }</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; offset &amp;= 0x3F; <span class="comment">// 0..63</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; uint8_t secoffset = offset &amp; 0x0F; <span class="comment">// 0..15</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40) secoffset++;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; uint8_t section = offset &gt;&gt; 4; <span class="comment">// 0..3</span></div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; uint8_t s2 = section * 2;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <span class="keyword">const</span> uint8_t* p = b_m16_interleave;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; p += s2;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; uint8_t b = *p;</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; p++;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; uint8_t m16 = *p;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; uint8_t mx = (m16 * secoffset) &gt;&gt; 4;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; int8_t y = mx + b;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x80 ) y = -y;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; y += 128;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;}</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;LIB8STATIC uint8_t cos8( uint8_t theta)</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;{</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <span class="keywordflow">return</span> sin8( theta + 64);</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;}</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment">// memmove8, memcpy8, and memset8:</span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="comment">// alternatives to memmove, memcpy, and memset that are</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="comment">// faster on AVR than standard avr-libc 1.8</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;<span class="keywordtype">void</span> * memmove8( <span class="keywordtype">void</span> * dst, <span class="keyword">const</span> <span class="keywordtype">void</span> * src, uint16_t num );</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;<span class="keywordtype">void</span> * memcpy8 ( <span class="keywordtype">void</span> * dst, <span class="keyword">const</span> <span class="keywordtype">void</span> * src, uint16_t num ) __attribute__ ((noinline));</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;<span class="keywordtype">void</span> * memset8 ( <span class="keywordtype">void</span> * ptr, uint8_t value, uint16_t num ) __attribute__ ((noinline)) ;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;}</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="comment">// on non-AVR platforms, these names just call standard libc.</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="preprocessor">#define memmove8 memmove</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;<span class="preprocessor">#define memcpy8 memcpy</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;<span class="preprocessor">#define memset8 memset</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;<span class="comment">// linear interpolation, such as could be used for Perlin noise, etc.</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="comment">// A note on the structure of the lerp functions:</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;<span class="comment">// The cases for b&gt;a and b&lt;=a are handled separately for</span></div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;<span class="comment">// speed: without knowing the relative order of a and b,</span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="comment">// the value (a-b) might be overflow the width of a or b,</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="comment">// and have to be promoted to a wider, slower type.</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;<span class="comment">// To avoid that, we separate the two cases, and are able</span></div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;<span class="comment">// to do all the math in the same width as the arguments,</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;<span class="comment">// which is much faster and smaller on AVR.</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;<span class="comment">// linear interpolation between two unsigned 8-bit values,</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;LIB8STATIC uint8_t lerp8by8( uint8_t a, uint8_t b, fract8 frac)</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;{</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; uint8_t result;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; uint8_t delta = b - a;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; uint8_t scaled = scale8( delta, frac);</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; uint8_t delta = a - b;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; uint8_t scaled = scale8( delta, frac);</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; }</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;}</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;<span class="comment">// linear interpolation between two unsigned 16-bit values,</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;<span class="comment">// with 16-bit fraction</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;LIB8STATIC uint16_t lerp16by16( uint16_t a, uint16_t b, fract16 frac)</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;{</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; <span class="keywordflow">if</span>( b &gt; a ) {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; uint32_t scaled = scale16(delta, frac);</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; uint16_t scaled = scale16( delta, frac);</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; }</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;}</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment">// linear interpolation between two unsigned 16-bit values,</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;LIB8STATIC uint16_t lerp16by8( uint16_t a, uint16_t b, fract8 frac)</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;{</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; }</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;}</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="comment">// linear interpolation between two signed 15-bit values,</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;LIB8STATIC int16_t lerp15by8( int16_t a, int16_t b, fract8 frac)</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;{</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; int16_t result;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; }</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;}</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;<span class="comment">// linear interpolation between two signed 15-bit values,</span></div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;LIB8STATIC int16_t lerp15by16( int16_t a, int16_t b, fract16 frac)</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;{</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; int16_t result;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; uint16_t scaled = scale16( delta, frac);</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; uint16_t scaled = scale16( delta, frac);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;}</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;<span class="comment">// map8: map from one full-range 8-bit value into a narrower</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;<span class="comment">// range of 8-bit values, possibly a range of hues.</span></div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;<span class="comment">// E.g. map myValue into a hue in the range blue..purple..pink..red</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;<span class="comment">// hue = map8( myValue, HUE_BLUE, HUE_RED);</span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment">// Combines nicely with the waveform functions (like sin8, etc)</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment">// to produce continuous hue gradients back and forth:</span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;<span class="comment">// hue = map8( sin8( myValue), HUE_BLUE, HUE_RED);</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;<span class="comment">// Mathematically simiar to lerp8by8, but arguments are more</span></div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;<span class="comment">// like Arduino&#39;s &quot;map&quot;; this function is similar to</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;<span class="comment">// map( in, 0, 255, rangeStart, rangeEnd)</span></div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;<span class="comment">// but faster and specifically designed for 8-bit values.</span></div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;LIB8STATIC uint8_t map8( uint8_t in, uint8_t rangeStart, uint8_t rangeEnd)</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;{</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; uint8_t rangeWidth = rangeEnd - rangeStart;</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; uint8_t out = scale8( in, rangeWidth);</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; out += rangeStart;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;}</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;<span class="comment">// easing functions; see http://easings.net</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;<span class="comment">// ease8InOutQuad: 8-bit quadratic ease-in / ease-out function</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;<span class="comment">// Takes around 13 cycles on AVR</span></div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;LIB8STATIC uint8_t ease8InOutQuad( uint8_t i)</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;{</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; uint8_t j = i;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">if</span>( j &amp; 0x80 ) {</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; j = 255 - j;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; }</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; uint8_t jj = scale8( j, (j+1));</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; uint8_t jj2 = jj &lt;&lt; 1;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">if</span>( i &amp; 0x80 ) {</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; jj2 = 255 - jj2;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; }</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="keywordflow">return</span> jj2;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;}</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;<span class="comment">// ease8InOutCubic: 8-bit cubic ease-in / ease-out function</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment">// Takes around 18 cycles on AVR</span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;LIB8STATIC fract8 ease8InOutCubic( fract8 i)</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;{</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; uint8_t ii = scale8_LEAVING_R1_DIRTY( i, i);</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; uint8_t iii = scale8_LEAVING_R1_DIRTY( ii, i);</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; uint16_t r1 = (3 * (uint16_t)(ii)) - ( 2 * (uint16_t)(iii));</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="comment">/* the code generated for the above *&#39;s automatically</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;<span class="comment"> cleans up R1, so there&#39;s no need to explicitily call</span></div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;<span class="comment"> cleanup_R1(); */</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; uint8_t result = r1;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="comment">// if we got &quot;256&quot;, return 255:</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="keywordflow">if</span>( r1 &amp; 0x100 ) {</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; result = 255;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; }</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;}</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;<span class="comment">// ease8InOutApprox: fast, rough 8-bit ease-in/ease-out function</span></div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;<span class="comment">// shaped approximately like &#39;ease8InOutCubic&#39;,</span></div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;<span class="comment">// it&#39;s never off by more than a couple of percent</span></div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;<span class="comment">// from the actual cubic S-curve, and it executes</span></div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;<span class="comment">// more than twice as fast. Use when the cycles</span></div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;<span class="comment">// are more important than visual smoothness.</span></div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;<span class="comment">// Asm version takes around 7 cycles on AVR.</span></div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;<span class="preprocessor">#if EASE8_C == 1</span></div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;LIB8STATIC fract8 ease8InOutApprox( fract8 i)</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;{</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="keywordflow">if</span>( i &lt; 64) {</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; <span class="comment">// start with slope 0.5</span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; i /= 2;</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( i &gt; (255 - 64)) {</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="comment">// end with slope 0.5</span></div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; i = 255 - i;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; i /= 2;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; i = 255 - i;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="comment">// in the middle, use slope 192/128 = 1.5</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; i -= 64;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; i += (i / 2);</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; i += 32;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; }</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;}</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;<span class="preprocessor">#elif EASE8_AVRASM == 1</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;LIB8STATIC uint8_t ease8InOutApprox( fract8 i)</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;{</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="comment">// takes around 7 cycles on AVR</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <span class="stringliteral">&quot; subi %[i], 64 \n\t&quot;</span></div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; <span class="stringliteral">&quot; cpi %[i], 128 \n\t&quot;</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <span class="stringliteral">&quot; brcc Lshift_%= \n\t&quot;</span></div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <span class="comment">// middle case</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <span class="stringliteral">&quot; mov __tmp_reg__, %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="stringliteral">&quot; lsr __tmp_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="stringliteral">&quot; add %[i], __tmp_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="stringliteral">&quot; subi %[i], 224 \n\t&quot;</span></div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="stringliteral">&quot; rjmp Ldone_%= \n\t&quot;</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="comment">// start or end case</span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="stringliteral">&quot;Lshift_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="stringliteral">&quot; lsr %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <span class="stringliteral">&quot; subi %[i], 96 \n\t&quot;</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="stringliteral">&quot;Ldone_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; :</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; );</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">return</span> i;</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;}</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="preprocessor">#error &quot;No implementation for ease8 available.&quot;</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="comment">// triwave8: triangle (sawtooth) wave generator. Useful for</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment">// turning a one-byte ever-increasing value into a</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="comment">// one-byte value that oscillates up and down.</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;<span class="comment">// input output</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;<span class="comment">// 0..127 0..254 (positive slope)</span></div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;<span class="comment">// 128..255 254..0 (negative slope)</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;<span class="comment">// On AVR this function takes just three cycles.</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;LIB8STATIC uint8_t triwave8(uint8_t in)</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;{</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keywordflow">if</span>( in &amp; 0x80) {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; in = 255 - in;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; }</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; uint8_t out = in &lt;&lt; 1;</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;}</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;<span class="comment">// quadwave8 and cubicwave8: S-shaped wave generators (like &#39;sine&#39;).</span></div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;<span class="comment">// Useful for turning a one-byte &#39;counter&#39; value into a</span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;<span class="comment">// one-byte oscillating value that moves smoothly up and down,</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;<span class="comment">// with an &#39;acceleration&#39; and &#39;deceleration&#39; curve.</span></div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;<span class="comment">// These are even faster than &#39;sin8&#39;, and have</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;<span class="comment">// slightly different curve shapes.</span></div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;<span class="comment">// quadwave8: quadratic waveform generator. Spends just a little more</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;<span class="comment">// time at the limits than &#39;sine&#39; does.</span></div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;LIB8STATIC uint8_t quadwave8(uint8_t in)</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;{</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="keywordflow">return</span> ease8InOutQuad( triwave8( in));</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;}</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;<span class="comment">// cubicwave8: cubic waveform generator. Spends visibly more time</span></div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;<span class="comment">// at the limits than &#39;sine&#39; does.</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;LIB8STATIC uint8_t cubicwave8(uint8_t in)</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;{</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="keywordflow">return</span> ease8InOutCubic( triwave8( in));</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;}</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;<span class="comment">// sqrt16: square root for 16-bit integers</span></div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;<span class="comment">// About three times faster and five times smaller</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;<span class="comment">// than Arduino&#39;s general sqrt on AVR.</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;LIB8STATIC uint8_t sqrt16(uint16_t x)</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;{</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="keywordflow">if</span>( x &lt;= 1) {</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; <span class="keywordflow">return</span> x;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; }</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; uint8_t low = 1; <span class="comment">// lower bound</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; uint8_t hi, mid;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; <span class="keywordflow">if</span>( x &gt; 7904) {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; hi = 255;</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; hi = (x &gt;&gt; 5) + 8; <span class="comment">// initial estimate for upper bound</span></div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; }</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; mid = (low + hi) &gt;&gt; 1;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <span class="keywordflow">if</span> ((uint16_t)(mid * mid) &gt; x) {</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; hi = mid - 1;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <span class="keywordflow">if</span>( mid == 255) {</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">return</span> 255;</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; }</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; low = mid + 1;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; }</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; } <span class="keywordflow">while</span> (hi &gt;= low);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="keywordflow">return</span> low - 1;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;}</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"><a class="line" href="classq.html"> 1726</a></span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keywordtype">int</span> F, <span class="keywordtype">int</span> I&gt; <span class="keyword">class </span><a class="code" href="classq.html">q</a> {</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; T i:I;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; T f:F;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <a class="code" href="classq.html">q</a>(<span class="keywordtype">float</span> fx) { i = fx; f = (fx-i) * (1&lt;&lt;F); }</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <a class="code" href="classq.html">q</a>(uint8_t _i, uint8_t _f) {i=_i; f=_f; }</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; uint32_t operator*(uint32_t v) { <span class="keywordflow">return</span> (v*i) + ((v*f)&gt;&gt;F); }</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; uint16_t operator*(uint16_t v) { <span class="keywordflow">return</span> (v*i) + ((v*f)&gt;&gt;F); }</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; int32_t operator*(int32_t v) { <span class="keywordflow">return</span> (v*i) + ((v*f)&gt;&gt;F); }</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; int16_t operator*(int16_t v) { <span class="keywordflow">return</span> (v*i) + ((v*f)&gt;&gt;F); }</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordtype">int</span> operator*(<span class="keywordtype">int</span> v) { <span class="keywordflow">return</span> (v*i) + ((v*f)&gt;&gt;F); }</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;};</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keywordtype">int</span> F, <span class="keywordtype">int</span> I&gt; <span class="keyword">static</span> uint32_t operator*(uint32_t v, <a class="code" href="classq.html">q&lt;T,F,I&gt;</a> &amp; <a class="code" href="classq.html">q</a>) { <span class="keywordflow">return</span> q * v; }</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keywordtype">int</span> F, <span class="keywordtype">int</span> I&gt; <span class="keyword">static</span> uint16_t operator*(uint16_t v, <a class="code" href="classq.html">q&lt;T,F,I&gt;</a> &amp; <a class="code" href="classq.html">q</a>) { <span class="keywordflow">return</span> q * v; }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keywordtype">int</span> F, <span class="keywordtype">int</span> I&gt; <span class="keyword">static</span> int32_t operator*(int32_t v, <a class="code" href="classq.html">q&lt;T,F,I&gt;</a> &amp; <a class="code" href="classq.html">q</a>) { <span class="keywordflow">return</span> q * v; }</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keywordtype">int</span> F, <span class="keywordtype">int</span> I&gt; <span class="keyword">static</span> int16_t operator*(int16_t v, <a class="code" href="classq.html">q&lt;T,F,I&gt;</a> &amp; <a class="code" href="classq.html">q</a>) { <span class="keywordflow">return</span> q * v; }</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keywordtype">int</span> F, <span class="keywordtype">int</span> I&gt; <span class="keyword">static</span> <span class="keywordtype">int</span> operator*(<span class="keywordtype">int</span> v, <a class="code" href="classq.html">q&lt;T,F,I&gt;</a> &amp; <a class="code" href="classq.html">q</a>) { <span class="keywordflow">return</span> q * v; }</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classq.html">q&lt;uint8_t, 4,4&gt;</a> <a class="code" href="classq.html">q44</a>;</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classq.html">q&lt;uint8_t, 6,2&gt;</a> <a class="code" href="classq.html">q62</a>;</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classq.html">q&lt;uint16_t, 8,8&gt;</a> <a class="code" href="classq.html">q88</a>;</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classq.html">q&lt;uint16_t, 12,4&gt;</a> <a class="code" href="classq.html">q124</a>;</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;<span class="comment">// Beat generators - These functions produce waves at a given</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;<span class="comment">// number of &#39;beats per minute&#39;. Internally, they use</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;<span class="comment">// the Arduino function &#39;millis&#39; to track elapsed time.</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;<span class="comment">// Accuracy is a bit better than one part in a thousand.</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;<span class="comment">// beat8( BPM ) returns an 8-bit value that cycles &#39;BPM&#39; times</span></div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;<span class="comment">// per minute, rising from 0 to 255, resetting to zero,</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;<span class="comment">// rising up again, etc.. The output of this function</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="comment">// is suitable for feeding directly into sin8, and cos8,</span></div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="comment">// triwave8, quadwave8, and cubicwave8.</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="comment">// beat16( BPM ) returns a 16-bit value that cycles &#39;BPM&#39; times</span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;<span class="comment">// per minute, rising from 0 to 65535, resetting to zero,</span></div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;<span class="comment">// rising up again, etc. The output of this function is</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="comment">// suitable for feeding directly into sin16 and cos16.</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;<span class="comment">// beatsin8( BPM, uint8_t low, uint8_t high) returns an 8-bit value that</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;<span class="comment">// rises and falls in a sine wave, &#39;BPM&#39; times per minute,</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment">// between the values of &#39;low&#39; and &#39;high&#39;.</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment">// beatsin16( BPM, uint16_t low, uint16_t high) returns a 16-bit value</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;<span class="comment">// that rises and falls in a sine wave, &#39;BPM&#39; times per</span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment">// minute, between the values of &#39;low&#39; and &#39;high&#39;.</span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment">// BPM can be supplied two ways. The simpler way of specifying BPM is as</span></div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment">// a simple 8-bit integer from 1-255, (e.g., &quot;120&quot;).</span></div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment">// The more sophisticated way of specifying BPM allows for fractional</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment">// &quot;Q8.8&quot; fixed point number (an &#39;accum88&#39;) with an 8-bit integer part and</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;<span class="comment">// an 8-bit fractional part. The easiest way to construct this is to multiply</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;<span class="comment">// a floating point BPM value (e.g. 120.3) by 256, (e.g. resulting in 30796</span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;<span class="comment">// in this case), and pass that as the 16-bit BPM argument.</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;<span class="comment">// Originally designed to make an entire animation project pulse with brightness.</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;<span class="comment">// For that effect, add this line just above your existing call to &quot;FastLED.show()&quot;:</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;<span class="comment">// uint8_t bright = beatsin8( 60 /*BPM*/, 192 /*dimmest*/, 255 /*brightest*/ ));</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;<span class="comment">// FastLED.setBrightness( bright );</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;<span class="comment">// FastLED.show();</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;<span class="comment">// The entire animation will now pulse between brightness 192 and 255 once per second.</span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;<span class="comment">// The beat generators need access to a millisecond counter.</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;<span class="comment">// On Arduino, this is &quot;millis()&quot;. On other platforms, you&#39;ll</span></div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;<span class="comment">// need to provide a function with this signature:</span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;<span class="comment">// uint32_t get_millisecond_timer();</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;<span class="comment">// that provides similar functionality.</span></div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;<span class="comment">// You can also force use of the get_millisecond_timer function</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;<span class="comment">// by #defining USE_GET_MILLISECOND_TIMER.</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="preprocessor">#if defined(ARDUINO) &amp;&amp; !defined(USE_GET_MILLISECOND_TIMER)</span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="comment">// Forward declaration of Arduino function &#39;millis&#39;.</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;uint32_t millis();</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;<span class="preprocessor">#define GET_MILLIS (millis())</span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;uint32_t get_millisecond_timer();</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;<span class="preprocessor">#define GET_MILLIS (get_millisecond_timer())</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;<span class="comment">// beat16 generates a 16-bit &#39;sawtooth&#39; wave at a given BPM</span></div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;LIB8STATIC uint16_t beat16( accum88 beats_per_minute, uint32_t timebase = 0)</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;{</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; <span class="comment">// Convert simple 8-bit BPM&#39;s to full Q8.8 accum88&#39;s if needed</span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; <span class="keywordflow">if</span>( beats_per_minute &lt; 256) beats_per_minute &lt;&lt;= 8;</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; <span class="comment">// BPM is &#39;beats per minute&#39;, or &#39;beats per 60000ms&#39;.</span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <span class="comment">// To avoid using the (slower) division operator, we</span></div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="comment">// want to convert &#39;beats per 60000ms&#39; to &#39;beats per 65536ms&#39;,</span></div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; <span class="comment">// and then use a simple, fast bit-shift to divide by 65536.</span></div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; <span class="comment">// The ratio 65536:60000 is 279.620266667:256; we&#39;ll call it 280:256.</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; <span class="comment">// The conversion is accurate to about 0.05%, more or less,</span></div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; <span class="comment">// e.g. if you ask for &quot;120 BPM&quot;, you&#39;ll get about &quot;119.93&quot;.</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; <span class="comment">// If you need more precision than that, you can specify a</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; <span class="comment">// sixteen-bit BPM value in Q8.8 fixed-point (an &#39;accum88&#39;).</span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <span class="keywordflow">return</span> (((GET_MILLIS) - timebase) * beats_per_minute * 280) &gt;&gt; 16;</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;}</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;<span class="comment">// beat8 generates an 8-bit &#39;sawtooth&#39; wave at a given BPM</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;LIB8STATIC uint8_t beat8( accum88 beats_per_minute, uint32_t timebase = 0)</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;{</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; <span class="keywordflow">return</span> beat16( beats_per_minute, timebase) &gt;&gt; 8;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;}</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<span class="comment">// beatsin16 generates a 16-bit sine wave at a given BPM,</span></div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;LIB8STATIC uint16_t beatsin16( accum88 beats_per_minute, uint16_t lowest = 0, uint16_t highest = 65535,</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; uint32_t timebase = 0, uint16_t phase_offset = 0)</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;{</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; uint16_t beat = beat16( beats_per_minute, timebase);</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; uint16_t beatsin = (sin16( beat + phase_offset) + 32768);</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; uint16_t rangewidth = highest - lowest;</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; uint16_t scaledbeat = scale16( beatsin, rangewidth);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; uint16_t result = lowest + scaledbeat;</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;}</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;<span class="comment">// beatsin8 generates an 8-bit sine wave at a given BPM,</span></div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;LIB8STATIC uint8_t beatsin8( accum88 beats_per_minute, uint8_t lowest = 0, uint8_t highest = 255,</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; uint32_t timebase = 0, uint8_t phase_offset = 0)</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;{</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; uint8_t beat = beat8( beats_per_minute, timebase);</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; uint8_t beatsin = sin8( beat + phase_offset);</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; uint8_t rangewidth = highest - lowest;</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; uint8_t scaledbeat = scale8( beatsin, rangewidth);</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; uint8_t result = lowest + scaledbeat;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;}</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="union_i_e_e_e754binary32__t_html"><div class="ttname"><a href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></div><div class="ttdef"><b>Definition:</b> lib8tion.h:330</div></div>
+<div class="ttc" id="classq_html"><div class="ttname"><a href="classq.html">q</a></div><div class="ttdef"><b>Definition:</b> lib8tion.h:1726</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/md__r_e_a_d_m_e.html b/docs/3.1/md__r_e_a_d_m_e.html
new file mode 100644
index 00000000..79b08a23
--- /dev/null
+++ b/docs/3.1/md__r_e_a_d_m_e.html
@@ -0,0 +1,143 @@
+<!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.8"/>
+<title>FastLED: README</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">README </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>IMPORTANT NOTE: If you are building for AVR based systems, please do not use any version of the arduino IDE 1.5.7 or greater yet. It messes with some of the asm output which will cause you problems. The real issue is the compiler version, GCC 4.8.x introduces incompatabilities with the assembly code FastLED uses on the avr platfrom. Note that some versions of Arduino 1.0.5, notably some linux versions, use gcc 4.8.x.</p>
+<h1>FastLED 3.0 </h1>
+<p>IMPORTANT NOTE: If you are building for AVR based systems, please do not use any version of the arduino IDE 1.5.7 or later yet. It messes with some of the asm output which will cause you problems.</p>
+<p>This is a library for easily &amp; efficiently controlling a wide variety of LED chipsets, like the ones sold by adafruit (Neopixel, LPD8806), Sparkfun (WS2801), and aliexpress. In addition to writing to the leds, this library also includes a number of functions for high-performing 8bit math for manipulating your RGB values, as well as low level classes for abstracting out access to pins and SPI hardware, while still keeping things as fast as possible.</p>
+<p>Quick note for people installing from GitHub repo zips, rename the folder FastLED before copying it to your Arduino/libraries folder. Github likes putting -branchname into the name of the folder, which unfortunately, makes Arduino cranky!</p>
+<p>We have multiple goals with this library:</p>
+<ul>
+<li>Quick start for new developers - hook up your leds and go, no need to think about specifics of the led chipsets being used</li>
+<li>Zero pain switching LED chipsets - you get some new leds that the library supports, just change the definition of LEDs you're using, et. voila! Your code is running with the new leds.</li>
+<li>High performance - with features like zero cost global brightness scaling, high performance 8-bit math for RGB manipulation, and some of the fastest bit-bang'd SPI support around, FastLED wants to keep as many CPU cycles available for your led patterns as possible</li>
+</ul>
+<h2>Getting help</h2>
+<p>If you need help with using the library, please consider going to the google+ community first, which is at <a href="http://fastled.io/+">http://fastled.io/+</a> - there are hundreds of people in that group and many times you will get a quicker answer to your question there, as you will be likely to run into other people who have had the same issue. If you run into bugs with the library (compilation failures, the library doing the wrong thing), or if you'd like to request that we support a particular platform or LED chipset, then please open an issue at <a href="http://fastled.io/issues">http://fastled.io/issues</a> and we will try to figure out what is going wrong.</p>
+<h2>Simple example</h2>
+<p>How quickly can you get up and running with the library? Here's a simple blink program: </p><pre class="fragment">#include "FastLED.h"
+#define NUM_LEDS 60
+CRGB leds[NUM_LEDS];
+void setup() { FastLED.addLeds&lt;NEOPIXEL, 6&gt;(leds, NUM_LEDS); }
+void loop() {
+ leds[0] = CRGB::White; FastLED.show(); delay(30);
+ leds[0] = CRGB::Black; FastLED.show(); delay(30);
+}
+</pre><h2>Supported LED chipsets</h2>
+<p>Here's a list of all the LED chipsets are supported. More details on the led chipsets are included <em>TODO: Link to wiki page</em></p>
+<ul>
+<li>Adafruit's Neopixel - aka the <a class="el" href="class_w_s2812_b.html">WS2812B</a> (also WS2811/WS2812, also suppored in lo-speed mode) - a 3 wire addressable led chipset</li>
+<li>TM1809/4 - 3 wire chipset, cheaply available on aliexpress.com</li>
+<li><a class="el" href="class_t_m1803.html">TM1803</a> - 3 wire chipset, sold by radio shack</li>
+<li><a class="el" href="class_u_c_s1903.html">UCS1903</a> - another 3 wire led chipset, cheap</li>
+<li><a class="el" href="class_g_w6205.html">GW6205</a> - another 3 wire led chipset</li>
+<li>LPD8806 - SPI based chpiset, very high speed</li>
+<li>WS2801 - SPI based chipset, cheap and widely available</li>
+<li>SM16716 - SPI based chipset</li>
+<li>APA102 - SPI based chipset</li>
+<li>P9813 - aka Cool Neon's Total Control Lighting</li>
+<li>DMX - send rgb data out over DMX using arduino DMX libraries</li>
+<li>SmartMatrix panels - needs the SmartMatrix library - <a href="https://github.com/pixelmatix/SmartMatrix">https://github.com/pixelmatix/SmartMatrix</a></li>
+</ul>
+<p>LPD6803, HL1606, and "595"-style shift registers are no longer supported by the library. The older Version 1 of the library ("FastSPI_LED") has support for these, but is missing many of the advanced features of current versions and is no longer being maintained.</p>
+<h2>Supported platforms</h2>
+<p>Right now the library is supported on a variety of arduino compatable platforms. If it's ARM or AVR and uses the arduino software (or a modified version of it to build) then it is likely supported. Note that we have a long list of upcoming platforms to support, so if you don't see what you're looking for here, ask, it may be on the roadmap (or may already be supported). N.B. at the moment we are only supporting the stock compilers that ship with the arduino software. Support for upgraded compilers, as well as using AVR studio and skipping the arduino entirely, should be coming in a near future release.</p>
+<ul>
+<li>Arduino &amp; compatibles - straight up arduino devices, uno, duo, leonardo, mega, nano, etc...</li>
+<li>Adafruit Trinket &amp; Gemma - Trinket Pro may be supported, but haven't tested to confirm yet</li>
+<li>Teensy 2, Teensy++ 2, Teensy 3.1 - arduino compataible from pjrc.com with some extra goodies (note the teensy 3 is ARM, not AVR!)</li>
+<li>Arduino Due and the digistump DigiX</li>
+</ul>
+<p>What types of platforms are we thinking about supporting in the future? Here's a short list: RFDuino, SparkCore, MSP430, ChipKit32, Maple, Beagleboard</p>
+<h2>What about that name?</h2>
+<p>Wait, what happend to FastSPI_LED and FastSPI_LED2? The library was initially named FastSPI_LED because it was focused on very fast and efficient SPI access. However, since then, the library has expanded to support a number of LED chipsets that don't use SPI, as well as a number of math and utility functions for LED processing across the board. We decided that the name FastLED more accurately represents the totality of what the library provides, everything fast, for LEDs.</p>
+<h2>For more information</h2>
+<p>Check out the official site <a href="http://fastled.io">http://fastled.io</a> for links to documentation, issues, and news</p>
+<p><em>TODO</em> - get candy </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/md__t_o_d_o.html b/docs/3.1/md__t_o_d_o.html
new file mode 100644
index 00000000..a248c46b
--- /dev/null
+++ b/docs/3.1/md__t_o_d_o.html
@@ -0,0 +1,106 @@
+<!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.8"/>
+<title>FastLED: TODO</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">TODO </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><ul>
+<li>[ ] Convert FPS/Hz to rolling computed values</li>
+<li>[ ] Centralize PixelController/MultiPixelController setup/initialization</li>
+<li>[ ] make <em>everything</em> use pixel controller for everything (except AVR clockless, see below)</li>
+<li>[ ] Modify <a class="el" href="struct_pixel_controller.html">PixelController</a> to take a CPalette256 (pre-adjusted for brightness)</li>
+<li>[ ] Expand interrupt safety to due (don't reset tick timer, use relative countdown values, account for rollover)</li>
+<li>[ ] NRF51822 port for rfduino &amp; red bear</li>
+<li>[ ] Re-test <a class="el" href="class_l_p_d1886.html">LPD1886</a></li>
+<li>[ ] Improve performance of <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a></li>
+<li>[ ] Re-arrange header files into platform/architecture specific subdirectories</li>
+<li>[ ] Make sure all platforms have Pin versions of FastPin classes for dynamic pin access?</li>
+<li>[ ] Modify SPI classes to acquire/release SPI hardware resources on starting/finishing writing led data</li>
+<li>[ ] Extend parallelization to 24-30 way on due, 20 way on teensy3.1?</li>
+<li>[ ] Arduino Yun support?</li>
+<li>[ ] GCC 4.8.x issues </li>
+</ul>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/md_release_notes.html b/docs/3.1/md_release_notes.html
new file mode 100644
index 00000000..074eb546
--- /dev/null
+++ b/docs/3.1/md_release_notes.html
@@ -0,0 +1,203 @@
+<!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.8"/>
+<title>FastLED: FastLED3.0</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">FastLED3.0 </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><ul>
+<li>Added support for the following platforms:<ul>
+<li>Arduino due</li>
+<li>Teensy 3.1</li>
+</ul>
+</li>
+<li>Added the following LED chipsets:<ul>
+<li>USC1903_400</li>
+<li><a class="el" href="class_g_w6205.html">GW6205</a> / <a class="el" href="class_g_w6205__400.html">GW6205_400</a></li>
+<li>APA102</li>
+<li><a class="el" href="class_a_p_a104.html">APA104</a></li>
+<li><a class="el" href="class_l_p_d1886.html">LPD1886</a></li>
+<li>P9813</li>
+<li>SmartMatrix</li>
+</ul>
+</li>
+<li>Added multiple examples:<ul>
+<li>ColorPalette - show off the color palette code</li>
+<li>ColorTemperature - show off the color correction code</li>
+<li>Fire2012</li>
+<li>Fire2012WithPalette</li>
+<li>Multiple led controller examples</li>
+<li>Noise</li>
+<li>NoisePlayground</li>
+<li>NoisePlusPalette</li>
+<li>SmartMatrix - show off SmartMatrix support</li>
+<li>XYMatrix - show how to use a mtrix layout of leds</li>
+</ul>
+</li>
+<li>Added color correction</li>
+<li>Added dithering</li>
+<li>Added power management support</li>
+<li>Added support for color palettes</li>
+<li>Added easing functions</li>
+<li>Added fast trig functions</li>
+<li>Added simplex noise functions</li>
+<li>Added color utility functions</li>
+<li>Fixed DMXSERIAL/DMXSIMPLE support</li>
+<li>Timing adjustments for existing SPI chipsets</li>
+<li>Cleaned up the code layout to make platform support easier</li>
+<li>Many bug fixes</li>
+<li>A number of performance/memory improvements</li>
+<li>Remove Squant (takes up space!)</li>
+</ul>
+<h1>FastLED2 </h1>
+<h2>Full release of the library</h2>
+<h2>Release Candidate 6</h2>
+<ul>
+<li>Rename library, offically, to FastLED, move to github</li>
+<li>Update keywords with all the new stuffs</li>
+</ul>
+<h2>Release Candidate 5</h2>
+<ul>
+<li>Gemma and Trinket: supported except for global "setBrightness"</li>
+</ul>
+<h2>Release Candidate 4</h2>
+<ul>
+<li>Added <a class="el" href="class_n_e_o_p_i_x_e_l.html">NEOPIXEL</a> as a synonym for <a class="el" href="class_w_s2811.html">WS2811</a></li>
+<li>Fix WS2811/WS2812B timings, bring it in line to exactly 1.25ns/bit.</li>
+<li>Fix handling of constant color definitions (damn you, gcc!)</li>
+</ul>
+<h2>Release Candidate 3</h2>
+<ul>
+<li>Fixed bug when Clock and Data were on the same port</li>
+<li>Added ability to set pixel color directly from HSV</li>
+<li>Added ability to retrieve current random16 seed</li>
+</ul>
+<h2>Release Candidate 2</h2>
+<ul>
+<li>mostly bug fixes</li>
+<li>Fix SPI macro definitions for latest teensy3 software update</li>
+<li>Teensy 2 compilation fix</li>
+<li>hsv2rgb_rainbow performance fix</li>
+</ul>
+<h2>Release Candidate 1</h2>
+<ul>
+<li>New unified/simplified API for adding/using controllers</li>
+<li>fleshout clockless chip support</li>
+<li>add hsv (spectrum and rainbow style colors)</li>
+<li>high speed memory management operations</li>
+<li>library for interpolation/easing functions</li>
+<li>various api changes, addition of clear and showColor functions</li>
+<li>scale value applied to all show methods</li>
+<li>bug fixes for SM16716</li>
+<li>performance improvements, lpd8806 exceeds 22Mbit now</li>
+<li>hardware def fixes</li>
+<li>allow alternate rgb color orderings</li>
+<li>high speed math methods</li>
+<li>rich <a class="el" href="struct_c_r_g_b.html">CRGB</a> structure</li>
+</ul>
+<h2>Preview 3</h2>
+<ul>
+<li>True hardware SPI support for teensy (up to 20Mbit output!)</li>
+<li>Minor bug fixes/tweaks</li>
+</ul>
+<h2>Preview 2</h2>
+<ul>
+<li>Rename pin class to FastPin</li>
+<li>Replace latch with select, more accurate description of what it does</li>
+<li>Enforce intra-frame timing for ws2801s</li>
+<li>SM16716 support</li>
+<li>Add #define FAST_SPI_INTERRUPTS_WRITE_PINS to make sure world is ok w/interrupts and SPI</li>
+<li>Add #define FASTLED_FORCE_SOFTWARE_SPI for those times when you absolutely don't want to use hardware SPI, ev en if you're using the hardware SPI pins</li>
+<li>Add pin definitions for the arduino megas - should fix ws2811 support</li>
+<li>Add pin definitions for the leonardo - should fix spi support and pin mappings</li>
+<li>Add warnings when pin definitions are missing</li>
+<li>Added google+ community for fastspi users - <a href="https://plus.google.com/communities/109127054924227823508">https://plus.google.com/communities/109127054924227823508</a> <h1>Add pin definitions for Teensy++ 2.0</h1>
+</li>
+</ul>
+<h2>Preview 1</h2>
+<ul>
+<li>Initial release </li>
+</ul>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/nav_f.png b/docs/3.1/nav_f.png
new file mode 100644
index 00000000..72a58a52
--- /dev/null
+++ b/docs/3.1/nav_f.png
Binary files differ
diff --git a/docs/3.1/nav_g.png b/docs/3.1/nav_g.png
new file mode 100644
index 00000000..2093a237
--- /dev/null
+++ b/docs/3.1/nav_g.png
Binary files differ
diff --git a/docs/3.1/nav_h.png b/docs/3.1/nav_h.png
new file mode 100644
index 00000000..33389b10
--- /dev/null
+++ b/docs/3.1/nav_h.png
Binary files differ
diff --git a/docs/3.1/noise_8h_source.html b/docs/3.1/noise_8h_source.html
new file mode 100644
index 00000000..2b04d216
--- /dev/null
+++ b/docs/3.1/noise_8h_source.html
@@ -0,0 +1,211 @@
+<!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.8"/>
+<title>FastLED: noise.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">noise.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_NOISE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_NOISE_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;<span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="keyword">class </span>CFastNoise16 {</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; CFastNoise16 &amp;setOrigin(uint32_t x, uint32_t y, uint32_t z);</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; CFastNoise16 &amp;setOrigin(uint32_t x, uint32_t y);</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; CFastNoise16 &amp;setOrigin(uint32_t x);</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; uint32_t getX();</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; uint32_t getY();</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; uint32_t getZ();</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; uint32_t getTime();</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; uint32_t getOrigin(uint32_t &amp; x, uint32_t &amp; y, uint32_t &amp; z);</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; uint32_t getOrigin(uint32_t &amp; x, uint32_t &amp; y);</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; uint32_t getOrigin(uint32_t &amp; x);</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; CFastNoise16 &amp;advance(int32_t x, int32_t y, int32_t z);</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; CFastNoise16 &amp;advance(int32_t x, int32_t y;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; CFastNoise16 &amp;advance(int32_t x);</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; CFastNoise16 &amp;advanceTime(int32_t t);</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; CFastNoise16 &amp;setScale(int32_t x_scale, int32_t y_scale, int32_t z_scale);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; CFastNoise16 &amp;setScale(int32_t x_scale, int32_t y_scale);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; CFastNoise16 &amp;setScale(int32_t x_scale);</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; int32_t getScaleX();</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; int32_t getScaleY();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; int32_t getScaleZ();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> getScale(int32_t &amp; x, int32_t &amp; y, int32_t &amp; z);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> getScale(int32_t &amp; x, int32_t &amp; y);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> getScale(int32_t &amp; x);</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; CFastNoise16 &amp;setAmplitude(fract16 amplitude);</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; CFastNoise16 &amp;setFrequency(<a class="code" href="classq.html">q88</a> frequency);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; CFastNoise16 &amp;setTime(uint32_t time);</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; CFastNoise16 &amp;setOctaves(<span class="keywordtype">int</span> octaves);</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; CFastNoise16 &amp;setOctaveBlur(<span class="keywordtype">bool</span> blurOctaves);</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="keywordtype">void</span> getNoise(uint32_t x, uint32_t y, uint32_t z);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> getNoise(uint32_t x, uint32_t y);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">void</span> getNoise(uint32_t x);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> fillNoise(uint16_t *pData, <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">void</span> fillNoise(uint16_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">void</span> fillNoise(uint16_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> depth);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">void</span> fillNoise(uint8_t *pData, <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> fillNoise(uint8_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">void</span> fillNoise(uint8_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> depth);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">// 16 bit, fixed point implementation of perlin&#39;s Simplex Noise. Coordinates are</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// 16.16 fixed point values, 32 bit integers with integral coordinates in the high 16</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">// bits and fractional in the low 16 bits, and the function takes 1d, 2d, and 3d coordinate</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">// values. These functions are scaled to return 0-65535</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x, uint32_t y, uint32_t z);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x, uint32_t y);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// 16 bit raw versions of the noise functions. These values are not scaled/altered and have</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// output values roughly in the range (-18k,18k)</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">extern</span> int16_t inoise16_raw(uint32_t x, uint32_t y, uint32_t z);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">extern</span> int16_t inoise16_raw(uint32_t x, uint32_t y);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">extern</span> int16_t inoise16_raw(uint32_t x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// 8 bit, fixed point implementation of perlin&#39;s Simplex Noise. Coordinates are</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// 8.8 fixed point values, 16 bit integers with integral coordinates in the high 8</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// bits and fractional in the low 8 bits, and the function takes 1d, 2d, and 3d coordinate</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// values. These functions are scaled to return 0-255</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x, uint16_t y, uint16_t z);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x, uint16_t y);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">// 8 bit raw versions of the noise functions. These values are not scaled/altered and have</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">// output values roughly in the range (-70,70)</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x, uint16_t y, uint16_t z);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x, uint16_t y);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">// Raw noise fill functions - fill into a 1d or 2d array of 8-bit values using either 8-bit noise or 16-bit noise</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">// functions.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keywordtype">void</span> fill_raw_noise8(uint8_t *pData, uint8_t num_points, uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale, uint16_t time);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="keywordtype">void</span> fill_raw_noise16into8(uint8_t *pData, uint8_t num_points, uint8_t octaves, uint32_t x, <span class="keywordtype">int</span> scale, uint32_t time);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keywordtype">void</span> fill_raw_2dnoise8(uint8_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scalex, uint16_t y, <span class="keywordtype">int</span> scaley, uint16_t time);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keywordtype">void</span> fill_raw_2dnoise16into8(uint8_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, uint8_t octaves, uint32_t x, <span class="keywordtype">int</span> scalex, uint32_t y, <span class="keywordtype">int</span> scaley, uint32_t time);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keywordtype">void</span> fill_raw_2dnoise16(uint16_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, uint8_t octaves, <a class="code" href="classq.html">q88</a> freq88, fract16 amplitude, <span class="keywordtype">int</span> skip, uint32_t x, <span class="keywordtype">int</span> scalex, uint32_t y, <span class="keywordtype">int</span> scaley, uint32_t time);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keywordtype">void</span> fill_raw_2dnoise16into8(uint8_t *pData, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, uint8_t octaves, <a class="code" href="classq.html">q44</a> freq44, fract8 amplitude, <span class="keywordtype">int</span> skip, uint32_t x, <span class="keywordtype">int</span> scalex, uint32_t y, <span class="keywordtype">int</span> scaley, uint32_t time);</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">// fill functions to fill leds with values based on noise functions. These functions use the fill_raw_* functions as appropriate.</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keywordtype">void</span> fill_noise8(<a class="code" href="struct_c_r_g_b.html">CRGB</a> *leds, <span class="keywordtype">int</span> num_leds,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_scale,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; uint16_t time);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keywordtype">void</span> fill_noise16(<a class="code" href="struct_c_r_g_b.html">CRGB</a> *leds, <span class="keywordtype">int</span> num_leds,</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_scale,</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; uint16_t time);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keywordtype">void</span> fill_2dnoise8(<a class="code" href="struct_c_r_g_b.html">CRGB</a> *leds, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">bool</span> serpentine,</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> xscale, uint16_t y, <span class="keywordtype">int</span> yscale, uint16_t time,</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_xscale, uint16_t hue_y, uint16_t hue_yscale,uint16_t hue_time,<span class="keywordtype">bool</span> blend);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="keywordtype">void</span> fill_2dnoise16(<a class="code" href="struct_c_r_g_b.html">CRGB</a> *leds, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">bool</span> serpentine,</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; uint8_t octaves, uint32_t x, <span class="keywordtype">int</span> xscale, uint32_t y, <span class="keywordtype">int</span> yscale, uint32_t time,</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_xscale, uint16_t hue_y, uint16_t hue_yscale,uint16_t hue_time, <span class="keywordtype">bool</span> blend, uint16_t hue_shift=0);</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">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="classq_html"><div class="ttname"><a href="classq.html">q</a></div><div class="ttdef"><b>Definition:</b> lib8tion.h:1726</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/open.png b/docs/3.1/open.png
new file mode 100644
index 00000000..30f75c7e
--- /dev/null
+++ b/docs/3.1/open.png
Binary files differ
diff --git a/docs/3.1/pages.html b/docs/3.1/pages.html
new file mode 100644
index 00000000..a2be0cfa
--- /dev/null
+++ b/docs/3.1/pages.html
@@ -0,0 +1,97 @@
+<!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.8"/>
+<title>FastLED: Related Pages</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="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)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Related Pages</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__r_e_a_d_m_e.html" target="_self">README</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_release_notes.html" target="_self">FastLED3.0</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__t_o_d_o.html" target="_self">TODO</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/pixeltypes_8h_source.html b/docs/3.1/pixeltypes_8h_source.html
new file mode 100644
index 00000000..59c8cb1a
--- /dev/null
+++ b/docs/3.1/pixeltypes_8h_source.html
@@ -0,0 +1,825 @@
+<!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.8"/>
+<title>FastLED: pixeltypes.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">pixeltypes.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_PIXELS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_PIXELS_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;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &quot;lib8tion.h&quot;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &quot;color.h&quot;</span></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;<span class="keyword">struct </span><a class="code" href="struct_c_r_g_b.html">CRGB</a>;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">struct </span><a class="code" href="struct_c_h_s_v.html">CHSV</a>;</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// Forward declaration of hsv2rgb_rainbow here,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// to avoid circular dependencies.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> hsv2rgb_rainbow( <span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; hsv, <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb);</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;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="struct_c_h_s_v.html"> 16</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_c_h_s_v.html">CHSV</a> {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; uint8_t hue;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; uint8_t h; };</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; uint8_t saturation;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; uint8_t sat;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; uint8_t s; };</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; uint8_t value;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; uint8_t val;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; uint8_t v; };</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; };</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; uint8_t raw[3];</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; };</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// default values are UNITIALIZED</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>() __attribute__((always_inline))</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// allow construction from H, S, V</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>( uint8_t ih, uint8_t is, uint8_t iv) __attribute__((always_inline))</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; : h(ih), s(is), v(iv)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// allow copy construction</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>(<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; rhs) __attribute__((always_inline))</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; h = rhs.h;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; s = rhs.s;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; v = rhs.v;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator= (<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; rhs) __attribute__((always_inline))</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; h = rhs.h;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; s = rhs.s;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; v = rhs.v;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; setHSV(uint8_t ih, uint8_t is, uint8_t iv) __attribute__((always_inline))</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; h = ih;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; s = is;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; v = iv;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;};</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; HUE_RED = 0,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; HUE_ORANGE = 32,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; HUE_YELLOW = 64,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; HUE_GREEN = 96,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; HUE_AQUA = 128,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; HUE_BLUE = 160,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; HUE_PURPLE = 192,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; HUE_PINK = 224</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;} HSVHue;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="struct_c_r_g_b.html"> 81</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_c_r_g_b.html">CRGB</a> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; uint8_t r;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; uint8_t red;</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="keyword">union </span>{</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; uint8_t g;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; uint8_t green;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; };</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; uint8_t b;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; uint8_t blue;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; };</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; };</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; uint8_t raw[3];</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; };</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">inline</span> uint8_t&amp; operator[] (uint8_t x) __attribute__((always_inline))</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> raw[x];</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> uint8_t&amp; operator[] (uint8_t x) <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> raw[x];</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; <span class="comment">// default values are UNINITIALIZED</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>() __attribute__((always_inline))</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// allow construction from R, G, B</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( uint8_t ir, uint8_t ig, uint8_t ib) __attribute__((always_inline))</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; : r(ir), g(ig), b(ib)</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="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// allow construction from 32-bit (really 24-bit) bit 0xRRGGBB color code</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( uint32_t colorcode) __attribute__((always_inline))</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; : r((colorcode &gt;&gt; 16) &amp; 0xFF), g((colorcode &gt;&gt; 8) &amp; 0xFF), b((colorcode &gt;&gt; 0) &amp; 0xFF)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( LEDColorCorrection colorcode) __attribute__((always_inline))</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; : r((colorcode &gt;&gt; 16) &amp; 0xFF), g((colorcode &gt;&gt; 8) &amp; 0xFF), b((colorcode &gt;&gt; 0) &amp; 0xFF)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( ColorTemperature colorcode) __attribute__((always_inline))</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; : r((colorcode &gt;&gt; 16) &amp; 0xFF), g((colorcode &gt;&gt; 8) &amp; 0xFF), b((colorcode &gt;&gt; 0) &amp; 0xFF)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// allow copy construction</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>(<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs) __attribute__((always_inline))</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; r = rhs.r;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; g = rhs.g;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; b = rhs.b;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// allow construction from HSV color</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>(<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; rhs) __attribute__((always_inline))</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; hsv2rgb_rainbow( rhs, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// allow assignment from one RGB struct to another</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator= (<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs) __attribute__((always_inline))</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; r = rhs.r;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; g = rhs.g;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; b = rhs.b;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// allow assignment from 32-bit (really 24-bit) 0xRRGGBB color code</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator= (<span class="keyword">const</span> uint32_t colorcode) __attribute__((always_inline))</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; r = (colorcode &gt;&gt; 16) &amp; 0xFF;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; g = (colorcode &gt;&gt; 8) &amp; 0xFF;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; b = (colorcode &gt;&gt; 0) &amp; 0xFF;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// allow assignment from R, G, and B</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; setRGB (uint8_t nr, uint8_t ng, uint8_t nb) __attribute__((always_inline))</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; r = nr;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; g = ng;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; b = nb;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// allow assignment from H, S, and V</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; setHSV (uint8_t hue, uint8_t sat, uint8_t val) __attribute__((always_inline))</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; hsv2rgb_rainbow( <a class="code" href="struct_c_h_s_v.html">CHSV</a>(hue, sat, val), *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">// allow assignment from just a Hue, saturation and value automatically at max.</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; setHue (uint8_t hue) __attribute__((always_inline))</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; hsv2rgb_rainbow( <a class="code" href="struct_c_h_s_v.html">CHSV</a>(hue, 255, 255), *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// allow assignment from HSV color</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator= (<span class="keyword">const</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; rhs) __attribute__((always_inline))</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; hsv2rgb_rainbow( rhs, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// allow assignment from 32-bit (really 24-bit) 0xRRGGBB color code</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; setColorCode (uint32_t colorcode) __attribute__((always_inline))</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; r = (colorcode &gt;&gt; 16) &amp; 0xFF;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; g = (colorcode &gt;&gt; 8) &amp; 0xFF;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; b = (colorcode &gt;&gt; 0) &amp; 0xFF;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// add one RGB to another, saturating at 0xFF for each channel</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator+= (<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs )</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; r = qadd8( r, rhs.r);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; g = qadd8( g, rhs.g);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; b = qadd8( b, rhs.b);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// add a contstant to each channel, saturating at 0xFF</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// this is NOT an operator+= overload because the compiler</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// can&#39;t usefully decide when it&#39;s being passed a 32-bit</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// constant (e.g. CRGB::Red) and an 8-bit one (CRGB::Blue)</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; addToRGB (uint8_t d )</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; r = qadd8( r, d);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; g = qadd8( g, d);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; b = qadd8( b, d);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// subtract one RGB from another, saturating at 0x00 for each channel</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator-= (<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs )</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; r = qsub8( r, rhs.r);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; g = qsub8( g, rhs.g);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; b = qsub8( b, rhs.b);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// subtract a constant from each channel, saturating at 0x00</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// this is NOT an operator+= overload because the compiler</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// can&#39;t usefully decide when it&#39;s being passed a 32-bit</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// constant (e.g. CRGB::Red) and an 8-bit one (CRGB::Blue)</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; subtractFromRGB(uint8_t d )</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; r = qsub8( r, d);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; g = qsub8( g, d);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; b = qsub8( b, d);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// subtract a constant of &#39;1&#39; from each channel, saturating at 0x00</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator-- () __attribute__((always_inline))</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; subtractFromRGB(1);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// subtract a constant of &#39;1&#39; from each channel, saturating at 0x00</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator-- (<span class="keywordtype">int</span> DUMMY_ARG) __attribute__((always_inline))</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; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; --(*this);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> retval;</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="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// add a constant of &#39;1&#39; from each channel, saturating at 0xFF</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator++ () __attribute__((always_inline))</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; addToRGB(1);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// add a constant of &#39;1&#39; from each channel, saturating at 0xFF</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator++ (<span class="keywordtype">int</span> DUMMY_ARG) __attribute__((always_inline))</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; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; ++(*this);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// divide each of the channels by a constant</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator/= (uint8_t d )</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; r /= d;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; g /= d;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; b /= d;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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">// right shift each of the channels by a constant</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator&gt;&gt;= (uint8_t d)</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; r &gt;&gt;= d;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; g &gt;&gt;= d;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; b &gt;&gt;= d;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// multiply each of the channels by a constant,</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// saturating each channel at 0xFF</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator*= (uint8_t d )</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; r = qmul8( r, d);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; g = qmul8( g, d);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; b = qmul8( b, d);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// scale down a RGB to N 256ths of it&#39;s current brightness, using</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// &#39;video&#39; dimming rules, which means that unless the scale factor is ZERO</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// each channel is guaranteed NOT to dim down to zero. If it&#39;s already</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// nonzero, it&#39;ll stay nonzero, even if that means the hue shifts a little</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// at low brightness levels.</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; nscale8_video (uint8_t scaledown )</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; nscale8x3_video( r, g, b, scaledown);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// %= is a synonym for nscale8_video. Think of it is scaling down</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// by &quot;a percentage&quot;</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator%= (uint8_t scaledown )</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; nscale8x3_video( r, g, b, scaledown);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// fadeLightBy is a synonym for nscale8_video( ..., 255-fadefactor)</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; fadeLightBy (uint8_t fadefactor )</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; nscale8x3_video( r, g, b, 255 - fadefactor);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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; <span class="comment">// scale down a RGB to N 256ths of it&#39;s current brightness, using</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="comment">// &#39;plain math&#39; dimming rules, which means that if the low light levels</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// may dim all the way to 100% black.</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; nscale8 (uint8_t scaledown )</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; nscale8x3( r, g, b, scaledown);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// fadeToBlackBy is a synonym for nscale8( ..., 255-fadefactor)</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; fadeToBlackBy (uint8_t fadefactor )</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; nscale8x3( r, g, b, 255 - fadefactor);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// &quot;or&quot; operator brings each channel up to the higher of the two values</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator|= (<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs )</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="keywordflow">if</span>( rhs.r &gt; r) r = rhs.r;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span>( rhs.g &gt; g) g = rhs.g;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span>( rhs.b &gt; b) b = rhs.b;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator|= (uint8_t d )</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; <span class="keywordflow">if</span>( d &gt; r) r = d;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span>( d &gt; g) g = d;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span>( d &gt; b) b = d;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// &quot;and&quot; operator brings each channel down to the lower of the two values</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator&amp;= (<span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs )</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span>( rhs.r &lt; r) r = rhs.r;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">if</span>( rhs.g &lt; g) g = rhs.g;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span>( rhs.b &lt; b) b = rhs.b;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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"> 377</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator&amp;= (uint8_t d )</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="keywordflow">if</span>( d &lt; r) r = d;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span>( d &lt; g) g = d;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span>( d &lt; b) b = d;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// this allows testing a CRGB for zero-ness</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">inline</span> <span class="keyword">operator</span> bool() <span class="keyword">const</span> __attribute__((always_inline))</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> r || g || b;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// invert each channel</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator- ()</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; retval.r = 255 - r;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; retval.g = 255 - g;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; retval.b = 255 - b;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="preprocessor">#ifdef SmartMatrix_h</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">operator</span> rgb24()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; rgb24 ret;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; ret.red = r;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; ret.green = g;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; ret.blue = b;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span> ret;</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="preprocessor">#endif</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="keyword">inline</span> uint8_t getLuma ( ) {</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="comment">//Y&#39; = 0.2126 R&#39; + 0.7152 G&#39; + 0.0722 B&#39;</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// 54 183 18 (!)</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; uint8_t luma = scale8_LEAVING_R1_DIRTY( r, 54) + \</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; scale8_LEAVING_R1_DIRTY( g, 183) + \</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; scale8_LEAVING_R1_DIRTY( b, 18);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; cleanup_R1();</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> luma;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keyword">inline</span> uint8_t getAverageLight( ) {</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">const</span> uint8_t eightysix = 86;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; uint8_t avg = scale8_LEAVING_R1_DIRTY( r, eightysix) + \</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; scale8_LEAVING_R1_DIRTY( g, eightysix) + \</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; scale8_LEAVING_R1_DIRTY( b, eightysix);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; cleanup_R1();</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> avg;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</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; <span class="keyword">inline</span> <span class="keywordtype">void</span> maximizeBrightness( uint8_t limit = 255 ) {</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; uint8_t max = red;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">if</span>( green &gt; max) max = green;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span>( blue &gt; max) max = blue;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; uint16_t factor = ((uint16_t)(limit) * 256) / max;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; red = (red * factor) / 256;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; green = (green * factor) / 256;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; blue = (blue * factor) / 256;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> lerp8( <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; other, fract8 frac)</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> ret;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; ret.r = lerp8by8(r,other.r,frac);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; ret.g = lerp8by8(g,other.g,frac);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; ret.b = lerp8by8(b,other.b,frac);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> lerp16( <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; other, fract16 frac)</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> ret;</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; ret.r = lerp16by16(r&lt;&lt;8,other.r&lt;&lt;8,frac)&gt;&gt;8;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; ret.g = lerp16by16(g&lt;&lt;8,other.g&lt;&lt;8,frac)&gt;&gt;8;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; ret.b = lerp16by16(b&lt;&lt;8,other.b&lt;&lt;8,frac)&gt;&gt;8;</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> ret;</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; <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; AliceBlue=0xF0F8FF,</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; Amethyst=0x9966CC,</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; AntiqueWhite=0xFAEBD7,</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; Aqua=0x00FFFF,</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; Aquamarine=0x7FFFD4,</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; Azure=0xF0FFFF,</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; Beige=0xF5F5DC,</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; Bisque=0xFFE4C4,</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; Black=0x000000,</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; BlanchedAlmond=0xFFEBCD,</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; Blue=0x0000FF,</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; BlueViolet=0x8A2BE2,</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; Brown=0xA52A2A,</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; BurlyWood=0xDEB887,</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; CadetBlue=0x5F9EA0,</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; Chartreuse=0x7FFF00,</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; Chocolate=0xD2691E,</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; Coral=0xFF7F50,</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; CornflowerBlue=0x6495ED,</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; Cornsilk=0xFFF8DC,</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; Crimson=0xDC143C,</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; Cyan=0x00FFFF,</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; DarkBlue=0x00008B,</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; DarkCyan=0x008B8B,</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; DarkGoldenrod=0xB8860B,</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; DarkGray=0xA9A9A9,</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; DarkGrey=0xA9A9A9,</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; DarkGreen=0x006400,</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; DarkKhaki=0xBDB76B,</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; DarkMagenta=0x8B008B,</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; DarkOliveGreen=0x556B2F,</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; DarkOrange=0xFF8C00,</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; DarkOrchid=0x9932CC,</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; DarkRed=0x8B0000,</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; DarkSalmon=0xE9967A,</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; DarkSeaGreen=0x8FBC8F,</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; DarkSlateBlue=0x483D8B,</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; DarkSlateGray=0x2F4F4F,</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; DarkSlateGrey=0x2F4F4F,</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; DarkTurquoise=0x00CED1,</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; DarkViolet=0x9400D3,</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; DeepPink=0xFF1493,</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; DeepSkyBlue=0x00BFFF,</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; DimGray=0x696969,</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; DimGrey=0x696969,</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; DodgerBlue=0x1E90FF,</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; FireBrick=0xB22222,</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; FloralWhite=0xFFFAF0,</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; ForestGreen=0x228B22,</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; Fuchsia=0xFF00FF,</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; Gainsboro=0xDCDCDC,</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; GhostWhite=0xF8F8FF,</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; Gold=0xFFD700,</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; Goldenrod=0xDAA520,</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; Gray=0x808080,</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; Grey=0x808080,</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; Green=0x008000,</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; GreenYellow=0xADFF2F,</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; Honeydew=0xF0FFF0,</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; HotPink=0xFF69B4,</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; IndianRed=0xCD5C5C,</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; Indigo=0x4B0082,</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; Ivory=0xFFFFF0,</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; Khaki=0xF0E68C,</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; Lavender=0xE6E6FA,</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; LavenderBlush=0xFFF0F5,</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; LawnGreen=0x7CFC00,</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; LemonChiffon=0xFFFACD,</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; LightBlue=0xADD8E6,</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; LightCoral=0xF08080,</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; LightCyan=0xE0FFFF,</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; LightGoldenrodYellow=0xFAFAD2,</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; LightGreen=0x90EE90,</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; LightGrey=0xD3D3D3,</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; LightPink=0xFFB6C1,</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; LightSalmon=0xFFA07A,</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; LightSeaGreen=0x20B2AA,</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; LightSkyBlue=0x87CEFA,</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; LightSlateGray=0x778899,</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; LightSlateGrey=0x778899,</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; LightSteelBlue=0xB0C4DE,</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; LightYellow=0xFFFFE0,</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; Lime=0x00FF00,</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; LimeGreen=0x32CD32,</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; Linen=0xFAF0E6,</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; Magenta=0xFF00FF,</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; Maroon=0x800000,</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; MediumAquamarine=0x66CDAA,</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; MediumBlue=0x0000CD,</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; MediumOrchid=0xBA55D3,</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; MediumPurple=0x9370DB,</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; MediumSeaGreen=0x3CB371,</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; MediumSlateBlue=0x7B68EE,</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; MediumSpringGreen=0x00FA9A,</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; MediumTurquoise=0x48D1CC,</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; MediumVioletRed=0xC71585,</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; MidnightBlue=0x191970,</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; MintCream=0xF5FFFA,</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; MistyRose=0xFFE4E1,</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; Moccasin=0xFFE4B5,</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; NavajoWhite=0xFFDEAD,</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; Navy=0x000080,</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; OldLace=0xFDF5E6,</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; Olive=0x808000,</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; OliveDrab=0x6B8E23,</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; Orange=0xFFA500,</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; OrangeRed=0xFF4500,</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; Orchid=0xDA70D6,</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; PaleGoldenrod=0xEEE8AA,</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; PaleGreen=0x98FB98,</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; PaleTurquoise=0xAFEEEE,</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; PaleVioletRed=0xDB7093,</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; PapayaWhip=0xFFEFD5,</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; PeachPuff=0xFFDAB9,</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; Peru=0xCD853F,</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; Pink=0xFFC0CB,</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; Plaid=0xCC5533,</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; Plum=0xDDA0DD,</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; PowderBlue=0xB0E0E6,</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; Purple=0x800080,</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; Red=0xFF0000,</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; RosyBrown=0xBC8F8F,</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; RoyalBlue=0x4169E1,</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; SaddleBrown=0x8B4513,</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; Salmon=0xFA8072,</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; SandyBrown=0xF4A460,</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; SeaGreen=0x2E8B57,</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; Seashell=0xFFF5EE,</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; Sienna=0xA0522D,</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; Silver=0xC0C0C0,</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; SkyBlue=0x87CEEB,</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; SlateBlue=0x6A5ACD,</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; SlateGray=0x708090,</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; SlateGrey=0x708090,</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; Snow=0xFFFAFA,</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; SpringGreen=0x00FF7F,</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; SteelBlue=0x4682B4,</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; Tan=0xD2B48C,</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; Teal=0x008080,</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; Thistle=0xD8BFD8,</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; Tomato=0xFF6347,</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; Turquoise=0x40E0D0,</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; Violet=0xEE82EE,</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; Wheat=0xF5DEB3,</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; White=0xFFFFFF,</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; WhiteSmoke=0xF5F5F5,</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; Yellow=0xFFFF00,</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; YellowGreen=0x9ACD32</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; } HTMLColorCode;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// static uint32_t Squant;</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;};</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="keyword">inline</span> __attribute__((always_inline)) bool operator== (const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; lhs, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs)</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;{</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">return</span> (lhs.r == rhs.r) &amp;&amp; (lhs.g == rhs.g) &amp;&amp; (lhs.b == rhs.b);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;}</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="keyword">inline</span> __attribute__((always_inline)) bool operator!= (const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; lhs, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs)</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;{</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">return</span> !(lhs == rhs);</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;}</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keyword">inline</span> __attribute__((always_inline)) bool operator&lt; (const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; lhs, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs)</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;{</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> sl &lt; sr;</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;}</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">inline</span> __attribute__((always_inline)) bool operator&gt; (const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; lhs, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs)</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">return</span> sl &gt; sr;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;}</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="keyword">inline</span> __attribute__((always_inline)) bool operator&gt;= (const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; lhs, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs)</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;{</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">return</span> sl &gt;= sr;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;}</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<span class="keyword">inline</span> __attribute__((always_inline)) bool operator&lt;= (const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; lhs, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rhs)</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;{</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">return</span> sl &lt;= sr;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;}</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator+( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p2)</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;{</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( qadd8( p1.r, p2.r),</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; qadd8( p1.g, p2.g),</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; qadd8( p1.b, p2.b));</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;}</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator-( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p2)</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;{</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( qsub8( p1.r, p2.r),</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; qsub8( p1.g, p2.g),</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; qsub8( p1.b, p2.b));</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;}</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator*( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, uint8_t d)</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( qmul8( p1.r, d),</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; qmul8( p1.g, d),</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; qmul8( p1.b, d));</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;}</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator/( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, uint8_t d)</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;{</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( p1.r/d, p1.g/d, p1.b/d);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;}</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator&amp;( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p2)</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;{</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( p1.r &lt; p2.r ? p1.r : p2.r,</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; p1.g &lt; p2.g ? p1.g : p2.g,</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; p1.b &lt; p2.b ? p1.b : p2.b);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;}</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator|( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p2)</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;{</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( p1.r &gt; p2.r ? p1.r : p2.r,</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; p1.g &gt; p2.g ? p1.g : p2.g,</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; p1.b &gt; p2.b ? p1.b : p2.b);</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;}</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;__attribute__((always_inline))</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;inline <a class="code" href="struct_c_r_g_b.html">CRGB</a> operator%( const <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; p1, uint8_t d)</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;{</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval( p1);</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; retval.nscale8_video( d);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;}</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="comment">// Define RGB orderings</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="keyword">enum</span> EOrder {</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; RGB=0012,</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; RBG=0021,</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; GRB=0102,</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; GBR=0120,</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; BRG=0201,</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; BGR=0210</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;};</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+<div class="ttc" id="struct_c_h_s_v_html"><div class="ttname"><a href="struct_c_h_s_v.html">CHSV</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:16</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/platforms_8h_source.html b/docs/3.1/platforms_8h_source.html
new file mode 100644
index 00000000..43f6eb8a
--- /dev/null
+++ b/docs/3.1/platforms_8h_source.html
@@ -0,0 +1,112 @@
+<!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.8"/>
+<title>FastLED: platforms.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">platforms.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_PLATFORMS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __INC_PLATFORMS_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;<span class="preprocessor">#include &quot;fastled_config.h&quot;</span></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="preprocessor">#if defined(__MK20DX128__) || defined(__MK20DX256__)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// Include k20/T3 headers</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/k20/fastled_arm_k20.h&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#elif defined(__SAM3X8E__)</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Include sam/due headers</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/sam/fastled_arm_sam.h&quot;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// AVR platforms</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;platforms/avr/fastled_avr.h&quot;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></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="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/power__mgt_8h_source.html b/docs/3.1/power__mgt_8h_source.html
new file mode 100644
index 00000000..14369458
--- /dev/null
+++ b/docs/3.1/power__mgt_8h_source.html
@@ -0,0 +1,144 @@
+<!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.8"/>
+<title>FastLED: power_mgt.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">power_mgt.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 POWER_MGT_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define POWER_MGT_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;<span class="preprocessor">#include &quot;pixeltypes.h&quot;</span></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">// Power Control setup functions</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// Example:</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// set_max_power_in_volts_and_milliamps( 5, 400);</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="keywordtype">void</span> set_max_power_in_volts_and_milliamps( uint8_t volts, uint32_t milliamps);</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keywordtype">void</span> set_max_power_in_milliwatts( uint32_t powerInmW);</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="keywordtype">void</span> set_max_power_indicator_LED( uint8_t pinNumber); <span class="comment">// zero = no indicator LED</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">// Power Control &#39;show&#39; and &#39;delay&#39; functions</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// These are drop-in replacements for FastLED.show() and FastLED.delay()</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// In order to use these, you have to actually replace your calls to</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">// FastLED.show() and FastLED.delay() with these two functions.</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// Example:</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// // was: FastLED.show();</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// // now is:</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// show_at_max_brightness_for_power();</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="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keywordtype">void</span> show_at_max_brightness_for_power();</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keywordtype">void</span> delay_at_max_brightness_for_power( uint16_t ms);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">// Power Control internal helper functions</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// calculate_unscaled_power_mW tells you how many milliwatts the current</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// LED data would draw at brightness = 255.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// calculate_max_brightness_for_power_mW tells you the highest brightness</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// level you can use and still stay under the specified power budget. It</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// takes a &#39;target brightness&#39; which is the brightness you&#39;d ideally like</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// to use. The result from this function will be no higher than the</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// target_brightess you supply, but may be lower.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;uint32_t calculate_unscaled_power_mW( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>* ledbuffer, uint16_t numLeds);</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;uint8_t calculate_max_brightness_for_power_mW( uint8_t target_brightness, uint32_t max_power_mW);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// POWER_MGT_H</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_c_r_g_b_html"><div class="ttname"><a href="struct_c_r_g_b.html">CRGB</a></div><div class="ttdef"><b>Definition:</b> pixeltypes.h:81</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/search/all_0.html b/docs/3.1/search/all_0.html
new file mode 100644
index 00000000..6f4ddc39
--- /dev/null
+++ b/docs/3.1/search/all_0.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.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/all_0.js b/docs/3.1/search/all_0.js
new file mode 100644
index 00000000..13185060
--- /dev/null
+++ b/docs/3.1/search/all_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_5fduepin',['_DUEPIN',['../class___d_u_e_p_i_n.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_1.html b/docs/3.1/search/all_1.html
new file mode 100644
index 00000000..fce68bd6
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_1.js b/docs/3.1/search/all_1.js
new file mode 100644
index 00000000..bf625714
--- /dev/null
+++ b/docs/3.1/search/all_1.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['apa102controller',['APA102Controller',['../class_a_p_a102_controller.html',1,'']]],
+ ['apa104',['APA104',['../class_a_p_a104.html',1,'']]],
+ ['avrsoftwarespioutput',['AVRSoftwareSPIOutput',['../class_a_v_r_software_s_p_i_output.html',1,'']]],
+ ['avrsoftwarespioutput_3c_20_5fdata_5fpin_2c_20_5fclock_5fpin_2c_20_5fspi_5fclock_5fdivider_20_3e',['AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;',['../class_a_v_r_software_s_p_i_output.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_10.html b/docs/3.1/search/all_10.html
new file mode 100644
index 00000000..a960bb86
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_10.js b/docs/3.1/search/all_10.js
new file mode 100644
index 00000000..93cebf51
--- /dev/null
+++ b/docs/3.1/search/all_10.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['ws2801controller',['WS2801Controller',['../class_w_s2801_controller.html',1,'']]],
+ ['ws2803controller',['WS2803Controller',['../class_w_s2803_controller.html',1,'']]],
+ ['ws2811',['WS2811',['../class_w_s2811.html',1,'']]],
+ ['ws2811_5f400',['WS2811_400',['../class_w_s2811__400.html',1,'']]],
+ ['ws2811controller400khz',['WS2811Controller400Khz',['../class_w_s2811_controller400_khz.html',1,'']]],
+ ['ws2811controller800khz',['WS2811Controller800Khz',['../class_w_s2811_controller800_khz.html',1,'']]],
+ ['ws2811controller800khz_3c_20data_5fpin_2c_20grb_20_3e',['WS2811Controller800Khz&lt; DATA_PIN, GRB &gt;',['../class_w_s2811_controller800_khz.html',1,'']]],
+ ['ws2812',['WS2812',['../class_w_s2812.html',1,'']]],
+ ['ws2812b',['WS2812B',['../class_w_s2812_b.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_2.html b/docs/3.1/search/all_2.html
new file mode 100644
index 00000000..1ee90b94
--- /dev/null
+++ b/docs/3.1/search/all_2.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.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/all_2.js b/docs/3.1/search/all_2.js
new file mode 100644
index 00000000..3ec93cd1
--- /dev/null
+++ b/docs/3.1/search/all_2.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['cfastled',['CFastLED',['../class_c_fast_l_e_d.html',1,'']]],
+ ['chsv',['CHSV',['../struct_c_h_s_v.html',1,'']]],
+ ['chsvpalette16',['CHSVPalette16',['../class_c_h_s_v_palette16.html',1,'']]],
+ ['chsvpalette256',['CHSVPalette256',['../class_c_h_s_v_palette256.html',1,'']]],
+ ['cledcontroller',['CLEDController',['../class_c_l_e_d_controller.html',1,'']]],
+ ['cminwait',['CMinWait',['../class_c_min_wait.html',1,'']]],
+ ['cminwait_3c_201000_20_3e',['CMinWait&lt; 1000 &gt;',['../class_c_min_wait.html',1,'']]],
+ ['crgb',['CRGB',['../struct_c_r_g_b.html',1,'']]],
+ ['crgbpalette16',['CRGBPalette16',['../class_c_r_g_b_palette16.html',1,'']]],
+ ['crgbpalette256',['CRGBPalette256',['../class_c_r_g_b_palette256.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_3.html b/docs/3.1/search/all_3.html
new file mode 100644
index 00000000..85c4a815
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_3.js b/docs/3.1/search/all_3.js
new file mode 100644
index 00000000..f3337fee
--- /dev/null
+++ b/docs/3.1/search/all_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['data_5fnop',['DATA_NOP',['../class_d_a_t_a___n_o_p.html',1,'']]],
+ ['deeppixelcontroller',['DeepPixelController',['../class_deep_pixel_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_4.html b/docs/3.1/search/all_4.html
new file mode 100644
index 00000000..56eb97ca
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_4.js b/docs/3.1/search/all_4.js
new file mode 100644
index 00000000..6d85403d
--- /dev/null
+++ b/docs/3.1/search/all_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['fastled3_2e0',['FastLED3.0',['../md_release_notes.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_5.html b/docs/3.1/search/all_5.html
new file mode 100644
index 00000000..d085ca8e
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_5.js b/docs/3.1/search/all_5.js
new file mode 100644
index 00000000..7995504d
--- /dev/null
+++ b/docs/3.1/search/all_5.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['gw6205',['GW6205',['../class_g_w6205.html',1,'']]],
+ ['gw6205_5f400',['GW6205_400',['../class_g_w6205__400.html',1,'']]],
+ ['gw6205controller400khz',['GW6205Controller400Khz',['../class_g_w6205_controller400_khz.html',1,'']]],
+ ['gw6205controller800khz',['GW6205Controller800Khz',['../class_g_w6205_controller800_khz.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_6.html b/docs/3.1/search/all_6.html
new file mode 100644
index 00000000..7a31022e
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_6.js b/docs/3.1/search/all_6.js
new file mode 100644
index 00000000..c0a50855
--- /dev/null
+++ b/docs/3.1/search/all_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['ieee754binary32_5ft',['IEEE754binary32_t',['../union_i_e_e_e754binary32__t.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_7.html b/docs/3.1/search/all_7.html
new file mode 100644
index 00000000..f83a2807
--- /dev/null
+++ b/docs/3.1/search/all_7.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.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/all_7.js b/docs/3.1/search/all_7.js
new file mode 100644
index 00000000..81e2ccd8
--- /dev/null
+++ b/docs/3.1/search/all_7.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['lpd1886',['LPD1886',['../class_l_p_d1886.html',1,'']]],
+ ['lpd1886controller1250khz',['LPD1886Controller1250Khz',['../class_l_p_d1886_controller1250_khz.html',1,'']]],
+ ['lpd8806controller',['LPD8806Controller',['../class_l_p_d8806_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_8.html b/docs/3.1/search/all_8.html
new file mode 100644
index 00000000..e0bfa825
--- /dev/null
+++ b/docs/3.1/search/all_8.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.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/all_8.js b/docs/3.1/search/all_8.js
new file mode 100644
index 00000000..6cab743a
--- /dev/null
+++ b/docs/3.1/search/all_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['multipixelcontroller',['MultiPixelController',['../struct_multi_pixel_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_9.html b/docs/3.1/search/all_9.html
new file mode 100644
index 00000000..5cf41a6c
--- /dev/null
+++ b/docs/3.1/search/all_9.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.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/all_9.js b/docs/3.1/search/all_9.js
new file mode 100644
index 00000000..5694348f
--- /dev/null
+++ b/docs/3.1/search/all_9.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['neopixel',['NEOPIXEL',['../class_n_e_o_p_i_x_e_l.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_a.html b/docs/3.1/search/all_a.html
new file mode 100644
index 00000000..37a04963
--- /dev/null
+++ b/docs/3.1/search/all_a.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.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/all_a.js b/docs/3.1/search/all_a.js
new file mode 100644
index 00000000..5cfba1a1
--- /dev/null
+++ b/docs/3.1/search/all_a.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['p9813controller',['P9813Controller',['../class_p9813_controller.html',1,'']]],
+ ['pixelcontroller',['PixelController',['../struct_pixel_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_b.html b/docs/3.1/search/all_b.html
new file mode 100644
index 00000000..75bc6454
--- /dev/null
+++ b/docs/3.1/search/all_b.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.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/all_b.js b/docs/3.1/search/all_b.js
new file mode 100644
index 00000000..6feb8274
--- /dev/null
+++ b/docs/3.1/search/all_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['q',['q',['../classq.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_c.html b/docs/3.1/search/all_c.html
new file mode 100644
index 00000000..02310815
--- /dev/null
+++ b/docs/3.1/search/all_c.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.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/all_c.js b/docs/3.1/search/all_c.js
new file mode 100644
index 00000000..b9205585
--- /dev/null
+++ b/docs/3.1/search/all_c.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/all_d.html b/docs/3.1/search/all_d.html
new file mode 100644
index 00000000..97c55da2
--- /dev/null
+++ b/docs/3.1/search/all_d.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.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/all_d.js b/docs/3.1/search/all_d.js
new file mode 100644
index 00000000..d14168f5
--- /dev/null
+++ b/docs/3.1/search/all_d.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['selectable',['Selectable',['../class_selectable.html',1,'']]],
+ ['show',['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()']]],
+ ['sm16716controller',['SM16716Controller',['../class_s_m16716_controller.html',1,'']]],
+ ['softwarespioutput',['SoftwareSPIOutput',['../class_software_s_p_i_output.html',1,'']]],
+ ['spioutput',['SPIOutput',['../class_s_p_i_output.html',1,'']]],
+ ['spioutput_3c_20data_5fpin_2c_20clock_5fpin_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;',['../class_s_p_i_output.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_e.html b/docs/3.1/search/all_e.html
new file mode 100644
index 00000000..3afc519b
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_e.js b/docs/3.1/search/all_e.js
new file mode 100644
index 00000000..76479d82
--- /dev/null
+++ b/docs/3.1/search/all_e.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['todo',['TODO',['../md__t_o_d_o.html',1,'']]],
+ ['tm1803',['TM1803',['../class_t_m1803.html',1,'']]],
+ ['tm1803controller400khz',['TM1803Controller400Khz',['../class_t_m1803_controller400_khz.html',1,'']]],
+ ['tm1804',['TM1804',['../class_t_m1804.html',1,'']]],
+ ['tm1809',['TM1809',['../class_t_m1809.html',1,'']]],
+ ['tm1809controller800khz',['TM1809Controller800Khz',['../class_t_m1809_controller800_khz.html',1,'']]],
+ ['tm1829',['TM1829',['../class_t_m1829.html',1,'']]],
+ ['tm1829controller1600khz',['TM1829Controller1600Khz',['../class_t_m1829_controller1600_khz.html',1,'']]],
+ ['tm1829controller800khz',['TM1829Controller800Khz',['../class_t_m1829_controller800_khz.html',1,'']]]
+];
diff --git a/docs/3.1/search/all_f.html b/docs/3.1/search/all_f.html
new file mode 100644
index 00000000..0e2f45e4
--- /dev/null
+++ b/docs/3.1/search/all_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_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/all_f.js b/docs/3.1/search/all_f.js
new file mode 100644
index 00000000..6f848333
--- /dev/null
+++ b/docs/3.1/search/all_f.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['ucs1903',['UCS1903',['../class_u_c_s1903.html',1,'']]],
+ ['ucs1903b',['UCS1903B',['../class_u_c_s1903_b.html',1,'']]],
+ ['ucs1903bcontroller800khz',['UCS1903BController800Khz',['../class_u_c_s1903_b_controller800_khz.html',1,'']]],
+ ['ucs1903controller400khz',['UCS1903Controller400Khz',['../class_u_c_s1903_controller400_khz.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_0.html b/docs/3.1/search/classes_0.html
new file mode 100644
index 00000000..a7b6a289
--- /dev/null
+++ b/docs/3.1/search/classes_0.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.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/classes_0.js b/docs/3.1/search/classes_0.js
new file mode 100644
index 00000000..13185060
--- /dev/null
+++ b/docs/3.1/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_5fduepin',['_DUEPIN',['../class___d_u_e_p_i_n.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_1.html b/docs/3.1/search/classes_1.html
new file mode 100644
index 00000000..1adf16d8
--- /dev/null
+++ b/docs/3.1/search/classes_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_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/classes_1.js b/docs/3.1/search/classes_1.js
new file mode 100644
index 00000000..bf625714
--- /dev/null
+++ b/docs/3.1/search/classes_1.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['apa102controller',['APA102Controller',['../class_a_p_a102_controller.html',1,'']]],
+ ['apa104',['APA104',['../class_a_p_a104.html',1,'']]],
+ ['avrsoftwarespioutput',['AVRSoftwareSPIOutput',['../class_a_v_r_software_s_p_i_output.html',1,'']]],
+ ['avrsoftwarespioutput_3c_20_5fdata_5fpin_2c_20_5fclock_5fpin_2c_20_5fspi_5fclock_5fdivider_20_3e',['AVRSoftwareSPIOutput&lt; _DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER &gt;',['../class_a_v_r_software_s_p_i_output.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_2.html b/docs/3.1/search/classes_2.html
new file mode 100644
index 00000000..b5828d9c
--- /dev/null
+++ b/docs/3.1/search/classes_2.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_2.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/classes_2.js b/docs/3.1/search/classes_2.js
new file mode 100644
index 00000000..3ec93cd1
--- /dev/null
+++ b/docs/3.1/search/classes_2.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['cfastled',['CFastLED',['../class_c_fast_l_e_d.html',1,'']]],
+ ['chsv',['CHSV',['../struct_c_h_s_v.html',1,'']]],
+ ['chsvpalette16',['CHSVPalette16',['../class_c_h_s_v_palette16.html',1,'']]],
+ ['chsvpalette256',['CHSVPalette256',['../class_c_h_s_v_palette256.html',1,'']]],
+ ['cledcontroller',['CLEDController',['../class_c_l_e_d_controller.html',1,'']]],
+ ['cminwait',['CMinWait',['../class_c_min_wait.html',1,'']]],
+ ['cminwait_3c_201000_20_3e',['CMinWait&lt; 1000 &gt;',['../class_c_min_wait.html',1,'']]],
+ ['crgb',['CRGB',['../struct_c_r_g_b.html',1,'']]],
+ ['crgbpalette16',['CRGBPalette16',['../class_c_r_g_b_palette16.html',1,'']]],
+ ['crgbpalette256',['CRGBPalette256',['../class_c_r_g_b_palette256.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_3.html b/docs/3.1/search/classes_3.html
new file mode 100644
index 00000000..c42a9a14
--- /dev/null
+++ b/docs/3.1/search/classes_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_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/classes_3.js b/docs/3.1/search/classes_3.js
new file mode 100644
index 00000000..f3337fee
--- /dev/null
+++ b/docs/3.1/search/classes_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['data_5fnop',['DATA_NOP',['../class_d_a_t_a___n_o_p.html',1,'']]],
+ ['deeppixelcontroller',['DeepPixelController',['../class_deep_pixel_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_4.html b/docs/3.1/search/classes_4.html
new file mode 100644
index 00000000..6a7e824a
--- /dev/null
+++ b/docs/3.1/search/classes_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_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/classes_4.js b/docs/3.1/search/classes_4.js
new file mode 100644
index 00000000..7995504d
--- /dev/null
+++ b/docs/3.1/search/classes_4.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['gw6205',['GW6205',['../class_g_w6205.html',1,'']]],
+ ['gw6205_5f400',['GW6205_400',['../class_g_w6205__400.html',1,'']]],
+ ['gw6205controller400khz',['GW6205Controller400Khz',['../class_g_w6205_controller400_khz.html',1,'']]],
+ ['gw6205controller800khz',['GW6205Controller800Khz',['../class_g_w6205_controller800_khz.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_5.html b/docs/3.1/search/classes_5.html
new file mode 100644
index 00000000..baa0bfe1
--- /dev/null
+++ b/docs/3.1/search/classes_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_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/classes_5.js b/docs/3.1/search/classes_5.js
new file mode 100644
index 00000000..c0a50855
--- /dev/null
+++ b/docs/3.1/search/classes_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['ieee754binary32_5ft',['IEEE754binary32_t',['../union_i_e_e_e754binary32__t.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_6.html b/docs/3.1/search/classes_6.html
new file mode 100644
index 00000000..d3b1f9bb
--- /dev/null
+++ b/docs/3.1/search/classes_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_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/classes_6.js b/docs/3.1/search/classes_6.js
new file mode 100644
index 00000000..81e2ccd8
--- /dev/null
+++ b/docs/3.1/search/classes_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['lpd1886',['LPD1886',['../class_l_p_d1886.html',1,'']]],
+ ['lpd1886controller1250khz',['LPD1886Controller1250Khz',['../class_l_p_d1886_controller1250_khz.html',1,'']]],
+ ['lpd8806controller',['LPD8806Controller',['../class_l_p_d8806_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_7.html b/docs/3.1/search/classes_7.html
new file mode 100644
index 00000000..9afbae86
--- /dev/null
+++ b/docs/3.1/search/classes_7.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_7.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/classes_7.js b/docs/3.1/search/classes_7.js
new file mode 100644
index 00000000..6cab743a
--- /dev/null
+++ b/docs/3.1/search/classes_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['multipixelcontroller',['MultiPixelController',['../struct_multi_pixel_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_8.html b/docs/3.1/search/classes_8.html
new file mode 100644
index 00000000..a309283b
--- /dev/null
+++ b/docs/3.1/search/classes_8.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_8.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/classes_8.js b/docs/3.1/search/classes_8.js
new file mode 100644
index 00000000..5694348f
--- /dev/null
+++ b/docs/3.1/search/classes_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['neopixel',['NEOPIXEL',['../class_n_e_o_p_i_x_e_l.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_9.html b/docs/3.1/search/classes_9.html
new file mode 100644
index 00000000..9da6f381
--- /dev/null
+++ b/docs/3.1/search/classes_9.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_9.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/classes_9.js b/docs/3.1/search/classes_9.js
new file mode 100644
index 00000000..5cfba1a1
--- /dev/null
+++ b/docs/3.1/search/classes_9.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['p9813controller',['P9813Controller',['../class_p9813_controller.html',1,'']]],
+ ['pixelcontroller',['PixelController',['../struct_pixel_controller.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_a.html b/docs/3.1/search/classes_a.html
new file mode 100644
index 00000000..b6f8b4c0
--- /dev/null
+++ b/docs/3.1/search/classes_a.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_a.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/classes_a.js b/docs/3.1/search/classes_a.js
new file mode 100644
index 00000000..6feb8274
--- /dev/null
+++ b/docs/3.1/search/classes_a.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['q',['q',['../classq.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_b.html b/docs/3.1/search/classes_b.html
new file mode 100644
index 00000000..1bffd19e
--- /dev/null
+++ b/docs/3.1/search/classes_b.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_b.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/classes_b.js b/docs/3.1/search/classes_b.js
new file mode 100644
index 00000000..eb6cb0e2
--- /dev/null
+++ b/docs/3.1/search/classes_b.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['selectable',['Selectable',['../class_selectable.html',1,'']]],
+ ['sm16716controller',['SM16716Controller',['../class_s_m16716_controller.html',1,'']]],
+ ['softwarespioutput',['SoftwareSPIOutput',['../class_software_s_p_i_output.html',1,'']]],
+ ['spioutput',['SPIOutput',['../class_s_p_i_output.html',1,'']]],
+ ['spioutput_3c_20data_5fpin_2c_20clock_5fpin_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; DATA_PIN, CLOCK_PIN, SPI_SPEED &gt;',['../class_s_p_i_output.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_c.html b/docs/3.1/search/classes_c.html
new file mode 100644
index 00000000..6a3bca52
--- /dev/null
+++ b/docs/3.1/search/classes_c.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_c.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/classes_c.js b/docs/3.1/search/classes_c.js
new file mode 100644
index 00000000..4f30ab14
--- /dev/null
+++ b/docs/3.1/search/classes_c.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['tm1803',['TM1803',['../class_t_m1803.html',1,'']]],
+ ['tm1803controller400khz',['TM1803Controller400Khz',['../class_t_m1803_controller400_khz.html',1,'']]],
+ ['tm1804',['TM1804',['../class_t_m1804.html',1,'']]],
+ ['tm1809',['TM1809',['../class_t_m1809.html',1,'']]],
+ ['tm1809controller800khz',['TM1809Controller800Khz',['../class_t_m1809_controller800_khz.html',1,'']]],
+ ['tm1829',['TM1829',['../class_t_m1829.html',1,'']]],
+ ['tm1829controller1600khz',['TM1829Controller1600Khz',['../class_t_m1829_controller1600_khz.html',1,'']]],
+ ['tm1829controller800khz',['TM1829Controller800Khz',['../class_t_m1829_controller800_khz.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_d.html b/docs/3.1/search/classes_d.html
new file mode 100644
index 00000000..ccf03106
--- /dev/null
+++ b/docs/3.1/search/classes_d.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_d.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/classes_d.js b/docs/3.1/search/classes_d.js
new file mode 100644
index 00000000..6f848333
--- /dev/null
+++ b/docs/3.1/search/classes_d.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['ucs1903',['UCS1903',['../class_u_c_s1903.html',1,'']]],
+ ['ucs1903b',['UCS1903B',['../class_u_c_s1903_b.html',1,'']]],
+ ['ucs1903bcontroller800khz',['UCS1903BController800Khz',['../class_u_c_s1903_b_controller800_khz.html',1,'']]],
+ ['ucs1903controller400khz',['UCS1903Controller400Khz',['../class_u_c_s1903_controller400_khz.html',1,'']]]
+];
diff --git a/docs/3.1/search/classes_e.html b/docs/3.1/search/classes_e.html
new file mode 100644
index 00000000..54b8c162
--- /dev/null
+++ b/docs/3.1/search/classes_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_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/classes_e.js b/docs/3.1/search/classes_e.js
new file mode 100644
index 00000000..93cebf51
--- /dev/null
+++ b/docs/3.1/search/classes_e.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['ws2801controller',['WS2801Controller',['../class_w_s2801_controller.html',1,'']]],
+ ['ws2803controller',['WS2803Controller',['../class_w_s2803_controller.html',1,'']]],
+ ['ws2811',['WS2811',['../class_w_s2811.html',1,'']]],
+ ['ws2811_5f400',['WS2811_400',['../class_w_s2811__400.html',1,'']]],
+ ['ws2811controller400khz',['WS2811Controller400Khz',['../class_w_s2811_controller400_khz.html',1,'']]],
+ ['ws2811controller800khz',['WS2811Controller800Khz',['../class_w_s2811_controller800_khz.html',1,'']]],
+ ['ws2811controller800khz_3c_20data_5fpin_2c_20grb_20_3e',['WS2811Controller800Khz&lt; DATA_PIN, GRB &gt;',['../class_w_s2811_controller800_khz.html',1,'']]],
+ ['ws2812',['WS2812',['../class_w_s2812.html',1,'']]],
+ ['ws2812b',['WS2812B',['../class_w_s2812_b.html',1,'']]]
+];
diff --git a/docs/3.1/search/close.png b/docs/3.1/search/close.png
new file mode 100644
index 00000000..9342d3df
--- /dev/null
+++ b/docs/3.1/search/close.png
Binary files differ
diff --git a/docs/3.1/search/functions_0.html b/docs/3.1/search/functions_0.html
new file mode 100644
index 00000000..36aa6a65
--- /dev/null
+++ b/docs/3.1/search/functions_0.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.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_0.js b/docs/3.1/search/functions_0.js
new file mode 100644
index 00000000..834e07cb
--- /dev/null
+++ b/docs/3.1/search/functions_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['show',['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()']]]
+];
diff --git a/docs/3.1/search/mag_sel.png b/docs/3.1/search/mag_sel.png
new file mode 100644
index 00000000..81f6040a
--- /dev/null
+++ b/docs/3.1/search/mag_sel.png
Binary files differ
diff --git a/docs/3.1/search/nomatches.html b/docs/3.1/search/nomatches.html
new file mode 100644
index 00000000..b1ded27e
--- /dev/null
+++ b/docs/3.1/search/nomatches.html
@@ -0,0 +1,12 @@
+<!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"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/docs/3.1/search/pages_0.html b/docs/3.1/search/pages_0.html
new file mode 100644
index 00000000..582ce942
--- /dev/null
+++ b/docs/3.1/search/pages_0.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.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_0.js b/docs/3.1/search/pages_0.js
new file mode 100644
index 00000000..6d85403d
--- /dev/null
+++ b/docs/3.1/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['fastled3_2e0',['FastLED3.0',['../md_release_notes.html',1,'']]]
+];
diff --git a/docs/3.1/search/pages_1.html b/docs/3.1/search/pages_1.html
new file mode 100644
index 00000000..6b489509
--- /dev/null
+++ b/docs/3.1/search/pages_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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_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/pages_1.js b/docs/3.1/search/pages_1.js
new file mode 100644
index 00000000..b9205585
--- /dev/null
+++ b/docs/3.1/search/pages_1.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_2.html b/docs/3.1/search/pages_2.html
new file mode 100644
index 00000000..1efc5aa2
--- /dev/null
+++ b/docs/3.1/search/pages_2.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.8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_2.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_2.js b/docs/3.1/search/pages_2.js
new file mode 100644
index 00000000..315735c5
--- /dev/null
+++ b/docs/3.1/search/pages_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['todo',['TODO',['../md__t_o_d_o.html',1,'']]]
+];
diff --git a/docs/3.1/search/search.css b/docs/3.1/search/search.css
new file mode 100644
index 00000000..4d7612ff
--- /dev/null
+++ b/docs/3.1/search/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ position: absolute;
+ float: none;
+ display: inline;
+ margin-top: 8px;
+ right: 0px;
+ width: 170px;
+ z-index: 102;
+ background-color: white;
+}
+
+#MSearchBox .left
+{
+ display:block;
+ position:absolute;
+ left:10px;
+ width:20px;
+ height:19px;
+ background:url('search_l.png') no-repeat;
+ background-position:right;
+}
+
+#MSearchSelect {
+ display:block;
+ position:absolute;
+ width:20px;
+ height:19px;
+}
+
+.left #MSearchSelect {
+ left:4px;
+}
+
+.right #MSearchSelect {
+ right:5px;
+}
+
+#MSearchField {
+ display:block;
+ position:absolute;
+ height:19px;
+ background:url('search_m.png') repeat-x;
+ border:none;
+ width:111px;
+ margin-left:20px;
+ padding-left:4px;
+ color: #909090;
+ outline: none;
+ font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+ margin-left:15px;
+}
+
+#MSearchBox .right {
+ display:block;
+ position:absolute;
+ right:10px;
+ top:0px;
+ width:20px;
+ height:19px;
+ background:url('search_r.png') no-repeat;
+ background-position:left;
+}
+
+#MSearchClose {
+ display: none;
+ position: absolute;
+ top: 4px;
+ background : none;
+ border: none;
+ margin: 0px 4px 0px 0px;
+ padding: 0px 0px;
+ outline: none;
+}
+
+.left #MSearchClose {
+ left: 6px;
+}
+
+.right #MSearchClose {
+ right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 1;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+}
+
+.SRResult {
+ display: none;
+}
+
+DIV.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #F0F3F8;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/docs/3.1/search/search.js b/docs/3.1/search/search.js
new file mode 100644
index 00000000..1d0cfb0d
--- /dev/null
+++ b/docs/3.1/search/search.js
@@ -0,0 +1,799 @@
+// Search script generated by doxygen
+// Copyright (C) 2009 by Dimitri van Heesch.
+
+// The code in this file is loosly based on main.js, part of Natural Docs,
+// which is Copyright (C) 2003-2008 Greg Valure
+// Natural Docs is licensed under the GPL.
+
+var indexSectionsWithContent =
+{
+ 0: "_acdfgilmnpqrstuw",
+ 1: "_acdgilmnpqstuw",
+ 2: "s",
+ 3: "frt"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "functions",
+ 3: "pages"
+};
+
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.insideFrame = inFrame;
+ this.searchLabel = label;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ if (this.insideFrame)
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ left += searchField.offsetWidth + 6;
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ left -= searchSelectWindow.offsetWidth;
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+ else
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else if (window.frames.MSearchResults.searchResults)
+ {
+ var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches.html';
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline';
+ if (this.insideFrame)
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ domPopupSearchResultsWindow.style.position = 'relative';
+ domPopupSearchResultsWindow.style.display = 'block';
+ var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ domPopupSearchResults.style.width = width + 'px';
+ }
+ else
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ }
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
diff --git a/docs/3.1/search/search_l.png b/docs/3.1/search/search_l.png
new file mode 100644
index 00000000..c872f4da
--- /dev/null
+++ b/docs/3.1/search/search_l.png
Binary files differ
diff --git a/docs/3.1/search/search_m.png b/docs/3.1/search/search_m.png
new file mode 100644
index 00000000..b429a16b
--- /dev/null
+++ b/docs/3.1/search/search_m.png
Binary files differ
diff --git a/docs/3.1/search/search_r.png b/docs/3.1/search/search_r.png
new file mode 100644
index 00000000..97ee8b43
--- /dev/null
+++ b/docs/3.1/search/search_r.png
Binary files differ
diff --git a/docs/3.1/struct_c_h_s_v-members.html b/docs/3.1/struct_c_h_s_v-members.html
new file mode 100644
index 00000000..8dfaeff5
--- /dev/null
+++ b/docs/3.1/struct_c_h_s_v-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CHSV Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_c_h_s_v.html">CHSV</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSV</b>() __attribute__((always_inline)) (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CHSV</b>(uint8_t ih, uint8_t is, uint8_t iv) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CHSV</b>(const CHSV &amp;rhs) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>h</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hue</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const CHSV &amp;rhs) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>raw</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>s</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sat</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>saturation</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setHSV</b>(uint8_t ih, uint8_t is, uint8_t iv) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>v</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>val</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>value</b> (defined in <a class="el" href="struct_c_h_s_v.html">CHSV</a>)</td><td class="entry"><a class="el" href="struct_c_h_s_v.html">CHSV</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_c_h_s_v.html b/docs/3.1/struct_c_h_s_v.html
new file mode 100644
index 00000000..bc4f4adc
--- /dev/null
+++ b/docs/3.1/struct_c_h_s_v.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: CHSV Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="struct_c_h_s_v-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CHSV Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1cae6431597acc31363c47748da6f32d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cae6431597acc31363c47748da6f32d"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSV</b> (uint8_t ih, uint8_t is, uint8_t iv) __attribute__((always_inline))</td></tr>
+<tr class="separator:a1cae6431597acc31363c47748da6f32d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a077b49ca9dfa160ea6321e633efd7421"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a077b49ca9dfa160ea6321e633efd7421"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CHSV</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;rhs) __attribute__((always_inline))</td></tr>
+<tr class="separator:a077b49ca9dfa160ea6321e633efd7421"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62abbb334cc9f4f839a133e949968297"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62abbb334cc9f4f839a133e949968297"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;rhs) __attribute__((always_inline))</td></tr>
+<tr class="separator:a62abbb334cc9f4f839a133e949968297"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af43ae960c609ddb5ccde16693aec0a6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af43ae960c609ddb5ccde16693aec0a6b"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setHSV</b> (uint8_t ih, uint8_t is, uint8_t iv) __attribute__((always_inline))</td></tr>
+<tr class="separator:af43ae960c609ddb5ccde16693aec0a6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:ac42402dcbdd80073ae41e5c2e48f41be"><td class="memItemLeft" ><a class="anchor" id="ac42402dcbdd80073ae41e5c2e48f41be"></a>
+union {</td></tr>
+<tr class="memitem:ae43a3a37e9f5529a5f7e724b82634bbb"><td class="memItemLeft" ><a class="anchor" id="ae43a3a37e9f5529a5f7e724b82634bbb"></a>
+&#160;&#160;&#160;struct {</td></tr>
+<tr class="memitem:a39a89591b4d93fa53c8d5d58251ac722"><td class="memItemLeft" ><a class="anchor" id="a39a89591b4d93fa53c8d5d58251ac722"></a>
+&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
+<tr class="memitem:abdfe8d71facef0ae6fc8883d21a4a622"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>hue</b></td></tr>
+<tr class="separator:abdfe8d71facef0ae6fc8883d21a4a622"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d526b5e51b4abb6b0e281df22642b6a"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>h</b></td></tr>
+<tr class="separator:a5d526b5e51b4abb6b0e281df22642b6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39a89591b4d93fa53c8d5d58251ac722"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a39a89591b4d93fa53c8d5d58251ac722"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7555de37482f11a703df611914ffcc6a"><td class="memItemLeft" ><a class="anchor" id="a7555de37482f11a703df611914ffcc6a"></a>
+&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
+<tr class="memitem:aebc64e71d4a9ac732add5f4f8e571e50"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>saturation</b></td></tr>
+<tr class="separator:aebc64e71d4a9ac732add5f4f8e571e50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad274092cfdc0a0b27493c709a7e9188f"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>sat</b></td></tr>
+<tr class="separator:ad274092cfdc0a0b27493c709a7e9188f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9bd4581fc9289a883756baca8138051a"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>s</b></td></tr>
+<tr class="separator:a9bd4581fc9289a883756baca8138051a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7555de37482f11a703df611914ffcc6a"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a7555de37482f11a703df611914ffcc6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ca5081a2b5c283b1fb8e4a913705c75"><td class="memItemLeft" ><a class="anchor" id="a9ca5081a2b5c283b1fb8e4a913705c75"></a>
+&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
+<tr class="memitem:a0d22b289ed07bc0d0e1a20b01e924f03"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>value</b></td></tr>
+<tr class="separator:a0d22b289ed07bc0d0e1a20b01e924f03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47ec42c8a9e9a918dd34f8766618938a"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>val</b></td></tr>
+<tr class="separator:a47ec42c8a9e9a918dd34f8766618938a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45a21f1fba0f38822ec632b64c7abbe4"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>v</b></td></tr>
+<tr class="separator:a45a21f1fba0f38822ec632b64c7abbe4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ca5081a2b5c283b1fb8e4a913705c75"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a9ca5081a2b5c283b1fb8e4a913705c75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae43a3a37e9f5529a5f7e724b82634bbb"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:ae43a3a37e9f5529a5f7e724b82634bbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcb67b31aa05cecdd11bd13da156e1db"><td class="memItemLeft" >
+&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>raw</b> [3]</td></tr>
+<tr class="separator:abcb67b31aa05cecdd11bd13da156e1db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac42402dcbdd80073ae41e5c2e48f41be"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:ac42402dcbdd80073ae41e5c2e48f41be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="pixeltypes_8h_source.html">pixeltypes.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_c_r_g_b-members.html b/docs/3.1/struct_c_r_g_b-members.html
new file mode 100644
index 00000000..1d9a6405
--- /dev/null
+++ b/docs/3.1/struct_c_r_g_b-members.html
@@ -0,0 +1,300 @@
+<!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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">CRGB Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_c_r_g_b.html">CRGB</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>addToRGB</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>AliceBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Amethyst</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>AntiqueWhite</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Aqua</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Aquamarine</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Azure</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>b</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Beige</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Bisque</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Black</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>BlanchedAlmond</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Blue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>blue</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BlueViolet</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Brown</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BurlyWood</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CadetBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Chartreuse</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Chocolate</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Coral</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CornflowerBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Cornsilk</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGB</b>() __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGB</b>(uint8_t ir, uint8_t ig, uint8_t ib) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGB</b>(uint32_t colorcode) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGB</b>(LEDColorCorrection colorcode) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGB</b>(ColorTemperature colorcode) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CRGB</b>(const CRGB &amp;rhs) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CRGB</b>(const CHSV &amp;rhs) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Crimson</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Cyan</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkCyan</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkGoldenrod</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkGray</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkGrey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkKhaki</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkMagenta</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkOliveGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkOrange</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkOrchid</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkRed</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkSalmon</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkSeaGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkSlateBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkSlateGray</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkSlateGrey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DarkTurquoise</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DarkViolet</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DeepPink</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DeepSkyBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DimGray</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DimGrey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>DodgerBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fadeLightBy</b>(uint8_t fadefactor) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>fadeToBlackBy</b>(uint8_t fadefactor) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FireBrick</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>FloralWhite</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ForestGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Fuchsia</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>g</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Gainsboro</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getAverageLight</b>() (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getLuma</b>() (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GhostWhite</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Gold</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Goldenrod</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Gray</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Green</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>green</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GreenYellow</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Grey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Honeydew</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>HotPink</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>HTMLColorCode</b> enum name (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>IndianRed</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Indigo</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Ivory</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Khaki</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Lavender</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LavenderBlush</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LawnGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LemonChiffon</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lerp16</b>(CRGB &amp;other, fract16 frac) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lerp8</b>(CRGB &amp;other, fract8 frac) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightCoral</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightCyan</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightGoldenrodYellow</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightGrey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightPink</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightSalmon</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightSeaGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightSkyBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightSlateGray</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightSlateGrey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>LightSteelBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LightYellow</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Lime</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LimeGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Linen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Magenta</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Maroon</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>maximizeBrightness</b>(uint8_t limit=255) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MediumAquamarine</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MediumBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MediumOrchid</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MediumPurple</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MediumSeaGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MediumSlateBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MediumSpringGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MediumTurquoise</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MediumVioletRed</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MidnightBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MintCream</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MistyRose</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Moccasin</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NavajoWhite</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Navy</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nscale8</b>(uint8_t scaledown) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>nscale8_video</b>(uint8_t scaledown) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OldLace</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Olive</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OliveDrab</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator bool</b>() const __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator%=</b>(uint8_t scaledown) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator&amp;=</b>(const CRGB &amp;rhs) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator&amp;=</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator*=</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator++</b>() __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator++</b>(int DUMMY_ARG) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator+=</b>(const CRGB &amp;rhs) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator-</b>() (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator--</b>() __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator--</b>(int DUMMY_ARG) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator-=</b>(const CRGB &amp;rhs) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator/=</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CRGB &amp;rhs) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const uint32_t colorcode) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const CHSV &amp;rhs) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator&gt;&gt;=</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uint8_t x) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uint8_t x) const __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator|=</b>(const CRGB &amp;rhs) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator|=</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Orange</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>OrangeRed</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Orchid</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PaleGoldenrod</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PaleGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PaleTurquoise</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PaleVioletRed</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PapayaWhip</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PeachPuff</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Peru</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Pink</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Plaid</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Plum</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PowderBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Purple</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>r</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>raw</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Red</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>red</b> (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>RosyBrown</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RoyalBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SaddleBrown</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Salmon</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SandyBrown</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SeaGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Seashell</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setColorCode</b>(uint32_t colorcode) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setHSV</b>(uint8_t hue, uint8_t sat, uint8_t val) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setHue</b>(uint8_t hue) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setRGB</b>(uint8_t nr, uint8_t ng, uint8_t nb) __attribute__((always_inline)) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Sienna</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Silver</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SkyBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SlateBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SlateGray</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SlateGrey</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Snow</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SpringGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SteelBlue</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>subtractFromRGB</b>(uint8_t d) (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Tan</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Teal</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Thistle</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Tomato</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Turquoise</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Violet</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Wheat</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>White</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>WhiteSmoke</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Yellow</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>YellowGreen</b> enum value (defined in <a class="el" href="struct_c_r_g_b.html">CRGB</a>)</td><td class="entry"><a class="el" href="struct_c_r_g_b.html">CRGB</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_c_r_g_b.html b/docs/3.1/struct_c_r_g_b.html
new file mode 100644
index 00000000..2a43c72b
--- /dev/null
+++ b/docs/3.1/struct_c_r_g_b.html
@@ -0,0 +1,471 @@
+<!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.8"/>
+<title>FastLED: CRGB Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="struct_c_r_g_b-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">CRGB Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:aeb40a08b7cb90c1e21bd408261558b99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb40a08b7cb90c1e21bd408261558b99"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>HTMLColorCode</b> { <br />
+&#160;&#160;<b>AliceBlue</b> =0xF0F8FF,
+<b>Amethyst</b> =0x9966CC,
+<b>AntiqueWhite</b> =0xFAEBD7,
+<b>Aqua</b> =0x00FFFF,
+<br />
+&#160;&#160;<b>Aquamarine</b> =0x7FFFD4,
+<b>Azure</b> =0xF0FFFF,
+<b>Beige</b> =0xF5F5DC,
+<b>Bisque</b> =0xFFE4C4,
+<br />
+&#160;&#160;<b>Black</b> =0x000000,
+<b>BlanchedAlmond</b> =0xFFEBCD,
+<b>Blue</b> =0x0000FF,
+<b>BlueViolet</b> =0x8A2BE2,
+<br />
+&#160;&#160;<b>Brown</b> =0xA52A2A,
+<b>BurlyWood</b> =0xDEB887,
+<b>CadetBlue</b> =0x5F9EA0,
+<b>Chartreuse</b> =0x7FFF00,
+<br />
+&#160;&#160;<b>Chocolate</b> =0xD2691E,
+<b>Coral</b> =0xFF7F50,
+<b>CornflowerBlue</b> =0x6495ED,
+<b>Cornsilk</b> =0xFFF8DC,
+<br />
+&#160;&#160;<b>Crimson</b> =0xDC143C,
+<b>Cyan</b> =0x00FFFF,
+<b>DarkBlue</b> =0x00008B,
+<b>DarkCyan</b> =0x008B8B,
+<br />
+&#160;&#160;<b>DarkGoldenrod</b> =0xB8860B,
+<b>DarkGray</b> =0xA9A9A9,
+<b>DarkGrey</b> =0xA9A9A9,
+<b>DarkGreen</b> =0x006400,
+<br />
+&#160;&#160;<b>DarkKhaki</b> =0xBDB76B,
+<b>DarkMagenta</b> =0x8B008B,
+<b>DarkOliveGreen</b> =0x556B2F,
+<b>DarkOrange</b> =0xFF8C00,
+<br />
+&#160;&#160;<b>DarkOrchid</b> =0x9932CC,
+<b>DarkRed</b> =0x8B0000,
+<b>DarkSalmon</b> =0xE9967A,
+<b>DarkSeaGreen</b> =0x8FBC8F,
+<br />
+&#160;&#160;<b>DarkSlateBlue</b> =0x483D8B,
+<b>DarkSlateGray</b> =0x2F4F4F,
+<b>DarkSlateGrey</b> =0x2F4F4F,
+<b>DarkTurquoise</b> =0x00CED1,
+<br />
+&#160;&#160;<b>DarkViolet</b> =0x9400D3,
+<b>DeepPink</b> =0xFF1493,
+<b>DeepSkyBlue</b> =0x00BFFF,
+<b>DimGray</b> =0x696969,
+<br />
+&#160;&#160;<b>DimGrey</b> =0x696969,
+<b>DodgerBlue</b> =0x1E90FF,
+<b>FireBrick</b> =0xB22222,
+<b>FloralWhite</b> =0xFFFAF0,
+<br />
+&#160;&#160;<b>ForestGreen</b> =0x228B22,
+<b>Fuchsia</b> =0xFF00FF,
+<b>Gainsboro</b> =0xDCDCDC,
+<b>GhostWhite</b> =0xF8F8FF,
+<br />
+&#160;&#160;<b>Gold</b> =0xFFD700,
+<b>Goldenrod</b> =0xDAA520,
+<b>Gray</b> =0x808080,
+<b>Grey</b> =0x808080,
+<br />
+&#160;&#160;<b>Green</b> =0x008000,
+<b>GreenYellow</b> =0xADFF2F,
+<b>Honeydew</b> =0xF0FFF0,
+<b>HotPink</b> =0xFF69B4,
+<br />
+&#160;&#160;<b>IndianRed</b> =0xCD5C5C,
+<b>Indigo</b> =0x4B0082,
+<b>Ivory</b> =0xFFFFF0,
+<b>Khaki</b> =0xF0E68C,
+<br />
+&#160;&#160;<b>Lavender</b> =0xE6E6FA,
+<b>LavenderBlush</b> =0xFFF0F5,
+<b>LawnGreen</b> =0x7CFC00,
+<b>LemonChiffon</b> =0xFFFACD,
+<br />
+&#160;&#160;<b>LightBlue</b> =0xADD8E6,
+<b>LightCoral</b> =0xF08080,
+<b>LightCyan</b> =0xE0FFFF,
+<b>LightGoldenrodYellow</b> =0xFAFAD2,
+<br />
+&#160;&#160;<b>LightGreen</b> =0x90EE90,
+<b>LightGrey</b> =0xD3D3D3,
+<b>LightPink</b> =0xFFB6C1,
+<b>LightSalmon</b> =0xFFA07A,
+<br />
+&#160;&#160;<b>LightSeaGreen</b> =0x20B2AA,
+<b>LightSkyBlue</b> =0x87CEFA,
+<b>LightSlateGray</b> =0x778899,
+<b>LightSlateGrey</b> =0x778899,
+<br />
+&#160;&#160;<b>LightSteelBlue</b> =0xB0C4DE,
+<b>LightYellow</b> =0xFFFFE0,
+<b>Lime</b> =0x00FF00,
+<b>LimeGreen</b> =0x32CD32,
+<br />
+&#160;&#160;<b>Linen</b> =0xFAF0E6,
+<b>Magenta</b> =0xFF00FF,
+<b>Maroon</b> =0x800000,
+<b>MediumAquamarine</b> =0x66CDAA,
+<br />
+&#160;&#160;<b>MediumBlue</b> =0x0000CD,
+<b>MediumOrchid</b> =0xBA55D3,
+<b>MediumPurple</b> =0x9370DB,
+<b>MediumSeaGreen</b> =0x3CB371,
+<br />
+&#160;&#160;<b>MediumSlateBlue</b> =0x7B68EE,
+<b>MediumSpringGreen</b> =0x00FA9A,
+<b>MediumTurquoise</b> =0x48D1CC,
+<b>MediumVioletRed</b> =0xC71585,
+<br />
+&#160;&#160;<b>MidnightBlue</b> =0x191970,
+<b>MintCream</b> =0xF5FFFA,
+<b>MistyRose</b> =0xFFE4E1,
+<b>Moccasin</b> =0xFFE4B5,
+<br />
+&#160;&#160;<b>NavajoWhite</b> =0xFFDEAD,
+<b>Navy</b> =0x000080,
+<b>OldLace</b> =0xFDF5E6,
+<b>Olive</b> =0x808000,
+<br />
+&#160;&#160;<b>OliveDrab</b> =0x6B8E23,
+<b>Orange</b> =0xFFA500,
+<b>OrangeRed</b> =0xFF4500,
+<b>Orchid</b> =0xDA70D6,
+<br />
+&#160;&#160;<b>PaleGoldenrod</b> =0xEEE8AA,
+<b>PaleGreen</b> =0x98FB98,
+<b>PaleTurquoise</b> =0xAFEEEE,
+<b>PaleVioletRed</b> =0xDB7093,
+<br />
+&#160;&#160;<b>PapayaWhip</b> =0xFFEFD5,
+<b>PeachPuff</b> =0xFFDAB9,
+<b>Peru</b> =0xCD853F,
+<b>Pink</b> =0xFFC0CB,
+<br />
+&#160;&#160;<b>Plaid</b> =0xCC5533,
+<b>Plum</b> =0xDDA0DD,
+<b>PowderBlue</b> =0xB0E0E6,
+<b>Purple</b> =0x800080,
+<br />
+&#160;&#160;<b>Red</b> =0xFF0000,
+<b>RosyBrown</b> =0xBC8F8F,
+<b>RoyalBlue</b> =0x4169E1,
+<b>SaddleBrown</b> =0x8B4513,
+<br />
+&#160;&#160;<b>Salmon</b> =0xFA8072,
+<b>SandyBrown</b> =0xF4A460,
+<b>SeaGreen</b> =0x2E8B57,
+<b>Seashell</b> =0xFFF5EE,
+<br />
+&#160;&#160;<b>Sienna</b> =0xA0522D,
+<b>Silver</b> =0xC0C0C0,
+<b>SkyBlue</b> =0x87CEEB,
+<b>SlateBlue</b> =0x6A5ACD,
+<br />
+&#160;&#160;<b>SlateGray</b> =0x708090,
+<b>SlateGrey</b> =0x708090,
+<b>Snow</b> =0xFFFAFA,
+<b>SpringGreen</b> =0x00FF7F,
+<br />
+&#160;&#160;<b>SteelBlue</b> =0x4682B4,
+<b>Tan</b> =0xD2B48C,
+<b>Teal</b> =0x008080,
+<b>Thistle</b> =0xD8BFD8,
+<br />
+&#160;&#160;<b>Tomato</b> =0xFF6347,
+<b>Turquoise</b> =0x40E0D0,
+<b>Violet</b> =0xEE82EE,
+<b>Wheat</b> =0xF5DEB3,
+<br />
+&#160;&#160;<b>White</b> =0xFFFFFF,
+<b>WhiteSmoke</b> =0xF5F5F5,
+<b>Yellow</b> =0xFFFF00,
+<b>YellowGreen</b> =0x9ACD32
+<br />
+ }</td></tr>
+<tr class="separator:aeb40a08b7cb90c1e21bd408261558b99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a387c1484960be0f72a87c3369cdbba26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a387c1484960be0f72a87c3369cdbba26"></a>
+uint8_t &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) __attribute__((always_inline))</td></tr>
+<tr class="separator:a387c1484960be0f72a87c3369cdbba26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4a041a5ad28b9ffb3a69fa88a0bd635"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4a041a5ad28b9ffb3a69fa88a0bd635"></a>
+const uint8_t &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uint8_t x) const __attribute__((always_inline))</td></tr>
+<tr class="separator:aa4a041a5ad28b9ffb3a69fa88a0bd635"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac97afb676b3be14769ede58a55b1078a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac97afb676b3be14769ede58a55b1078a"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGB</b> (uint8_t ir, uint8_t ig, uint8_t ib) __attribute__((always_inline))</td></tr>
+<tr class="separator:ac97afb676b3be14769ede58a55b1078a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae912836f41dd2979ade6188ab0446fcf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae912836f41dd2979ade6188ab0446fcf"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGB</b> (uint32_t colorcode) __attribute__((always_inline))</td></tr>
+<tr class="separator:ae912836f41dd2979ade6188ab0446fcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d12a1fba2712ba1153f5b73da6a3e3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d12a1fba2712ba1153f5b73da6a3e3d"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGB</b> (LEDColorCorrection colorcode) __attribute__((always_inline))</td></tr>
+<tr class="separator:a7d12a1fba2712ba1153f5b73da6a3e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86a495b2fb767196fb6b9e1d202a97c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86a495b2fb767196fb6b9e1d202a97c8"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGB</b> (ColorTemperature colorcode) __attribute__((always_inline))</td></tr>
+<tr class="separator:a86a495b2fb767196fb6b9e1d202a97c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ac0b64fb80dde1dc28e74b60da00b82"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ac0b64fb80dde1dc28e74b60da00b82"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGB</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rhs) __attribute__((always_inline))</td></tr>
+<tr class="separator:a6ac0b64fb80dde1dc28e74b60da00b82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9edaa43d7f1d6777b543c08b14844f13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9edaa43d7f1d6777b543c08b14844f13"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGB</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;rhs) __attribute__((always_inline))</td></tr>
+<tr class="separator:a9edaa43d7f1d6777b543c08b14844f13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15ece8b6b3b8a54e61716cd2f0ecfd79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15ece8b6b3b8a54e61716cd2f0ecfd79"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rhs) __attribute__((always_inline))</td></tr>
+<tr class="separator:a15ece8b6b3b8a54e61716cd2f0ecfd79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a296fb2b628e6323d78fabcb6feee60ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a296fb2b628e6323d78fabcb6feee60ad"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const uint32_t colorcode) __attribute__((always_inline))</td></tr>
+<tr class="separator:a296fb2b628e6323d78fabcb6feee60ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a838b22bb1632166760934935a309e9d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a838b22bb1632166760934935a309e9d9"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setRGB</b> (uint8_t nr, uint8_t ng, uint8_t nb) __attribute__((always_inline))</td></tr>
+<tr class="separator:a838b22bb1632166760934935a309e9d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac53fdb8ec5dc5b8c16904d971106ad75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac53fdb8ec5dc5b8c16904d971106ad75"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setHSV</b> (uint8_t hue, uint8_t sat, uint8_t val) __attribute__((always_inline))</td></tr>
+<tr class="separator:ac53fdb8ec5dc5b8c16904d971106ad75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed04286b07335deede64d6de109a7312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed04286b07335deede64d6de109a7312"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setHue</b> (uint8_t hue) __attribute__((always_inline))</td></tr>
+<tr class="separator:aed04286b07335deede64d6de109a7312"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a959221eefd8848005cf726d3acd7a1d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a959221eefd8848005cf726d3acd7a1d0"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="struct_c_h_s_v.html">CHSV</a> &amp;rhs) __attribute__((always_inline))</td></tr>
+<tr class="separator:a959221eefd8848005cf726d3acd7a1d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee58e5c4ced4d42332280252d7e516d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee58e5c4ced4d42332280252d7e516d5"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>setColorCode</b> (uint32_t colorcode) __attribute__((always_inline))</td></tr>
+<tr class="separator:aee58e5c4ced4d42332280252d7e516d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb47a8179f4124ba90c701b467e705ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb47a8179f4124ba90c701b467e705ce"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator+=</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rhs)</td></tr>
+<tr class="separator:adb47a8179f4124ba90c701b467e705ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6855b3f3a79778436044c9786ff00b73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6855b3f3a79778436044c9786ff00b73"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>addToRGB</b> (uint8_t d)</td></tr>
+<tr class="separator:a6855b3f3a79778436044c9786ff00b73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7591f8a1299a6f54963cff08d94222a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7591f8a1299a6f54963cff08d94222a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator-=</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rhs)</td></tr>
+<tr class="separator:ac7591f8a1299a6f54963cff08d94222a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5e0ce520027b5bc5b8aa106c113119c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5e0ce520027b5bc5b8aa106c113119c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>subtractFromRGB</b> (uint8_t d)</td></tr>
+<tr class="separator:af5e0ce520027b5bc5b8aa106c113119c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a218446cd8788c0659c5ad2b4c16c425c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a218446cd8788c0659c5ad2b4c16c425c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator--</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:a218446cd8788c0659c5ad2b4c16c425c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afca6a189ce1da99d897f755b1ca16638"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afca6a189ce1da99d897f755b1ca16638"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>operator--</b> (int DUMMY_ARG) __attribute__((always_inline))</td></tr>
+<tr class="separator:afca6a189ce1da99d897f755b1ca16638"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2a226518db12ea874e182a7d311c2e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2a226518db12ea874e182a7d311c2e3"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator++</b> () __attribute__((always_inline))</td></tr>
+<tr class="separator:ac2a226518db12ea874e182a7d311c2e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c63d3f14b33017ff037309324d93169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c63d3f14b33017ff037309324d93169"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>operator++</b> (int DUMMY_ARG) __attribute__((always_inline))</td></tr>
+<tr class="separator:a2c63d3f14b33017ff037309324d93169"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa630fb7918dc81f255525ee90152e62f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa630fb7918dc81f255525ee90152e62f"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator/=</b> (uint8_t d)</td></tr>
+<tr class="separator:aa630fb7918dc81f255525ee90152e62f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a650404deb81cd2785fd9060c076393e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a650404deb81cd2785fd9060c076393e6"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator&gt;&gt;=</b> (uint8_t d)</td></tr>
+<tr class="separator:a650404deb81cd2785fd9060c076393e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad649a38adbfdabca5930019a8b6bc4d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad649a38adbfdabca5930019a8b6bc4d8"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator*=</b> (uint8_t d)</td></tr>
+<tr class="separator:ad649a38adbfdabca5930019a8b6bc4d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8bb881dd011552b412af2845562b0df3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bb881dd011552b412af2845562b0df3"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>nscale8_video</b> (uint8_t scaledown)</td></tr>
+<tr class="separator:a8bb881dd011552b412af2845562b0df3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19d9f31569817a6274338a615e15ed43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19d9f31569817a6274338a615e15ed43"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator%=</b> (uint8_t scaledown)</td></tr>
+<tr class="separator:a19d9f31569817a6274338a615e15ed43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9eeb8fc616c7a50805b8146baffef8fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eeb8fc616c7a50805b8146baffef8fd"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>fadeLightBy</b> (uint8_t fadefactor)</td></tr>
+<tr class="separator:a9eeb8fc616c7a50805b8146baffef8fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa80fd3b2990b00a963aa009a3c4d095a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa80fd3b2990b00a963aa009a3c4d095a"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>nscale8</b> (uint8_t scaledown)</td></tr>
+<tr class="separator:aa80fd3b2990b00a963aa009a3c4d095a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab49109cf2ec532c643d4998f03cf16c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab49109cf2ec532c643d4998f03cf16c7"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>fadeToBlackBy</b> (uint8_t fadefactor)</td></tr>
+<tr class="separator:ab49109cf2ec532c643d4998f03cf16c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84d8cb63b6fe8766b8b4bd66a189735f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84d8cb63b6fe8766b8b4bd66a189735f"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator|=</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rhs)</td></tr>
+<tr class="separator:a84d8cb63b6fe8766b8b4bd66a189735f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac48c58ea6784e615b782bfe65a2b9638"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac48c58ea6784e615b782bfe65a2b9638"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator|=</b> (uint8_t d)</td></tr>
+<tr class="separator:ac48c58ea6784e615b782bfe65a2b9638"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07ccf0b05534eb13009555f751ec86f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ccf0b05534eb13009555f751ec86f4"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator&amp;=</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rhs)</td></tr>
+<tr class="separator:a07ccf0b05534eb13009555f751ec86f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29d80828c7e4dfc2107b38dd51496234"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29d80828c7e4dfc2107b38dd51496234"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator&amp;=</b> (uint8_t d)</td></tr>
+<tr class="separator:a29d80828c7e4dfc2107b38dd51496234"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa09bbdf1b04eac9fb792ca4cbf9fd74c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa09bbdf1b04eac9fb792ca4cbf9fd74c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator bool</b> () const __attribute__((always_inline))</td></tr>
+<tr class="separator:aa09bbdf1b04eac9fb792ca4cbf9fd74c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af32e6bf80075fd5b3d8195fff790a036"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af32e6bf80075fd5b3d8195fff790a036"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>operator-</b> ()</td></tr>
+<tr class="separator:af32e6bf80075fd5b3d8195fff790a036"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee82bf59b5b35061ba1a0b06c774aabf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee82bf59b5b35061ba1a0b06c774aabf"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getLuma</b> ()</td></tr>
+<tr class="separator:aee82bf59b5b35061ba1a0b06c774aabf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad6980707dcdedbfbdde49504a37cbbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad6980707dcdedbfbdde49504a37cbbd"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getAverageLight</b> ()</td></tr>
+<tr class="separator:aad6980707dcdedbfbdde49504a37cbbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b0b8f3da2b3b2b44778e142dbae47ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b0b8f3da2b3b2b44778e142dbae47ed"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>maximizeBrightness</b> (uint8_t limit=255)</td></tr>
+<tr class="separator:a6b0b8f3da2b3b2b44778e142dbae47ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab29249e850cfb300590408edcbcf5704"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab29249e850cfb300590408edcbcf5704"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>lerp8</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;other, fract8 frac)</td></tr>
+<tr class="separator:ab29249e850cfb300590408edcbcf5704"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77cbf242403cf6e190c6aa3598129e1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77cbf242403cf6e190c6aa3598129e1c"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>lerp16</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;other, fract16 frac)</td></tr>
+<tr class="separator:a77cbf242403cf6e190c6aa3598129e1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a3535c380c5e0783adbd64f2aad2b3ab5"><td class="memItemLeft" ><a class="anchor" id="a3535c380c5e0783adbd64f2aad2b3ab5"></a>
+union {</td></tr>
+<tr class="memitem:a10f654406b4b2a93a659b7558536bee8"><td class="memItemLeft" ><a class="anchor" id="a10f654406b4b2a93a659b7558536bee8"></a>
+&#160;&#160;&#160;struct {</td></tr>
+<tr class="memitem:a5c300e5ca38b8af13fa86bd198ee4fb0"><td class="memItemLeft" ><a class="anchor" id="a5c300e5ca38b8af13fa86bd198ee4fb0"></a>
+&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
+<tr class="memitem:a0f1661e781e335e84531aa0927a6cb91"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>r</b></td></tr>
+<tr class="separator:a0f1661e781e335e84531aa0927a6cb91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15f26f44ba9e20a95d9dfc20aa540b4e"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>red</b></td></tr>
+<tr class="separator:a15f26f44ba9e20a95d9dfc20aa540b4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c300e5ca38b8af13fa86bd198ee4fb0"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a5c300e5ca38b8af13fa86bd198ee4fb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab74b5e820e52ca26b3ac0e741d8a5353"><td class="memItemLeft" ><a class="anchor" id="ab74b5e820e52ca26b3ac0e741d8a5353"></a>
+&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
+<tr class="memitem:afe0760941fee2f8c09e5249dabd03ac2"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>g</b></td></tr>
+<tr class="separator:afe0760941fee2f8c09e5249dabd03ac2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a363eff9c64a7c88f8232e32d7dce3305"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>green</b></td></tr>
+<tr class="separator:a363eff9c64a7c88f8232e32d7dce3305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab74b5e820e52ca26b3ac0e741d8a5353"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:ab74b5e820e52ca26b3ac0e741d8a5353"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d3121026d0c610f59dc3f294351896b"><td class="memItemLeft" ><a class="anchor" id="a3d3121026d0c610f59dc3f294351896b"></a>
+&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
+<tr class="memitem:a42f299279ec584887ddd8f5966e97b97"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>b</b></td></tr>
+<tr class="separator:a42f299279ec584887ddd8f5966e97b97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a722b674ed21f071ee5e596784288dd17"><td class="memItemLeft" >
+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>blue</b></td></tr>
+<tr class="separator:a722b674ed21f071ee5e596784288dd17"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d3121026d0c610f59dc3f294351896b"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a3d3121026d0c610f59dc3f294351896b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10f654406b4b2a93a659b7558536bee8"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a10f654406b4b2a93a659b7558536bee8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f037cce9e2ba29b4b22ff0370935250"><td class="memItemLeft" >
+&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>raw</b> [3]</td></tr>
+<tr class="separator:a2f037cce9e2ba29b4b22ff0370935250"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3535c380c5e0783adbd64f2aad2b3ab5"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a3535c380c5e0783adbd64f2aad2b3ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="pixeltypes_8h_source.html">pixeltypes.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_multi_pixel_controller-members.html b/docs/3.1/struct_multi_pixel_controller-members.html
new file mode 100644
index 00000000..c2e8c5b7
--- /dev/null
+++ b/docs/3.1/struct_multi_pixel_controller-members.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline bool has(int n) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline int advanceBy() (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline void advanceData() (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline void stepDithering() (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline void preStepFirstByteDithering() (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t loadByte(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t dither(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t dither(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t scale(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t scale(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t loadAndScale(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t loadAndScale(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t loadAndScale(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t advanceAndLoadAndScale(MultiPixelController &amp;pc (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t getd(MultiPixelController &amp;pc) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t getscale(MultiPixelController &amp;pc) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale0(int lane) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale1(int lane) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale2(int lane) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale0(int lane (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale1(int lane (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale2(int lane (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t advanceAndLoadAndScale0(int lane) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t stepAdvanceAndLoadAndScale0(int lane) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>b</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>d</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>d</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>d</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>e</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>enable_dithering</b>(EDitherMode dither) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init_binary_dithering</b>() (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>initOffsets</b>(int len) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lane</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>loadAndScale</b>(pc, lane) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mAdvance</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mData</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mLen</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mOffsets</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mScale</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MultiPixelController</b>(const MultiPixelController &amp;other) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MultiPixelController</b>(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>MultiPixelController</b>(const CRGB *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MultiPixelController</b>(const CRGB &amp;d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER) (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scale</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>scale</b> (defined in <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_multi_pixel_controller.html b/docs/3.1/struct_multi_pixel_controller.html
new file mode 100644
index 00000000..883fff56
--- /dev/null
+++ b/docs/3.1/struct_multi_pixel_controller.html
@@ -0,0 +1,261 @@
+<!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.8"/>
+<title>FastLED: MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt; Struct 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="struct_multi_pixel_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt; Struct Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac67219ff65e29e90aefa65ad26f9f543"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac67219ff65e29e90aefa65ad26f9f543"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>MultiPixelController</b> (const <a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;other)</td></tr>
+<tr class="separator:ac67219ff65e29e90aefa65ad26f9f543"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4917d462222489afb3e80ee7483b885b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4917d462222489afb3e80ee7483b885b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>initOffsets</b> (int len)</td></tr>
+<tr class="separator:a4917d462222489afb3e80ee7483b885b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d7708c1ed497931868fc3619bf29c2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d7708c1ed497931868fc3619bf29c2e"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>MultiPixelController</b> (const uint8_t *d, int len, <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)</td></tr>
+<tr class="separator:a6d7708c1ed497931868fc3619bf29c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5cc48ad7320edd6ed872bc74ea74b14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5cc48ad7320edd6ed872bc74ea74b14"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>MultiPixelController</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> *d, int len, <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;s, EDitherMode dither=BINARY_DITHER)</td></tr>
+<tr class="separator:ae5cc48ad7320edd6ed872bc74ea74b14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a744ad917886ac61cfee6a0ae8454685c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a744ad917886ac61cfee6a0ae8454685c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>MultiPixelController</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;d, int len, <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;s, EDitherMode dither=BINARY_DITHER)</td></tr>
+<tr class="separator:a744ad917886ac61cfee6a0ae8454685c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a008c610152750552f0cab513a71add4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a008c610152750552f0cab513a71add4f"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>init_binary_dithering</b> ()</td></tr>
+<tr class="separator:a008c610152750552f0cab513a71add4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a266ce7479122f0ab79d130ea12cdbcef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a266ce7479122f0ab79d130ea12cdbcef"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline bool has(int n)</td></tr>
+<tr class="separator:a266ce7479122f0ab79d130ea12cdbcef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad00a64d394ba9b5b64d8e9056620a043"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad00a64d394ba9b5b64d8e9056620a043"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>enable_dithering</b> (EDitherMode dither)</td></tr>
+<tr class="separator:ad00a64d394ba9b5b64d8e9056620a043"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacbff452068e5269686fcfbecf289d6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacbff452068e5269686fcfbecf289d6b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline int advanceBy()</td></tr>
+<tr class="separator:aacbff452068e5269686fcfbecf289d6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e971dc5a63e58d8e68425e1968c24b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e971dc5a63e58d8e68425e1968c24b8"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void advanceData()</td></tr>
+<tr class="separator:a4e971dc5a63e58d8e68425e1968c24b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b55eb14102e1424c91086e91b93789f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b55eb14102e1424c91086e91b93789f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void stepDithering()</td></tr>
+<tr class="separator:a7b55eb14102e1424c91086e91b93789f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2fd28b0c739fc1eb5d1123f94cf125b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2fd28b0c739fc1eb5d1123f94cf125b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void preStepFirstByteDithering()</td></tr>
+<tr class="separator:ae2fd28b0c739fc1eb5d1123f94cf125b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ba8ae0a6725568d7180fe325252b22d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8ba8ae0a6725568d7180fe325252b22d"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a8ba8ae0a6725568d7180fe325252b22d"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t loadByte(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a8ba8ae0a6725568d7180fe325252b22d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5eba2f947b5ecb52063a41879536c620"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5eba2f947b5ecb52063a41879536c620"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a5eba2f947b5ecb52063a41879536c620"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t dither(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a5eba2f947b5ecb52063a41879536c620"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5eba2f947b5ecb52063a41879536c620"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5eba2f947b5ecb52063a41879536c620"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a5eba2f947b5ecb52063a41879536c620"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t dither(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a5eba2f947b5ecb52063a41879536c620"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a455d6c4da606bf61ae708548b88bba05"><td class="memTemplParams" colspan="2"><a class="anchor" id="a455d6c4da606bf61ae708548b88bba05"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a455d6c4da606bf61ae708548b88bba05"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t scale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a455d6c4da606bf61ae708548b88bba05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a455d6c4da606bf61ae708548b88bba05"><td class="memTemplParams" colspan="2"><a class="anchor" id="a455d6c4da606bf61ae708548b88bba05"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a455d6c4da606bf61ae708548b88bba05"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t scale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a455d6c4da606bf61ae708548b88bba05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35143a9f281172838311904205d45ec4"><td class="memTemplParams" colspan="2"><a class="anchor" id="a35143a9f281172838311904205d45ec4"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a35143a9f281172838311904205d45ec4"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t loadAndScale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a35143a9f281172838311904205d45ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35143a9f281172838311904205d45ec4"><td class="memTemplParams" colspan="2"><a class="anchor" id="a35143a9f281172838311904205d45ec4"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a35143a9f281172838311904205d45ec4"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t loadAndScale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a35143a9f281172838311904205d45ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35143a9f281172838311904205d45ec4"><td class="memTemplParams" colspan="2"><a class="anchor" id="a35143a9f281172838311904205d45ec4"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a35143a9f281172838311904205d45ec4"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t loadAndScale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:a35143a9f281172838311904205d45ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe444bbcbee1cc37c1d144a979181224"><td class="memTemplParams" colspan="2"><a class="anchor" id="afe444bbcbee1cc37c1d144a979181224"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:afe444bbcbee1cc37c1d144a979181224"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t advanceAndLoadAndScale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc</td></tr>
+<tr class="separator:afe444bbcbee1cc37c1d144a979181224"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7c352d2db53f2421476db3d9a44dddc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7c352d2db53f2421476db3d9a44dddc"></a>
+return pc&#160;</td><td class="memItemRight" valign="bottom"><b>loadAndScale</b> (pc, lane)</td></tr>
+<tr class="separator:ab7c352d2db53f2421476db3d9a44dddc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5e050359173d1d1b1dacde78d971ed8"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa5e050359173d1d1b1dacde78d971ed8"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:aa5e050359173d1d1b1dacde78d971ed8"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t getd(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc)</td></tr>
+<tr class="separator:aa5e050359173d1d1b1dacde78d971ed8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a947244c9f7b2d18aa811fdef27177ec1"><td class="memTemplParams" colspan="2"><a class="anchor" id="a947244c9f7b2d18aa811fdef27177ec1"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a947244c9f7b2d18aa811fdef27177ec1"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t getscale(<a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a> &amp;pc)</td></tr>
+<tr class="separator:a947244c9f7b2d18aa811fdef27177ec1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15003391803d041b91bc3a12cdf04efb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15003391803d041b91bc3a12cdf04efb"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale0(int lane)</td></tr>
+<tr class="separator:a15003391803d041b91bc3a12cdf04efb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a512c0e21c07cea7d87dc62397a824ff6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a512c0e21c07cea7d87dc62397a824ff6"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale1(int lane)</td></tr>
+<tr class="separator:a512c0e21c07cea7d87dc62397a824ff6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4715a8a0d7f2feb043ca2058a49c214e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4715a8a0d7f2feb043ca2058a49c214e"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale2(int lane)</td></tr>
+<tr class="separator:a4715a8a0d7f2feb043ca2058a49c214e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae1f02fa336d402b2035d99d17349477e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1f02fa336d402b2035d99d17349477e"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale0(int lane</td></tr>
+<tr class="separator:ae1f02fa336d402b2035d99d17349477e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab02a58637bec3c338a5428df8eb83504"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab02a58637bec3c338a5428df8eb83504"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale1(int lane</td></tr>
+<tr class="separator:ab02a58637bec3c338a5428df8eb83504"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaadfce087b61a83f1e1c68bade03cd46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaadfce087b61a83f1e1c68bade03cd46"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale2(int lane</td></tr>
+<tr class="separator:aaadfce087b61a83f1e1c68bade03cd46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ee1510a283d143475da3db47484b19d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ee1510a283d143475da3db47484b19d"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t advanceAndLoadAndScale0(int lane)</td></tr>
+<tr class="separator:a3ee1510a283d143475da3db47484b19d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b77f489465b4a790f67c166db12c140"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b77f489465b4a790f67c166db12c140"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t stepAdvanceAndLoadAndScale0(int lane)</td></tr>
+<tr class="separator:a6b77f489465b4a790f67c166db12c140"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a00e21a3c908f0e21b1e05e845ba8699c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00e21a3c908f0e21b1e05e845ba8699c"></a>
+const uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><b>mData</b></td></tr>
+<tr class="separator:a00e21a3c908f0e21b1e05e845ba8699c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a404bb484c52ad2343c026b9cd9604307"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a404bb484c52ad2343c026b9cd9604307"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>mLen</b></td></tr>
+<tr class="separator:a404bb484c52ad2343c026b9cd9604307"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02d2880fd93339e1865b99920ec352ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02d2880fd93339e1865b99920ec352ff"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>d</b> [3]</td></tr>
+<tr class="separator:a02d2880fd93339e1865b99920ec352ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9120a6905c419a131469f0a69734d4e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9120a6905c419a131469f0a69734d4e0"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>e</b> [3]</td></tr>
+<tr class="separator:a9120a6905c419a131469f0a69734d4e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6485e4c2914a9e22bd0ea41d8b7c33d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6485e4c2914a9e22bd0ea41d8b7c33d0"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mScale</b></td></tr>
+<tr class="separator:a6485e4c2914a9e22bd0ea41d8b7c33d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32666eb7fadb98c41cb040afc0c98173"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32666eb7fadb98c41cb040afc0c98173"></a>
+int8_t&#160;</td><td class="memItemRight" valign="bottom"><b>mAdvance</b></td></tr>
+<tr class="separator:a32666eb7fadb98c41cb040afc0c98173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c5f3c2b6b0db71dc82fed8b0b2d0e5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c5f3c2b6b0db71dc82fed8b0b2d0e5d"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>mOffsets</b> [LANES]</td></tr>
+<tr class="separator:a9c5f3c2b6b0db71dc82fed8b0b2d0e5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d2b34f8f4ff00e5762e953df30b1aff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d2b34f8f4ff00e5762e953df30b1aff"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>lane</b> { return pc.mData[pc.mOffsets[lane] + RO(SLOT)]</td></tr>
+<tr class="separator:a6d2b34f8f4ff00e5762e953df30b1aff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2a8106eb1be28b347103bacfcd926d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2a8106eb1be28b347103bacfcd926d6"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>b</b> { return b ? qadd8(b, pc.d[RO(SLOT)]) : 0</td></tr>
+<tr class="separator:aa2a8106eb1be28b347103bacfcd926d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fb73042b0664237168dfc4c619301f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fb73042b0664237168dfc4c619301f8"></a>
+uint8_t uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>d</b> { return b ? qadd8(b,d) : 0</td></tr>
+<tr class="separator:a0fb73042b0664237168dfc4c619301f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b4cabaa8efcacda588a216d2f867ba2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b4cabaa8efcacda588a216d2f867ba2"></a>
+uint8_t uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return scale8(b, scale)</td></tr>
+<tr class="separator:a3b4cabaa8efcacda588a216d2f867ba2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82f58cb5c7e5ed415a49d486376998c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82f58cb5c7e5ed415a49d486376998c3"></a>
+int uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>d</b></td></tr>
+<tr class="separator:a82f58cb5c7e5ed415a49d486376998c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af12b53cbc40ab33735fc1076359fc15f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af12b53cbc40ab33735fc1076359fc15f"></a>
+int uint8_t uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return scale8(pc.dither&lt;SLOT&gt;(pc, pc.loadByte&lt;SLOT&gt;(pc, lane), d), scale)</td></tr>
+<tr class="separator:af12b53cbc40ab33735fc1076359fc15f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a676d5701d8f1d8e9951142e68440a4bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676d5701d8f1d8e9951142e68440a4bc"></a>
+int uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return scale8(pc.loadByte&lt;SLOT&gt;(pc, lane), scale)</td></tr>
+<tr class="separator:a676d5701d8f1d8e9951142e68440a4bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="controller_8h_source.html">controller.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_pixel_controller-members.html b/docs/3.1/struct_pixel_controller-members.html
new file mode 100644
index 00000000..724cb666
--- /dev/null
+++ b/docs/3.1/struct_pixel_controller-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">PixelController&lt; RGB_ORDER &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline bool has(int n) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline int advanceBy() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline void advanceData() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline void stepDithering() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline void preStepFirstByteDithering() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t loadByte(PixelController &amp;pc) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t dither(PixelController &amp;pc (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t scale(PixelController &amp;pc (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t loadAndScale(PixelController &amp;pc) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline static uint8_t advanceAndLoadAndScale(PixelController &amp;pc) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale0() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale1() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t loadAndScale2() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t advanceAndLoadAndScale0() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__attribute__</b>((always_inline)) inline uint8_t stepAdvanceAndLoadAndScale0() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>b</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>d</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>e</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enable_dithering</b>(EDitherMode dither) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>init_binary_dithering</b>() (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mAdvance</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mData</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mLen</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mScale</b> (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PixelController</b>(const PixelController &amp;other) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PixelController</b>(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PixelController</b>(const CRGB *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>PixelController</b>(const CRGB &amp;d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER) (defined in <a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="struct_pixel_controller.html">PixelController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/struct_pixel_controller.html b/docs/3.1/struct_pixel_controller.html
new file mode 100644
index 00000000..7b2536cd
--- /dev/null
+++ b/docs/3.1/struct_pixel_controller.html
@@ -0,0 +1,201 @@
+<!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.8"/>
+<title>FastLED: PixelController&lt; RGB_ORDER &gt; Struct 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="struct_pixel_controller-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">PixelController&lt; RGB_ORDER &gt; Struct Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aec44f7bfc391ebf4874f678a994eff71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec44f7bfc391ebf4874f678a994eff71"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>PixelController</b> (const <a class="el" href="struct_pixel_controller.html">PixelController</a> &amp;other)</td></tr>
+<tr class="separator:aec44f7bfc391ebf4874f678a994eff71"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81403c8810658d3c41cb210703bbfc00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81403c8810658d3c41cb210703bbfc00"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>PixelController</b> (const uint8_t *d, int len, <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)</td></tr>
+<tr class="separator:a81403c8810658d3c41cb210703bbfc00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cd0843d8305cbd78b4d9597ed9b2081"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cd0843d8305cbd78b4d9597ed9b2081"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>PixelController</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> *d, int len, <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;s, EDitherMode dither=BINARY_DITHER)</td></tr>
+<tr class="separator:a9cd0843d8305cbd78b4d9597ed9b2081"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22aa861b047d60d43c5937eda51c7ec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22aa861b047d60d43c5937eda51c7ec8"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>PixelController</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;d, int len, <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;s, EDitherMode dither=BINARY_DITHER)</td></tr>
+<tr class="separator:a22aa861b047d60d43c5937eda51c7ec8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accb48b27c47c742a8b13f97ae1d82d32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accb48b27c47c742a8b13f97ae1d82d32"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>init_binary_dithering</b> ()</td></tr>
+<tr class="separator:accb48b27c47c742a8b13f97ae1d82d32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11aef85a0ef8a9276cd2e729d57aa49b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11aef85a0ef8a9276cd2e729d57aa49b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline bool has(int n)</td></tr>
+<tr class="separator:a11aef85a0ef8a9276cd2e729d57aa49b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e923be6212346c5ae98f7731d74c2e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e923be6212346c5ae98f7731d74c2e3"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>enable_dithering</b> (EDitherMode dither)</td></tr>
+<tr class="separator:a3e923be6212346c5ae98f7731d74c2e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbe76a814e6bec02854dd4df167567b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbe76a814e6bec02854dd4df167567b4"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline int advanceBy()</td></tr>
+<tr class="separator:afbe76a814e6bec02854dd4df167567b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a404558c7da7f3f6fae768bc45af9dc03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a404558c7da7f3f6fae768bc45af9dc03"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void advanceData()</td></tr>
+<tr class="separator:a404558c7da7f3f6fae768bc45af9dc03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a900493d7e9e345d0cb6e602186151e73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a900493d7e9e345d0cb6e602186151e73"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void stepDithering()</td></tr>
+<tr class="separator:a900493d7e9e345d0cb6e602186151e73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b0bc80097821046dbda7bbbf38dd7df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b0bc80097821046dbda7bbbf38dd7df"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline void preStepFirstByteDithering()</td></tr>
+<tr class="separator:a9b0bc80097821046dbda7bbbf38dd7df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33c4de106c80a9a3933811b557d5dee5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a33c4de106c80a9a3933811b557d5dee5"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a33c4de106c80a9a3933811b557d5dee5"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t loadByte(<a class="el" href="struct_pixel_controller.html">PixelController</a> &amp;pc)</td></tr>
+<tr class="separator:a33c4de106c80a9a3933811b557d5dee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5faf76b184df3d0093fec384bf37df1b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5faf76b184df3d0093fec384bf37df1b"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a5faf76b184df3d0093fec384bf37df1b"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t dither(<a class="el" href="struct_pixel_controller.html">PixelController</a> &amp;pc</td></tr>
+<tr class="separator:a5faf76b184df3d0093fec384bf37df1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacbf92a326415e94748f1e1f053e565c"><td class="memTemplParams" colspan="2"><a class="anchor" id="aacbf92a326415e94748f1e1f053e565c"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:aacbf92a326415e94748f1e1f053e565c"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t scale(<a class="el" href="struct_pixel_controller.html">PixelController</a> &amp;pc</td></tr>
+<tr class="separator:aacbf92a326415e94748f1e1f053e565c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af96ec8426561793f6f95ccbeef68767d"><td class="memTemplParams" colspan="2"><a class="anchor" id="af96ec8426561793f6f95ccbeef68767d"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:af96ec8426561793f6f95ccbeef68767d"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t loadAndScale(<a class="el" href="struct_pixel_controller.html">PixelController</a> &amp;pc)</td></tr>
+<tr class="separator:af96ec8426561793f6f95ccbeef68767d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f1aec11829806f13924a36827a41736"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7f1aec11829806f13924a36827a41736"></a>
+template&lt;int SLOT&gt; </td></tr>
+<tr class="memitem:a7f1aec11829806f13924a36827a41736"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline static uint8_t advanceAndLoadAndScale(<a class="el" href="struct_pixel_controller.html">PixelController</a> &amp;pc)</td></tr>
+<tr class="separator:a7f1aec11829806f13924a36827a41736"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4b13583d00a99418f6088638c542100"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4b13583d00a99418f6088638c542100"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale0()</td></tr>
+<tr class="separator:aa4b13583d00a99418f6088638c542100"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b413825c12904d3f04d812ad960d037"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b413825c12904d3f04d812ad960d037"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale1()</td></tr>
+<tr class="separator:a4b413825c12904d3f04d812ad960d037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f97ce4b173c2f17d9bf9702d6dec7fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f97ce4b173c2f17d9bf9702d6dec7fe"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t loadAndScale2()</td></tr>
+<tr class="separator:a3f97ce4b173c2f17d9bf9702d6dec7fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a880a808e9b20cf6e4dd8c09e7b33cdbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a880a808e9b20cf6e4dd8c09e7b33cdbb"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t advanceAndLoadAndScale0()</td></tr>
+<tr class="separator:a880a808e9b20cf6e4dd8c09e7b33cdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a649f80d1b1aff0eaa5915434262075b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a649f80d1b1aff0eaa5915434262075b7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> ((always_inline)) inline uint8_t stepAdvanceAndLoadAndScale0()</td></tr>
+<tr class="separator:a649f80d1b1aff0eaa5915434262075b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><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:a40d956bed201260a641c11e935fdff42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40d956bed201260a641c11e935fdff42"></a>
+const uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><b>mData</b></td></tr>
+<tr class="separator:a40d956bed201260a641c11e935fdff42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0641ad95fffe0a165b9f2ba1953393b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0641ad95fffe0a165b9f2ba1953393b"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>mLen</b></td></tr>
+<tr class="separator:ac0641ad95fffe0a165b9f2ba1953393b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a265a7697099e35c4a4a548984eb84032"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a265a7697099e35c4a4a548984eb84032"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>d</b> [3]</td></tr>
+<tr class="separator:a265a7697099e35c4a4a548984eb84032"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4adb6e0bc116f2b25780afec889bd88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4adb6e0bc116f2b25780afec889bd88"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>e</b> [3]</td></tr>
+<tr class="separator:ad4adb6e0bc116f2b25780afec889bd88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc5438b06f84610a0fe20418c0f30290"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc5438b06f84610a0fe20418c0f30290"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>mScale</b></td></tr>
+<tr class="separator:abc5438b06f84610a0fe20418c0f30290"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0441a5caab1fd894613be45fc5cc74ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0441a5caab1fd894613be45fc5cc74ad"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>mAdvance</b></td></tr>
+<tr class="separator:a0441a5caab1fd894613be45fc5cc74ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59c41a4f80039f205f172c275e3c508f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59c41a4f80039f205f172c275e3c508f"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>b</b> { return b ? qadd8(b, pc.d[RO(SLOT)]) : 0</td></tr>
+<tr class="separator:a59c41a4f80039f205f172c275e3c508f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="controller_8h_source.html">controller.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/sync_off.png b/docs/3.1/sync_off.png
new file mode 100644
index 00000000..3b443fc6
--- /dev/null
+++ b/docs/3.1/sync_off.png
Binary files differ
diff --git a/docs/3.1/sync_on.png b/docs/3.1/sync_on.png
new file mode 100644
index 00000000..e08320fb
--- /dev/null
+++ b/docs/3.1/sync_on.png
Binary files differ
diff --git a/docs/3.1/tab_a.png b/docs/3.1/tab_a.png
new file mode 100644
index 00000000..3b725c41
--- /dev/null
+++ b/docs/3.1/tab_a.png
Binary files differ
diff --git a/docs/3.1/tab_b.png b/docs/3.1/tab_b.png
new file mode 100644
index 00000000..e2b4a863
--- /dev/null
+++ b/docs/3.1/tab_b.png
Binary files differ
diff --git a/docs/3.1/tab_h.png b/docs/3.1/tab_h.png
new file mode 100644
index 00000000..fd5cb705
--- /dev/null
+++ b/docs/3.1/tab_h.png
Binary files differ
diff --git a/docs/3.1/tab_s.png b/docs/3.1/tab_s.png
new file mode 100644
index 00000000..ab478c95
--- /dev/null
+++ b/docs/3.1/tab_s.png
Binary files differ
diff --git a/docs/3.1/tabs.css b/docs/3.1/tabs.css
new file mode 100644
index 00000000..9cf578f2
--- /dev/null
+++ b/docs/3.1/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/docs/3.1/union_i_e_e_e754binary32__t-members.html b/docs/3.1/union_i_e_e_e754binary32__t-members.html
new file mode 100644
index 00000000..a35a4887
--- /dev/null
+++ b/docs/3.1/union_i_e_e_e754binary32__t-members.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.8"/>
+<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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">IEEE754binary32_t Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>exp_</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>exponent</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>f</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>i</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mant16</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mant7</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mant_hi16_exp_lo1</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mant_lo8</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mantissa</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>sb_</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sb_exphi7</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>signbit</b> (defined in <a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>)</td><td class="entry"><a class="el" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>
diff --git a/docs/3.1/union_i_e_e_e754binary32__t.html b/docs/3.1/union_i_e_e_e754binary32__t.html
new file mode 100644
index 00000000..4e0f0a90
--- /dev/null
+++ b/docs/3.1/union_i_e_e_e754binary32__t.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.8"/>
+<title>FastLED: IEEE754binary32_t 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/search.js"></script>
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">FastLED
+ &#160;<span id="projectnumber">3.1</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.8 -->
+<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="Search" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+ <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+ </ul>
+ </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="union_i_e_e_e754binary32__t-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">IEEE754binary32_t Union Reference</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:aa999f6c1a14b333db5eff13abe4bdb50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa999f6c1a14b333db5eff13abe4bdb50"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>i</b></td></tr>
+<tr class="separator:aa999f6c1a14b333db5eff13abe4bdb50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab5cc664d19fbca45bc9d4af1758ee7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab5cc664d19fbca45bc9d4af1758ee7f"></a>
+float&#160;</td><td class="memItemRight" valign="bottom"><b>f</b></td></tr>
+<tr class="separator:aab5cc664d19fbca45bc9d4af1758ee7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4eacb39a35a3b64e32d174c57a14e96"><td class="memItemLeft" ><a class="anchor" id="af4eacb39a35a3b64e32d174c57a14e96"></a>
+struct {</td></tr>
+<tr class="memitem:ab4e550a7105fbd1e39f3af588a1db07d"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mantissa</b>: 23</td></tr>
+<tr class="separator:ab4e550a7105fbd1e39f3af588a1db07d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ddc8cc27bd27b025913c2aa899e4ba9"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>exponent</b>: 8</td></tr>
+<tr class="separator:a9ddc8cc27bd27b025913c2aa899e4ba9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78fea2352d3764d8f191f446e75b67ed"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>signbit</b>: 1</td></tr>
+<tr class="separator:a78fea2352d3764d8f191f446e75b67ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4eacb39a35a3b64e32d174c57a14e96"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:af4eacb39a35a3b64e32d174c57a14e96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32289857484f4dafe3b8a163558d16fe"><td class="memItemLeft" ><a class="anchor" id="a32289857484f4dafe3b8a163558d16fe"></a>
+struct {</td></tr>
+<tr class="memitem:a9676f5f4f1beab483438a7c432fba121"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant7</b>: 7</td></tr>
+<tr class="separator:a9676f5f4f1beab483438a7c432fba121"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31351462e7863059c84a933ae91dbd0c"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant16</b>: 16</td></tr>
+<tr class="separator:a31351462e7863059c84a933ae91dbd0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ebb98fab26b6ab6f8ae20ae967107c4"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>exp_</b>: 8</td></tr>
+<tr class="separator:a0ebb98fab26b6ab6f8ae20ae967107c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a019eecb15b02b02e605105fa5564e807"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>sb_</b>: 1</td></tr>
+<tr class="separator:a019eecb15b02b02e605105fa5564e807"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32289857484f4dafe3b8a163558d16fe"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a32289857484f4dafe3b8a163558d16fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a402b2b73e52027d365ab0c83c6195768"><td class="memItemLeft" ><a class="anchor" id="a402b2b73e52027d365ab0c83c6195768"></a>
+struct {</td></tr>
+<tr class="memitem:a0ca10525e24733eb09743d81d3758b16"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant_lo8</b>: 8</td></tr>
+<tr class="separator:a0ca10525e24733eb09743d81d3758b16"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8250f923840e9a170762557cbbcd43ad"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant_hi16_exp_lo1</b>: 16</td></tr>
+<tr class="separator:a8250f923840e9a170762557cbbcd43ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c3c910b75612bfe7361ac49a1580577"><td class="memItemLeft" >
+&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>sb_exphi7</b>: 8</td></tr>
+<tr class="separator:a9c3c910b75612bfe7361ac49a1580577"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a402b2b73e52027d365ab0c83c6195768"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a402b2b73e52027d365ab0c83c6195768"><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="lib8tion_8h_source.html">lib8tion.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 29 2014 22:13:42 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.8
+</small></address>
+</body>
+</html>